Add ZoomDensity so that we can change the desired default scale.
Fix a bug where we didn't adjust the viewport scale according to our density.
This commit is contained in:
@@ -69,7 +69,24 @@ public class WebSettings {
|
|||||||
}
|
}
|
||||||
int value;
|
int value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum for specifying the WebView's desired density.
|
||||||
|
* FAR makes 100% looking like in 240dpi
|
||||||
|
* MEDIUM makes 100% looking like in 160dpi
|
||||||
|
* CLOSE makes 100% looking like in 120dpi
|
||||||
|
* @hide Pending API council approval
|
||||||
|
*/
|
||||||
|
public enum ZoomDensity {
|
||||||
|
FAR(150), // 240dpi
|
||||||
|
MEDIUM(100), // 160dpi
|
||||||
|
CLOSE(75); // 120dpi
|
||||||
|
ZoomDensity(int size) {
|
||||||
|
value = size;
|
||||||
|
}
|
||||||
|
int value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default cache usage pattern Use with {@link #setCacheMode}.
|
* Default cache usage pattern Use with {@link #setCacheMode}.
|
||||||
*/
|
*/
|
||||||
@@ -105,6 +122,8 @@ public class WebSettings {
|
|||||||
LOW
|
LOW
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WebView associated with this WebSettings.
|
||||||
|
private WebView mWebView;
|
||||||
// BrowserFrame used to access the native frame pointer.
|
// BrowserFrame used to access the native frame pointer.
|
||||||
private BrowserFrame mBrowserFrame;
|
private BrowserFrame mBrowserFrame;
|
||||||
// Flag to prevent multiple SYNC messages at one time.
|
// Flag to prevent multiple SYNC messages at one time.
|
||||||
@@ -145,6 +164,7 @@ public class WebSettings {
|
|||||||
// Don't need to synchronize the get/set methods as they
|
// Don't need to synchronize the get/set methods as they
|
||||||
// are basic types, also none of these values are used in
|
// are basic types, also none of these values are used in
|
||||||
// native WebCore code.
|
// native WebCore code.
|
||||||
|
private ZoomDensity mDefaultZoom = ZoomDensity.MEDIUM;
|
||||||
private RenderPriority mRenderPriority = RenderPriority.NORMAL;
|
private RenderPriority mRenderPriority = RenderPriority.NORMAL;
|
||||||
private int mOverrideCacheMode = LOAD_DEFAULT;
|
private int mOverrideCacheMode = LOAD_DEFAULT;
|
||||||
private boolean mSaveFormData = true;
|
private boolean mSaveFormData = true;
|
||||||
@@ -237,9 +257,10 @@ public class WebSettings {
|
|||||||
* Package constructor to prevent clients from creating a new settings
|
* Package constructor to prevent clients from creating a new settings
|
||||||
* instance.
|
* instance.
|
||||||
*/
|
*/
|
||||||
WebSettings(Context context) {
|
WebSettings(Context context, WebView webview) {
|
||||||
mEventHandler = new EventHandler();
|
mEventHandler = new EventHandler();
|
||||||
mContext = context;
|
mContext = context;
|
||||||
|
mWebView = webview;
|
||||||
mDefaultTextEncoding = context.getString(com.android.internal.
|
mDefaultTextEncoding = context.getString(com.android.internal.
|
||||||
R.string.default_text_encoding);
|
R.string.default_text_encoding);
|
||||||
|
|
||||||
@@ -446,6 +467,31 @@ public class WebSettings {
|
|||||||
return mTextSize;
|
return mTextSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the default zoom density of the page. This should be called from UI
|
||||||
|
* thread.
|
||||||
|
* @param zoom A ZoomDensity value
|
||||||
|
* @see WebSettings.ZoomDensity
|
||||||
|
* @hide Pending API council approval
|
||||||
|
*/
|
||||||
|
public void setDefaultZoom(ZoomDensity zoom) {
|
||||||
|
if (mDefaultZoom != zoom) {
|
||||||
|
mDefaultZoom = zoom;
|
||||||
|
mWebView.updateDefaultZoomDensity(zoom.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default zoom density of the page. This should be called from UI
|
||||||
|
* thread.
|
||||||
|
* @return A ZoomDensity value
|
||||||
|
* @see WebSettings.ZoomDensity
|
||||||
|
* @hide Pending API council approval
|
||||||
|
*/
|
||||||
|
public ZoomDensity getDefaultZoom() {
|
||||||
|
return mDefaultZoom;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables using light touches to make a selection and activate mouseovers.
|
* Enables using light touches to make a selection and activate mouseovers.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ public class WebView extends AbsoluteLayout
|
|||||||
|
|
||||||
// default scale. Depending on the display density.
|
// default scale. Depending on the display density.
|
||||||
static int DEFAULT_SCALE_PERCENT;
|
static int DEFAULT_SCALE_PERCENT;
|
||||||
private float DEFAULT_SCALE;
|
private float mDefaultScale;
|
||||||
|
|
||||||
// set to true temporarily while the zoom control is being dragged
|
// set to true temporarily while the zoom control is being dragged
|
||||||
private boolean mPreviewZoomOnly = false;
|
private boolean mPreviewZoomOnly = false;
|
||||||
@@ -640,7 +640,7 @@ public class WebView extends AbsoluteLayout
|
|||||||
mZoomFitPageButton.setOnClickListener(
|
mZoomFitPageButton.setOnClickListener(
|
||||||
new View.OnClickListener() {
|
new View.OnClickListener() {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
zoomWithPreview(DEFAULT_SCALE);
|
zoomWithPreview(mDefaultScale);
|
||||||
updateZoomButtonsEnabled();
|
updateZoomButtonsEnabled();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -663,7 +663,7 @@ public class WebView extends AbsoluteLayout
|
|||||||
// or out.
|
// or out.
|
||||||
mZoomButtonsController.setZoomInEnabled(canZoomIn);
|
mZoomButtonsController.setZoomInEnabled(canZoomIn);
|
||||||
mZoomButtonsController.setZoomOutEnabled(canZoomOut);
|
mZoomButtonsController.setZoomOutEnabled(canZoomOut);
|
||||||
mZoomFitPageButton.setEnabled(mActualScale != DEFAULT_SCALE);
|
mZoomFitPageButton.setEnabled(mActualScale != mDefaultScale);
|
||||||
}
|
}
|
||||||
mZoomOverviewButton.setVisibility(canZoomScrollOut() ? View.VISIBLE:
|
mZoomOverviewButton.setVisibility(canZoomScrollOut() ? View.VISIBLE:
|
||||||
View.GONE);
|
View.GONE);
|
||||||
@@ -685,7 +685,7 @@ public class WebView extends AbsoluteLayout
|
|||||||
mNavSlop = (int) (16 * density);
|
mNavSlop = (int) (16 * density);
|
||||||
// density adjusted scale factors
|
// density adjusted scale factors
|
||||||
DEFAULT_SCALE_PERCENT = (int) (100 * density);
|
DEFAULT_SCALE_PERCENT = (int) (100 * density);
|
||||||
DEFAULT_SCALE = density;
|
mDefaultScale = density;
|
||||||
mActualScale = density;
|
mActualScale = density;
|
||||||
mInvActualScale = 1 / density;
|
mInvActualScale = 1 / density;
|
||||||
DEFAULT_MAX_ZOOM_SCALE = 4.0f * density;
|
DEFAULT_MAX_ZOOM_SCALE = 4.0f * density;
|
||||||
@@ -694,6 +694,23 @@ public class WebView extends AbsoluteLayout
|
|||||||
mMinZoomScale = DEFAULT_MIN_ZOOM_SCALE;
|
mMinZoomScale = DEFAULT_MIN_ZOOM_SCALE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* package */void updateDefaultZoomDensity(int zoomDensity) {
|
||||||
|
final float density = getContext().getResources().getDisplayMetrics().density
|
||||||
|
* 100 / zoomDensity;
|
||||||
|
if (Math.abs(density - mDefaultScale) > 0.01) {
|
||||||
|
float scaleFactor = density / mDefaultScale;
|
||||||
|
// adjust the limits
|
||||||
|
mNavSlop = (int) (16 * density);
|
||||||
|
DEFAULT_SCALE_PERCENT = (int) (100 * density);
|
||||||
|
DEFAULT_MAX_ZOOM_SCALE = 4.0f * density;
|
||||||
|
DEFAULT_MIN_ZOOM_SCALE = 0.25f * density;
|
||||||
|
mDefaultScale = density;
|
||||||
|
mMaxZoomScale *= scaleFactor;
|
||||||
|
mMinZoomScale *= scaleFactor;
|
||||||
|
setNewZoomScale(mActualScale * scaleFactor, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* package */ boolean onSavePassword(String schemePlusHost, String username,
|
/* package */ boolean onSavePassword(String schemePlusHost, String username,
|
||||||
String password, final Message resumeMsg) {
|
String password, final Message resumeMsg) {
|
||||||
boolean rVal = false;
|
boolean rVal = false;
|
||||||
@@ -4172,8 +4189,8 @@ public class WebView extends AbsoluteLayout
|
|||||||
float oldScale = mActualScale;
|
float oldScale = mActualScale;
|
||||||
|
|
||||||
// snap to DEFAULT_SCALE if it is close
|
// snap to DEFAULT_SCALE if it is close
|
||||||
if (scale > (DEFAULT_SCALE - 0.05) && scale < (DEFAULT_SCALE + 0.05)) {
|
if (scale > (mDefaultScale - 0.05) && scale < (mDefaultScale + 0.05)) {
|
||||||
scale = DEFAULT_SCALE;
|
scale = mDefaultScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
setNewZoomScale(scale, false);
|
setNewZoomScale(scale, false);
|
||||||
@@ -4689,7 +4706,7 @@ public class WebView extends AbsoluteLayout
|
|||||||
int initialScale = msg.arg1;
|
int initialScale = msg.arg1;
|
||||||
int viewportWidth = msg.arg2;
|
int viewportWidth = msg.arg2;
|
||||||
// start a new page with DEFAULT_SCALE zoom scale.
|
// start a new page with DEFAULT_SCALE zoom scale.
|
||||||
float scale = DEFAULT_SCALE;
|
float scale = mDefaultScale;
|
||||||
if (mInitialScale > 0) {
|
if (mInitialScale > 0) {
|
||||||
scale = mInitialScale / 100.0f;
|
scale = mInitialScale / 100.0f;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ final class WebViewCore {
|
|||||||
// ready.
|
// ready.
|
||||||
mEventHub = new EventHub();
|
mEventHub = new EventHub();
|
||||||
// Create a WebSettings object for maintaining all settings
|
// Create a WebSettings object for maintaining all settings
|
||||||
mSettings = new WebSettings(mContext);
|
mSettings = new WebSettings(mContext, mWebView);
|
||||||
// The WebIconDatabase needs to be initialized within the UI thread so
|
// The WebIconDatabase needs to be initialized within the UI thread so
|
||||||
// just request the instance here.
|
// just request the instance here.
|
||||||
WebIconDatabase.getInstance();
|
WebIconDatabase.getInstance();
|
||||||
@@ -1560,6 +1560,20 @@ final class WebViewCore {
|
|||||||
// set the viewport settings from WebKit
|
// set the viewport settings from WebKit
|
||||||
setViewportSettingsFromNative();
|
setViewportSettingsFromNative();
|
||||||
|
|
||||||
|
// adjust the default scale to match the density
|
||||||
|
if (WebView.DEFAULT_SCALE_PERCENT != 100) {
|
||||||
|
float adjust = WebView.DEFAULT_SCALE_PERCENT / 100;
|
||||||
|
if (mViewportInitialScale > 0) {
|
||||||
|
mViewportInitialScale *= adjust;
|
||||||
|
}
|
||||||
|
if (mViewportMinimumScale > 0) {
|
||||||
|
mViewportMinimumScale *= adjust;
|
||||||
|
}
|
||||||
|
if (mViewportMaximumScale > 0) {
|
||||||
|
mViewportMaximumScale *= adjust;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// infer the values if they are not defined.
|
// infer the values if they are not defined.
|
||||||
if (mViewportWidth == 0) {
|
if (mViewportWidth == 0) {
|
||||||
if (mViewportInitialScale == 0) {
|
if (mViewportInitialScale == 0) {
|
||||||
@@ -1586,7 +1600,7 @@ final class WebViewCore {
|
|||||||
mViewportMaximumScale = mViewportInitialScale;
|
mViewportMaximumScale = mViewportInitialScale;
|
||||||
} else if (mViewportInitialScale == 0) {
|
} else if (mViewportInitialScale == 0) {
|
||||||
mViewportInitialScale = mViewportMaximumScale;
|
mViewportInitialScale = mViewportMaximumScale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mViewportWidth < 0
|
if (mViewportWidth < 0
|
||||||
&& mViewportInitialScale == WebView.DEFAULT_SCALE_PERCENT) {
|
&& mViewportInitialScale == WebView.DEFAULT_SCALE_PERCENT) {
|
||||||
|
|||||||
Reference in New Issue
Block a user