Merge "Set initial view scale to be at least overview scale."
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 17f0a97..b7d20b4 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1884,6 +1884,7 @@
         int mScrollX;
         int mScrollY;
         boolean mMobileSite;
+        boolean mIsRestored;
     }
 
     static class DrawData {
@@ -2285,6 +2286,7 @@
         mInitialViewState.mScrollY = mRestoredY;
         mInitialViewState.mMobileSite = (0 == mViewportWidth);
         if (mRestoredScale > 0) {
+            mInitialViewState.mIsRestored = true;
             mInitialViewState.mViewScale = mRestoredScale / 100.0f;
             if (mRestoredTextWrapScale > 0) {
                 mInitialViewState.mTextWrapScale = mRestoredTextWrapScale / 100.0f;
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 69db6b2..b94dc3b 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -260,12 +260,7 @@
     public final float getReadingLevelScale() {
         // The reading scale is at least 0.5f apart from the overview scale.
         final float MIN_SCALE_DIFF = 0.5f;
-        final float zoomOverviewScale = getZoomOverviewScale();
-        if (zoomOverviewScale > DEFAULT_READING_LEVEL_SCALE) {
-            return Math.min(DEFAULT_READING_LEVEL_SCALE,
-                zoomOverviewScale - MIN_SCALE_DIFF);
-        }
-        return Math.max(zoomOverviewScale + MIN_SCALE_DIFF,
+        return Math.max(getZoomOverviewScale() + MIN_SCALE_DIFF,
             DEFAULT_READING_LEVEL_SCALE);
     }
 
@@ -864,32 +859,33 @@
 
         if (!mWebView.drawHistory()) {
             float scale;
-            final boolean reflowText;
-            WebSettings settings = mWebView.getSettings();
+            final float overviewScale = getZoomOverviewScale();
 
             if (mInitialScale > 0) {
                 scale = mInitialScale;
-                reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
             } else if (viewState.mViewScale > 0) {
                 mTextWrapScale = viewState.mTextWrapScale;
                 scale = viewState.mViewScale;
-                reflowText = false;
             } else {
-                scale = getZoomOverviewScale();
-                if (settings.getUseWideViewPort()
-                    && settings.getLoadWithOverviewMode()) {
-                    mInitialZoomOverview = true;
-                } else {
+                scale = overviewScale;
+                WebSettings settings = mWebView.getSettings();
+                if (!settings.getUseWideViewPort()
+                    || !settings.getLoadWithOverviewMode()) {
                     scale = Math.max(viewState.mTextWrapScale, scale);
-                    mInitialZoomOverview = !exceedsMinScaleIncrement(scale, getZoomOverviewScale());
                 }
                 if (settings.isNarrowColumnLayout() && settings.getUseFixedViewport()) {
                     // When first layout, reflow using the reading level scale to avoid
                     // reflow when double tapped.
                     mTextWrapScale = getReadingLevelScale();
                 }
+            }
+            boolean reflowText = false;
+            if (!viewState.mIsRestored) {
+                scale = Math.max(scale, overviewScale);
+                mTextWrapScale = Math.max(mTextWrapScale, overviewScale);
                 reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
             }
+            mInitialZoomOverview = !exceedsMinScaleIncrement(scale, overviewScale);
             setZoomScale(scale, reflowText);
 
             // update the zoom buttons as the scale can be changed