diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2014-08-31 17:32:13 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2014-08-31 17:32:13 +0200 |
commit | 7da783228499ea9d5b0a98201e8ba5b17e30bb10 (patch) | |
tree | 610e3d5ef33d717eaa56d091ebe7d92c5b237bbb /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp | |
parent | 38c6cf045c6e451b3a150bf9b659056c2252d27c (diff) | |
download | open-keychain-7da783228499ea9d5b0a98201e8ba5b17e30bb10.tar.gz open-keychain-7da783228499ea9d5b0a98201e8ba5b17e30bb10.tar.bz2 open-keychain-7da783228499ea9d5b0a98201e8ba5b17e30bb10.zip |
Add cancelable mechanism and support in key import
Closes #323
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java index 0bc3ac0ab..669a7d37e 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/PgpImportExport.java @@ -46,6 +46,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; public class PgpImportExport { @@ -125,11 +126,20 @@ public class PgpImportExport { } /** Imports keys from given data. If keyIds is given only those are imported */ + public ImportKeyResult importKeyRings(List<ParcelableKeyRing> entries, + AtomicBoolean cancelled) { + return importKeyRings(entries.iterator(), entries.size(), cancelled); + } + public ImportKeyResult importKeyRings(List<ParcelableKeyRing> entries) { - return importKeyRings(entries.iterator(), entries.size()); + return importKeyRings(entries.iterator(), entries.size(), null); } public ImportKeyResult importKeyRings(Iterator<ParcelableKeyRing> entries, int num) { + return importKeyRings(entries, num, null); + } + public ImportKeyResult importKeyRings(Iterator<ParcelableKeyRing> entries, int num, + AtomicBoolean cancelled) { updateProgress(R.string.progress_importing, 0, 100); // If there aren't even any keys, do nothing here. @@ -143,6 +153,12 @@ public class PgpImportExport { int position = 0; double progSteps = 100.0 / num; for (ParcelableKeyRing entry : new IterableIterator<ParcelableKeyRing>(entries)) { + // Has this action been cancelled? If so, don't proceed any further + if (cancelled != null && cancelled.get()) { + Log.d(Constants.TAG, "CANCELLED!"); + break; + } + try { UncachedKeyRing key = UncachedKeyRing.decodeFromData(entry.getBytes()); @@ -208,9 +224,12 @@ public class PgpImportExport { } } if (log.containsWarnings()) { - resultType |= ImportKeyResult.RESULT_WITH_WARNINGS; + resultType |= ImportKeyResult.RESULT_WARNINGS; } } + if (cancelled != null && cancelled.get()) { + resultType |= ImportKeyResult.RESULT_CANCELLED; + } return new ImportKeyResult(resultType, log, newKeys, oldKeys, badKeys, secret); |