OSDN Git Service

Fine tune the zoom overview behavior.
authorShimeng (Simon) Wang <swang@google.com>
Wed, 16 Feb 2011 22:52:13 +0000 (14:52 -0800)
committerShimeng (Simon) Wang <swang@google.com>
Thu, 17 Feb 2011 17:32:23 +0000 (09:32 -0800)
issue: 3451476
Change-Id: Idc267979ae0b33f4f2fbcb9aab7739bdd1dc1eff

core/java/android/webkit/WebView.java
core/java/android/webkit/ZoomManager.java

index 69e658f..4ae2ee2 100644 (file)
@@ -3302,7 +3302,7 @@ public class WebView extends AbsoluteLayout
             }
             mPageThatNeedsToSlideTitleBarOffScreen = null;
         }
-
+        mZoomManager.onPageFinished(url);
         injectAccessibilityForUrl(url);
     }
 
index de624e0..9d472e0 100644 (file)
@@ -875,12 +875,21 @@ class ZoomManager {
         // fit the content width to the current view for the first new picture
         // after first layout.
         boolean scaleHasDiff = exceedsMinScaleIncrement(newZoomOverviewScale, mActualScale);
-        if (!mWebView.drawHistory() && mInitialZoomOverview && scaleHasDiff) {
+        // Make sure the actual scale is no less than zoom overview scale.
+        boolean scaleLessThanOverview =
+                (newZoomOverviewScale - mActualScale) >= MINIMUM_SCALE_INCREMENT;
+        // Make sure mobile sites are correctly handled since mobile site will
+        // change content width after rotating.
+        boolean mobileSiteInOverview = mInZoomOverview &&
+                !exceedsMinScaleIncrement(newZoomOverviewScale, 1.0f);
+        if (!mWebView.drawHistory() &&
+                (mInitialZoomOverview || scaleLessThanOverview || mobileSiteInOverview) &&
+                scaleHasDiff) {
             mInitialZoomOverview = false;
             setZoomScale(newZoomOverviewScale, !willScaleTriggerZoom(mTextWrapScale) &&
                 !mWebView.getSettings().getUseFixedViewport());
-        } else if (scaleHasDiff) {
-            mInZoomOverview = false;
+        } else {
+            mInZoomOverview = !scaleHasDiff;
         }
     }
 
@@ -1061,4 +1070,12 @@ class ZoomManager {
     public void setHardwareAccelerated() {
         mHardwareAccelerated = true;
     }
+
+    /**
+     * OnPageFinished called by webview when a page is fully loaded.
+     */
+    /* package*/ void onPageFinished(String url) {
+        // Turn off initial zoom overview flag when a page is fully loaded.
+        mInitialZoomOverview = false;
+    }
 }