am a6708c6a: Merge "Add setting for configuring zoom level on double-tap." into ics-mr0

* commit 'a6708c6a462d2a30e51e7ded2559a4054cb651fc':
  Add setting for configuring zoom level on double-tap.
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 9c44138..f1c2bde 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -211,6 +211,7 @@
     private ZoomDensity     mDefaultZoom = ZoomDensity.MEDIUM;
     private RenderPriority  mRenderPriority = RenderPriority.NORMAL;
     private int             mOverrideCacheMode = LOAD_DEFAULT;
+    private int             mDoubleTapZoom = 100;
     private boolean         mSaveFormData = true;
     private boolean         mAutoFillEnabled = false;
     private boolean         mSavePassword = true;
@@ -769,6 +770,27 @@
     }
 
     /**
+     * Set the double-tap zoom of the page in percent. Default is 100.
+     * @param doubleTapZoom A percent value for increasing or decreasing the double-tap zoom.
+     * @hide
+     */
+    public void setDoubleTapZoom(int doubleTapZoom) {
+        if (mDoubleTapZoom != doubleTapZoom) {
+            mDoubleTapZoom = doubleTapZoom;
+            mWebView.updateDoubleTapZoom();
+        }
+    }
+
+    /**
+     * Get the double-tap zoom of the page in percent.
+     * @return A percent value describing the double-tap zoom.
+     * @hide
+     */
+    public int getDoubleTapZoom() {
+        return mDoubleTapZoom;
+    }
+
+    /**
      * Set the default zoom density of the page. This should be called from UI
      * thread.
      * @param zoom A ZoomDensity value
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 9648cd0..8da1820 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -2986,6 +2986,13 @@
         return false;
     }
 
+    /**
+     * Update the double-tap zoom.
+     */
+    /* package */ void updateDoubleTapZoom() {
+        mZoomManager.updateDoubleTapZoom();
+    }
+
     private int computeRealHorizontalScrollRange() {
         if (mDrawHistory) {
             return mHistoryWidth;
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 7f526e7..206142a 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -145,11 +145,11 @@
     private float mInvDefaultScale;
 
     /*
-     * The scale factor that is used to determine the zoom level for reading text.
-     * The value is initially set to equal the display density.
-     * TODO: Support changing this in WebSettings
+     * The logical density of the display. This is a scaling factor for the
+     * Density Independent Pixel unit, where one DIP is one pixel on an
+     * approximately 160 dpi screen (see android.util.DisplayMetrics.density)
      */
-    private float mReadingLevelScale;
+    private float mDisplayDensity;
 
     /*
      * The scale factor that is used as the minimum increment when going from
@@ -233,11 +233,11 @@
     public void init(float density) {
         assert density > 0;
 
+        mDisplayDensity = density;
         setDefaultZoomScale(density);
         mActualScale = density;
         mInvActualScale = 1 / density;
-        mReadingLevelScale = density;
-        mTextWrapScale = density;
+        mTextWrapScale = getReadingLevelScale();
     }
 
     /**
@@ -310,8 +310,11 @@
         return mInitialScale > 0 ? mInitialScale : mDefaultScale;
     }
 
+    /**
+     * Returns the zoom scale used for reading text on a double-tap.
+     */
     public final float getReadingLevelScale() {
-        return mReadingLevelScale;
+        return mDisplayDensity * mWebView.getSettings().getDoubleTapZoom() / 100.0f;
     }
 
     public final float getInvDefaultScale() {
@@ -510,6 +513,13 @@
         return mZoomScale != 0 || mInHWAcceleratedZoom;
     }
 
+    public void updateDoubleTapZoom() {
+        if (mInZoomOverview) {
+            mTextWrapScale = getReadingLevelScale();
+            refreshZoomScale(true);
+        }
+    }
+
     public void refreshZoomScale(boolean reflowText) {
         setZoomScale(mActualScale, reflowText, true);
     }