aboutsummaryrefslogtreecommitdiffstats
path: root/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-03-13 00:16:11 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2014-03-13 00:16:11 +0100
commit0b0809ec17203ea14068b064360e45e435796829 (patch)
treedcffd960418fb0d1431c18246b913b70ade6cd95 /OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider
parent69f5bf6b577234053e700a43a4a7ba721e827c6a (diff)
downloadopen-keychain-0b0809ec17203ea14068b064360e45e435796829.tar.gz
open-keychain-0b0809ec17203ea14068b064360e45e435796829.tar.bz2
open-keychain-0b0809ec17203ea14068b064360e45e435796829.zip
keychainprovider cleanup, kindasorta
removed code redundancy, and the query is in the switch thing now, I didn't put everything into its own separate sources (yet?).
Diffstat (limited to 'OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider')
-rw-r--r--OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java96
1 files changed, 41 insertions, 55 deletions
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
index 8b0efdbbd..3782f85fd 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
@@ -467,70 +467,53 @@ public class KeychainProvider extends ContentProvider {
int match = mUriMatcher.match(uri);
- // screw that switch
- if(match == UNIFIED_KEY_RING) {
+ // all query() parameters, for good measure
+ String groupBy = null, having = null;
- // join keyrings with keys and userIds
- // Only get user id and key with rank 0 (main user id and main key)
- qb.setTables(Tables.KEY_RINGS + " INNER JOIN " + Tables.KEYS + " ON " + "("
- + Tables.KEY_RINGS + "." + BaseColumns._ID + " = " + Tables.KEYS + "."
- + KeysColumns.KEY_RING_ROW_ID + " AND " + Tables.KEYS + "."
- + KeysColumns.RANK + " = '0') " + " INNER JOIN " + Tables.USER_IDS + " ON "
- + "(" + Tables.KEY_RINGS + "." + BaseColumns._ID + " = " + Tables.USER_IDS + "."
- + UserIdsColumns.KEY_RING_ROW_ID + " AND " + Tables.USER_IDS + "."
- + UserIdsColumns.RANK + " = '0')");
-
- {
- HashMap<String, String> projectionMap = new HashMap<String, String>();
-
- projectionMap.put(KeyRingsColumns.TYPE, "MAX(" + Tables.KEY_RINGS + "." + KeyRingsColumns.TYPE + ")");
-
- projectionMap.put(BaseColumns._ID, Tables.KEY_RINGS + "." + BaseColumns._ID);
- projectionMap.put(KeyRingsColumns.KEY_RING_DATA, Tables.KEY_RINGS + "."
- + KeyRingsColumns.KEY_RING_DATA);
- projectionMap.put(KeyRingsColumns.MASTER_KEY_ID, Tables.KEY_RINGS + "." + KeyRingsColumns.MASTER_KEY_ID);
- // TODO: deprecated master key id
- //projectionMap.put(KeyRingsColumns.MASTER_KEY_ID, Tables.KEYS + "." + KeysColumns.KEY_ID);
-
- projectionMap.put(KeysColumns.FINGERPRINT, Tables.KEYS + "." + KeysColumns.FINGERPRINT);
- projectionMap.put(KeysColumns.IS_REVOKED, Tables.KEYS + "." + KeysColumns.IS_REVOKED);
+ switch (match) {
+ case UNIFIED_KEY_RING:
- projectionMap.put(UserIdsColumns.USER_ID, Tables.USER_IDS + "." + UserIdsColumns.USER_ID);
+ { // SELECT
+ // todo: outsource into getprojectionmapforthingies? don't really see the point.
+ HashMap<String, String> projectionMap = new HashMap<String, String>();
- qb.setProjectionMap(projectionMap);
- }
+ // from keyrings table
+ projectionMap.put(BaseColumns._ID, Tables.KEY_RINGS + "." + BaseColumns._ID);
+ projectionMap.put(KeyRingsColumns.TYPE,
+ "MAX(" + Tables.KEY_RINGS + "." + KeyRingsColumns.TYPE + ")");
+ projectionMap.put(KeyRingsColumns.KEY_RING_DATA, Tables.KEY_RINGS + "."
+ + KeyRingsColumns.KEY_RING_DATA);
+ projectionMap.put(KeyRingsColumns.MASTER_KEY_ID,
+ Tables.KEY_RINGS + "." + KeyRingsColumns.MASTER_KEY_ID);
- if (TextUtils.isEmpty(sortOrder)) {
- sortOrder = Tables.USER_IDS + "." + UserIdsColumns.USER_ID + " ASC";
- }
+ // from keys table
+ projectionMap.put(KeysColumns.FINGERPRINT, Tables.KEYS + "." + KeysColumns.FINGERPRINT);
+ projectionMap.put(KeysColumns.IS_REVOKED, Tables.KEYS + "." + KeysColumns.IS_REVOKED);
- // If no sort order is specified use the default
- String orderBy;
- if (TextUtils.isEmpty(sortOrder)) {
- orderBy = Tables.KEY_RINGS + "." + KeyRingsColumns.TYPE + " DESC";
- } else {
- orderBy = Tables.KEY_RINGS + "." + KeyRingsColumns.TYPE + " DESC, " + sortOrder;
- }
+ // from user id table
+ projectionMap.put(UserIdsColumns.USER_ID, Tables.USER_IDS + "." + UserIdsColumns.USER_ID);
- Cursor c = qb.query(db, projection, selection, selectionArgs,
- Tables.KEY_RINGS + "." + KeyRingsColumns.MASTER_KEY_ID,
- null, orderBy);
+ qb.setProjectionMap(projectionMap);
+ }
- // Tell the cursor what uri to watch, so it knows when its source data changes
- c.setNotificationUri(getContext().getContentResolver(), uri);
+ { // FROM
+ // todo: outsource into buildUnifiedQuery()? see above.
+ // join keyrings with keys and userIds
+ // Only get user id and key with rank 0 (main user id and main key)
+ qb.setTables(Tables.KEY_RINGS + " INNER JOIN " + Tables.KEYS + " ON " + "("
+ + Tables.KEY_RINGS + "." + BaseColumns._ID + " = " + Tables.KEYS + "."
+ + KeysColumns.KEY_RING_ROW_ID + " AND " + Tables.KEYS + "."
+ + KeysColumns.RANK + " = '0') " + " INNER JOIN " + Tables.USER_IDS + " ON "
+ + "(" + Tables.KEY_RINGS + "." + BaseColumns._ID + " = " + Tables.USER_IDS + "."
+ + UserIdsColumns.KEY_RING_ROW_ID + " AND " + Tables.USER_IDS + "."
+ + UserIdsColumns.RANK + " = '0')");
+ }
- if (Constants.DEBUG) {
- Log.d(Constants.TAG,
- "Query: "
- + qb.buildQuery(projection, selection, selectionArgs, Tables.KEY_RINGS + "." + KeyRingsColumns.MASTER_KEY_ID, null,
- orderBy, null));
- Log.d(Constants.TAG, "Cursor: " + DatabaseUtils.dumpCursorToString(c));
- }
+ // GROUP BY
+ groupBy = Tables.KEY_RINGS + "." + KeyRingsColumns.MASTER_KEY_ID;
- return c;
- }
+ break;
- switch (match) {
case PUBLIC_KEY_RING:
case SECRET_KEY_RING:
qb = buildKeyRingQuery(qb, match);
@@ -705,7 +688,7 @@ public class KeychainProvider extends ContentProvider {
orderBy = sortOrder;
}
- Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy);
+ Cursor c = qb.query(db, projection, selection, selectionArgs, groupBy, having, orderBy);
// Tell the cursor what uri to watch, so it knows when its source data changes
c.setNotificationUri(getContext().getContentResolver(), uri);
@@ -855,6 +838,9 @@ public class KeychainProvider extends ContentProvider {
// notify of changes in db
getContext().getContentResolver().notifyChange(uri, null);
+ getContext().getContentResolver().notifyChange(
+ KeyRings.buildUnifiedKeyRingsUri().buildUpon().appendPath("lulz").build(), null
+ );
return count;
}