aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-05-08 15:56:49 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-05-08 15:57:38 +0200
commit79117b1ef8074434579191e1dd734f9445d6544f (patch)
tree7eb277c6718b9667d0dd4bbe6d043173d149003a /OpenKeychain
parent956b9a12bb1c5993fe42790b525ac6f770970573 (diff)
downloadopen-keychain-79117b1ef8074434579191e1dd734f9445d6544f.tar.gz
open-keychain-79117b1ef8074434579191e1dd734f9445d6544f.tar.bz2
open-keychain-79117b1ef8074434579191e1dd734f9445d6544f.zip
use longsparsearrays instead of hashmaps in that one place
Diffstat (limited to 'OpenKeychain')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java35
1 files changed, 19 insertions, 16 deletions
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<Long, PGPKeyRing> getPGPKeyRings(Uri queryUri) {
+ public LongSparseArray<PGPKeyRing> getPGPKeyRings(Uri queryUri) {
Cursor cursor = mContentResolver.query(queryUri,
new String[]{KeyRingData.MASTER_KEY_ID, KeyRingData.KEY_RING_DATA},
null, null, null);
- Map<Long, PGPKeyRing> result = new HashMap<Long, PGPKeyRing>(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<PGPKeyRing> result = new LongSparseArray<PGPKeyRing>(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<Long, PGPKeyRing> result = getPGPKeyRings(queryUri);
- if (result.isEmpty()) {
+ LongSparseArray<PGPKeyRing> 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<Long, PGPKeyRing> allKeyRings = getPGPKeyRings(KeyRingData.buildSecretKeyRingUri());
+ LongSparseArray<PGPKeyRing> 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),