From 46944198e4a4433025c92eb767118ed5bd4a9e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Wed, 4 Mar 2015 15:12:00 +0100 Subject: ContactHelper cleanup --- .../org/sufficientlysecure/keychain/Constants.java | 3 +- .../keychain/util/ContactHelper.java | 72 ++++++++++++---------- 2 files changed, 41 insertions(+), 34 deletions(-) (limited to 'OpenKeychain/src/main') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index 67fa30a44..2d3ee6188 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -33,6 +33,7 @@ public final class Constants { public static final String ACCOUNT_NAME = "OpenKeychain"; public static final String ACCOUNT_TYPE = PACKAGE_NAME + ".account"; + public static final String CUSTOM_CONTACT_DATA_MIME_TYPE = "vnd.android.cursor.item/vnd.org.sufficientlysecure.keychain.key"; // as defined in http://tools.ietf.org/html/rfc3156, section 7 public static final String NFC_MIME = "application/pgp-keys"; @@ -49,8 +50,6 @@ public final class Constants { public static final String INTENT_PREFIX = PACKAGE_NAME + ".action."; public static final String EXTRA_PREFIX = PACKAGE_NAME + "."; - public static final String CUSTOM_CONTACT_DATA_MIME_TYPE = "vnd.android.cursor.item/vnd.org.sufficientlysecure.keychain.key"; - public static final int TEMPFILE_TTL = 24 * 60 * 60 * 1000; // 1 day public static final String SAFESLINGER_SERVER = "safeslinger-openpgp.appspot.com"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java index 2658f3ba0..2f868912b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java @@ -49,17 +49,6 @@ import java.util.Set; public class ContactHelper { - public static final String[] KEYS_TO_CONTACT_PROJECTION = new String[]{ - KeychainContract.KeyRings.MASTER_KEY_ID, - KeychainContract.KeyRings.USER_ID, - KeychainContract.KeyRings.IS_EXPIRED, - KeychainContract.KeyRings.IS_REVOKED}; - - public static final int INDEX_MASTER_KEY_ID = 0; - public static final int INDEX_USER_ID = 1; - public static final int INDEX_IS_EXPIRED = 2; - public static final int INDEX_IS_REVOKED = 3; - private static final Map photoCache = new HashMap<>(); public static List getPossibleUserEmails(Context context) { @@ -261,12 +250,12 @@ public class ContactHelper { return null; } if (!photoCache.containsKey(masterKeyId)) { - photoCache.put(masterKeyId, loadPhotoFromFingerprint(contentResolver, masterKeyId)); + photoCache.put(masterKeyId, loadPhotoFromMasterKeyId(contentResolver, masterKeyId)); } return photoCache.get(masterKeyId); } - private static Bitmap loadPhotoFromFingerprint(ContentResolver contentResolver, long masterKeyId) { + private static Bitmap loadPhotoFromMasterKeyId(ContentResolver contentResolver, long masterKeyId) { if (masterKeyId == -1) { return null; } @@ -288,6 +277,17 @@ public class ContactHelper { } } + public static final String[] KEYS_TO_CONTACT_PROJECTION = new String[]{ + KeychainContract.KeyRings.MASTER_KEY_ID, + KeychainContract.KeyRings.USER_ID, + KeychainContract.KeyRings.IS_EXPIRED, + KeychainContract.KeyRings.IS_REVOKED}; + + public static final int INDEX_MASTER_KEY_ID = 0; + public static final int INDEX_USER_ID = 1; + public static final int INDEX_IS_EXPIRED = 2; + public static final int INDEX_IS_REVOKED = 3; + /** * Write/Update the current OpenKeychain keys to the contact db */ @@ -295,7 +295,7 @@ public class ContactHelper { ContentResolver resolver = context.getContentResolver(); Set deletedKeys = getRawContactMasterKeyIds(resolver); - debugDeleteRawContacts(resolver); +// debugDeleteRawContacts(resolver); // ContentProviderClient client = resolver.acquireContentProviderClient(ContactsContract.AUTHORITY_URI); // ContentValues values = new ContentValues(); @@ -315,7 +315,7 @@ public class ContactHelper { if (cursor != null) { while (cursor.moveToNext()) { long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); - String[] primaryUserId = KeyRing.splitUserId(cursor.getString(INDEX_USER_ID)); + String[] userIdSplit = KeyRing.splitUserId(cursor.getString(INDEX_USER_ID)); String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(cursor.getLong(INDEX_MASTER_KEY_ID)); boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; @@ -326,21 +326,17 @@ public class ContactHelper { // get raw contact to this master key id long rawContactId = findRawContactId(resolver, masterKeyId); - ArrayList ops = new ArrayList<>(); + Log.d(Constants.TAG, "rawContactId: " + rawContactId); - Log.d(Constants.TAG, "raw contact id: " + rawContactId); + ArrayList ops = new ArrayList<>(); // Do not store expired or revoked keys in contact db - and remove them if they already exist if (isExpired || isRevoked) { Log.d(Constants.TAG, "Expired or revoked: Deleting " + rawContactId); if (rawContactId != -1) { - resolver.delete(ContactsContract.RawContacts.CONTENT_URI, - ContactsContract.RawContacts._ID + "=?", - new String[]{ - Long.toString(rawContactId) - }); + deleteRawContactById(resolver, rawContactId); } - } else if (primaryUserId[0] != null) { + } else if (userIdSplit[0] != null) { // Create a new rawcontact with corresponding key if it does not exist yet if (rawContactId == -1) { @@ -352,7 +348,7 @@ public class ContactHelper { // We always update the display name (which is derived from primary user id) // and email addresses from user id - writeContactDisplayName(ops, rawContactId, primaryUserId[0]); + writeContactDisplayName(ops, rawContactId, userIdSplit[0]); writeContactEmail(ops, resolver, rawContactId, masterKeyId); try { resolver.applyBatch(ContactsContract.AUTHORITY, ops); @@ -366,18 +362,14 @@ public class ContactHelper { // Delete master key ids that are no longer present in OK for (Long masterKeyId : deletedKeys) { - Log.d(Constants.TAG, "Delete raw contact with fingerprint " + masterKeyId); - resolver.delete(ContactsContract.RawContacts.CONTENT_URI, - ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + ContactsContract.RawContacts.SOURCE_ID + "=?", - new String[]{ - Constants.ACCOUNT_TYPE, Long.toString(masterKeyId) - }); + Log.d(Constants.TAG, "Delete raw contact with masterKeyId " + masterKeyId); + deleteRawContactByMasterKeyId(resolver, masterKeyId); } } /** * Delete all raw contacts associated to OpenKeychain. - * + *

* TODO: Does this work? */ private static int debugDeleteRawContacts(ContentResolver resolver) { @@ -389,6 +381,22 @@ public class ContactHelper { }); } + private static int deleteRawContactById(ContentResolver resolver, long rawContactId) { + return resolver.delete(ContactsContract.RawContacts.CONTENT_URI, + ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + ContactsContract.RawContacts._ID + "=?", + new String[]{ + Constants.ACCOUNT_TYPE, Long.toString(rawContactId) + }); + } + + private static int deleteRawContactByMasterKeyId(ContentResolver resolver, long masterKeyId) { + return resolver.delete(ContactsContract.RawContacts.CONTENT_URI, + ContactsContract.RawContacts.ACCOUNT_TYPE + "=? AND " + ContactsContract.RawContacts.SOURCE_ID + "=?", + new String[]{ + Constants.ACCOUNT_TYPE, Long.toString(masterKeyId) + }); + } + /** * @return a set of all key master key ids currently present in the contact db */ @@ -437,7 +445,7 @@ public class ContactHelper { } /** - * Creates a empty raw contact with a given fingerprint + * Creates a empty raw contact with a given masterKeyId */ private static void insertContact(ArrayList ops, Context context, long masterKeyId) { ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) -- cgit v1.2.3