From 79117b1ef8074434579191e1dd734f9445d6544f Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Thu, 8 May 2014 15:56:49 +0200 Subject: use longsparsearrays instead of hashmaps in that one place --- .../keychain/provider/ProviderHelper.java | 35 ++++++++++++---------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'OpenKeychain/src') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java index 214a9988c..7ef186f00 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -26,6 +26,7 @@ import android.database.Cursor; import android.database.DatabaseUtils; import android.net.Uri; import android.os.RemoteException; +import android.support.v4.util.LongSparseArray; import org.spongycastle.bcpg.ArmoredOutputStream; import org.spongycastle.bcpg.S2K; @@ -167,33 +168,35 @@ public class ProviderHelper { } } - public Map getPGPKeyRings(Uri queryUri) { + public LongSparseArray getPGPKeyRings(Uri queryUri) { Cursor cursor = mContentResolver.query(queryUri, new String[]{KeyRingData.MASTER_KEY_ID, KeyRingData.KEY_RING_DATA}, null, null, null); - Map result = new HashMap(cursor.getCount()); - if (cursor != null && cursor.moveToFirst()) do { - long masterKeyId = cursor.getLong(0); - byte[] data = cursor.getBlob(1); - if (data != null) { - result.put(masterKeyId, PgpConversionHelper.BytesToPGPKeyRing(data)); + LongSparseArray result = new LongSparseArray(cursor.getCount()); + try { + if (cursor != null && cursor.moveToFirst()) do { + long masterKeyId = cursor.getLong(0); + byte[] data = cursor.getBlob(1); + if (data != null) { + result.put(masterKeyId, PgpConversionHelper.BytesToPGPKeyRing(data)); + } + } while (cursor.moveToNext()); + } finally { + if (cursor != null) { + cursor.close(); } - } while (cursor.moveToNext()); - - if (cursor != null) { - cursor.close(); } return result; } public PGPKeyRing getPGPKeyRing(Uri queryUri) throws NotFoundException { - Map result = getPGPKeyRings(queryUri); - if (result.isEmpty()) { + LongSparseArray result = getPGPKeyRings(queryUri); + if (result.size() == 0) { throw new NotFoundException("PGPKeyRing object not found!"); } else { - return result.values().iterator().next(); + return result.valueAt(0); } } @@ -267,7 +270,7 @@ public class ProviderHelper { } // get a list of owned secret keys, for verification filtering - Map allKeyRings = getPGPKeyRings(KeyRingData.buildSecretKeyRingUri()); + LongSparseArray allKeyRings = getPGPKeyRings(KeyRingData.buildSecretKeyRingUri()); // special case: available secret keys verify themselves! if (secretRing != null) allKeyRings.put(secretRing.getSecretKey().getKeyID(), secretRing); @@ -305,7 +308,7 @@ public class ProviderHelper { } } // verify signatures from known private keys - if (allKeyRings.containsKey(certId)) { + if (allKeyRings.indexOfKey(certId) >= 0) { // mark them as verified cert.init(new JcaPGPContentVerifierBuilderProvider().setProvider( Constants.BOUNCY_CASTLE_PROVIDER_NAME), -- cgit v1.2.3