mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-24 01:32:16 -05:00
use iterator interface exclusively in ParcelableFileCache
This commit is contained in:
parent
4b4e885e55
commit
a91468565f
@ -29,6 +29,7 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import org.robolectric.shadows.ShadowLog;
|
import org.robolectric.shadows.ShadowLog;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@ -55,16 +56,19 @@ public class ParcelableFileCacheTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write to cache file
|
// write to cache file
|
||||||
cache.writeCache(list);
|
cache.writeCache(list.size(), list.iterator());
|
||||||
|
|
||||||
// read back
|
// read back
|
||||||
List<Bundle> last = cache.readCacheIntoList();
|
Iterator<Bundle> it = cache.readCache();
|
||||||
|
|
||||||
for (int i = 0; i < list.size(); i++) {
|
Assert.assertEquals("number of entries must be correct", list.size(), cache.getNumEntries());
|
||||||
|
|
||||||
|
while (it.hasNext()) {
|
||||||
|
Bundle b = it.next();
|
||||||
Assert.assertEquals("input values should be equal to output values",
|
Assert.assertEquals("input values should be equal to output values",
|
||||||
list.get(i).getInt("key1"), last.get(i).getInt("key1"));
|
b.getInt("key1"), b.getInt("key1"));
|
||||||
Assert.assertEquals("input values should be equal to output values",
|
Assert.assertEquals("input values should be equal to output values",
|
||||||
list.get(i).getString("key2"), last.get(i).getString("key2"));
|
b.getString("key2"), b.getString("key2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -929,7 +929,7 @@ public class ProviderHelper {
|
|||||||
|
|
||||||
ParcelableFileCache<ParcelableKeyRing> cache =
|
ParcelableFileCache<ParcelableKeyRing> cache =
|
||||||
new ParcelableFileCache<ParcelableKeyRing>(mContext, "consolidate_secret.pcl");
|
new ParcelableFileCache<ParcelableKeyRing>(mContext, "consolidate_secret.pcl");
|
||||||
cache.writeCache(new Iterator<ParcelableKeyRing>() {
|
cache.writeCache(cursor.getCount(), new Iterator<ParcelableKeyRing>() {
|
||||||
ParcelableKeyRing ring;
|
ParcelableKeyRing ring;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -991,7 +991,7 @@ public class ProviderHelper {
|
|||||||
|
|
||||||
ParcelableFileCache<ParcelableKeyRing> cache =
|
ParcelableFileCache<ParcelableKeyRing> cache =
|
||||||
new ParcelableFileCache<ParcelableKeyRing>(mContext, "consolidate_public.pcl");
|
new ParcelableFileCache<ParcelableKeyRing>(mContext, "consolidate_public.pcl");
|
||||||
cache.writeCache(new Iterator<ParcelableKeyRing>() {
|
cache.writeCache(cursor.getCount(), new Iterator<ParcelableKeyRing>() {
|
||||||
ParcelableKeyRing ring;
|
ParcelableKeyRing ring;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -78,6 +78,7 @@ import java.io.IOException;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
@ -511,21 +512,25 @@ public class KeychainIntentService extends IntentService implements Progressable
|
|||||||
} else if (ACTION_IMPORT_KEYRING.equals(action)) {
|
} else if (ACTION_IMPORT_KEYRING.equals(action)) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
List<ParcelableKeyRing> entries;
|
Iterator<ParcelableKeyRing> entries;
|
||||||
|
int numEntries;
|
||||||
if (data.containsKey(IMPORT_KEY_LIST)) {
|
if (data.containsKey(IMPORT_KEY_LIST)) {
|
||||||
// get entries from intent
|
// get entries from intent
|
||||||
entries = data.getParcelableArrayList(IMPORT_KEY_LIST);
|
ArrayList<ParcelableKeyRing> list = data.getParcelableArrayList(IMPORT_KEY_LIST);
|
||||||
|
entries = list.iterator();
|
||||||
|
numEntries = list.size();
|
||||||
} else {
|
} else {
|
||||||
// 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.readCacheIntoList();
|
entries = cache.readCache();
|
||||||
|
numEntries = cache.getNumEntries();
|
||||||
}
|
}
|
||||||
|
|
||||||
ProviderHelper providerHelper = new ProviderHelper(this);
|
ProviderHelper providerHelper = new ProviderHelper(this);
|
||||||
PgpImportExport pgpImportExport = new PgpImportExport(
|
PgpImportExport pgpImportExport = new PgpImportExport(
|
||||||
this, providerHelper, this, mActionCanceled);
|
this, providerHelper, this, mActionCanceled);
|
||||||
ImportKeyResult result = pgpImportExport.importKeyRings(entries);
|
ImportKeyResult result = pgpImportExport.importKeyRings(entries, numEntries);
|
||||||
|
|
||||||
// we do this even on failure or cancellation!
|
// we do this even on failure or cancellation!
|
||||||
if (result.mSecret > 0) {
|
if (result.mSecret > 0) {
|
||||||
|
@ -489,7 +489,7 @@ public class ImportKeysActivity extends ActionBarActivity {
|
|||||||
try {
|
try {
|
||||||
ParcelableFileCache<ParcelableKeyRing> cache =
|
ParcelableFileCache<ParcelableKeyRing> cache =
|
||||||
new ParcelableFileCache<ParcelableKeyRing>(this, "key_import.pcl");
|
new ParcelableFileCache<ParcelableKeyRing>(this, "key_import.pcl");
|
||||||
cache.writeCache(selectedEntries);
|
cache.writeCache(selectedEntries.size(), selectedEntries.iterator());
|
||||||
|
|
||||||
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
|
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
|
||||||
|
|
||||||
|
@ -48,17 +48,18 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeCache(ArrayList<E> selectedEntries) throws IOException {
|
public int getNumEntries() {
|
||||||
writeCache(selectedEntries.iterator());
|
return mNumEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeCache(Iterator<E> it) throws IOException {
|
public void writeCache(int numEntries, Iterator<E> it) throws IOException {
|
||||||
|
|
||||||
File cacheDir = mContext.getCacheDir();
|
File cacheDir = mContext.getCacheDir();
|
||||||
if (cacheDir == null) {
|
if (cacheDir == null) {
|
||||||
@ -70,6 +71,8 @@ public class ParcelableFileCache<E extends Parcelable> {
|
|||||||
|
|
||||||
DataOutputStream oos = new DataOutputStream(new FileOutputStream(tempFile));
|
DataOutputStream oos = new DataOutputStream(new FileOutputStream(tempFile));
|
||||||
|
|
||||||
|
oos.writeInt(numEntries);
|
||||||
|
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
Parcel p = Parcel.obtain(); // creating empty parcel object
|
Parcel p = Parcel.obtain(); // creating empty parcel object
|
||||||
p.writeParcelable(it.next(), 0); // saving bundle as parcel
|
p.writeParcelable(it.next(), 0); // saving bundle as parcel
|
||||||
@ -83,15 +86,6 @@ public class ParcelableFileCache<E extends Parcelable> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<E> readCacheIntoList() throws IOException {
|
|
||||||
ArrayList<E> result = new ArrayList<E>();
|
|
||||||
Iterator<E> it = readCache();
|
|
||||||
while (it.hasNext()) {
|
|
||||||
result.add(it.next());
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Iterator<E> readCache() throws IOException {
|
public Iterator<E> readCache() throws IOException {
|
||||||
return readCache(true);
|
return readCache(true);
|
||||||
}
|
}
|
||||||
@ -113,6 +107,9 @@ public class ParcelableFileCache<E extends Parcelable> {
|
|||||||
throw new IOException(e);
|
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>() {
|
return new Iterator<E>() {
|
||||||
|
|
||||||
E mRing = null;
|
E mRing = null;
|
||||||
|
Loading…
Reference in New Issue
Block a user