aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-10-03 04:22:32 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-10-03 04:22:32 +0200
commit00bbf8c26787d97f5ef5eed86ffa58d0522a576b (patch)
tree12175966aab94fb33946eda6e0c55c4bfd0b979a /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java
parent504064302bc9f3949b416d6f48b2f5835ac64514 (diff)
downloadopen-keychain-00bbf8c26787d97f5ef5eed86ffa58d0522a576b.tar.gz
open-keychain-00bbf8c26787d97f5ef5eed86ffa58d0522a576b.tar.bz2
open-keychain-00bbf8c26787d97f5ef5eed86ffa58d0522a576b.zip
move IteratorWithSize interface into ParcelableFileCache - much cleaner
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java29
1 files changed, 18 insertions, 11 deletions
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<E extends Parcelable> {
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<E> it) throws IOException {
+ writeCache(it.getSize(), it);
}
public void writeCache(int numEntries, Iterator<E> it) throws IOException {
@@ -90,11 +85,11 @@ public class ParcelableFileCache<E extends Parcelable> {
}
- public Iterator<E> readCache() throws IOException {
+ public IteratorWithSize<E> readCache() throws IOException {
return readCache(true);
}
- public Iterator<E> readCache(final boolean deleteAfterRead) throws IOException {
+ public IteratorWithSize<E> readCache(final boolean deleteAfterRead) throws IOException {
File cacheDir = mContext.getCacheDir();
if (cacheDir == null) {
@@ -112,14 +107,18 @@ public class ParcelableFileCache<E extends Parcelable> {
}
// 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<E>() {
+ return new IteratorWithSize<E>() {
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<E extends Parcelable> {
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<E> extends Iterator<E> {
+ /** Returns the number of total entries in this iterator. */
+ int getSize();
+ }
+
}