From 4c9e1a3fdef233112f810c03daf1da229144da89 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Fri, 19 Nov 2010 15:03:37 -0800 Subject: [PATCH] Don't reset message view when becoming active again. - We used to (re-)load the content on every onStart(), which is called too when coming back from other actibities. So if you go home and come back with the task switcher, all state get reset, including webview zoom/pan and the current tab. - Introduce a new flag, mLoadWhenResumed, to tell if we really need to load a message. Also: - Start loading a message in onResume() rather than onStart() to keep it consistent with other fragments. Bug 3215269 Change-Id: I1cc6e12c3cc3c08065da3696603a3247f341469a --- .../activity/MessageFileViewFragment.java | 2 +- .../email/activity/MessageViewFragment.java | 2 +- .../activity/MessageViewFragmentBase.java | 47 ++++++++++++------- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/com/android/email/activity/MessageFileViewFragment.java b/src/com/android/email/activity/MessageFileViewFragment.java index 305061e6a..76766fc4f 100644 --- a/src/com/android/email/activity/MessageFileViewFragment.java +++ b/src/com/android/email/activity/MessageFileViewFragment.java @@ -88,7 +88,7 @@ public class MessageFileViewFragment extends MessageViewFragmentBase { synchronized (mLock) { mFileEmailUri = fileEmailUri; } - openMessageIfStarted(); + loadMessageIfResumed(); } @Override diff --git a/src/com/android/email/activity/MessageViewFragment.java b/src/com/android/email/activity/MessageViewFragment.java index 158c9a4e7..88e2e779b 100644 --- a/src/com/android/email/activity/MessageViewFragment.java +++ b/src/com/android/email/activity/MessageViewFragment.java @@ -220,7 +220,7 @@ public class MessageViewFragment extends MessageViewFragmentBase { synchronized (mLock) { mMessageIdToOpen = messageId; } - openMessageIfStarted(); + loadMessageIfResumed(); } @Override diff --git a/src/com/android/email/activity/MessageViewFragmentBase.java b/src/com/android/email/activity/MessageViewFragmentBase.java index fa721279f..03a2ef833 100644 --- a/src/com/android/email/activity/MessageViewFragmentBase.java +++ b/src/com/android/email/activity/MessageViewFragmentBase.java @@ -147,7 +147,8 @@ public abstract class MessageViewFragmentBase extends Fragment implements View.O // contains the HTML content as set in WebView. private String mHtmlTextWebView; - private boolean mStarted; + private boolean mResumed; + private boolean mLoadWhenResumed; private boolean mIsMessageLoadedForTest; @@ -347,10 +348,6 @@ public abstract class MessageViewFragmentBase extends Fragment implements View.O Log.d(Email.LOG_TAG, "MessageViewFragment onStart"); } super.onStart(); - mStarted = true; - if (isMessageSpecified()) { - openMessageIfStarted(); - } } @Override @@ -360,17 +357,17 @@ public abstract class MessageViewFragmentBase extends Fragment implements View.O } super.onResume(); - // Dynamic configuration of WebView - WebSettings.TextSize textZoom; - switch (Preferences.getPreferences(mContext).getTextZoom()) { - case Preferences.TEXT_ZOOM_TINY: textZoom = WebSettings.TextSize.SMALLEST; break; - case Preferences.TEXT_ZOOM_SMALL: textZoom = WebSettings.TextSize.SMALLER; break; - case Preferences.TEXT_ZOOM_NORMAL: textZoom = WebSettings.TextSize.NORMAL; break; - case Preferences.TEXT_ZOOM_LARGE: textZoom = WebSettings.TextSize.LARGER; break; - case Preferences.TEXT_ZOOM_HUGE: textZoom = WebSettings.TextSize.LARGEST; break; - default: textZoom = WebSettings.TextSize.NORMAL; break; + mResumed = true; + if (isMessageSpecified()) { + if (mLoadWhenResumed) { + loadMessageIfResumed(); + } else { + // This means, the user comes back from other (full-screen) activities. + // In this case we've already loaded the content, so don't load it again, + // which results in resetting all view state, including WebView zoom/pan + // and the current tab. + } } - mMessageContentView.getSettings().setTextSize(textZoom); } @Override @@ -378,6 +375,7 @@ public abstract class MessageViewFragmentBase extends Fragment implements View.O if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { Log.d(Email.LOG_TAG, "MessageViewFragment onPause"); } + mResumed = false; super.onPause(); } @@ -386,7 +384,6 @@ public abstract class MessageViewFragmentBase extends Fragment implements View.O if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { Log.d(Email.LOG_TAG, "MessageViewFragment onStop"); } - mStarted = false; super.onStop(); } @@ -464,10 +461,12 @@ public abstract class MessageViewFragmentBase extends Fragment implements View.O resetView(); } - protected final void openMessageIfStarted() { - if (!mStarted) { + protected final void loadMessageIfResumed() { + if (!mResumed) { + mLoadWhenResumed = true; return; } + mLoadWhenResumed = false; cancelAllTasks(); resetView(); mLoadMessageTask = new LoadMessageTask(true); @@ -481,6 +480,18 @@ public abstract class MessageViewFragmentBase extends Fragment implements View.O mMessageContentView.getSettings().setBlockNetworkLoads(true); mMessageContentView.scrollTo(0, 0); mMessageContentView.loadUrl("file:///android_asset/empty.html"); + + // Dynamic configuration of WebView + WebSettings.TextSize textZoom; + switch (Preferences.getPreferences(mContext).getTextZoom()) { + case Preferences.TEXT_ZOOM_TINY: textZoom = WebSettings.TextSize.SMALLEST; break; + case Preferences.TEXT_ZOOM_SMALL: textZoom = WebSettings.TextSize.SMALLER; break; + case Preferences.TEXT_ZOOM_NORMAL: textZoom = WebSettings.TextSize.NORMAL; break; + case Preferences.TEXT_ZOOM_LARGE: textZoom = WebSettings.TextSize.LARGER; break; + case Preferences.TEXT_ZOOM_HUGE: textZoom = WebSettings.TextSize.LARGEST; break; + default: textZoom = WebSettings.TextSize.NORMAL; break; + } + mMessageContentView.getSettings().setTextSize(textZoom); } mAttachmentsScroll.scrollTo(0, 0); mInviteScroll.scrollTo(0, 0);