move IteratorWithSize interface into ParcelableFileCache - much cleaner
This commit is contained in:
@@ -31,6 +31,7 @@ import org.sufficientlysecure.keychain.Constants;
|
|||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException;
|
||||||
import org.sufficientlysecure.keychain.util.FileHelper;
|
import org.sufficientlysecure.keychain.util.FileHelper;
|
||||||
|
import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize;
|
||||||
import org.sufficientlysecure.keychain.util.Preferences;
|
import org.sufficientlysecure.keychain.util.Preferences;
|
||||||
import org.sufficientlysecure.keychain.keyimport.HkpKeyserver;
|
import org.sufficientlysecure.keychain.keyimport.HkpKeyserver;
|
||||||
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
|
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
|
||||||
@@ -523,8 +524,9 @@ public class KeychainIntentService extends IntentService implements Progressable
|
|||||||
// get entries from cached file
|
// get entries from cached file
|
||||||
ParcelableFileCache<ParcelableKeyRing> cache =
|
ParcelableFileCache<ParcelableKeyRing> cache =
|
||||||
new ParcelableFileCache<ParcelableKeyRing>(this, "key_import.pcl");
|
new ParcelableFileCache<ParcelableKeyRing>(this, "key_import.pcl");
|
||||||
entries = cache.readCache();
|
IteratorWithSize<ParcelableKeyRing> it = cache.readCache();
|
||||||
numEntries = cache.getNumEntries();
|
entries = it;
|
||||||
|
numEntries = it.getSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
ProviderHelper providerHelper = new ProviderHelper(this);
|
ProviderHelper providerHelper = new ProviderHelper(this);
|
||||||
|
|||||||
@@ -39,9 +39,9 @@ import android.view.ViewGroup;
|
|||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
import org.sufficientlysecure.keychain.api.OpenKeychainIntents;
|
import org.sufficientlysecure.keychain.api.OpenKeychainIntents;
|
||||||
import org.sufficientlysecure.keychain.ui.ImportKeysListFragment.IteratorWithSize;
|
|
||||||
import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
|
import org.sufficientlysecure.keychain.ui.util.FormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
|
import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize;
|
||||||
import org.sufficientlysecure.keychain.util.Preferences;
|
import org.sufficientlysecure.keychain.util.Preferences;
|
||||||
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
|
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
|
||||||
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
|
import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing;
|
||||||
@@ -492,7 +492,7 @@ public class ImportKeysActivity extends ActionBarActivity {
|
|||||||
// display here, we should be able to import.
|
// display here, we should be able to import.
|
||||||
ParcelableFileCache<ParcelableKeyRing> cache =
|
ParcelableFileCache<ParcelableKeyRing> cache =
|
||||||
new ParcelableFileCache<ParcelableKeyRing>(this, "key_import.pcl");
|
new ParcelableFileCache<ParcelableKeyRing>(this, "key_import.pcl");
|
||||||
cache.writeCache(selectedEntries.getSize(), selectedEntries);
|
cache.writeCache(selectedEntries);
|
||||||
|
|
||||||
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
|
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.widget.ListView;
|
|||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.R;
|
import org.sufficientlysecure.keychain.R;
|
||||||
|
import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize;
|
||||||
import org.sufficientlysecure.keychain.util.Preferences;
|
import org.sufficientlysecure.keychain.util.Preferences;
|
||||||
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
|
import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry;
|
||||||
import org.sufficientlysecure.keychain.keyimport.Keyserver;
|
import org.sufficientlysecure.keychain.keyimport.Keyserver;
|
||||||
@@ -75,11 +76,6 @@ public class ImportKeysListFragment extends ListFragment implements
|
|||||||
return mAdapter.getData();
|
return mAdapter.getData();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tuples would make this easier...
|
|
||||||
public static interface IteratorWithSize<E> extends Iterator<E> {
|
|
||||||
int getSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns an Iterator (with size) of the selected data items.
|
/** Returns an Iterator (with size) of the selected data items.
|
||||||
* This iterator is sort of a tradeoff, it's slightly more complex than an
|
* This iterator is sort of a tradeoff, it's slightly more complex than an
|
||||||
* ArrayList would have been, but we save some memory by just returning
|
* ArrayList would have been, but we save some memory by just returning
|
||||||
|
|||||||
@@ -48,19 +48,14 @@ public class ParcelableFileCache<E extends Parcelable> {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
private final String mFilename;
|
private final String mFilename;
|
||||||
private int mNumEntries;
|
|
||||||
|
|
||||||
public ParcelableFileCache(Context context, String filename) {
|
public ParcelableFileCache(Context context, String filename) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mFilename = filename;
|
mFilename = filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns the number of entries as valid for the iterator
|
public void writeCache(IteratorWithSize<E> it) throws IOException {
|
||||||
* received by the latest readCache operation. Yes, it is slightly
|
writeCache(it.getSize(), it);
|
||||||
* peculiar.
|
|
||||||
*/
|
|
||||||
public int getNumEntries() {
|
|
||||||
return mNumEntries;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeCache(int numEntries, Iterator<E> it) throws IOException {
|
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);
|
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();
|
File cacheDir = mContext.getCacheDir();
|
||||||
if (cacheDir == null) {
|
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
|
// 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;
|
E mRing = null;
|
||||||
boolean closed = false;
|
boolean closed = false;
|
||||||
byte[] buf = new byte[512];
|
byte[] buf = new byte[512];
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return numEntries;
|
||||||
|
}
|
||||||
|
|
||||||
private void readNext() {
|
private void readNext() {
|
||||||
if (mRing != null || closed) {
|
if (mRing != null || closed) {
|
||||||
return;
|
return;
|
||||||
@@ -205,4 +204,12 @@ public class ParcelableFileCache<E extends Parcelable> {
|
|||||||
return tempFile.delete();
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user