diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index d018af05137e9..39b0a635fd8aa 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -499,7 +499,7 @@ public class WebView extends AbsoluteLayout static final int UPDATE_TEXT_ENTRY_MSG_ID = 15; static final int WEBCORE_INITIALIZED_MSG_ID = 16; static final int UPDATE_TEXTFIELD_TEXT_MSG_ID = 17; - static final int FIND_AGAIN = 18; + static final int UPDATE_ZOOM_RANGE = 18; static final int MOVE_OUT_OF_PLUGIN = 19; static final int CLEAR_TEXT_ENTRY = 20; static final int UPDATE_TEXT_SELECTION_MSG_ID = 21; @@ -517,6 +517,7 @@ public class WebView extends AbsoluteLayout static final int IMMEDIATE_REPAINT_MSG_ID = 32; static final int SET_ROOT_LAYER_MSG_ID = 33; static final int RETURN_LABEL = 34; + static final int FIND_AGAIN = 35; static final String[] HandlerDebugString = { "REMEMBER_PASSWORD", // = 1; @@ -536,7 +537,7 @@ public class WebView extends AbsoluteLayout "UPDATE_TEXT_ENTRY_MSG_ID", // = 15; "WEBCORE_INITIALIZED_MSG_ID", // = 16; "UPDATE_TEXTFIELD_TEXT_MSG_ID", // = 17; - "FIND_AGAIN", // = 18; + "UPDATE_ZOOM_RANGE", // = 18; "MOVE_OUT_OF_PLUGIN", // = 19; "CLEAR_TEXT_ENTRY", // = 20; "UPDATE_TEXT_SELECTION_MSG_ID", // = 21; @@ -552,7 +553,8 @@ public class WebView extends AbsoluteLayout "DOM_FOCUS_CHANGED", // = 31; "IMMEDIATE_REPAINT_MSG_ID", // = 32; "SET_ROOT_LAYER_MSG_ID", // = 33; - "RETURN_LABEL" // = 34; + "RETURN_LABEL", // = 34; + "FIND_AGAIN" // = 35; }; // If the site doesn't use the viewport meta tag to specify the viewport, @@ -5587,7 +5589,7 @@ public class WebView extends AbsoluteLayout // exclude INVAL_RECT_MSG_ID since it is frequently output if (DebugFlags.WEB_VIEW && msg.what != INVAL_RECT_MSG_ID) { Log.v(LOGTAG, msg.what < REMEMBER_PASSWORD || msg.what - > RETURN_LABEL ? Integer.toString(msg.what) + > FIND_AGAIN ? Integer.toString(msg.what) : HandlerDebugString[msg.what - REMEMBER_PASSWORD]); } if (mWebViewCore == null) { @@ -5683,6 +5685,14 @@ public class WebView extends AbsoluteLayout case SPAWN_SCROLL_TO_MSG_ID: spawnContentScrollTo(msg.arg1, msg.arg2); break; + case UPDATE_ZOOM_RANGE: { + WebViewCore.RestoreState restoreState + = (WebViewCore.RestoreState) msg.obj; + // mScrollX contains the new minPrefWidth + updateZoomRange(restoreState, getViewWidth(), + restoreState.mScrollX, false); + break; + } case NEW_PICTURE_MSG_ID: { WebSettings settings = mWebViewCore.getSettings(); // called for new content @@ -5695,32 +5705,8 @@ public class WebView extends AbsoluteLayout boolean hasRestoreState = restoreState != null; if (hasRestoreState) { mInZoomOverview = false; - if (restoreState.mMinScale == 0) { - if (restoreState.mMobileSite) { - if (draw.mMinPrefWidth > - Math.max(0, draw.mViewPoint.x)) { - mMinZoomScale = (float) viewWidth - / draw.mMinPrefWidth; - mMinZoomScaleFixed = false; - mInZoomOverview = useWideViewport && - settings.getLoadWithOverviewMode(); - } else { - mMinZoomScale = restoreState.mDefaultScale; - mMinZoomScaleFixed = true; - } - } else { - mMinZoomScale = DEFAULT_MIN_ZOOM_SCALE; - mMinZoomScaleFixed = false; - } - } else { - mMinZoomScale = restoreState.mMinScale; - mMinZoomScaleFixed = true; - } - if (restoreState.mMaxScale == 0) { - mMaxZoomScale = DEFAULT_MAX_ZOOM_SCALE; - } else { - mMaxZoomScale = restoreState.mMaxScale; - } + updateZoomRange(restoreState, viewSize.x, + draw.mMinPrefWidth, true); if (mInitialScaleInPercent > 0) { setNewZoomScale(mInitialScaleInPercent / 100.0f, mInitialScaleInPercent != mTextWrapScale * 100, @@ -6411,6 +6397,37 @@ public class WebView extends AbsoluteLayout new InvokeListBox(array, enabledArray, selectedArray)); } + private void updateZoomRange(WebViewCore.RestoreState restoreState, + int viewWidth, int minPrefWidth, boolean updateZoomOverview) { + if (restoreState.mMinScale == 0) { + if (restoreState.mMobileSite) { + if (minPrefWidth > Math.max(0, viewWidth)) { + mMinZoomScale = (float) viewWidth / minPrefWidth; + mMinZoomScaleFixed = false; + if (updateZoomOverview) { + WebSettings settings = getSettings(); + mInZoomOverview = settings.getUseWideViewPort() && + settings.getLoadWithOverviewMode(); + } + } else { + mMinZoomScale = restoreState.mDefaultScale; + mMinZoomScaleFixed = true; + } + } else { + mMinZoomScale = DEFAULT_MIN_ZOOM_SCALE; + mMinZoomScaleFixed = false; + } + } else { + mMinZoomScale = restoreState.mMinScale; + mMinZoomScaleFixed = true; + } + if (restoreState.mMaxScale == 0) { + mMaxZoomScale = DEFAULT_MAX_ZOOM_SCALE; + } else { + mMaxZoomScale = restoreState.mMaxScale; + } + } + /* * Request a dropdown menu for a listbox with single selection or a single *