From f0e96d54b6fb05bf0b4c40a9e918beb2e52bc819 Mon Sep 17 00:00:00 2001 From: Mangesh Ghiware Date: Wed, 26 Oct 2011 17:23:54 -0700 Subject: [PATCH] Fix restore of view and text wrap scales. Fixes bug 5507881: Open pages in overview doesn't stick on initial browser load. Update the fix for bug 5230909: Zoom not restored on Back. Added a boolean to indicate that scales have been restored. In the case of restored scales (view and text wrap) being zero, set them to overview and reading level respectively. Change-Id: I5a22dd2040a22ee3b48c5903b586a65a4fa320f2 --- core/java/android/webkit/WebViewCore.java | 23 ++++++++--------------- core/java/android/webkit/ZoomManager.java | 8 +++++--- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 1294a28df1902..e6fa4d7e13510 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -124,6 +124,7 @@ public final class WebViewCore { */ private int mViewportDensityDpi = -1; + private boolean mIsRestored = false; private float mRestoredScale = 0; private float mRestoredTextWrapScale = 0; private int mRestoredX = 0; @@ -2254,7 +2255,7 @@ public final class WebViewCore { if (mWebView == null) return; - boolean updateViewState = standardLoad || mRestoredScale > 0; + boolean updateViewState = standardLoad || mIsRestored; setupViewport(updateViewState); // if updateRestoreState is true, ViewManager.postReadyToDrawAll() will // be called after the WebView updates its state. If updateRestoreState @@ -2271,6 +2272,7 @@ public final class WebViewCore { // reset the scroll position, the restored offset and scales mRestoredX = mRestoredY = 0; + mIsRestored = false; mRestoredScale = mRestoredTextWrapScale = 0; } @@ -2399,14 +2401,10 @@ public final class WebViewCore { mInitialViewState.mScrollX = mRestoredX; mInitialViewState.mScrollY = mRestoredY; mInitialViewState.mMobileSite = (0 == mViewportWidth); - if (mRestoredScale > 0) { + if (mIsRestored) { mInitialViewState.mIsRestored = true; mInitialViewState.mViewScale = mRestoredScale; - if (mRestoredTextWrapScale > 0) { - mInitialViewState.mTextWrapScale = mRestoredTextWrapScale; - } else { - mInitialViewState.mTextWrapScale = mInitialViewState.mViewScale; - } + mInitialViewState.mTextWrapScale = mRestoredTextWrapScale; } else { if (mViewportInitialScale > 0) { mInitialViewState.mViewScale = mInitialViewState.mTextWrapScale = @@ -2525,14 +2523,9 @@ public final class WebViewCore { // called by JNI private void restoreScale(float scale, float textWrapScale) { if (mBrowserFrame.firstLayoutDone() == false) { - // If restored scale and textWrapScale are 0, set them to - // overview and reading level scale respectively. - mRestoredScale = (scale <= 0.0) - ? mWebView.getZoomOverviewScale() : scale; - if (mSettings.getUseWideViewPort()) { - mRestoredTextWrapScale = (textWrapScale <= 0.0) - ? mWebView.getReadingLevelScale() : textWrapScale; - } + mIsRestored = true; + mRestoredScale = scale; + mRestoredTextWrapScale = textWrapScale; } } diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index 7d3cf8ea74d64..2a0b6e5d50595 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -1121,9 +1121,11 @@ class ZoomManager { if (mInitialScale > 0) { scale = mInitialScale; mTextWrapScale = scale; - } else if (viewState.mViewScale > 0) { - mTextWrapScale = viewState.mTextWrapScale; - scale = viewState.mViewScale; + } else if (viewState.mIsRestored) { + scale = (viewState.mViewScale > 0) + ? viewState.mViewScale : overviewScale; + mTextWrapScale = (viewState.mTextWrapScale > 0) + ? viewState.mTextWrapScale : getReadingLevelScale(); } else { scale = overviewScale; if (!settings.getUseWideViewPort()