diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-05-30 00:17:00 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-05-30 00:17:00 +0200 |
commit | b9563ff2ef881396f1b5b3c46436165fefd63464 (patch) | |
tree | fc0fcda6d6a30df9fdea8a64f865e1c034ece43f /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java | |
parent | 1406eec2dc0a1db72e7f69cd14642f4324eacf63 (diff) | |
download | open-keychain-b9563ff2ef881396f1b5b3c46436165fefd63464.tar.gz open-keychain-b9563ff2ef881396f1b5b3c46436165fefd63464.tar.bz2 open-keychain-b9563ff2ef881396f1b5b3c46436165fefd63464.zip |
externalize caching functionality from CertifyKeyFragment
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.java | 64 |
1 files changed, 64 insertions, 0 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 new file mode 100644 index 000000000..d0b6f502f --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/base/CachingCryptoOperationFragment.java @@ -0,0 +1,64 @@ +package org.sufficientlysecure.keychain.ui.base; + + +import android.os.Bundle; +import android.os.Message; +import android.os.Parcelable; + +import org.sufficientlysecure.keychain.service.ServiceProgressHandler; +import org.sufficientlysecure.keychain.service.input.CryptoInputParcel; + + +public abstract class CachingCryptoOperationFragment <T extends Parcelable> extends CryptoOperationFragment { + + 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); + + outState.putParcelable(ARG_CACHED_ACTIONS, mCachedActionsParcel); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (savedInstanceState != null) { + mCachedActionsParcel = savedInstanceState.getParcelable(ARG_CACHED_ACTIONS); + } + } + + @Override + public boolean handlePendingMessage(Message message) { + // see if it's an InputPendingResult, and if so don't care + if (super.handlePendingMessage(message)) { + return true; + } + + // if it's a non-input-pending OKAY message, always clear the cached actions parcel + if (message.arg1 == ServiceProgressHandler.MessageStatus.OKAY.ordinal()) { + mCachedActionsParcel = null; + } + + return false; + } + + protected abstract void cryptoOperation(CryptoInputParcel cryptoInput, T cachedActionsParcel); + + protected void cacheActionsParcel(T cachedActionsParcel) { + mCachedActionsParcel = cachedActionsParcel; + } + + protected void onCryptoOperationCancelled() { + mCachedActionsParcel = null; + } + +} |