summaryrefslogtreecommitdiffstats
path: root/src/com/android/mail/ui/AbstractConversationViewFragment.java
diff options
context:
space:
mode:
authorAndrew Sapperstein <asapperstein@google.com>2013-04-29 18:24:56 -0700
committerAndrew Sapperstein <asapperstein@google.com>2013-04-30 13:48:43 -0700
commit2fc673050f03ec632d1c84d9cc82098a8b99a1c0 (patch)
tree3c3c541ab5e8f06e5c10df8b099fccf319e13884 /src/com/android/mail/ui/AbstractConversationViewFragment.java
parentd848eb838b7616dbd5d26711528c4970758acbec (diff)
downloadandroid_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.java58
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;
+ }
}