aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java43
1 files changed, 37 insertions, 6 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
index e30af6b29..1d9935aa1 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java
@@ -48,6 +48,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
public class ImportKeysListFragment extends ListFragment implements
@@ -74,12 +75,42 @@ public class ImportKeysListFragment extends ListFragment implements
return mAdapter.getData();
}
- public ArrayList<ParcelableKeyRing> getSelectedData() {
- ArrayList<ParcelableKeyRing> result = new ArrayList<ParcelableKeyRing>();
- for (ImportKeysListEntry entry : getSelectedEntries()) {
- result.add(mCachedKeyData.get(entry.hashCode()));
- }
- return result;
+ // 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.
+ * 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
+ * relevant elements on demand.
+ */
+ public IteratorWithSize<ParcelableKeyRing> getSelectedData() {
+ final ArrayList<ImportKeysListEntry> entries = getSelectedEntries();
+ final Iterator<ImportKeysListEntry> it = entries.iterator();
+ return new IteratorWithSize<ParcelableKeyRing>() {
+
+ @Override
+ public int getSize() {
+ return entries.size();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return it.hasNext();
+ }
+
+ @Override
+ public ParcelableKeyRing next() {
+ // throws NoSuchElementException if it doesn't exist, but that's not our problem
+ return mCachedKeyData.get(it.next().hashCode());
+ }
+
+ @Override
+ public void remove() {
+ it.remove();
+ }
+ };
}
public ArrayList<ImportKeysListEntry> getSelectedEntries() {