Loading core/java/android/webkit/WebView.java +8 −10 Original line number Diff line number Diff line Loading @@ -6033,11 +6033,9 @@ public class WebView extends AbsoluteLayout spawnContentScrollTo(msg.arg1, msg.arg2); break; case UPDATE_ZOOM_RANGE: { WebViewCore.RestoreState restoreState = (WebViewCore.RestoreState) msg.obj; WebViewCore.ViewState viewState = (WebViewCore.ViewState) msg.obj; // mScrollX contains the new minPrefWidth mZoomManager.updateZoomRange(restoreState, getViewWidth(), restoreState.mScrollX); mZoomManager.updateZoomRange(viewState, getViewWidth(), viewState.mScrollX); break; } case NEW_PICTURE_MSG_ID: { Loading @@ -6051,12 +6049,12 @@ public class WebView extends AbsoluteLayout final WebViewCore.DrawData draw = (WebViewCore.DrawData) msg.obj; final Point viewSize = draw.mViewPoint; WebViewCore.RestoreState restoreState = draw.mRestoreState; boolean hasRestoreState = restoreState != null; if (hasRestoreState) { mZoomManager.restoreZoomState(draw); WebViewCore.ViewState viewState = draw.mViewState; boolean isPictureAfterFirstLayout = viewState != null; if (isPictureAfterFirstLayout) { mZoomManager.onFirstLayout(draw); if (!mDrawHistory) { setContentScrollTo(restoreState.mScrollX, restoreState.mScrollY); setContentScrollTo(viewState.mScrollX, viewState.mScrollY); // As we are on a new page, remove the WebTextView. This // is necessary for page loads driven by webkit, and in // particular when the user was on a password field, so Loading Loading @@ -6090,7 +6088,7 @@ public class WebView extends AbsoluteLayout if (draw.mFocusSizeChanged && inEditingMode()) { mFocusSizeChanged = true; } if (hasRestoreState) { if (isPictureAfterFirstLayout) { mViewManager.postReadyToDrawAll(); } break; Loading core/java/android/webkit/WebViewCore.java +42 −43 Original line number Diff line number Diff line Loading @@ -1738,11 +1738,11 @@ final class WebViewCore { // Used to suspend drawing. private boolean mDrawIsPaused; // mRestoreState is set in didFirstLayout(), and reset in the next // webkitDraw after passing it to the UI thread. private RestoreState mRestoreState = null; // mInitialViewState is set by didFirstLayout() and then reset in the // next webkitDraw after passing the state to the UI thread. private ViewState mInitialViewState = null; static class RestoreState { static class ViewState { float mMinScale; float mMaxScale; float mViewScale; Loading @@ -1762,8 +1762,8 @@ final class WebViewCore { Point mViewPoint; Point mWidthHeight; int mMinPrefWidth; RestoreState mRestoreState; // only non-null if it is for the first // picture set after the first layout // only non-null if it is for the first picture set after the first layout ViewState mViewState; boolean mFocusSizeChanged; } Loading @@ -1788,9 +1788,9 @@ final class WebViewCore { : mViewportWidth), nativeGetContentMinPrefWidth()); } if (mRestoreState != null) { draw.mRestoreState = mRestoreState; mRestoreState = null; if (mInitialViewState != null) { draw.mViewState = mInitialViewState; mInitialViewState = null; } if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw NEW_PICTURE_MSG_ID"); Message.obtain(mWebView.mPrivateHandler, Loading Loading @@ -2065,12 +2065,12 @@ final class WebViewCore { if (mWebView == null) return; boolean updateRestoreState = standardLoad || mRestoredScale > 0; setupViewport(updateRestoreState); boolean updateViewState = standardLoad || mRestoredScale > 0; setupViewport(updateViewState); // if updateRestoreState is true, ViewManager.postReadyToDrawAll() will // be called after the WebView restore the state. If updateRestoreState // be called after the WebView updates its state. If updateRestoreState // is false, start to draw now as it is ready. if (!updateRestoreState) { if (!updateViewState) { mWebView.mViewManager.postReadyToDrawAll(); } Loading @@ -2096,7 +2096,7 @@ final class WebViewCore { } } private void setupViewport(boolean updateRestoreState) { private void setupViewport(boolean updateViewState) { // set the viewport settings from WebKit setViewportSettingsFromNative(); Loading Loading @@ -2148,17 +2148,17 @@ final class WebViewCore { } // if mViewportWidth is 0, it means device-width, always update. if (mViewportWidth != 0 && !updateRestoreState) { RestoreState restoreState = new RestoreState(); restoreState.mMinScale = mViewportMinimumScale / 100.0f; restoreState.mMaxScale = mViewportMaximumScale / 100.0f; restoreState.mDefaultScale = adjust; if (mViewportWidth != 0 && !updateViewState) { ViewState viewState = new ViewState(); viewState.mMinScale = mViewportMinimumScale / 100.0f; viewState.mMaxScale = mViewportMaximumScale / 100.0f; viewState.mDefaultScale = adjust; // as mViewportWidth is not 0, it is not mobile site. restoreState.mMobileSite = false; viewState.mMobileSite = false; // for non-mobile site, we don't need minPrefWidth, set it as 0 restoreState.mScrollX = 0; viewState.mScrollX = 0; Message.obtain(mWebView.mPrivateHandler, WebView.UPDATE_ZOOM_RANGE, restoreState).sendToTarget(); WebView.UPDATE_ZOOM_RANGE, viewState).sendToTarget(); return; } Loading @@ -2179,32 +2179,31 @@ final class WebViewCore { } else { webViewWidth = Math.round(viewportWidth * mCurrentViewScale); } mRestoreState = new RestoreState(); mRestoreState.mMinScale = mViewportMinimumScale / 100.0f; mRestoreState.mMaxScale = mViewportMaximumScale / 100.0f; mRestoreState.mDefaultScale = adjust; mRestoreState.mScrollX = mRestoredX; mRestoreState.mScrollY = mRestoredY; mRestoreState.mMobileSite = (0 == mViewportWidth); mInitialViewState = new ViewState(); mInitialViewState.mMinScale = mViewportMinimumScale / 100.0f; mInitialViewState.mMaxScale = mViewportMaximumScale / 100.0f; mInitialViewState.mDefaultScale = adjust; mInitialViewState.mScrollX = mRestoredX; mInitialViewState.mScrollY = mRestoredY; mInitialViewState.mMobileSite = (0 == mViewportWidth); if (mRestoredScale > 0) { mRestoreState.mViewScale = mRestoredScale / 100.0f; mInitialViewState.mViewScale = mRestoredScale / 100.0f; if (mRestoredTextWrapScale > 0) { mRestoreState.mTextWrapScale = mRestoredTextWrapScale / 100.0f; mInitialViewState.mTextWrapScale = mRestoredTextWrapScale / 100.0f; } else { mRestoreState.mTextWrapScale = mRestoreState.mViewScale; mInitialViewState.mTextWrapScale = mInitialViewState.mViewScale; } } else { if (mViewportInitialScale > 0) { mRestoreState.mViewScale = mRestoreState.mTextWrapScale = mInitialViewState.mViewScale = mInitialViewState.mTextWrapScale = mViewportInitialScale / 100.0f; } else if (mViewportWidth > 0 && mViewportWidth < webViewWidth) { mRestoreState.mViewScale = mRestoreState.mTextWrapScale = mInitialViewState.mViewScale = mInitialViewState.mTextWrapScale = (float) webViewWidth / mViewportWidth; } else { mRestoreState.mTextWrapScale = adjust; mInitialViewState.mTextWrapScale = adjust; // 0 will trigger WebView to turn on zoom overview mode mRestoreState.mViewScale = 0; mInitialViewState.mViewScale = 0; } } Loading Loading @@ -2245,15 +2244,15 @@ final class WebViewCore { // mViewScale as 0 means it is in zoom overview mode. So we don't // know the exact scale. If mRestoredScale is non-zero, use it; // otherwise just use mTextWrapScale as the initial scale. data.mScale = mRestoreState.mViewScale == 0 data.mScale = mInitialViewState.mViewScale == 0 ? (mRestoredScale > 0 ? mRestoredScale / 100.0f : mRestoreState.mTextWrapScale) : mRestoreState.mViewScale; : mInitialViewState.mTextWrapScale) : mInitialViewState.mViewScale; if (DebugFlags.WEB_VIEW_CORE) { Log.v(LOGTAG, "setupViewport" + " mRestoredScale=" + mRestoredScale + " mViewScale=" + mRestoreState.mViewScale + " mTextWrapScale=" + mRestoreState.mTextWrapScale + " mViewScale=" + mInitialViewState.mViewScale + " mTextWrapScale=" + mInitialViewState.mTextWrapScale ); } data.mWidth = Math.round(webViewWidth / data.mScale); Loading @@ -2266,7 +2265,7 @@ final class WebViewCore { Math.round(mWebView.getViewHeight() / data.mScale) : mCurrentViewHeight * data.mWidth / viewportWidth; data.mTextWrapWidth = Math.round(webViewWidth / mRestoreState.mTextWrapScale); / mInitialViewState.mTextWrapScale); data.mIgnoreHeight = false; data.mAnchorX = data.mAnchorY = 0; // send VIEW_SIZE_CHANGED to the front of the queue so that we Loading core/java/android/webkit/ZoomManager.java +19 −16 Original line number Diff line number Diff line Loading @@ -720,15 +720,15 @@ class ZoomManager { } } public void updateZoomRange(WebViewCore.RestoreState restoreState, public void updateZoomRange(WebViewCore.ViewState viewState, int viewWidth, int minPrefWidth) { if (restoreState.mMinScale == 0) { if (restoreState.mMobileSite) { if (viewState.mMinScale == 0) { if (viewState.mMobileSite) { if (minPrefWidth > Math.max(0, viewWidth)) { mMinZoomScale = (float) viewWidth / minPrefWidth; mMinZoomScaleFixed = false; } else { mMinZoomScale = restoreState.mDefaultScale; mMinZoomScale = viewState.mDefaultScale; mMinZoomScaleFixed = true; } } else { Loading @@ -736,13 +736,13 @@ class ZoomManager { mMinZoomScaleFixed = false; } } else { mMinZoomScale = restoreState.mMinScale; mMinZoomScale = viewState.mMinScale; mMinZoomScaleFixed = true; } if (restoreState.mMaxScale == 0) { if (viewState.mMaxScale == 0) { mMaxZoomScale = mDefaultMaxZoomScale; } else { mMaxZoomScale = restoreState.mMaxScale; mMaxZoomScale = viewState.mMaxScale; } } Loading Loading @@ -776,18 +776,21 @@ class ZoomManager { } /** * Updates zoom values when Webkit restores a old picture. This method * Updates zoom values after Webkit completes the initial page layout. It * is called when visiting a page for the first time as well as when the * user navigates back to a page (in which case we may need to restore the * zoom levels to the state they were when you left the page). This method * should only be called from the UI thread's message handler. */ public void restoreZoomState(WebViewCore.DrawData drawData) { public void onFirstLayout(WebViewCore.DrawData drawData) { // precondition check assert drawData != null; assert drawData.mRestoreState != null; assert drawData.mViewState != null; assert mWebView.getSettings() != null; WebViewCore.RestoreState restoreState = drawData.mRestoreState; WebViewCore.ViewState viewState = drawData.mViewState; final Point viewSize = drawData.mViewPoint; updateZoomRange(restoreState, viewSize.x, drawData.mMinPrefWidth); updateZoomRange(viewState, viewSize.x, drawData.mMinPrefWidth); if (!mWebView.drawHistory()) { final float scale; Loading @@ -796,9 +799,9 @@ class ZoomManager { if (mInitialScale > 0) { scale = mInitialScale; reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale); } else if (restoreState.mViewScale > 0) { mTextWrapScale = restoreState.mTextWrapScale; scale = restoreState.mViewScale; } else if (viewState.mViewScale > 0) { mTextWrapScale = viewState.mTextWrapScale; scale = viewState.mViewScale; reflowText = false; } else { WebSettings settings = mWebView.getSettings(); Loading @@ -806,7 +809,7 @@ class ZoomManager { mInitialZoomOverview = true; scale = (float) mWebView.getViewWidth() / WebView.DEFAULT_VIEWPORT_WIDTH; } else { scale = restoreState.mTextWrapScale; scale = viewState.mTextWrapScale; } reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale); } Loading core/tests/coretests/src/android/webkit/ZoomManagerTest.java +12 −12 Original line number Diff line number Diff line Loading @@ -61,9 +61,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the minZoomScale has changed to be < the default float newDefaultScale = 1.50f; float minZoomScale = ZoomManager.DEFAULT_MIN_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState minRestoreState = new WebViewCore.RestoreState(); minRestoreState.mMinScale = minZoomScale - 0.1f; zoomManager.updateZoomRange(minRestoreState, 0, 0); WebViewCore.ViewState minViewState = new WebViewCore.ViewState(); minViewState.mMinScale = minZoomScale - 0.1f; zoomManager.updateZoomRange(minViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading @@ -72,9 +72,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the minZoomScale has changed to be > the default float newDefaultScale = 1.50f; float minZoomScale = ZoomManager.DEFAULT_MIN_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState minRestoreState = new WebViewCore.RestoreState(); minRestoreState.mMinScale = minZoomScale + 0.1f; zoomManager.updateZoomRange(minRestoreState, 0, 0); WebViewCore.ViewState minViewState = new WebViewCore.ViewState(); minViewState.mMinScale = minZoomScale + 0.1f; zoomManager.updateZoomRange(minViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading @@ -83,9 +83,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the maxZoomScale has changed to be < the default float newDefaultScale = 1.50f; float maxZoomScale = ZoomManager.DEFAULT_MAX_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState maxRestoreState = new WebViewCore.RestoreState(); maxRestoreState.mMaxScale = maxZoomScale - 0.1f; zoomManager.updateZoomRange(maxRestoreState, 0, 0); WebViewCore.ViewState maxViewState = new WebViewCore.ViewState(); maxViewState.mMaxScale = maxZoomScale - 0.1f; zoomManager.updateZoomRange(maxViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading @@ -94,9 +94,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the maxZoomScale has changed to be > the default float newDefaultScale = 1.50f; float maxZoomScale = ZoomManager.DEFAULT_MAX_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState maxRestoreState = new WebViewCore.RestoreState(); maxRestoreState.mMaxScale = maxZoomScale + 0.1f; zoomManager.updateZoomRange(maxRestoreState, 0, 0); WebViewCore.ViewState maxViewState = new WebViewCore.ViewState(); maxViewState.mMaxScale = maxZoomScale + 0.1f; zoomManager.updateZoomRange(maxViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading Loading
core/java/android/webkit/WebView.java +8 −10 Original line number Diff line number Diff line Loading @@ -6033,11 +6033,9 @@ public class WebView extends AbsoluteLayout spawnContentScrollTo(msg.arg1, msg.arg2); break; case UPDATE_ZOOM_RANGE: { WebViewCore.RestoreState restoreState = (WebViewCore.RestoreState) msg.obj; WebViewCore.ViewState viewState = (WebViewCore.ViewState) msg.obj; // mScrollX contains the new minPrefWidth mZoomManager.updateZoomRange(restoreState, getViewWidth(), restoreState.mScrollX); mZoomManager.updateZoomRange(viewState, getViewWidth(), viewState.mScrollX); break; } case NEW_PICTURE_MSG_ID: { Loading @@ -6051,12 +6049,12 @@ public class WebView extends AbsoluteLayout final WebViewCore.DrawData draw = (WebViewCore.DrawData) msg.obj; final Point viewSize = draw.mViewPoint; WebViewCore.RestoreState restoreState = draw.mRestoreState; boolean hasRestoreState = restoreState != null; if (hasRestoreState) { mZoomManager.restoreZoomState(draw); WebViewCore.ViewState viewState = draw.mViewState; boolean isPictureAfterFirstLayout = viewState != null; if (isPictureAfterFirstLayout) { mZoomManager.onFirstLayout(draw); if (!mDrawHistory) { setContentScrollTo(restoreState.mScrollX, restoreState.mScrollY); setContentScrollTo(viewState.mScrollX, viewState.mScrollY); // As we are on a new page, remove the WebTextView. This // is necessary for page loads driven by webkit, and in // particular when the user was on a password field, so Loading Loading @@ -6090,7 +6088,7 @@ public class WebView extends AbsoluteLayout if (draw.mFocusSizeChanged && inEditingMode()) { mFocusSizeChanged = true; } if (hasRestoreState) { if (isPictureAfterFirstLayout) { mViewManager.postReadyToDrawAll(); } break; Loading
core/java/android/webkit/WebViewCore.java +42 −43 Original line number Diff line number Diff line Loading @@ -1738,11 +1738,11 @@ final class WebViewCore { // Used to suspend drawing. private boolean mDrawIsPaused; // mRestoreState is set in didFirstLayout(), and reset in the next // webkitDraw after passing it to the UI thread. private RestoreState mRestoreState = null; // mInitialViewState is set by didFirstLayout() and then reset in the // next webkitDraw after passing the state to the UI thread. private ViewState mInitialViewState = null; static class RestoreState { static class ViewState { float mMinScale; float mMaxScale; float mViewScale; Loading @@ -1762,8 +1762,8 @@ final class WebViewCore { Point mViewPoint; Point mWidthHeight; int mMinPrefWidth; RestoreState mRestoreState; // only non-null if it is for the first // picture set after the first layout // only non-null if it is for the first picture set after the first layout ViewState mViewState; boolean mFocusSizeChanged; } Loading @@ -1788,9 +1788,9 @@ final class WebViewCore { : mViewportWidth), nativeGetContentMinPrefWidth()); } if (mRestoreState != null) { draw.mRestoreState = mRestoreState; mRestoreState = null; if (mInitialViewState != null) { draw.mViewState = mInitialViewState; mInitialViewState = null; } if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, "webkitDraw NEW_PICTURE_MSG_ID"); Message.obtain(mWebView.mPrivateHandler, Loading Loading @@ -2065,12 +2065,12 @@ final class WebViewCore { if (mWebView == null) return; boolean updateRestoreState = standardLoad || mRestoredScale > 0; setupViewport(updateRestoreState); boolean updateViewState = standardLoad || mRestoredScale > 0; setupViewport(updateViewState); // if updateRestoreState is true, ViewManager.postReadyToDrawAll() will // be called after the WebView restore the state. If updateRestoreState // be called after the WebView updates its state. If updateRestoreState // is false, start to draw now as it is ready. if (!updateRestoreState) { if (!updateViewState) { mWebView.mViewManager.postReadyToDrawAll(); } Loading @@ -2096,7 +2096,7 @@ final class WebViewCore { } } private void setupViewport(boolean updateRestoreState) { private void setupViewport(boolean updateViewState) { // set the viewport settings from WebKit setViewportSettingsFromNative(); Loading Loading @@ -2148,17 +2148,17 @@ final class WebViewCore { } // if mViewportWidth is 0, it means device-width, always update. if (mViewportWidth != 0 && !updateRestoreState) { RestoreState restoreState = new RestoreState(); restoreState.mMinScale = mViewportMinimumScale / 100.0f; restoreState.mMaxScale = mViewportMaximumScale / 100.0f; restoreState.mDefaultScale = adjust; if (mViewportWidth != 0 && !updateViewState) { ViewState viewState = new ViewState(); viewState.mMinScale = mViewportMinimumScale / 100.0f; viewState.mMaxScale = mViewportMaximumScale / 100.0f; viewState.mDefaultScale = adjust; // as mViewportWidth is not 0, it is not mobile site. restoreState.mMobileSite = false; viewState.mMobileSite = false; // for non-mobile site, we don't need minPrefWidth, set it as 0 restoreState.mScrollX = 0; viewState.mScrollX = 0; Message.obtain(mWebView.mPrivateHandler, WebView.UPDATE_ZOOM_RANGE, restoreState).sendToTarget(); WebView.UPDATE_ZOOM_RANGE, viewState).sendToTarget(); return; } Loading @@ -2179,32 +2179,31 @@ final class WebViewCore { } else { webViewWidth = Math.round(viewportWidth * mCurrentViewScale); } mRestoreState = new RestoreState(); mRestoreState.mMinScale = mViewportMinimumScale / 100.0f; mRestoreState.mMaxScale = mViewportMaximumScale / 100.0f; mRestoreState.mDefaultScale = adjust; mRestoreState.mScrollX = mRestoredX; mRestoreState.mScrollY = mRestoredY; mRestoreState.mMobileSite = (0 == mViewportWidth); mInitialViewState = new ViewState(); mInitialViewState.mMinScale = mViewportMinimumScale / 100.0f; mInitialViewState.mMaxScale = mViewportMaximumScale / 100.0f; mInitialViewState.mDefaultScale = adjust; mInitialViewState.mScrollX = mRestoredX; mInitialViewState.mScrollY = mRestoredY; mInitialViewState.mMobileSite = (0 == mViewportWidth); if (mRestoredScale > 0) { mRestoreState.mViewScale = mRestoredScale / 100.0f; mInitialViewState.mViewScale = mRestoredScale / 100.0f; if (mRestoredTextWrapScale > 0) { mRestoreState.mTextWrapScale = mRestoredTextWrapScale / 100.0f; mInitialViewState.mTextWrapScale = mRestoredTextWrapScale / 100.0f; } else { mRestoreState.mTextWrapScale = mRestoreState.mViewScale; mInitialViewState.mTextWrapScale = mInitialViewState.mViewScale; } } else { if (mViewportInitialScale > 0) { mRestoreState.mViewScale = mRestoreState.mTextWrapScale = mInitialViewState.mViewScale = mInitialViewState.mTextWrapScale = mViewportInitialScale / 100.0f; } else if (mViewportWidth > 0 && mViewportWidth < webViewWidth) { mRestoreState.mViewScale = mRestoreState.mTextWrapScale = mInitialViewState.mViewScale = mInitialViewState.mTextWrapScale = (float) webViewWidth / mViewportWidth; } else { mRestoreState.mTextWrapScale = adjust; mInitialViewState.mTextWrapScale = adjust; // 0 will trigger WebView to turn on zoom overview mode mRestoreState.mViewScale = 0; mInitialViewState.mViewScale = 0; } } Loading Loading @@ -2245,15 +2244,15 @@ final class WebViewCore { // mViewScale as 0 means it is in zoom overview mode. So we don't // know the exact scale. If mRestoredScale is non-zero, use it; // otherwise just use mTextWrapScale as the initial scale. data.mScale = mRestoreState.mViewScale == 0 data.mScale = mInitialViewState.mViewScale == 0 ? (mRestoredScale > 0 ? mRestoredScale / 100.0f : mRestoreState.mTextWrapScale) : mRestoreState.mViewScale; : mInitialViewState.mTextWrapScale) : mInitialViewState.mViewScale; if (DebugFlags.WEB_VIEW_CORE) { Log.v(LOGTAG, "setupViewport" + " mRestoredScale=" + mRestoredScale + " mViewScale=" + mRestoreState.mViewScale + " mTextWrapScale=" + mRestoreState.mTextWrapScale + " mViewScale=" + mInitialViewState.mViewScale + " mTextWrapScale=" + mInitialViewState.mTextWrapScale ); } data.mWidth = Math.round(webViewWidth / data.mScale); Loading @@ -2266,7 +2265,7 @@ final class WebViewCore { Math.round(mWebView.getViewHeight() / data.mScale) : mCurrentViewHeight * data.mWidth / viewportWidth; data.mTextWrapWidth = Math.round(webViewWidth / mRestoreState.mTextWrapScale); / mInitialViewState.mTextWrapScale); data.mIgnoreHeight = false; data.mAnchorX = data.mAnchorY = 0; // send VIEW_SIZE_CHANGED to the front of the queue so that we Loading
core/java/android/webkit/ZoomManager.java +19 −16 Original line number Diff line number Diff line Loading @@ -720,15 +720,15 @@ class ZoomManager { } } public void updateZoomRange(WebViewCore.RestoreState restoreState, public void updateZoomRange(WebViewCore.ViewState viewState, int viewWidth, int minPrefWidth) { if (restoreState.mMinScale == 0) { if (restoreState.mMobileSite) { if (viewState.mMinScale == 0) { if (viewState.mMobileSite) { if (minPrefWidth > Math.max(0, viewWidth)) { mMinZoomScale = (float) viewWidth / minPrefWidth; mMinZoomScaleFixed = false; } else { mMinZoomScale = restoreState.mDefaultScale; mMinZoomScale = viewState.mDefaultScale; mMinZoomScaleFixed = true; } } else { Loading @@ -736,13 +736,13 @@ class ZoomManager { mMinZoomScaleFixed = false; } } else { mMinZoomScale = restoreState.mMinScale; mMinZoomScale = viewState.mMinScale; mMinZoomScaleFixed = true; } if (restoreState.mMaxScale == 0) { if (viewState.mMaxScale == 0) { mMaxZoomScale = mDefaultMaxZoomScale; } else { mMaxZoomScale = restoreState.mMaxScale; mMaxZoomScale = viewState.mMaxScale; } } Loading Loading @@ -776,18 +776,21 @@ class ZoomManager { } /** * Updates zoom values when Webkit restores a old picture. This method * Updates zoom values after Webkit completes the initial page layout. It * is called when visiting a page for the first time as well as when the * user navigates back to a page (in which case we may need to restore the * zoom levels to the state they were when you left the page). This method * should only be called from the UI thread's message handler. */ public void restoreZoomState(WebViewCore.DrawData drawData) { public void onFirstLayout(WebViewCore.DrawData drawData) { // precondition check assert drawData != null; assert drawData.mRestoreState != null; assert drawData.mViewState != null; assert mWebView.getSettings() != null; WebViewCore.RestoreState restoreState = drawData.mRestoreState; WebViewCore.ViewState viewState = drawData.mViewState; final Point viewSize = drawData.mViewPoint; updateZoomRange(restoreState, viewSize.x, drawData.mMinPrefWidth); updateZoomRange(viewState, viewSize.x, drawData.mMinPrefWidth); if (!mWebView.drawHistory()) { final float scale; Loading @@ -796,9 +799,9 @@ class ZoomManager { if (mInitialScale > 0) { scale = mInitialScale; reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale); } else if (restoreState.mViewScale > 0) { mTextWrapScale = restoreState.mTextWrapScale; scale = restoreState.mViewScale; } else if (viewState.mViewScale > 0) { mTextWrapScale = viewState.mTextWrapScale; scale = viewState.mViewScale; reflowText = false; } else { WebSettings settings = mWebView.getSettings(); Loading @@ -806,7 +809,7 @@ class ZoomManager { mInitialZoomOverview = true; scale = (float) mWebView.getViewWidth() / WebView.DEFAULT_VIEWPORT_WIDTH; } else { scale = restoreState.mTextWrapScale; scale = viewState.mTextWrapScale; } reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale); } Loading
core/tests/coretests/src/android/webkit/ZoomManagerTest.java +12 −12 Original line number Diff line number Diff line Loading @@ -61,9 +61,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the minZoomScale has changed to be < the default float newDefaultScale = 1.50f; float minZoomScale = ZoomManager.DEFAULT_MIN_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState minRestoreState = new WebViewCore.RestoreState(); minRestoreState.mMinScale = minZoomScale - 0.1f; zoomManager.updateZoomRange(minRestoreState, 0, 0); WebViewCore.ViewState minViewState = new WebViewCore.ViewState(); minViewState.mMinScale = minZoomScale - 0.1f; zoomManager.updateZoomRange(minViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading @@ -72,9 +72,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the minZoomScale has changed to be > the default float newDefaultScale = 1.50f; float minZoomScale = ZoomManager.DEFAULT_MIN_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState minRestoreState = new WebViewCore.RestoreState(); minRestoreState.mMinScale = minZoomScale + 0.1f; zoomManager.updateZoomRange(minRestoreState, 0, 0); WebViewCore.ViewState minViewState = new WebViewCore.ViewState(); minViewState.mMinScale = minZoomScale + 0.1f; zoomManager.updateZoomRange(minViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading @@ -83,9 +83,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the maxZoomScale has changed to be < the default float newDefaultScale = 1.50f; float maxZoomScale = ZoomManager.DEFAULT_MAX_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState maxRestoreState = new WebViewCore.RestoreState(); maxRestoreState.mMaxScale = maxZoomScale - 0.1f; zoomManager.updateZoomRange(maxRestoreState, 0, 0); WebViewCore.ViewState maxViewState = new WebViewCore.ViewState(); maxViewState.mMaxScale = maxZoomScale - 0.1f; zoomManager.updateZoomRange(maxViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading @@ -94,9 +94,9 @@ public class ZoomManagerTest extends AndroidTestCase { // test the case where the maxZoomScale has changed to be > the default float newDefaultScale = 1.50f; float maxZoomScale = ZoomManager.DEFAULT_MAX_ZOOM_SCALE_FACTOR * newDefaultScale; WebViewCore.RestoreState maxRestoreState = new WebViewCore.RestoreState(); maxRestoreState.mMaxScale = maxZoomScale + 0.1f; zoomManager.updateZoomRange(maxRestoreState, 0, 0); WebViewCore.ViewState maxViewState = new WebViewCore.ViewState(); maxViewState.mMaxScale = maxZoomScale + 0.1f; zoomManager.updateZoomRange(maxViewState, 0, 0); zoomManager.updateDefaultZoomDensity(newDefaultScale); defaultScaleTest(newDefaultScale); } Loading