diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2014-04-10 18:40:32 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2014-04-10 18:47:57 +0200 |
commit | 593d6ad3f790ab4b56a10375e8e21849f749d856 (patch) | |
tree | 4bfa8fc630a9dc5158c339158d06a5475b248bff /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider | |
parent | ce6a4041fd7e8ff0b4368b4792fb922bdf45f630 (diff) | |
download | open-keychain-593d6ad3f790ab4b56a10375e8e21849f749d856.tar.gz open-keychain-593d6ad3f790ab4b56a10375e8e21849f749d856.tar.bz2 open-keychain-593d6ad3f790ab4b56a10375e8e21849f749d856.zip |
Select*KeyFragment rewrites
- moved all specific Public/Secret logic from the Adapter class into
inner subclasses in the Fragments
- more versatile status display ("revoked", "expired", "can certify"...)
- applied view holder pattern
- query logic, including subqueries, moved into provider classes
Closes #375
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider')
2 files changed, 28 insertions, 8 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java index fc25faecd..0999cc754 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java @@ -112,6 +112,8 @@ public class KeychainContract { public static final String IS_REVOKED = KeysColumns.IS_REVOKED; public static final String VERIFIED = CertsColumns.VERIFIED; public static final String HAS_SECRET = "has_secret"; + public static final String HAS_ENCRYPT = "has_encrypt"; + public static final String HAS_SIGN = "has_encrypt"; public static final Uri CONTENT_URI = BASE_CONTENT_URI_INTERNAL.buildUpon() .appendPath(BASE_KEY_RINGS).build(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java index 78eedf315..012948f63 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java @@ -38,9 +38,11 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.Keys; import org.sufficientlysecure.keychain.provider.KeychainContract.Certs; import org.sufficientlysecure.keychain.provider.KeychainContract.UserIds; import org.sufficientlysecure.keychain.provider.KeychainDatabase.Tables; +import org.sufficientlysecure.keychain.ui.adapter.SelectKeyCursorAdapter; import org.sufficientlysecure.keychain.util.Log; import java.util.Arrays; +import java.util.Date; import java.util.HashMap; public class KeychainProvider extends ContentProvider { @@ -264,7 +266,29 @@ public class KeychainProvider extends ContentProvider { projectionMap.put(KeyRings.FINGERPRINT, Keys.FINGERPRINT); projectionMap.put(KeyRings.USER_ID, UserIds.USER_ID); projectionMap.put(KeyRings.VERIFIED, KeyRings.VERIFIED); - projectionMap.put(KeyRings.HAS_SECRET, "(" + Tables.KEY_RINGS_SECRET + "." + KeyRings.MASTER_KEY_ID + " IS NOT NULL) AS " + KeyRings.HAS_SECRET); + projectionMap.put(KeyRings.HAS_SECRET, + "(EXISTS (SELECT * FROM " + Tables.KEY_RINGS_SECRET + + " WHERE " + Tables.KEY_RINGS_SECRET + "." + KeyRingData.MASTER_KEY_ID + + " = " + Tables.KEYS + "." + Keys.MASTER_KEY_ID + + ")) AS " + KeyRings.HAS_SECRET); + projectionMap.put(KeyRings.HAS_ENCRYPT, + "(EXISTS (SELECT COUNT(*) FROM " + Tables.KEYS + " AS k" + +" WHERE k." + Keys.MASTER_KEY_ID + + " = " + Tables.KEYS + "." + Keys.MASTER_KEY_ID + + " AND k." + Keys.IS_REVOKED + " = 0" + + " AND k." + Keys.CAN_ENCRYPT + " = 1" + + " AND ( k." + Keys.EXPIRY + " IS NULL OR k." + Keys.EXPIRY + + " >= '" + new Date().getTime() / 1000 + "' )" + + ")) AS " + KeyRings.HAS_ENCRYPT); + projectionMap.put(KeyRings.HAS_SIGN, + "(EXISTS (SELECT COUNT(*) FROM " + Tables.KEYS + " AS k" + +" WHERE k." + Keys.MASTER_KEY_ID + + " = " + Tables.KEYS + "." + Keys.MASTER_KEY_ID + + " AND k." + Keys.IS_REVOKED + " = 0" + + " AND k." + Keys.CAN_SIGN + " = 1" + + " AND ( k." + Keys.EXPIRY + " IS NULL OR k." + Keys.EXPIRY + + " >= '" + new Date().getTime() / 1000 + "' )" + + ")) AS " + KeyRings.HAS_SIGN); qb.setProjectionMap(projectionMap); qb.setTables( @@ -274,10 +298,6 @@ public class KeychainProvider extends ContentProvider { + " = " + Tables.USER_IDS + "." + UserIds.MASTER_KEY_ID + " AND " + Tables.USER_IDS + "." + UserIds.RANK + " = 0" - + ") LEFT JOIN " + Tables.KEY_RINGS_SECRET + " ON (" - + Tables.KEYS + "." + Keys.MASTER_KEY_ID - + " = " - + Tables.KEY_RINGS_SECRET + "." + KeyRings.MASTER_KEY_ID + ") LEFT JOIN " + Tables.CERTS + " ON (" + Tables.KEYS + "." + Keys.MASTER_KEY_ID + " = " @@ -345,9 +365,7 @@ public class KeychainProvider extends ContentProvider { } if (TextUtils.isEmpty(sortOrder)) { - sortOrder = - Tables.KEY_RINGS_SECRET + "." + KeyRings.MASTER_KEY_ID + " IS NULL ASC, " - + Tables.USER_IDS + "." + UserIds.USER_ID + " ASC"; + sortOrder = Tables.USER_IDS + "." + UserIds.USER_ID + " ASC"; } // uri to watch is all /key_rings/ |