Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c782e3d authored by Shimeng (Simon) Wang's avatar Shimeng (Simon) Wang
Browse files

Refactor zoom overview width calculation.

Refactor zoom overview width calculation in FirstLayout and NewPicture;
also taking care of the case when wide viewport is not enabled.

This fixes the setInitialScale Cts test case, which is broken by some
scale related changed for fixed viewport browser.

issue: 3242034
Change-Id: Ie54d089763ee38029ef25e6029884a17c2135f97
parent c91d8c3e
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1587,10 +1587,11 @@ public class WebSettings {
    }

    /**
     * Returns whether to use fixed viewport.
     * Returns whether to use fixed viewport.  Fixed viewport should operate only
     * when wide viewport is on.
     */
    /* package */ boolean getUseFixedViewport() {
        return mUseFixedViewport;
        return getUseWideViewPort() && mUseFixedViewport;
    }

    /**
+48 −29
Original line number Diff line number Diff line
@@ -800,29 +800,13 @@ class ZoomManager {
     */
    public void onNewPicture(WebViewCore.DrawData drawData) {
        final int viewWidth = mWebView.getViewWidth();
        final boolean zoomOverviewWidthChanged = setupZoomOverviewWidth(drawData, viewWidth);
        WebSettings settings = mWebView.getSettings();
        if (settings.getUseWideViewPort()) {
            if (!settings.getUseFixedViewport()) {
                // limit mZoomOverviewWidth upper bound to
                // sMaxViewportWidth so that if the page doesn't behave
                // well, the WebView won't go insane. limit the lower
                // bound to match the default scale for mobile sites.
                setZoomOverviewWidth(Math.min(WebView.sMaxViewportWidth,
                    Math.max((int) (viewWidth * mInvDefaultScale),
                            Math.max(drawData.mMinPrefWidth, drawData.mViewSize.x))));
            } else if (drawData.mContentSize.x > 0) {
                // The webkitDraw for layers will not populate contentSize, and it'll be
                // ignored for zoom overview width update.
                final int contentWidth = Math.max(drawData.mContentSize.x, drawData.mMinPrefWidth);
                final int newZoomOverviewWidth = Math.min(WebView.sMaxViewportWidth, contentWidth);
                if (newZoomOverviewWidth != mZoomOverviewWidth) {
                    setZoomOverviewWidth(newZoomOverviewWidth);
                    if (settings.isNarrowColumnLayout() && (mInitialZoomOverview || mInZoomOverview)) {
        if (zoomOverviewWidthChanged && settings.isNarrowColumnLayout() &&
            settings.getUseFixedViewport() &&
            (mInitialZoomOverview || mInZoomOverview)) {
            mTextWrapScale = getReadingLevelScale();
        }
                }
            }
        }

        final float zoomOverviewScale = getZoomOverviewScale();
        if (!mMinZoomScaleFixed) {
@@ -837,6 +821,41 @@ class ZoomManager {
        }
    }

    /**
     * Set up correct zoom overview width based on different settings.
     *
     * @param drawData webviewcore draw data
     * @param viewWidth current view width
     */
    private boolean setupZoomOverviewWidth(WebViewCore.DrawData drawData, final int viewWidth) {
        WebSettings settings = mWebView.getSettings();
        int newZoomOverviewWidth = mZoomOverviewWidth;
        if (settings.getUseWideViewPort()) {
            if (!settings.getUseFixedViewport()) {
                // limit mZoomOverviewWidth upper bound to
                // sMaxViewportWidth so that if the page doesn't behave
                // well, the WebView won't go insane. limit the lower
                // bound to match the default scale for mobile sites.
                newZoomOverviewWidth = Math.min(WebView.sMaxViewportWidth,
                    Math.max((int) (viewWidth * mInvDefaultScale),
                          Math.max(drawData.mMinPrefWidth, drawData.mViewSize.x)));
            } else if (drawData.mContentSize.x > 0) {
                // The webkitDraw for layers will not populate contentSize, and it'll be
                // ignored for zoom overview width update.
                final int contentWidth = Math.max(drawData.mContentSize.x, drawData.mMinPrefWidth);
                newZoomOverviewWidth = Math.min(WebView.sMaxViewportWidth, contentWidth);
            }
        } else {
            // If not use wide viewport, use view width as the zoom overview width.
            newZoomOverviewWidth = viewWidth;
        }
        if (newZoomOverviewWidth != mZoomOverviewWidth) {
            setZoomOverviewWidth(newZoomOverviewWidth);
            return true;
        }
        return false;
    }

    /**
     * Updates zoom values after Webkit completes the initial page layout. It
     * is called when visiting a page for the first time as well as when the
@@ -853,15 +872,12 @@ class ZoomManager {
        WebViewCore.ViewState viewState = drawData.mViewState;
        final Point viewSize = drawData.mViewSize;
        updateZoomRange(viewState, viewSize.x, drawData.mMinPrefWidth);
        if (mWebView.getSettings().getUseWideViewPort() &&
            mWebView.getSettings().getUseFixedViewport()) {
            final int contentWidth = Math.max(drawData.mContentSize.x, drawData.mMinPrefWidth);
            setZoomOverviewWidth(Math.min(WebView.sMaxViewportWidth, contentWidth));
        }
        setupZoomOverviewWidth(drawData, mWebView.getViewWidth());

        if (!mWebView.drawHistory()) {
            float scale;
            final float overviewScale = getZoomOverviewScale();
            WebSettings settings = mWebView.getSettings();

            if (mInitialScale > 0) {
                scale = mInitialScale;
@@ -870,12 +886,12 @@ class ZoomManager {
                scale = viewState.mViewScale;
            } else {
                scale = overviewScale;
                WebSettings settings = mWebView.getSettings();
                if (!settings.getUseWideViewPort()
                    || !settings.getLoadWithOverviewMode()) {
                    scale = Math.max(viewState.mTextWrapScale, scale);
                }
                if (settings.isNarrowColumnLayout() && settings.getUseFixedViewport()) {
                if (settings.isNarrowColumnLayout() &&
                    settings.getUseFixedViewport()) {
                    // When first layout, reflow using the reading level scale to avoid
                    // reflow when double tapped.
                    mTextWrapScale = getReadingLevelScale();
@@ -883,8 +899,11 @@ class ZoomManager {
            }
            boolean reflowText = false;
            if (!viewState.mIsRestored) {
                if (settings.getUseFixedViewport()) {
                    // Override the scale only in case of fixed viewport.
                    scale = Math.max(scale, overviewScale);
                    mTextWrapScale = Math.max(mTextWrapScale, overviewScale);
                }
                reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
            }
            mInitialZoomOverview = !exceedsMinScaleIncrement(scale, overviewScale);