Merge "Keep min/max zoom scale in proportion when zoom density changes." into honeycomb
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 9a050c5..b47fe86 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -232,12 +232,26 @@
     }
 
     private void setDefaultZoomScale(float defaultScale) {
+        final float originalDefault = mDefaultScale;
         mDefaultScale = defaultScale;
         mInvDefaultScale = 1 / defaultScale;
         mDefaultMaxZoomScale = defaultScale * DEFAULT_MAX_ZOOM_SCALE_FACTOR;
         mDefaultMinZoomScale = defaultScale * DEFAULT_MIN_ZOOM_SCALE_FACTOR;
-        mMaxZoomScale = mDefaultMaxZoomScale;
-        mMinZoomScale = mDefaultMinZoomScale;
+        if (originalDefault > 0.0 && mMaxZoomScale > 0.0) {
+            // Keeps max zoom scale when zoom density changes.
+            mMaxZoomScale = defaultScale / originalDefault * mMaxZoomScale;
+        } else {
+            mMaxZoomScale = mDefaultMaxZoomScale;
+        }
+        if (originalDefault > 0.0 && mMinZoomScale > 0.0) {
+            // Keeps min zoom scale when zoom density changes.
+            mMinZoomScale = defaultScale / originalDefault * mMinZoomScale;
+        } else {
+            mMinZoomScale = mDefaultMinZoomScale;
+        }
+        if (!exceedsMinScaleIncrement(mMinZoomScale, mMaxZoomScale)) {
+            mMaxZoomScale = mMinZoomScale;
+        }
     }
 
     public final float getScale() {
@@ -468,7 +482,7 @@
             mTextWrapScale = scale;
         }
 
-        if (scale != mActualScale || force) {
+        if (exceedsMinScaleIncrement(scale, mActualScale) || force) {
             float oldScale = mActualScale;
             float oldInvScale = mInvActualScale;