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

Commit 408cf852 authored by Grace Kloba's avatar Grace Kloba
Browse files

Support the new dpi change in the WebView.

parent 7b7029e0
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -707,6 +707,10 @@ class BrowserFrame extends Handler {
        return value.string.toString();
        return value.string.toString();
    }
    }


    private float density() {
        return mContext.getResources().getDisplayMetrics().density;
    }

    //==========================================================================
    //==========================================================================
    // native functions
    // native functions
    //==========================================================================
    //==========================================================================
+2 −2
Original line number Original line Diff line number Diff line
@@ -4868,7 +4868,7 @@ public class WebView extends AbsoluteLayout
                                            / draw.mMinPrefWidth;
                                            / draw.mMinPrefWidth;
                                    mMinZoomScaleFixed = false;
                                    mMinZoomScaleFixed = false;
                                } else {
                                } else {
                                    mMinZoomScale = mDefaultScale;
                                    mMinZoomScale = restoreState.mDefaultScale;
                                    mMinZoomScaleFixed = true;
                                    mMinZoomScaleFixed = true;
                                }
                                }
                            } else {
                            } else {
@@ -4891,7 +4891,7 @@ public class WebView extends AbsoluteLayout
                                && settings.getLoadWithOverviewMode()) {
                                && settings.getLoadWithOverviewMode()) {
                            if (restoreState.mViewScale == 0
                            if (restoreState.mViewScale == 0
                                    || (restoreState.mMobileSite
                                    || (restoreState.mMobileSite
                                            && mMinZoomScale < mDefaultScale)) {
                                    && mMinZoomScale < restoreState.mDefaultScale)) {
                                mInZoomOverview = true;
                                mInZoomOverview = true;
                            }
                            }
                        }
                        }
