diff options
14 files changed, 44 insertions, 68 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java index 7a473e49f..ff5fb7cca 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ConsolidateDialogActivity.java @@ -53,7 +53,7 @@ public class ConsolidateDialogActivity extends FragmentActivity mRecovery = recovery; - mConsolidateOpHelper = new CryptoOperationHelper<>(this, this, R.string.progress_importing); + mConsolidateOpHelper = new CryptoOperationHelper<>(1, this, this, R.string.progress_importing); mConsolidateOpHelper.cryptoOperation(); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java index 6e41e97a8..65bdca5c4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateKeyFinalFragment.java @@ -303,7 +303,7 @@ public class CreateKeyFinalFragment extends Fragment { } }; - mCreateOpHelper = new CryptoOperationHelper<>(this, createKeyCallback, R.string.progress_building_key); + mCreateOpHelper = new CryptoOperationHelper<>(1, this, createKeyCallback, R.string.progress_building_key); mCreateOpHelper.cryptoOperation(); } @@ -392,7 +392,7 @@ public class CreateKeyFinalFragment extends Fragment { }; - mMoveToCardOpHelper = new CryptoOperationHelper<>(this, callback, R.string.progress_modify); + mMoveToCardOpHelper = new CryptoOperationHelper<>(2, this, callback, R.string.progress_modify); mMoveToCardOpHelper.cryptoOperation(); } @@ -443,7 +443,7 @@ public class CreateKeyFinalFragment extends Fragment { } }; - mUploadOpHelper = new CryptoOperationHelper<>(this, callback, R.string.progress_uploading); + mUploadOpHelper = new CryptoOperationHelper<>(3, this, callback, R.string.progress_uploading); mUploadOpHelper.cryptoOperation(); } 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 eddb38e9b..aaf337f42 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java @@ -184,7 +184,7 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager. } }; - mImportOpHelper = new CryptoOperationHelper<>(this, callback, R.string.progress_importing); + mImportOpHelper = new CryptoOperationHelper<>(1, this, callback, R.string.progress_importing); mImportOpHelper.cryptoOperation(); } 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 228a79058..4ef6c40dc 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -43,7 +43,6 @@ import org.sufficientlysecure.keychain.ui.util.Notify; 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 java.io.IOException; import java.util.ArrayList; @@ -399,7 +398,7 @@ public class ImportKeysActivity extends BaseNfcActivity } mOperationHelper = new CryptoOperationHelper<ImportKeyringParcel, ImportKeyResult>( - this, this, R.string.progress_importing + 1, this, this, R.string.progress_importing ); ImportKeysListFragment.LoaderState ls = mListFragment.getLoaderState(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java index 36d728d35..b60f3984c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java @@ -223,7 +223,7 @@ public class ImportKeysProxyActivity extends FragmentActivity mKeyList = keyRings; - mImportOpHelper = new CryptoOperationHelper<>(this, this, R.string.progress_importing); + mImportOpHelper = new CryptoOperationHelper<>(1, this, this, R.string.progress_importing); mImportOpHelper.cryptoOperation(); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index 0e8ad7ba9..ee1c8460c 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -568,7 +568,7 @@ public class KeyListFragment extends LoaderFragment mKeyserver = cloudPrefs.keyserver; } - mImportOpHelper = new CryptoOperationHelper<>(this, + mImportOpHelper = new CryptoOperationHelper<>(1, this, this, R.string.progress_updating); mImportOpHelper.cryptoOperation(); } @@ -605,7 +605,7 @@ public class KeyListFragment extends LoaderFragment }; mConsolidateOpHelper = - new CryptoOperationHelper<>(this, callback, R.string.progress_importing); + new CryptoOperationHelper<>(2, this, callback, R.string.progress_importing); mConsolidateOpHelper.cryptoOperation(); } 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 a1cb77546..d15cea5a4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java @@ -144,7 +144,7 @@ public class SafeSlingerActivity extends BaseActivity cache.writeCache(it.size(), it.iterator()); mOperationHelper = - new CryptoOperationHelper(this, this, R.string.progress_importing); + new CryptoOperationHelper(1, this, this, R.string.progress_importing); mKeyList = null; mKeyserver = null; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java index 067b6c15e..0415128a2 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/UploadKeyActivity.java @@ -107,7 +107,7 @@ public class UploadKeyActivity extends BaseActivity String server = (String) mKeyServerSpinner.getSelectedItem(); mKeyserver = server; - mUploadOpHelper = new CryptoOperationHelper(this, this, R.string.progress_uploading); + mUploadOpHelper = new CryptoOperationHelper(1, this, this, R.string.progress_uploading); mUploadOpHelper.cryptoOperation(); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index 63597ea87..9ed46d517 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -84,7 +84,7 @@ import org.sufficientlysecure.keychain.util.Preferences; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; + public class ViewKeyActivity extends BaseNfcActivity implements LoaderManager.LoaderCallbacks<Cursor>, @@ -154,7 +154,7 @@ public class ViewKeyActivity extends BaseNfcActivity implements super.onCreate(savedInstanceState); mProviderHelper = new ProviderHelper(this); - mOperationHelper = new CryptoOperationHelper<>(this, this, null); + mOperationHelper = new CryptoOperationHelper<>(1, this, this, null); setTitle(null); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java index 40cbba5b3..cba2e6648 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyTrustFragment.java @@ -385,7 +385,7 @@ public class ViewKeyTrustFragment extends LoaderFragment implements mProofVerifyDetail.setVisibility(View.GONE); - mKeybaseOpHelper = new CryptoOperationHelper<>(this, this, + mKeybaseOpHelper = new CryptoOperationHelper<>(1, this, this, R.string.progress_verifying_signature); mKeybaseOpHelper.cryptoOperation(); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationFragment.java index d831cb4b1..52507f3e9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationFragment.java @@ -56,23 +56,11 @@ abstract class CryptoOperationFragment<T extends Parcelable, S extends Operation final private CryptoOperationHelper<T, S> mOperationHelper; public CryptoOperationFragment(Integer initialProgressMsg) { - mOperationHelper = new CryptoOperationHelper<>(this, this, initialProgressMsg); + mOperationHelper = new CryptoOperationHelper<>(1, this, this, initialProgressMsg); } public CryptoOperationFragment() { - mOperationHelper = new CryptoOperationHelper<>(this, this, R.string.progress_processing); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mOperationHelper.onRestoreInstanceState(savedInstanceState); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - mOperationHelper.onSaveInstanceState(outState); + mOperationHelper = new CryptoOperationHelper<>(1, this, this, R.string.progress_processing); } @Override diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationHelper.java index 9dfa0be21..91ea969d7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CryptoOperationHelper.java @@ -26,13 +26,11 @@ import android.os.Bundle; import android.os.Message; import android.os.Messenger; import android.os.Parcelable; -import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import org.sufficientlysecure.keychain.Constants; -import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.InputPendingResult; import org.sufficientlysecure.keychain.operations.results.OperationResult; import org.sufficientlysecure.keychain.service.KeychainService; @@ -54,8 +52,6 @@ import org.sufficientlysecure.keychain.util.Log; */ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResult> { - public static final String ARG_REQUESTED_CODE = "requested_code"; - public interface Callback<T extends Parcelable, S extends OperationResult> { T createOperationInput(); @@ -68,14 +64,18 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu boolean onCryptoSetProgress(String msg, int progress, int max); } - public static final int REQUEST_CODE_PASSPHRASE = 0x00008001; - public static final int REQUEST_CODE_NFC = 0x00008002; - public static final int REQUEST_CODE_ENABLE_ORBOT = 0x00008004; + // request codes from CryptoOperationHelper are created essentially + // a static property, used to identify requestCodes meant for this + // particular helper. a request code looks as follows: + // (id << 9) + (1<<8) + REQUEST_CODE_X + // that is, starting from LSB, there are 8 bits request code, 1 + // fixed bit set, then 7 bit operator-id code. the first two + // summands are stored in the mId for easy operation. + private final int mId; - // keeps track of request code used to start an activity from this CryptoOperationHelper. - // this is necessary when multiple CryptoOperationHelpers are used in the same fragment/activity - // otherwise all CryptoOperationHandlers may respond to the same onActivityResult - private int mRequestedCode = -1; + public static final int REQUEST_CODE_PASSPHRASE = 1; + public static final int REQUEST_CODE_NFC = 2; + public static final int REQUEST_CODE_ENABLE_ORBOT = 3; private Integer mProgressMessageResource; @@ -88,7 +88,9 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu /** * If OperationHelper is being integrated into an activity */ - public CryptoOperationHelper(FragmentActivity activity, Callback<T, S> callback, Integer progressMessageString) { + public CryptoOperationHelper(int id, FragmentActivity activity, Callback<T, S> callback, + Integer progressMessageString) { + mId = (id << 9) + (1<<8); mActivity = activity; mUseFragment = false; mCallback = callback; @@ -98,24 +100,14 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu /** * if OperationHelper is being integrated into a fragment */ - public CryptoOperationHelper(Fragment fragment, Callback<T, S> callback, Integer progressMessageString) { + public CryptoOperationHelper(int id, Fragment fragment, Callback<T, S> callback, Integer progressMessageString) { + mId = (id << 9) + (1<<8); mFragment = fragment; mUseFragment = true; mProgressMessageResource = progressMessageString; mCallback = callback; } - public void onSaveInstanceState(Bundle outState) { - outState.putInt(ARG_REQUESTED_CODE, mRequestedCode); - } - - public void onRestoreInstanceState(@Nullable Bundle state) { - if (state == null) { - return; - } - mRequestedCode = state.getInt(ARG_REQUESTED_CODE, -1); - } - public void setProgressMessageResource(int id) { mProgressMessageResource = id; } @@ -133,11 +125,10 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu case NFC_SIGN: { Intent intent = new Intent(activity, NfcOperationActivity.class); intent.putExtra(NfcOperationActivity.EXTRA_REQUIRED_INPUT, requiredInput); - mRequestedCode = REQUEST_CODE_NFC; if (mUseFragment) { - mFragment.startActivityForResult(intent, mRequestedCode); + mFragment.startActivityForResult(intent, mId + REQUEST_CODE_NFC); } else { - activity.startActivityForResult(intent, mRequestedCode); + activity.startActivityForResult(intent, mId + REQUEST_CODE_NFC); } return; } @@ -146,11 +137,10 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu case PASSPHRASE_SYMMETRIC: { Intent intent = new Intent(activity, PassphraseDialogActivity.class); intent.putExtra(PassphraseDialogActivity.EXTRA_REQUIRED_INPUT, requiredInput); - mRequestedCode = REQUEST_CODE_PASSPHRASE; if (mUseFragment) { - mFragment.startActivityForResult(intent, mRequestedCode); + mFragment.startActivityForResult(intent, mId + REQUEST_CODE_PASSPHRASE); } else { - activity.startActivityForResult(intent, mRequestedCode); + activity.startActivityForResult(intent, mId + REQUEST_CODE_PASSPHRASE); } return; } @@ -158,11 +148,10 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu case ENABLE_ORBOT: { Intent intent = new Intent(activity, OrbotRequiredDialogActivity.class); intent.putExtra(OrbotRequiredDialogActivity.EXTRA_CRYPTO_INPUT, cryptoInputParcel); - mRequestedCode = REQUEST_CODE_ENABLE_ORBOT; if (mUseFragment) { - mFragment.startActivityForResult(intent, mRequestedCode); + mFragment.startActivityForResult(intent, mId + REQUEST_CODE_ENABLE_ORBOT); } else { - activity.startActivityForResult(intent, mRequestedCode); + activity.startActivityForResult(intent, mId + REQUEST_CODE_ENABLE_ORBOT); } return; } @@ -181,13 +170,13 @@ public class CryptoOperationHelper<T extends Parcelable, S extends OperationResu public boolean handleActivityResult(int requestCode, int resultCode, Intent data) { Log.d(Constants.TAG, "received activity result in OperationHelper"); - if (mRequestedCode != requestCode) { + if ((requestCode & mId) != mId) { // this wasn't meant for us to handle return false; - } else { - // reset mRequestedCode because we have finished what we started - mRequestedCode = -1; } + // filter out mId from requestCode + requestCode ^= mId; + if (resultCode == Activity.RESULT_CANCELED) { mCallback.onCryptoOperationCancelled(); return true; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java index 7fc9da9ec..e92f9f78d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/dialog/DeleteKeyDialogFragment.java @@ -151,7 +151,7 @@ public class DeleteKeyDialogFragment extends DialogFragment mHasSecret = hasSecret; mDeleteOpHelper = new CryptoOperationHelper<> - (DeleteKeyDialogFragment.this, DeleteKeyDialogFragment.this, + (1, DeleteKeyDialogFragment.this, DeleteKeyDialogFragment.this, R.string.progress_deleting); mDeleteOpHelper.cryptoOperation(); // do NOT dismiss here, it'll give diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java index 89a6da9cb..5f2329170 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ExportHelper.java @@ -88,7 +88,7 @@ public class ExportHelper mMasterKeyIds = masterKeyIds; // if masterKeyIds is null it means export all CryptoOperationHelper<ExportKeyringParcel, ExportResult> exportOpHelper = - new CryptoOperationHelper<>(mActivity, this, R.string.progress_exporting); + new CryptoOperationHelper<>(1, mActivity, this, R.string.progress_exporting); exportOpHelper.cryptoOperation(); } |