From e9639bd822c149ede53aa68524b0fef72894f409 Mon Sep 17 00:00:00 2001 From: Adithya Abraham Philip Date: Tue, 23 Jun 2015 18:42:00 +0530 Subject: introduced OpHelper for import in DecryptFragment --- .../keychain/ui/DecryptFragment.java | 84 +++++++++++----------- 1 file changed, 44 insertions(+), 40 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java index c8ae867b2..ae5c86451 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java @@ -17,6 +17,7 @@ package org.sufficientlysecure.keychain.ui; +import java.lang.reflect.Array; import java.util.ArrayList; import android.app.Activity; @@ -27,6 +28,7 @@ import android.os.Bundle; import android.os.Message; import android.os.Messenger; import android.support.v4.app.Fragment; +import android.os.Parcelable; import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; @@ -51,8 +53,10 @@ import org.sufficientlysecure.keychain.pgp.exception.PgpKeyNotFoundException; import org.sufficientlysecure.keychain.provider.KeychainContract; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.provider.ProviderHelper; +import org.sufficientlysecure.keychain.service.ImportKeyringParcel; import org.sufficientlysecure.keychain.service.KeychainService; import org.sufficientlysecure.keychain.service.ServiceProgressHandler; +import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State; import org.sufficientlysecure.keychain.ui.util.Notify; @@ -78,6 +82,8 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager. private DecryptVerifyResult mDecryptVerifyResult; private ViewAnimator mOverlayAnimator; + private CryptoOperationHelper mImportOpHelper; + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -135,43 +141,15 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager. private void lookupUnknownKey(long unknownKeyId) { - // Message is received after importing is done in KeychainService - ServiceProgressHandler serviceHandler = new ServiceProgressHandler(getActivity()) { - @Override - public void handleMessage(Message message) { - // handle messages by standard KeychainIntentServiceHandler first - super.handleMessage(message); - - if (message.arg1 == MessageStatus.OKAY.ordinal()) { - // get returned data bundle - Bundle returnData = message.getData(); - - if (returnData == null) { - return; - } - - final ImportKeyResult result = - returnData.getParcelable(OperationResult.EXTRA_RESULT); - - Activity activity = getActivity(); - if (result != null && activity != null) { - result.createNotify(activity).show(); - } - - getLoaderManager().restartLoader(LOADER_ID_UNIFIED, null, DecryptFragment.this); - } - } - }; - - // fill values for this action - Bundle data = new Bundle(); + final ArrayList keyList; + final String keyserver; // search config { Preferences prefs = Preferences.getPreferences(getActivity()); Preferences.CloudSearchPrefs cloudPrefs = new Preferences.CloudSearchPrefs(true, true, prefs.getPreferredKeyserver()); - data.putString(KeychainService.IMPORT_KEY_SERVER, cloudPrefs.keyserver); + keyserver = cloudPrefs.keyserver; } { @@ -180,19 +158,38 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager. ArrayList selectedEntries = new ArrayList<>(); selectedEntries.add(keyEntry); - data.putParcelableArrayList(KeychainService.IMPORT_KEY_LIST, selectedEntries); + keyList = selectedEntries; } - // Send all information needed to service to query keys in other thread - Intent intent = new Intent(getActivity(), KeychainService.class); - intent.setAction(KeychainService.ACTION_IMPORT_KEYRING); - intent.putExtra(KeychainService.EXTRA_DATA, data); + CryptoOperationHelper.Callback callback + = new CryptoOperationHelper.Callback() { - // Create a new Messenger for the communication back - Messenger messenger = new Messenger(serviceHandler); - intent.putExtra(KeychainService.EXTRA_MESSENGER, messenger); + @Override + public ImportKeyringParcel createOperationInput() { + return new ImportKeyringParcel(keyList, keyserver); + } - getActivity().startService(intent); + @Override + public void onCryptoOperationSuccess(ImportKeyResult result) { + result.createNotify(getActivity()).show(); + + getLoaderManager().restartLoader(LOADER_ID_UNIFIED, null, DecryptFragment.this); + } + + @Override + public void onCryptoOperationCancelled() { + // do nothing + } + + @Override + public void onCryptoOperationError(ImportKeyResult result) { + result.createNotify(getActivity()).show(); + } + }; + + mImportOpHelper = new CryptoOperationHelper<>(this, callback, R.string.progress_importing); + + mImportOpHelper.cryptoOperation(); } private void showKey(long keyId) { @@ -457,4 +454,11 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager. protected abstract void onVerifyLoaded(boolean hideErrorOverlay); + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (mImportOpHelper != null) { + mImportOpHelper.handleActivityResult(requestCode, resultCode, data); + } + super.onActivityResult(requestCode, resultCode, data); + } } -- cgit v1.2.3