From bb99e28cd69c7a3ab355873130242373282295a5 Mon Sep 17 00:00:00 2001 From: Mangesh Ghiware Date: Fri, 21 Oct 2011 10:53:29 -0700 Subject: Fix issue# 5492404: Reading level check thread error. Remove access to WebSettings from getReadingLevelScale() by saving the double-tap zoom scale factor in ZoomManager. WebSettings can only be accessed in the UI thread. Change-Id: Ic7289bf3c14d800797f2e85546a088a9071e0468 --- core/java/android/webkit/WebSettings.java | 2 +- core/java/android/webkit/WebView.java | 4 ++-- core/java/android/webkit/ZoomManager.java | 14 +++++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java index f1c2bdead14d..f240a2e243b5 100644 --- a/core/java/android/webkit/WebSettings.java +++ b/core/java/android/webkit/WebSettings.java @@ -777,7 +777,7 @@ public class WebSettings { public void setDoubleTapZoom(int doubleTapZoom) { if (mDoubleTapZoom != doubleTapZoom) { mDoubleTapZoom = doubleTapZoom; - mWebView.updateDoubleTapZoom(); + mWebView.updateDoubleTapZoom(doubleTapZoom); } } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 71ba7ebfb9a5..a814b128b5ca 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -2995,8 +2995,8 @@ public class WebView extends AbsoluteLayout /** * Update the double-tap zoom. */ - /* package */ void updateDoubleTapZoom() { - mZoomManager.updateDoubleTapZoom(); + /* package */ void updateDoubleTapZoom(int doubleTapZoom) { + mZoomManager.updateDoubleTapZoom(doubleTapZoom); } private int computeRealHorizontalScrollRange() { diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index 9151fdd20d29..7d3cf8ea74d6 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -151,6 +151,12 @@ class ZoomManager { */ private float mDisplayDensity; + /* + * The factor that is used to tweak the zoom scale on a double-tap, + * and can be changed via WebSettings. Range is from 0.75f to 1.25f. + */ + private float mDoubleTapZoomFactor = 1.0f; + /* * The scale factor that is used as the minimum increment when going from * overview to reading level on a double tap. @@ -314,10 +320,7 @@ class ZoomManager { * Returns the zoom scale used for reading text on a double-tap. */ public final float getReadingLevelScale() { - WebSettings settings = mWebView.getSettings(); - final float doubleTapZoomFactor = settings != null - ? settings.getDoubleTapZoom() / 100.f : 1.0f; - return mDisplayDensity * doubleTapZoomFactor; + return mDisplayDensity * mDoubleTapZoomFactor; } public final float getInvDefaultScale() { @@ -516,8 +519,9 @@ class ZoomManager { return mZoomScale != 0 || mInHWAcceleratedZoom; } - public void updateDoubleTapZoom() { + public void updateDoubleTapZoom(int doubleTapZoom) { if (mInZoomOverview) { + mDoubleTapZoomFactor = doubleTapZoom / 100.0f; mTextWrapScale = getReadingLevelScale(); refreshZoomScale(true); } -- cgit v1.2.3-59-g8ed1b