aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-04-10 18:40:32 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-04-10 18:47:57 +0200
commit593d6ad3f790ab4b56a10375e8e21849f749d856 (patch)
tree4bfa8fc630a9dc5158c339158d06a5475b248bff /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider
parentce6a4041fd7e8ff0b4368b4792fb922bdf45f630 (diff)
downloadopen-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')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java34
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/