diff options
author | Andrew Sapperstein <asapperstein@google.com> | 2013-04-29 18:24:56 -0700 |
---|---|---|
committer | Andrew Sapperstein <asapperstein@google.com> | 2013-04-30 13:48:43 -0700 |
commit | 2fc673050f03ec632d1c84d9cc82098a8b99a1c0 (patch) | |
tree | 3c3c541ab5e8f06e5c10df8b099fccf319e13884 /src/com/android/mail/ui/AbstractConversationViewFragment.java | |
parent | d848eb838b7616dbd5d26711528c4970758acbec (diff) | |
download | android_packages_apps_UnifiedEmail-2fc673050f03ec632d1c84d9cc82098a8b99a1c0.tar.gz android_packages_apps_UnifiedEmail-2fc673050f03ec632d1c84d9cc82098a8b99a1c0.tar.bz2 android_packages_apps_UnifiedEmail-2fc673050f03ec632d1c84d9cc82098a8b99a1c0.zip |
Implement "Revert auto-sizing" menu option.
Turns on revert auto sizing as an option if the conversation
has been transformed. If it has, and it is pressed, the conversation
will be re-rendered in its original layout. This re-render will
stick through orientation changes as long as the fragment is alive.
Fixes b/8575997.
Change-Id: Ie05d539f8afcf4333cc9d0371e89aec8508213d7
Diffstat (limited to 'src/com/android/mail/ui/AbstractConversationViewFragment.java')
-rw-r--r-- | src/com/android/mail/ui/AbstractConversationViewFragment.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/com/android/mail/ui/AbstractConversationViewFragment.java b/src/com/android/mail/ui/AbstractConversationViewFragment.java index 61d54d00c..5df592e3e 100644 --- a/src/com/android/mail/ui/AbstractConversationViewFragment.java +++ b/src/com/android/mail/ui/AbstractConversationViewFragment.java @@ -128,6 +128,9 @@ public abstract class AbstractConversationViewFragment extends Fragment implemen private boolean mIsDetached; + private boolean mHasConversationBeenTransformed; + private boolean mHasConversationTransformBeenReverted; + private final Runnable mDelayedShow = new FragmentRunnable("mDelayedShow") { @Override public void go() { @@ -157,6 +160,11 @@ public abstract class AbstractConversationViewFragment extends Fragment implemen private static final String BUNDLE_DETACHED = AbstractConversationViewFragment.class.getName() + "detached"; + private static final String BUNDLE_KEY_HAS_CONVERSATION_BEEN_TRANSFORMED = + AbstractConversationViewFragment.class.getName() + "conversationtransformed"; + private static final String BUNDLE_KEY_HAS_CONVERSATION_BEEN_REVERTED = + AbstractConversationViewFragment.class.getName() + "conversationreverted"; + public static Bundle makeBasicArgs(Account account, Folder folder) { Bundle args = new Bundle(); args.putParcelable(ARG_ACCOUNT, account); @@ -223,8 +231,14 @@ public abstract class AbstractConversationViewFragment extends Fragment implemen mViewState = savedState.getParcelable(BUNDLE_VIEW_STATE); mUserVisible = savedState.getBoolean(BUNDLE_USER_VISIBLE); mIsDetached = savedState.getBoolean(BUNDLE_DETACHED, false); + mHasConversationBeenTransformed = + savedState.getBoolean(BUNDLE_KEY_HAS_CONVERSATION_BEEN_TRANSFORMED, false); + mHasConversationTransformBeenReverted = + savedState.getBoolean(BUNDLE_KEY_HAS_CONVERSATION_BEEN_REVERTED, false); } else { mViewState = getNewViewState(); + mHasConversationBeenTransformed = false; + mHasConversationTransformBeenReverted = false; } } @@ -415,10 +429,21 @@ public abstract class AbstractConversationViewFragment extends Fragment implemen markUnread(); handled = true; break; + case R.id.show_original: + showUntransformedConversation(); + handled = true; + break; } return handled; } + @Override + public void onPrepareOptionsMenu(Menu menu) { + // Only show option if we support message transforms and message has been transformed. + Utils.setMenuItemVisibility(menu, R.id.show_original, supportsMessageTransforms() && + mHasConversationBeenTransformed && !mHasConversationTransformBeenReverted); + } + // BEGIN conversation header callbacks @Override public void onFoldersClicked() { @@ -437,6 +462,10 @@ public abstract class AbstractConversationViewFragment extends Fragment implemen } outState.putBoolean(BUNDLE_USER_VISIBLE, mUserVisible); outState.putBoolean(BUNDLE_DETACHED, mIsDetached); + outState.putBoolean(BUNDLE_KEY_HAS_CONVERSATION_BEEN_TRANSFORMED, + mHasConversationBeenTransformed); + outState.putBoolean(BUNDLE_KEY_HAS_CONVERSATION_BEEN_REVERTED, + mHasConversationTransformBeenReverted); } @Override @@ -830,4 +859,33 @@ public abstract class AbstractConversationViewFragment extends Fragment implemen mIsDetached = true; } } + + /** + * Called when the JavaScript reports that it transformed a message. + * Sets a flag to true and invalidates the options menu so it will + * include the "Revert auto-sizing" menu option. + */ + public void onConversationTransformed() { + mHasConversationBeenTransformed = true; + mActivity.invalidateOptionsMenu(); + } + + /** + * Called when the "Revert auto-sizing" option is selected. Default + * implementation simply sets a value on whether transforms should be + * applied. Derived classes should override this class and force a + * re-render so that the conversation renders without + */ + public void showUntransformedConversation() { + // must set the value to true so we don't show the options menu item again + mHasConversationTransformBeenReverted = true; + } + + /** + * Returns {@code true} if the conversation should be transformed. {@code false}, otherwise. + * @return {@code true} if the conversation should be transformed. {@code false}, otherwise. + */ + public boolean shouldApplyTransforms() { + return !mHasConversationTransformBeenReverted; + } } |