diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index fea427d17f68b..4dbca23c92774 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -1025,7 +1025,7 @@ class BrowserFrame extends Handler { } private float density() { - return mContext.getResources().getDisplayMetrics().density; + return WebViewCore.getFixedDisplayDensity(mContext); } /** diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index 1c47615376be4..d68511c453350 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -1664,7 +1664,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc mTouchSlopSquare = slop * slop; slop = configuration.getScaledDoubleTapSlop(); mDoubleTapSlopSquare = slop * slop; - final float density = mContext.getResources().getDisplayMetrics().density; + final float density = WebViewCore.getFixedDisplayDensity(mContext); // use one line height, 16 based on our current default font, for how // far we allow a touch be away from the edge of a link mNavSlop = (int) (16 * density); @@ -1809,7 +1809,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } /* package */ void adjustDefaultZoomDensity(int zoomDensity) { - final float density = mContext.getResources().getDisplayMetrics().density + final float density = WebViewCore.getFixedDisplayDensity(mContext) * 100 / zoomDensity; updateDefaultZoomDensity(density); } diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 33fe834dda21f..3fb3ec62c4355 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -2479,6 +2479,13 @@ public final class WebViewCore { setupViewport(true); } + static float getFixedDisplayDensity(Context context) { + // We make bad assumptions about multiplying and dividing density by 100, + // force them to be true with this hack + float density = context.getResources().getDisplayMetrics().density; + return ((int) (density * 100)) / 100.0f; + } + private void setupViewport(boolean updateViewState) { if (mWebViewClassic == null || mSettings == null) { // We've been destroyed or are being destroyed, return early @@ -2523,14 +2530,13 @@ public final class WebViewCore { // adjust the default scale to match the densityDpi float adjust = 1.0f; if (mViewportDensityDpi == -1) { - adjust = mContext.getResources().getDisplayMetrics().density; + adjust = getFixedDisplayDensity(mContext); } else if (mViewportDensityDpi > 0) { adjust = (float) mContext.getResources().getDisplayMetrics().densityDpi / mViewportDensityDpi; + adjust = ((int) (adjust * 100)) / 100.0f; } - // We make bad assumptions about multiplying and dividing by 100, force - // them to be true with this hack - adjust = ((int) (adjust * 100)) / 100.0f; + // Remove any update density messages in flight. // If the density is indeed different from WebView's default scale, // a new message will be queued.