From a91468565ff600e082c29aec6433c51a19f26b07 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Fri, 3 Oct 2014 03:29:08 +0200 Subject: use iterator interface exclusively in ParcelableFileCache --- .../keychain/provider/ProviderHelper.java | 4 ++-- .../keychain/service/KeychainIntentService.java | 13 +++++++++---- .../keychain/ui/ImportKeysActivity.java | 2 +- .../keychain/util/ParcelableFileCache.java | 21 +++++++++------------ 4 files changed, 21 insertions(+), 19 deletions(-) (limited to 'OpenKeychain/src/main/java') 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 f8600d9d4..d4aabc1b5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -929,7 +929,7 @@ public class ProviderHelper { ParcelableFileCache cache = new ParcelableFileCache(mContext, "consolidate_secret.pcl"); - cache.writeCache(new Iterator() { + cache.writeCache(cursor.getCount(), new Iterator() { ParcelableKeyRing ring; @Override @@ -991,7 +991,7 @@ public class ProviderHelper { ParcelableFileCache cache = new ParcelableFileCache(mContext, "consolidate_public.pcl"); - cache.writeCache(new Iterator() { + cache.writeCache(cursor.getCount(), new Iterator() { ParcelableKeyRing ring; @Override diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java index 0ee3c7093..833dccde5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java @@ -78,6 +78,7 @@ import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @@ -511,21 +512,25 @@ public class KeychainIntentService extends IntentService implements Progressable } else if (ACTION_IMPORT_KEYRING.equals(action)) { try { - List entries; + Iterator entries; + int numEntries; if (data.containsKey(IMPORT_KEY_LIST)) { // get entries from intent - entries = data.getParcelableArrayList(IMPORT_KEY_LIST); + ArrayList list = data.getParcelableArrayList(IMPORT_KEY_LIST); + entries = list.iterator(); + numEntries = list.size(); } else { // get entries from cached file ParcelableFileCache cache = new ParcelableFileCache(this, "key_import.pcl"); - entries = cache.readCacheIntoList(); + entries = cache.readCache(); + numEntries = cache.getNumEntries(); } ProviderHelper providerHelper = new ProviderHelper(this); PgpImportExport pgpImportExport = new PgpImportExport( this, providerHelper, this, mActionCanceled); - ImportKeyResult result = pgpImportExport.importKeyRings(entries); + ImportKeyResult result = pgpImportExport.importKeyRings(entries, numEntries); // we do this even on failure or cancellation! if (result.mSecret > 0) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 6298f96c0..cabc5eb71 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -489,7 +489,7 @@ public class ImportKeysActivity extends ActionBarActivity { try { ParcelableFileCache cache = new ParcelableFileCache(this, "key_import.pcl"); - cache.writeCache(selectedEntries); + cache.writeCache(selectedEntries.size(), selectedEntries.iterator()); intent.putExtra(KeychainIntentService.EXTRA_DATA, data); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java index 111bf0124..3b4facbd0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java @@ -48,17 +48,18 @@ public class ParcelableFileCache { private Context mContext; private final String mFilename; + private int mNumEntries; public ParcelableFileCache(Context context, String filename) { mContext = context; mFilename = filename; } - public void writeCache(ArrayList selectedEntries) throws IOException { - writeCache(selectedEntries.iterator()); + public int getNumEntries() { + return mNumEntries; } - public void writeCache(Iterator it) throws IOException { + public void writeCache(int numEntries, Iterator it) throws IOException { File cacheDir = mContext.getCacheDir(); if (cacheDir == null) { @@ -70,6 +71,8 @@ public class ParcelableFileCache { DataOutputStream oos = new DataOutputStream(new FileOutputStream(tempFile)); + oos.writeInt(numEntries); + while (it.hasNext()) { Parcel p = Parcel.obtain(); // creating empty parcel object p.writeParcelable(it.next(), 0); // saving bundle as parcel @@ -83,15 +86,6 @@ public class ParcelableFileCache { } - public List readCacheIntoList() throws IOException { - ArrayList result = new ArrayList(); - Iterator it = readCache(); - while (it.hasNext()) { - result.add(it.next()); - } - return result; - } - public Iterator readCache() throws IOException { return readCache(true); } @@ -113,6 +107,9 @@ public class ParcelableFileCache { throw new IOException(e); } + // yes this is slightly sloppy data flow. WE WOULDN'T NEED THIS WITH TUPLE RETURN TYPES + mNumEntries = ois.readInt(); + return new Iterator() { E mRing = null; -- cgit v1.2.3