summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorShimeng (Simon) Wang <swang@google.com>2010-08-11 15:42:00 -0700
committerShimeng (Simon) Wang <swang@google.com>2010-08-13 13:52:42 -0700
commitdde858cbb6dd96e621616b20bb5a6866565b4874 (patch)
tree63f29170314499b4ca74c27b02c2840767fd8c25 /core
parent04ba60895adb80e4d542e22fae56e147b5eeebdd (diff)
downloadframeworks_base-dde858cbb6dd96e621616b20bb5a6866565b4874.zip
frameworks_base-dde858cbb6dd96e621616b20bb5a6866565b4874.tar.gz
frameworks_base-dde858cbb6dd96e621616b20bb5a6866565b4874.tar.bz2
Change scale for large screen reading when double tapped.
This happens when default and overview scales have not much difference. This solves the double tap issue for large screen devices, where overview and default scale are the same. The code works well with phone device as well. Change-Id: Iac7f66369d58a152de8de7025b326d1672da30d4
Diffstat (limited to 'core')
-rw-r--r--core/java/android/webkit/WebView.java6
-rw-r--r--core/java/android/webkit/ZoomManager.java26
2 files changed, 22 insertions, 10 deletions
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 32009be..9f60f44 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -3557,11 +3557,11 @@ public class WebView extends AbsoluteLayout
InputMethodManager imm = (InputMethodManager)
getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
- // bring it back to the default scale so that user can enter text
- boolean zoom = mZoomManager.getScale() < mZoomManager.getDefaultScale();
+ // bring it back to the reading level scale so that user can enter text
+ boolean zoom = mZoomManager.getScale() < mZoomManager.getReadingLevelScale();
if (zoom) {
mZoomManager.setZoomCenter(mLastTouchX, mLastTouchY);
- mZoomManager.setZoomScale(mZoomManager.getDefaultScale(), false);
+ mZoomManager.setZoomScale(mZoomManager.getReadingLevelScale(), false);
}
if (isTextView) {
rebuildWebTextView();
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 7f7f46e..8033c9c 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -56,6 +56,13 @@ class ZoomManager {
private ZoomControlExternal mExternalZoomControl;
/*
+ * For large screen devices, the defaultScale usually set to 1.0 and
+ * equal to the overview scale, to differentiate the zoom level for double tapping,
+ * a minimum reading level scale is used.
+ */
+ private static final float MIN_READING_LEVEL_SCALE = 1.5f;
+
+ /*
* The scale factors that determine the upper and lower bounds for the
* default zoom scale.
*/
@@ -245,6 +252,10 @@ class ZoomManager {
return mDefaultScale;
}
+ public final float getReadingLevelScale() {
+ return Math.max(mDefaultScale, MIN_READING_LEVEL_SCALE);
+ }
+
public final float getInvDefaultScale() {
return mInvDefaultScale;
}
@@ -337,9 +348,9 @@ class ZoomManager {
mInitialScrollX = mWebView.getScrollX();
mInitialScrollY = mWebView.getScrollY();
- // snap to DEFAULT_SCALE if it is close
- if (!exceedsMinScaleIncrement(scale, mDefaultScale)) {
- scale = mDefaultScale;
+ // snap to reading level scale if it is close
+ if (!exceedsMinScaleIncrement(scale, getReadingLevelScale())) {
+ scale = getReadingLevelScale();
}
setZoomScale(scale, reflowText);
@@ -535,7 +546,7 @@ class ZoomManager {
} else if (!mInZoomOverview) {
zoomToOverview();
} else {
- zoomToDefaultLevel();
+ zoomToReadingLevel();
}
}
@@ -563,7 +574,8 @@ class ZoomManager {
startZoomAnimation(getZoomOverviewScale(), true);
}
- private void zoomToDefaultLevel() {
+ private void zoomToReadingLevel() {
+ final float readingScale = getReadingLevelScale();
int left = mWebView.nativeGetBlockLeftEdge(mAnchorX, mAnchorY, mActualScale);
if (left != WebView.NO_LEFTEDGE) {
// add a 5pt padding to the left edge.
@@ -572,13 +584,13 @@ class ZoomManager {
// Re-calculate the zoom center so that the new scroll x will be
// on the left edge.
if (viewLeft > 0) {
- mZoomCenterX = viewLeft * mDefaultScale / (mDefaultScale - mActualScale);
+ mZoomCenterX = viewLeft * readingScale / (readingScale - mActualScale);
} else {
mWebView.scrollBy(viewLeft, 0);
mZoomCenterX = 0;
}
}
- startZoomAnimation(mDefaultScale, true);
+ startZoomAnimation(readingScale, true);
}
public void updateMultiTouchSupport(Context context) {