diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-07-07 23:43:23 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-07-07 23:43:23 +0200 |
commit | 310228f6ba4898916d900e052947986525d706d3 (patch) | |
tree | 3c4ed1fe623b6bcc7c310d56507a533159938749 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/QueueingCryptoOperationFragment.java | |
parent | 895d1fbef65b1247ac9f08ccb50d1a42b0ca86a4 (diff) | |
download | open-keychain-310228f6ba4898916d900e052947986525d706d3.tar.gz open-keychain-310228f6ba4898916d900e052947986525d706d3.tar.bz2 open-keychain-310228f6ba4898916d900e052947986525d706d3.zip |
introduce QueueingCryptoOperationFragment to queue result handling in detached state
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/QueueingCryptoOperationFragment.java')
-rw-r--r-- | OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/QueueingCryptoOperationFragment.java | 72 |
1 files changed, 72 insertions, 0 deletions
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); + } +} |