implement preliminary MultiCertifyActivity (most heavy lifting is done)

This commit is contained in:
Vincent Breitmoser
2014-10-04 23:16:51 +02:00
parent 0ffa1b94de
commit bad8aeea78
10 changed files with 822 additions and 9 deletions

View File

@@ -89,7 +89,6 @@ public class KeychainContract {
.parse("content://" + CONTENT_AUTHORITY);
public static final String BASE_KEY_RINGS = "key_rings";
public static final String BASE_DATA = "data";
public static final String PATH_UNIFIED = "unified";
@@ -243,6 +242,10 @@ public class KeychainContract {
public static final String CONTENT_ITEM_TYPE
= "vnd.android.cursor.item/vnd.org.sufficientlysecure.keychain.provider.user_ids";
public static Uri buildUserIdsUri() {
return CONTENT_URI.buildUpon().appendPath(PATH_USER_IDS).build();
}
public static Uri buildUserIdsUri(long masterKeyId) {
return CONTENT_URI.buildUpon().appendPath(Long.toString(masterKeyId)).appendPath(PATH_USER_IDS).build();
}

View File

@@ -51,6 +51,7 @@ public class KeychainProvider extends ContentProvider {
private static final int KEY_RINGS_UNIFIED = 101;
private static final int KEY_RINGS_PUBLIC = 102;
private static final int KEY_RINGS_SECRET = 103;
private static final int KEY_RINGS_USER_IDS = 104;
private static final int KEY_RING_UNIFIED = 200;
private static final int KEY_RING_KEYS = 201;
@@ -85,17 +86,22 @@ public class KeychainProvider extends ContentProvider {
* <pre>
* key_rings/unified
* key_rings/public
* key_rings/secret
* key_rings/user_ids
* </pre>
*/
matcher.addURI(authority, KeychainContract.BASE_KEY_RINGS
+ "/" + KeychainContract.PATH_UNIFIED,
+ "/" + KeychainContract.PATH_UNIFIED,
KEY_RINGS_UNIFIED);
matcher.addURI(authority, KeychainContract.BASE_KEY_RINGS
+ "/" + KeychainContract.PATH_PUBLIC,
+ "/" + KeychainContract.PATH_PUBLIC,
KEY_RINGS_PUBLIC);
matcher.addURI(authority, KeychainContract.BASE_KEY_RINGS
+ "/" + KeychainContract.PATH_SECRET,
+ "/" + KeychainContract.PATH_SECRET,
KEY_RINGS_SECRET);
matcher.addURI(authority, KeychainContract.BASE_KEY_RINGS
+ "/" + KeychainContract.PATH_USER_IDS,
KEY_RINGS_USER_IDS);
/**
* find by criteria other than master key id
@@ -450,6 +456,7 @@ public class KeychainProvider extends ContentProvider {
break;
}
case KEY_RINGS_USER_IDS:
case KEY_RING_USER_IDS: {
HashMap<String, String> projectionMap = new HashMap<String, String>();
projectionMap.put(UserIds._ID, Tables.USER_IDS + ".oid AS _id");
@@ -470,13 +477,18 @@ public class KeychainProvider extends ContentProvider {
+ Tables.CERTS + "." + Certs.RANK
+ " AND " + Tables.CERTS + "." + Certs.VERIFIED + " > 0"
+ ")");
groupBy = Tables.USER_IDS + "." + UserIds.RANK;
groupBy = Tables.USER_IDS + "." + UserIds.MASTER_KEY_ID
+ ", " + Tables.USER_IDS + "." + UserIds.RANK;
qb.appendWhere(Tables.USER_IDS + "." + UserIds.MASTER_KEY_ID + " = ");
qb.appendWhereEscapeString(uri.getPathSegments().get(1));
// If we are searching for a particular keyring's ids, add where
if (match == KEY_RING_USER_IDS) {
qb.appendWhere(Tables.USER_IDS + "." + UserIds.MASTER_KEY_ID + " = ");
qb.appendWhereEscapeString(uri.getPathSegments().get(1));
}
if (TextUtils.isEmpty(sortOrder)) {
sortOrder = Tables.USER_IDS + "." + UserIds.RANK + " ASC";
sortOrder = Tables.USER_IDS + "." + UserIds.MASTER_KEY_ID + " ASC"
+ "," + Tables.USER_IDS + "." + UserIds.RANK + " ASC";
}
break;