diff options
Diffstat (limited to 'APG')
-rw-r--r-- | APG/AndroidManifest.xml | 13 | ||||
-rw-r--r-- | APG/project.properties | 2 | ||||
-rw-r--r-- | APG/src/org/thialfihar/android/apg/provider/ApgContract.java | 11 | ||||
-rw-r--r-- | APG/src/org/thialfihar/android/apg/provider/ApgProvider.java | 49 |
4 files changed, 60 insertions, 15 deletions
diff --git a/APG/AndroidManifest.xml b/APG/AndroidManifest.xml index f76e4f1dc..491de65a9 100644 --- a/APG/AndroidManifest.xml +++ b/APG/AndroidManifest.xml @@ -49,6 +49,19 @@ android:minSdkVersion="8" android:targetSdkVersion="14" /> + <uses-feature + android:name="android.hardware.wifi" + android:required="false" /> + <uses-feature + android:name="android.hardware.telephony" + android:required="false" /> + <uses-feature + android:name="android.hardware.microphone" + android:required="false" /> + <uses-feature + android:name="android.hardware.touchscreen" + android:required="false" /> + <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT" /> diff --git a/APG/project.properties b/APG/project.properties index 63019788e..d39cb7982 100644 --- a/APG/project.properties +++ b/APG/project.properties @@ -9,4 +9,4 @@ # Project target. target=android-15 -android.library.reference.1=android-libs/ActionBarSherlock +android.library.reference.1=../../CryptoCall-UI/CryptoCall-UI/android-libs/ActionBarSherlock diff --git a/APG/src/org/thialfihar/android/apg/provider/ApgContract.java b/APG/src/org/thialfihar/android/apg/provider/ApgContract.java index c68eec750..3f01f4093 100644 --- a/APG/src/org/thialfihar/android/apg/provider/ApgContract.java +++ b/APG/src/org/thialfihar/android/apg/provider/ApgContract.java @@ -72,6 +72,7 @@ public class ApgContract { public static final String PATH_BY_MASTER_KEY_ID = "master_key_id"; public static final String PATH_BY_KEY_ID = "key_id"; public static final String PATH_BY_EMAILS = "emails"; + public static final String PATH_BY_LIKE_EMAIL = "like_email"; public static final String PATH_USER_IDS = "user_ids"; public static final String PATH_KEYS = "keys"; @@ -109,6 +110,11 @@ public class ApgContract { .appendPath(emails).build(); } + public static Uri buildPublicKeyRingsByLikeEmailUri(String emails) { + return CONTENT_URI.buildUpon().appendPath(PATH_PUBLIC).appendPath(PATH_BY_LIKE_EMAIL) + .appendPath(emails).build(); + } + public static Uri buildSecretKeyRingsUri() { return CONTENT_URI.buildUpon().appendPath(PATH_SECRET).build(); } @@ -131,6 +137,11 @@ public class ApgContract { return CONTENT_URI.buildUpon().appendPath(PATH_SECRET).appendPath(PATH_BY_EMAILS) .appendPath(emails).build(); } + + public static Uri buildSecretKeyRingsByLikeEmails(String emails) { + return CONTENT_URI.buildUpon().appendPath(PATH_SECRET).appendPath(PATH_BY_LIKE_EMAIL) + .appendPath(emails).build(); + } } public static class Keys implements KeysColumns, BaseColumns { diff --git a/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java b/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java index f3b8e7085..a5bb26507 100644 --- a/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java +++ b/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java @@ -52,6 +52,7 @@ public class ApgProvider extends ContentProvider { private static final int PUBLIC_KEY_RING_BY_MASTER_KEY_ID = 103; private static final int PUBLIC_KEY_RING_BY_KEY_ID = 104; private static final int PUBLIC_KEY_RING_BY_EMAILS = 105; + private static final int PUBLIC_KEY_RING_BY_LIKE_EMAIL = 106; private static final int PUBLIC_KEY_RING_KEY = 111; private static final int PUBLIC_KEY_RING_KEY_BY_ROW_ID = 112; @@ -64,6 +65,7 @@ public class ApgProvider extends ContentProvider { private static final int SECRET_KEY_RING_BY_MASTER_KEY_ID = 203; private static final int SECRET_KEY_RING_BY_KEY_ID = 204; private static final int SECRET_KEY_RING_BY_EMAILS = 205; + private static final int SECRET_KEY_RING_BY_LIKE_EMAIL = 206; private static final int SECRET_KEY_RING_KEY = 211; private static final int SECRET_KEY_RING_KEY_BY_ROW_ID = 212; @@ -99,6 +101,7 @@ public class ApgProvider extends ContentProvider { * key_rings/public/master_key_id/_ * key_rings/public/key_id/_ * key_rings/public/emails/_ + * key_rings/public/like_email/_ * </pre> */ matcher.addURI(authority, ApgContract.BASE_KEY_RINGS + "/" + ApgContract.PATH_PUBLIC, @@ -112,6 +115,8 @@ public class ApgProvider extends ContentProvider { + ApgContract.PATH_BY_KEY_ID + "/*", PUBLIC_KEY_RING_BY_KEY_ID); matcher.addURI(authority, ApgContract.BASE_KEY_RINGS + "/" + ApgContract.PATH_PUBLIC + "/" + ApgContract.PATH_BY_EMAILS + "/*", PUBLIC_KEY_RING_BY_EMAILS); + matcher.addURI(authority, ApgContract.BASE_KEY_RINGS + "/" + ApgContract.PATH_PUBLIC + "/" + + ApgContract.PATH_BY_LIKE_EMAIL + "/*", PUBLIC_KEY_RING_BY_LIKE_EMAIL); /** * public keys @@ -148,6 +153,7 @@ public class ApgProvider extends ContentProvider { * key_rings/secret/master_key_id/_ * key_rings/secret/key_id/_ * key_rings/secret/emails/_ + * key_rings/secret/like_email/_ * </pre> */ matcher.addURI(authority, ApgContract.BASE_KEY_RINGS + "/" + ApgContract.PATH_SECRET, @@ -161,6 +167,8 @@ public class ApgProvider extends ContentProvider { + ApgContract.PATH_BY_KEY_ID + "/*", SECRET_KEY_RING_BY_KEY_ID); matcher.addURI(authority, ApgContract.BASE_KEY_RINGS + "/" + ApgContract.PATH_SECRET + "/" + ApgContract.PATH_BY_EMAILS + "/*", SECRET_KEY_RING_BY_EMAILS); + matcher.addURI(authority, ApgContract.BASE_KEY_RINGS + "/" + ApgContract.PATH_SECRET + "/" + + ApgContract.PATH_BY_LIKE_EMAIL + "/*", SECRET_KEY_RING_BY_LIKE_EMAIL); /** * secret keys @@ -217,8 +225,10 @@ public class ApgProvider extends ContentProvider { switch (match) { case PUBLIC_KEY_RING: case PUBLIC_KEY_RING_BY_EMAILS: + case PUBLIC_KEY_RING_BY_LIKE_EMAIL: case SECRET_KEY_RING: case SECRET_KEY_RING_BY_EMAILS: + case SECRET_KEY_RING_BY_LIKE_EMAIL: return KeyRings.CONTENT_TYPE; case PUBLIC_KEY_RING_BY_ROW_ID: @@ -264,6 +274,7 @@ public class ApgProvider extends ContentProvider { case PUBLIC_KEY_RING_BY_MASTER_KEY_ID: case PUBLIC_KEY_RING_BY_KEY_ID: case PUBLIC_KEY_RING_BY_EMAILS: + case PUBLIC_KEY_RING_BY_LIKE_EMAIL: case PUBLIC_KEY_RING_KEY: case PUBLIC_KEY_RING_KEY_BY_ROW_ID: case PUBLIC_KEY_RING_USER_ID: @@ -276,6 +287,7 @@ public class ApgProvider extends ContentProvider { case SECRET_KEY_RING_BY_MASTER_KEY_ID: case SECRET_KEY_RING_BY_KEY_ID: case SECRET_KEY_RING_BY_EMAILS: + case SECRET_KEY_RING_BY_LIKE_EMAIL: case SECRET_KEY_RING_KEY: case SECRET_KEY_RING_KEY_BY_ROW_ID: case SECRET_KEY_RING_USER_ID: @@ -341,7 +353,7 @@ public class ApgProvider extends ContentProvider { } /** - * Builds default query for keyRings: KeyRings table is joined with Keys and UserIds + * Builds default query for keyRings: KeyRings table is joined with UserIds * * @param qb * @param match @@ -350,9 +362,11 @@ public class ApgProvider extends ContentProvider { * @return */ private SQLiteQueryBuilder buildKeyRingQuery(SQLiteQueryBuilder qb, int match, String sortOrder) { + // public or secret keyring qb.appendWhere(Tables.KEY_RINGS + "." + KeyRingsColumns.TYPE + " = "); qb.appendWhereEscapeString(Integer.toString(getKeyType(match))); + // join keyrings with userIds to every keyring qb.setTables(Tables.KEY_RINGS + " INNER JOIN " + Tables.USER_IDS + " ON " + "(" + Tables.KEY_RINGS + "." + BaseColumns._ID + " = " + Tables.USER_IDS + "." + UserIdsColumns.KEY_RING_ROW_ID + " AND " + Tables.USER_IDS + "." @@ -374,9 +388,11 @@ public class ApgProvider extends ContentProvider { */ private SQLiteQueryBuilder buildKeyRingQueryWithKeys(SQLiteQueryBuilder qb, int match, String sortOrder) { + // public or secret keyring qb.appendWhere(Tables.KEY_RINGS + "." + KeyRingsColumns.TYPE + " = "); qb.appendWhereEscapeString(Integer.toString(getKeyType(match))); + // join keyrings with keys and userIds to every keyring qb.setTables(Tables.KEY_RINGS + " INNER JOIN " + Tables.KEYS + " ON " + "(" + Tables.KEY_RINGS + "." + BaseColumns._ID + " = " + Tables.KEYS + "." + KeysColumns.KEY_RING_ROW_ID + ") " + " INNER JOIN " + Tables.USER_IDS + " ON " @@ -453,18 +469,7 @@ public class ApgProvider extends ContentProvider { case SECRET_KEY_RING_BY_EMAILS: case PUBLIC_KEY_RING_BY_EMAILS: - qb.appendWhere(Tables.KEY_RINGS + "." + KeyRingsColumns.TYPE + " = "); - qb.appendWhereEscapeString(Integer.toString(getKeyType(match))); - - 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.IS_MASTER_KEY + " = '1'" + ") " + " INNER JOIN " - + Tables.USER_IDS + " ON " + "(" + Tables.KEYS + "." + BaseColumns._ID + " = " - + Tables.USER_IDS + "." + UserIdsColumns.KEY_RING_ROW_ID + " AND " - + Tables.USER_IDS + "." + UserIdsColumns.RANK + " = '0')"); - - qb.setProjectionMap(getProjectionMapForKeyRings()); + qb = buildKeyRingQuery(qb, match, sortOrder); String emails = uri.getLastPathSegment(); String chunks[] = emails.split(" *, *"); @@ -486,12 +491,28 @@ public class ApgProvider extends ContentProvider { if (gotCondition) { qb.appendWhere(" AND EXISTS (SELECT tmp." + BaseColumns._ID + " FROM " + Tables.USER_IDS + " AS tmp WHERE tmp." + UserIdsColumns.KEY_RING_ROW_ID - + " = " + Tables.KEYS + "." + BaseColumns._ID + " AND (" + emailWhere + + " = " + Tables.KEY_RINGS + "." + BaseColumns._ID + " AND (" + emailWhere + "))"); } break; + case SECRET_KEY_RING_BY_LIKE_EMAIL: + case PUBLIC_KEY_RING_BY_LIKE_EMAIL: + qb = buildKeyRingQuery(qb, match, sortOrder); + + String likeEmail = uri.getLastPathSegment(); + + String likeEmailWhere = "tmp." + UserIdsColumns.USER_ID + " LIKE " + + DatabaseUtils.sqlEscapeString("%<%" + likeEmail + "%>"); + + qb.appendWhere(" AND EXISTS (SELECT tmp." + BaseColumns._ID + " FROM " + + Tables.USER_IDS + " AS tmp WHERE tmp." + UserIdsColumns.KEY_RING_ROW_ID + + " = " + Tables.KEY_RINGS + "." + BaseColumns._ID + " AND (" + likeEmailWhere + + "))"); + + break; + case PUBLIC_KEY_RING_KEY: case SECRET_KEY_RING_KEY: qb.setTables(Tables.KEYS); |