summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/WebSettings.java14
-rw-r--r--core/java/android/webkit/WebView.java2
-rw-r--r--core/java/android/webkit/WebViewCore.java2
-rw-r--r--core/java/android/webkit/ZoomManager.java10
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 {