aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java56
1 files changed, 40 insertions, 16 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java
index d0b6f502f..e8e8c5363 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java
@@ -1,26 +1,27 @@
package org.sufficientlysecure.keychain.ui.base;
+import android.app.ProgressDialog;
+import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.os.Parcelable;
+import org.sufficientlysecure.keychain.R;
+import org.sufficientlysecure.keychain.operations.results.OperationResult;
+import org.sufficientlysecure.keychain.service.KeychainNewService;
import org.sufficientlysecure.keychain.service.ServiceProgressHandler;
import org.sufficientlysecure.keychain.service.input.CryptoInputParcel;
-public abstract class CachingCryptoOperationFragment <T extends Parcelable> extends CryptoOperationFragment {
+public abstract class CachingCryptoOperationFragment <T extends Parcelable, S extends OperationResult>
+ extends CryptoOperationFragment<T, S> {
public static final String ARG_CACHED_ACTIONS = "cached_actions";
private T mCachedActionsParcel;
@Override
- protected void cryptoOperation(CryptoInputParcel cryptoInput) {
- cryptoOperation(cryptoInput, mCachedActionsParcel);
- }
-
- @Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@@ -37,21 +38,44 @@ public abstract class CachingCryptoOperationFragment <T extends Parcelable> exte
}
@Override
- public boolean handlePendingMessage(Message message) {
- // see if it's an InputPendingResult, and if so don't care
- if (super.handlePendingMessage(message)) {
- return true;
- }
+ protected void onCryptoOperationResult(S result) {
+ super.onCryptoOperationResult(result);
+ mCachedActionsParcel = null;
+ }
+
+ protected abstract T createOperationInput();
- // if it's a non-input-pending OKAY message, always clear the cached actions parcel
- if (message.arg1 == ServiceProgressHandler.MessageStatus.OKAY.ordinal()) {
- mCachedActionsParcel = null;
+ protected void cryptoOperation(CryptoInputParcel cryptoInput) {
+
+ if (mCachedActionsParcel == null) {
+
+ mCachedActionsParcel = createOperationInput();
+ // this is null if invalid, just return in that case
+ if (mCachedActionsParcel == null) {
+ // Notify was created by createCryptoInput.
+ return;
+ }
}
- return false;
+ // Send all information needed to service to edit key in other thread
+ Intent intent = new Intent(getActivity(), KeychainNewService.class);
+
+ intent.putExtra(KeychainNewService.EXTRA_OPERATION_INPUT, mCachedActionsParcel);
+ intent.putExtra(KeychainNewService.EXTRA_CRYPTO_INPUT, cryptoInput);
+
+ showProgressFragment(
+ getString(R.string.progress_start),
+ ProgressDialog.STYLE_HORIZONTAL,
+ false);
+
+ // start service with intent
+ getActivity().startService(intent);
+
}
- protected abstract void cryptoOperation(CryptoInputParcel cryptoInput, T cachedActionsParcel);
+ protected T getCachedActionsParcel() {
+ return mCachedActionsParcel;
+ }
protected void cacheActionsParcel(T cachedActionsParcel) {
mCachedActionsParcel = cachedActionsParcel;