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

Commit 22c5dfca authored by Shimeng (Simon) Wang's avatar Shimeng (Simon) Wang Committed by Android (Google) Code Review
Browse files

Merge "Refactor zoom overview width calculation."

parents 67a08dda 2c782e3d
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);