diff options
| author | Shimeng (Simon) Wang <swang@google.com> | 2010-08-11 15:42:00 -0700 |
|---|---|---|
| committer | Shimeng (Simon) Wang <swang@google.com> | 2010-08-13 13:52:42 -0700 |
| commit | dde858cbb6dd96e621616b20bb5a6866565b4874 (patch) | |
| tree | 63f29170314499b4ca74c27b02c2840767fd8c25 /core | |
| parent | 04ba60895adb80e4d542e22fae56e147b5eeebdd (diff) | |
| download | frameworks_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.java | 6 | ||||
| -rw-r--r-- | core/java/android/webkit/ZoomManager.java | 26 |
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) { |
