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

Commit 96fcb87a authored by Shimeng (Simon) Wang's avatar Shimeng (Simon) Wang
Browse files

Set initial view scale to be at least overview scale.

Some website will have an initial view scale which is less
than the overview scale and the page will display poorly.

This fix sets the initial scale and text wrap scale to be at least
overview scale to make the page looking good at first load.  When a page
is restored, the scale will not be changed.

Also make the reading level scale always bigger than overview
scale for consistency.

issue: 3226625
Change-Id: I8b77cf4fda454a35c3037fa09aaff1aac0c0f664
parent b6d1832f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1884,6 +1884,7 @@ final class WebViewCore {
        int mScrollX;
        int mScrollY;
        boolean mMobileSite;
        boolean mIsRestored;
    }

    static class DrawData {
@@ -2285,6 +2286,7 @@ final class WebViewCore {
        mInitialViewState.mScrollY = mRestoredY;
        mInitialViewState.mMobileSite = (0 == mViewportWidth);
        if (mRestoredScale > 0) {
            mInitialViewState.mIsRestored = true;
            mInitialViewState.mViewScale = mRestoredScale / 100.0f;
            if (mRestoredTextWrapScale > 0) {
                mInitialViewState.mTextWrapScale = mRestoredTextWrapScale / 100.0f;
+12 −16
Original line number Diff line number Diff line
@@ -260,12 +260,7 @@ class ZoomManager {
    public final float getReadingLevelScale() {
        // The reading scale is at least 0.5f apart from the overview scale.
        final float MIN_SCALE_DIFF = 0.5f;
        final float zoomOverviewScale = getZoomOverviewScale();
        if (zoomOverviewScale > DEFAULT_READING_LEVEL_SCALE) {
            return Math.min(DEFAULT_READING_LEVEL_SCALE,
                zoomOverviewScale - MIN_SCALE_DIFF);
        }
        return Math.max(zoomOverviewScale + MIN_SCALE_DIFF,
        return Math.max(getZoomOverviewScale() + MIN_SCALE_DIFF,
            DEFAULT_READING_LEVEL_SCALE);
    }

@@ -864,32 +859,33 @@ class ZoomManager {

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

            if (mInitialScale > 0) {
                scale = mInitialScale;
                reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
            } else if (viewState.mViewScale > 0) {
                mTextWrapScale = viewState.mTextWrapScale;
                scale = viewState.mViewScale;
                reflowText = false;
            } else {
                scale = getZoomOverviewScale();
                if (settings.getUseWideViewPort()
                    && settings.getLoadWithOverviewMode()) {
                    mInitialZoomOverview = true;
            } else {
                scale = overviewScale;
                WebSettings settings = mWebView.getSettings();
                if (!settings.getUseWideViewPort()
                    || !settings.getLoadWithOverviewMode()) {
                    scale = Math.max(viewState.mTextWrapScale, scale);
                    mInitialZoomOverview = !exceedsMinScaleIncrement(scale, getZoomOverviewScale());
                }
                if (settings.isNarrowColumnLayout() && settings.getUseFixedViewport()) {
                    // When first layout, reflow using the reading level scale to avoid
                    // reflow when double tapped.
                    mTextWrapScale = getReadingLevelScale();
                }
            }
            boolean reflowText = false;
            if (!viewState.mIsRestored) {
                scale = Math.max(scale, overviewScale);
                mTextWrapScale = Math.max(mTextWrapScale, overviewScale);
                reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
            }
            mInitialZoomOverview = !exceedsMinScaleIncrement(scale, overviewScale);
            setZoomScale(scale, reflowText);

            // update the zoom buttons as the scale can be changed