From 00bbf8c26787d97f5ef5eed86ffa58d0522a576b Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Fri, 3 Oct 2014 04:22:32 +0200 Subject: move IteratorWithSize interface into ParcelableFileCache - much cleaner --- .../keychain/util/ParcelableFileCache.java | 29 ++++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java') 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 e6345b1c3..3081021cf 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java @@ -48,19 +48,14 @@ public class ParcelableFileCache { private Context mContext; private final String mFilename; - private int mNumEntries; public ParcelableFileCache(Context context, String filename) { mContext = context; mFilename = filename; } - /** This method returns the number of entries as valid for the iterator - * received by the latest readCache operation. Yes, it is slightly - * peculiar. - */ - public int getNumEntries() { - return mNumEntries; + public void writeCache(IteratorWithSize it) throws IOException { + writeCache(it.getSize(), it); } public void writeCache(int numEntries, Iterator it) throws IOException { @@ -90,11 +85,11 @@ public class ParcelableFileCache { } - public Iterator readCache() throws IOException { + public IteratorWithSize readCache() throws IOException { return readCache(true); } - public Iterator readCache(final boolean deleteAfterRead) throws IOException { + public IteratorWithSize readCache(final boolean deleteAfterRead) throws IOException { File cacheDir = mContext.getCacheDir(); if (cacheDir == null) { @@ -112,14 +107,18 @@ public class ParcelableFileCache { } // yes this is sloppy data flow. WE WOULDN'T NEED THIS WITH TUPLE RETURN TYPES - mNumEntries = ois.readInt(); + final int numEntries = ois.readInt(); - return new Iterator() { + return new IteratorWithSize() { E mRing = null; boolean closed = false; byte[] buf = new byte[512]; + public int getSize() { + return numEntries; + } + private void readNext() { if (mRing != null || closed) { return; @@ -205,4 +204,12 @@ public class ParcelableFileCache { return tempFile.delete(); } + /** As the name implies, this is an extended iterator interface, which + * knows the total number of its entries beforehand. + */ + public static interface IteratorWithSize extends Iterator { + /** Returns the number of total entries in this iterator. */ + int getSize(); + } + } -- cgit v1.2.3