diff options
| -rw-r--r-- | core/java/android/webkit/WebSettings.java | 14 | ||||
| -rw-r--r-- | core/java/android/webkit/WebView.java | 2 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 2 | ||||
| -rw-r--r-- | core/java/android/webkit/ZoomManager.java | 10 |
4 files changed, 23 insertions, 5 deletions
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java index 6e89a8be91e8..abd1e5d6e6b8 100644 --- a/core/java/android/webkit/WebSettings.java +++ b/core/java/android/webkit/WebSettings.java @@ -22,6 +22,7 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Handler; import android.os.Message; +import android.util.DisplayMetrics; import android.util.EventLog; import java.util.Locale; @@ -176,6 +177,7 @@ public class WebSettings { private boolean mJavaScriptCanOpenWindowsAutomatically = false; private boolean mUseDoubleTree = false; private boolean mUseWideViewport = false; + private boolean mUseFixedViewport = false; private boolean mSupportMultipleWindows = false; private boolean mShrinksStandaloneImagesToFit = false; private long mMaximumDecodedImageSize = 0; // 0 means default @@ -318,6 +320,11 @@ public class WebSettings { mDefaultTextEncoding = context.getString(com.android.internal. R.string.default_text_encoding); + // Detect tablet device for fixed viewport mode. + final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); + mUseFixedViewport = (metrics.density == 1.0f + && (metrics.widthPixels >= 800 ||metrics.heightPixels >= 800)); + if (sLockForLocaleSettings == null) { sLockForLocaleSettings = new Object(); sLocale = Locale.getDefault(); @@ -1470,6 +1477,13 @@ public class WebSettings { } /** + * Returns whether to use fixed viewport. + */ + /* package */ boolean getUseFixedViewport() { + return mUseFixedViewport; + } + + /** * Returns whether private browsing is enabled. */ /* package */ boolean isPrivateBrowsingEnabled() { diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index e7ba24584fb1..a2628ecd8b7e 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -651,7 +651,7 @@ public class WebView extends AbsoluteLayout // If the site doesn't use the viewport meta tag to specify the viewport, // use DEFAULT_VIEWPORT_WIDTH as the default viewport width - static final int DEFAULT_VIEWPORT_WIDTH = 800; + static final int DEFAULT_VIEWPORT_WIDTH = 1040; // normally we try to fit the content to the minimum preferred width // calculated by the Webkit. To avoid the bad behavior when some site's diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 1e7e6c00434f..4bb65e1619aa 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -1686,7 +1686,7 @@ final class WebViewCore { if (mSettings.getUseWideViewPort()) { if (mViewportWidth == -1) { if (mSettings.getLayoutAlgorithm() == - WebSettings.LayoutAlgorithm.NORMAL) { + WebSettings.LayoutAlgorithm.NORMAL || mSettings.getUseFixedViewport()) { width = WebView.DEFAULT_VIEWPORT_WIDTH; } else { /* diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index a973d64fb672..ea975c2c3cae 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -541,7 +541,9 @@ class ZoomManager { } if (settings.getLayoutAlgorithm() == WebSettings.LayoutAlgorithm.NARROW_COLUMNS - && willScaleTriggerZoom(mTextWrapScale)) { + && willScaleTriggerZoom(mTextWrapScale) + // For tablet, not much need to reflow text w/o double tapping. + && !settings.getUseFixedViewport()) { refreshZoomScale(true); } else if (!mInZoomOverview) { zoomToOverview(); @@ -765,7 +767,8 @@ class ZoomManager { public void onNewPicture(WebViewCore.DrawData drawData) { final int viewWidth = mWebView.getViewWidth(); - if (mWebView.getSettings().getUseWideViewPort()) { + if (!mWebView.getSettings().getUseFixedViewport() + && mWebView.getSettings().getUseWideViewPort()) { // limit mZoomOverviewWidth upper bound to // sMaxViewportWidth so that if the page doesn't behave // well, the WebView won't go insane. limit the lower @@ -819,7 +822,8 @@ class ZoomManager { reflowText = false; } else { WebSettings settings = mWebView.getSettings(); - if (settings.getUseWideViewPort() && settings.getLoadWithOverviewMode()) { + if (settings.getUseWideViewPort() + && (settings.getLoadWithOverviewMode() || settings.getUseFixedViewport())) { mInitialZoomOverview = true; scale = (float) mWebView.getViewWidth() / WebView.DEFAULT_VIEWPORT_WIDTH; } else { |