diff options
Diffstat (limited to 'OpenKeychain/src')
5 files changed, 87 insertions, 13 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java index 9d6e7d096..467eab785 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CertifyKeyFragment.java @@ -324,11 +324,15 @@ public class CertifyKeyFragment } @Override - public void onCryptoOperationSuccess(CertifyResult result) { + public void onQueuedOperationSuccess(CertifyResult result) { + // protected by Queueing*Fragment + Activity activity = getActivity(); + Intent intent = new Intent(); intent.putExtra(CertifyResult.EXTRA_RESULT, result); - getActivity().setResult(Activity.RESULT_OK, intent); - getActivity().finish(); + activity.setResult(Activity.RESULT_OK, intent); + activity.finish(); + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java index b382e31d0..7b2796c69 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java @@ -387,13 +387,10 @@ public class EncryptFilesFragment } @Override - public void onCryptoOperationSuccess(final SignEncryptResult result) { + public void onQueuedOperationSuccess(final SignEncryptResult result) { + // protected by Queueing*Fragment FragmentActivity activity = getActivity(); - if (activity == null) { - // it's gone, there's nothing we can do here - return; - } if (mDeleteAfterEncrypt) { // TODO make behavior coherent here diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java index 8d3738fbd..e307a85f8 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java @@ -331,7 +331,7 @@ public class EncryptTextFragment } @Override - public void onCryptoOperationSuccess(SignEncryptResult result) { + public void onQueuedOperationSuccess(SignEncryptResult result) { if (mShareAfterEncrypt) { // Share encrypted message/file 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 38b7075f2..9ce33f5a6 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 @@ -4,12 +4,11 @@ package org.sufficientlysecure.keychain.ui.base; import android.os.Bundle; import android.os.Parcelable; -import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.OperationResult; public abstract class CachingCryptoOperationFragment <T extends Parcelable, S extends OperationResult> - extends CryptoOperationFragment<T, S> { + extends QueueingCryptoOperationFragment<T, S> { public static final String ARG_CACHED_ACTIONS = "cached_actions"; @@ -32,12 +31,14 @@ public abstract class CachingCryptoOperationFragment <T extends Parcelable, S ex } @Override - public void onCryptoOperationSuccess(S result) { + public void onQueuedOperationSuccess(S result) { + super.onCryptoOperationSuccess(result); mCachedActionsParcel = null; } @Override - public void onCryptoOperationError(S result) { + public void onQueuedOperationError(S result) { + super.onCryptoOperationError(result); mCachedActionsParcel = null; } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/QueueingCryptoOperationFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/QueueingCryptoOperationFragment.java new file mode 100644 index 000000000..a8acaad4c --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/QueueingCryptoOperationFragment.java @@ -0,0 +1,72 @@ +package org.sufficientlysecure.keychain.ui.base; + + +import android.os.Bundle; +import android.os.Parcelable; + +import org.sufficientlysecure.keychain.operations.results.OperationResult; + + +public abstract class QueueingCryptoOperationFragment<T extends Parcelable, S extends OperationResult> + extends CryptoOperationFragment<T,S> { + + public static final String ARG_QUEUED_RESULT = "queued_result"; + private S mQueuedResult; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + if (mQueuedResult != null) { + try { + if (mQueuedResult.success()) { + onQueuedOperationSuccess(mQueuedResult); + } else { + onQueuedOperationError(mQueuedResult); + } + } finally { + mQueuedResult = null; + } + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putParcelable(ARG_QUEUED_RESULT, mQueuedResult); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (savedInstanceState != null) { + mQueuedResult = savedInstanceState.getParcelable(ARG_QUEUED_RESULT); + } + } + + public abstract void onQueuedOperationSuccess(S result); + + public void onQueuedOperationError(S result) { + super.onCryptoOperationError(result); + } + + @Override + final public void onCryptoOperationSuccess(S result) { + if (getActivity() == null) { + mQueuedResult = result; + return; + } + onQueuedOperationSuccess(result); + } + + @Override + final public void onCryptoOperationError(S result) { + if (getActivity() == null) { + mQueuedResult = result; + return; + } + onQueuedOperationError(result); + } +} |