From db1e8b60ca082100914916f8fd9b8127df0f787e Mon Sep 17 00:00:00 2001 From: Andrea Torlaschi Date: Tue, 28 Jun 2016 22:19:26 +0200 Subject: [PATCH] ImportKeys: Extract interface and refactoring ImportKeys: Extract interface and refactoring --- .../keychain/operations/ImportOperation.java | 39 ++++++++++--------- .../keychain/provider/ProviderHelper.java | 8 ++-- .../keychain/ui/ImportKeysActivity.java | 12 ++---- .../keychain/ui/ImportKeysListFragment.java | 2 +- .../keychain/ui/SafeSlingerActivity.java | 3 +- .../keychain/util/IteratorWithSize.java | 17 ++++++++ .../keychain/util/ParcelableFileCache.java | 8 ---- 7 files changed, 48 insertions(+), 41 deletions(-) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/IteratorWithSize.java diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java index a20181a00..3adc38f81 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java @@ -19,20 +19,6 @@ package org.sufficientlysecure.keychain.operations; -import java.io.IOException; -import java.net.Proxy; -import java.util.ArrayList; -import java.util.GregorianCalendar; -import java.util.Iterator; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorCompletionService; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; - import android.content.Context; import android.support.annotation.NonNull; @@ -57,13 +43,27 @@ import org.sufficientlysecure.keychain.service.ContactSyncAdapterService; import org.sufficientlysecure.keychain.service.ImportKeyringParcel; import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; +import org.sufficientlysecure.keychain.util.IteratorWithSize; import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.ParcelableFileCache; -import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize; import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.ProgressScaler; import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; +import java.io.IOException; +import java.net.Proxy; +import java.util.ArrayList; +import java.util.GregorianCalendar; +import java.util.Iterator; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorCompletionService; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + /** * An operation class which implements high level import * operations. @@ -85,6 +85,8 @@ public class ImportOperation extends BaseOperation { public static final int MAX_THREADS = 10; + public static final String CACHE_FILE_NAME = "key_import.pcl"; + public ImportOperation(Context context, ProviderHelper providerHelper, Progressable progressable) { super(context, providerHelper, progressable); @@ -430,15 +432,14 @@ public class ImportOperation extends BaseOperation { ImportKeyResult result; if (keyList == null) {// import from file, do serially - ParcelableFileCache cache = new ParcelableFileCache<>(mContext, - "key_import.pcl"); - + ParcelableFileCache cache = + new ParcelableFileCache<>(mContext, CACHE_FILE_NAME); result = serialKeyRingImport(cache, null, null); } else { Proxy proxy; if (cryptoInput.getParcelableProxy() == null) { // explicit proxy not set - if(!OrbotHelper.isOrbotInRequiredState(mContext)) { + if (!OrbotHelper.isOrbotInRequiredState(mContext)) { // show dialog to enable/install dialog return new ImportKeyResult(null, RequiredInputParcel.createOrbotRequiredOperation(), cryptoInput); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java index 6eda21d2c..7a73c1c28 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -61,9 +61,9 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.UpdatedKeys; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.IterableIterator; +import org.sufficientlysecure.keychain.util.IteratorWithSize; import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.ParcelableFileCache; -import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize; import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.ProgressFixedScaler; import org.sufficientlysecure.keychain.util.ProgressScaler; @@ -276,7 +276,7 @@ public class ProviderHelper { public ArrayList getConfirmedUserIds(long masterKeyId) throws NotFoundException { Cursor cursor = mContentResolver.query(UserPackets.buildUserIdsUri(masterKeyId), - new String[]{ UserPackets.USER_ID }, UserPackets.VERIFIED + " = " + Certs.VERIFIED_SECRET, null, null + new String[]{UserPackets.USER_ID}, UserPackets.VERIFIED + " = " + Certs.VERIFIED_SECRET, null, null ); if (cursor == null) { throw new NotFoundException("Key id for requested user ids not found"); @@ -476,7 +476,7 @@ public class ProviderHelper { String userId = Utf8Util.fromUTF8ByteArrayReplaceBadEncoding(rawUserId); UserPacketItem item = new UserPacketItem(); uids.add(item); - OpenPgpUtils.UserId splitUserId = KeyRing.splitUserId(userId); + OpenPgpUtils.UserId splitUserId = KeyRing.splitUserId(userId); item.userId = userId; item.name = splitUserId.name; item.email = splitUserId.email; @@ -794,7 +794,7 @@ public class ProviderHelper { } // if one is *trusted* but the other isn't, that one comes first // this overrides the primary attribute, even! - if ( (trustedCerts.size() == 0) != (o.trustedCerts.size() == 0) ) { + if ((trustedCerts.size() == 0) != (o.trustedCerts.size() == 0)) { return trustedCerts.size() > o.trustedCerts.size() ? -1 : 1; } // if one key is primary but the other isn't, the primary one always comes first diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 4ed1331a5..beac04dec 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -38,6 +38,7 @@ import org.sufficientlysecure.keychain.keyimport.processing.CloudLoaderState; import org.sufficientlysecure.keychain.keyimport.processing.ImportKeysListener; import org.sufficientlysecure.keychain.keyimport.processing.ImportKeysOperationCallback; import org.sufficientlysecure.keychain.keyimport.processing.LoaderState; +import org.sufficientlysecure.keychain.operations.ImportOperation; import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; import org.sufficientlysecure.keychain.service.ImportKeyringParcel; import org.sufficientlysecure.keychain.ui.base.BaseActivity; @@ -351,25 +352,20 @@ public class ImportKeysActivity extends BaseActivity implements ImportKeysListen Log.d(Constants.TAG, "importKeys started"); if (loaderState instanceof BytesLoaderState) { - // get DATA from selected key entries - ParcelableFileCache.IteratorWithSize entries = listFragment.getData(); - // instead of giving the entries by Intent extra, cache them into a // file to prevent Java Binder problems on heavy imports // read FileImportCache for more info. try { // We parcel this iteratively into a file - anything we can // display here, we should be able to import. - ParcelableFileCache cache = new ParcelableFileCache<>(this, "key_import.pcl"); - cache.writeCache(entries); + ParcelableFileCache cache = + new ParcelableFileCache<>(this, ImportOperation.CACHE_FILE_NAME); + cache.writeCache(listFragment.getData()); } catch (IOException e) { Log.e(Constants.TAG, "Problem writing cache file", e); Notify.create(this, "Problem writing cache file!", Notify.Style.ERROR).show(); return; } - - keyList = null; - keyserver = null; } else if (loaderState instanceof CloudLoaderState) { CloudLoaderState sls = (CloudLoaderState) loaderState; 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 72d148550..cfe9bf1ca 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysListFragment.java @@ -50,8 +50,8 @@ import org.sufficientlysecure.keychain.operations.results.GetKeyResult; import org.sufficientlysecure.keychain.service.input.RequiredInputParcel; import org.sufficientlysecure.keychain.ui.adapter.ImportKeysAdapter; import org.sufficientlysecure.keychain.ui.util.PermissionsUtil; +import org.sufficientlysecure.keychain.util.IteratorWithSize; import org.sufficientlysecure.keychain.util.Log; -import org.sufficientlysecure.keychain.util.ParcelableFileCache.IteratorWithSize; import org.sufficientlysecure.keychain.util.ParcelableProxy; import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.orbot.OrbotHelper; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java index 534dbfd05..e23813ac5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java @@ -30,6 +30,7 @@ import android.widget.NumberPicker; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.keyimport.ParcelableKeyRing; +import org.sufficientlysecure.keychain.operations.ImportOperation; import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.provider.KeychainContract; @@ -141,7 +142,7 @@ public class SafeSlingerActivity extends BaseActivity // We parcel this iteratively into a file - anything we can // display here, we should be able to import. ParcelableFileCache cache = - new ParcelableFileCache<>(this, "key_import.pcl"); + new ParcelableFileCache<>(this, ImportOperation.CACHE_FILE_NAME); cache.writeCache(it.size(), it.iterator()); mOperationHelper = diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/IteratorWithSize.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/IteratorWithSize.java new file mode 100644 index 000000000..96cf5a47e --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/IteratorWithSize.java @@ -0,0 +1,17 @@ +package org.sufficientlysecure.keychain.util; + +import java.util.Iterator; + +/** + * An extended iterator interface, which knows the total number of its entries beforehand. + */ +public interface IteratorWithSize extends Iterator { + + /** + * Returns the total number of entries in this iterator. + * + * @return the number of entries in this iterator. + */ + int getSize(); + +} 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 eabbf83b8..511e1047a 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ParcelableFileCache.java @@ -216,12 +216,4 @@ public class ParcelableFileCache { 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 extends Iterator { - /** Returns the number of total entries in this iterator. */ - int getSize(); - } - }