+37 −20
Original line number Original line Diff line number Diff line
@@ -100,6 +100,15 @@ final class WebViewCore {


    private boolean mViewportUserScalable = true;
    private boolean mViewportUserScalable = true;


    /*
     * range is from 70 to 400.
     * 0 is a special value means device-dpi. The default scale factor will be
     * always 100.
     * -1 means undefined. The default scale factor will be
     * WebView.DEFAULT_SCALE_PERCENT.
     */
    private int mViewportDensityDpi = -1;

    private int mRestoredScale = 0;
    private int mRestoredScale = 0;
    private int mRestoredScreenWidthScale = 0;
    private int mRestoredScreenWidthScale = 0;
    private int mRestoredX = 0;
    private int mRestoredX = 0;
@@ -1539,6 +1548,7 @@ final class WebViewCore {
        float mMaxScale;
        float mMaxScale;
        float mViewScale;
        float mViewScale;
        float mTextWrapScale;
        float mTextWrapScale;
        float mDefaultScale;
        int mScrollX;
        int mScrollX;
        int mScrollY;
        int mScrollY;
        boolean mMobileSite;
        boolean mMobileSite;
@@ -1842,9 +1852,18 @@ 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
        // adjust the default scale to match the densityDpi
        float adjust = 1.0f;
        if (mViewportDensityDpi == -1) {
            if (WebView.DEFAULT_SCALE_PERCENT != 100) {
            if (WebView.DEFAULT_SCALE_PERCENT != 100) {
            float adjust = (float) WebView.DEFAULT_SCALE_PERCENT / 100.0f;
                adjust = WebView.DEFAULT_SCALE_PERCENT / 100.0f;
            }
        } else if (mViewportDensityDpi > 0) {
            adjust = (float) mContext.getResources().getDisplayMetrics().densityDpi
                    / mViewportDensityDpi;
        }
        int defaultScale = (int) (adjust * 100);

        if (mViewportInitialScale > 0) {
        if (mViewportInitialScale > 0) {
            mViewportInitialScale *= adjust;
            mViewportInitialScale *= adjust;
        }
        }
@@ -1854,18 +1873,17 @@ final class WebViewCore {
        if (mViewportMaximumScale > 0) {
        if (mViewportMaximumScale > 0) {
            mViewportMaximumScale *= adjust;
            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) {
                mViewportInitialScale = WebView.DEFAULT_SCALE_PERCENT;
                mViewportInitialScale = defaultScale;
            }
            }
        }
        }
        if (mViewportUserScalable == false) {
        if (mViewportUserScalable == false) {
            mViewportInitialScale = WebView.DEFAULT_SCALE_PERCENT;
            mViewportInitialScale = defaultScale;
            mViewportMinimumScale = WebView.DEFAULT_SCALE_PERCENT;
            mViewportMinimumScale = defaultScale;
            mViewportMaximumScale = WebView.DEFAULT_SCALE_PERCENT;
            mViewportMaximumScale = defaultScale;
        }
        }
        if (mViewportMinimumScale > mViewportInitialScale
        if (mViewportMinimumScale > mViewportInitialScale
                && mViewportInitialScale != 0) {
                && mViewportInitialScale != 0) {
@@ -1875,8 +1893,7 @@ final class WebViewCore {
                && mViewportMaximumScale < mViewportInitialScale) {
                && mViewportMaximumScale < mViewportInitialScale) {
            mViewportMaximumScale = mViewportInitialScale;
            mViewportMaximumScale = mViewportInitialScale;
        }
        }
        if (mViewportWidth < 0
        if (mViewportWidth < 0 && mViewportInitialScale == defaultScale) {
                && mViewportInitialScale == WebView.DEFAULT_SCALE_PERCENT) {
            mViewportWidth = 0;
            mViewportWidth = 0;
        }
        }


@@ -1893,7 +1910,7 @@ final class WebViewCore {
            // we call WebView method from WebCore thread. But not perfect
            // we call WebView method from WebCore thread. But not perfect
            // reference is better than no reference.
            // reference is better than no reference.
            webViewWidth = mWebView.getViewWidth();
            webViewWidth = mWebView.getViewWidth();
            viewportWidth = webViewWidth * 100 / WebView.DEFAULT_SCALE_PERCENT;
            viewportWidth = (int) (webViewWidth / adjust);
            if (viewportWidth == 0) {
            if (viewportWidth == 0) {
                Log.w(LOGTAG, "Can't get the viewWidth after the first layout");
                Log.w(LOGTAG, "Can't get the viewWidth after the first layout");
            }
            }
@@ -1903,6 +1920,7 @@ final class WebViewCore {
        mRestoreState = new RestoreState();
        mRestoreState = new RestoreState();
        mRestoreState.mMinScale = mViewportMinimumScale / 100.0f;
        mRestoreState.mMinScale = mViewportMinimumScale / 100.0f;
        mRestoreState.mMaxScale = mViewportMaximumScale / 100.0f;
        mRestoreState.mMaxScale = mViewportMaximumScale / 100.0f;
        mRestoreState.mDefaultScale = adjust;
        mRestoreState.mScrollX = mRestoredX;
        mRestoreState.mScrollX = mRestoredX;
        mRestoreState.mScrollY = mRestoredY;
        mRestoreState.mScrollY = mRestoredY;
        mRestoreState.mMobileSite = (0 == mViewportWidth);
        mRestoreState.mMobileSite = (0 == mViewportWidth);
@@ -1924,8 +1942,7 @@ final class WebViewCore {
                mRestoreState.mViewScale = mRestoreState.mTextWrapScale =
                mRestoreState.mViewScale = mRestoreState.mTextWrapScale =
                        (float) webViewWidth / mViewportWidth;
                        (float) webViewWidth / mViewportWidth;
            } else {
            } else {
                mRestoreState.mTextWrapScale =
                mRestoreState.mTextWrapScale = adjust;
                        WebView.DEFAULT_SCALE_PERCENT / 100.0f;
                // 0 will trigger WebView to turn on zoom overview mode
                // 0 will trigger WebView to turn on zoom overview mode
                mRestoreState.mViewScale = 0;
                mRestoreState.mViewScale = 0;
            }
            }