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

Commit 771793ca authored by Kriti Dang's avatar Kriti Dang
Browse files

Change the density value to be constrained by config_maxUIWidth, in case of user switch

When user switches, density is reset to forcedDensity for that user. If
there is no forcedDensity value for the user, the density is reset to
initial density value. This initial density is not constarined by
config_maxUIWidth, which cause UX issue in devices with
config_maxUIWidth.

Bug: 239386653
Test: Verfied the UX of restricted profile
Change-Id: I55278c1766d6a1509efa62431d5ed207be3a153b
parent da7e89fd
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -336,7 +336,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    private WindowState mTmpWindow;
    private boolean mUpdateImeTarget;
    private boolean mTmpInitial;
    private int mMaxUiWidth;
    private int mMaxUiWidth = 0;

    final AppTransition mAppTransition;
    final AppTransitionController mAppTransitionController;
@@ -361,9 +361,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    // Initial display metrics.
    int mInitialDisplayWidth = 0;
    int mInitialDisplayHeight = 0;
    int mInitialDisplayDensity = 0;
    float mInitialPhysicalXDpi = 0.0f;
    float mInitialPhysicalYDpi = 0.0f;
    // The physical density of the display
    int mInitialDisplayDensity = 0;

    private Point mPhysicalDisplaySize;

@@ -2555,6 +2556,17 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        return mCurrentOverrideConfigurationChanges;
    }

    /**
     * @return The initial display density. This is constrained by config_maxUIWidth.
     */
    int getInitialDisplayDensity() {
        int density = mInitialDisplayDensity;
        if (mMaxUiWidth > 0 && mInitialDisplayWidth > mMaxUiWidth) {
            density = (int) ((density * mMaxUiWidth) / (float) mInitialDisplayWidth);
        }
        return density;
    }

    @Override
    public void onConfigurationChanged(Configuration newParentConfig) {
        final int lastOrientation = getConfiguration().orientation;
@@ -2883,7 +2895,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
     *               so only need to configure display.
     */
    void setForcedDensity(int density, int userId) {
        mIsDensityForced = density != mInitialDisplayDensity;
        mIsDensityForced = density != getInitialDisplayDensity();
        final boolean updateCurrent = userId == UserHandle.USER_CURRENT;
        if (mWmService.mCurrentUserId == userId || updateCurrent) {
            mBaseDisplayDensity = density;
@@ -2894,7 +2906,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
            return;
        }

        if (density == mInitialDisplayDensity) {
        if (density == getInitialDisplayDensity()) {
            density = 0;
        }
        mWmService.mDisplayWindowSettings.setForcedDensity(this, density, userId);
+1 −1
Original line number Diff line number Diff line
@@ -276,7 +276,7 @@ class DisplayWindowSettings {
        final int width = hasSizeOverride ? settings.mForcedWidth : dc.mInitialDisplayWidth;
        final int height = hasSizeOverride ? settings.mForcedHeight : dc.mInitialDisplayHeight;
        final int density = hasDensityOverride ? settings.mForcedDensity
                : dc.mInitialDisplayDensity;
                : dc.getInitialDisplayDensity();
        dc.updateBaseDisplayMetrics(width, height, density, dc.mBaseDisplayPhysicalXDpi,
                dc.mBaseDisplayPhysicalYDpi);

+4 −4
Original line number Diff line number Diff line
@@ -3617,8 +3617,8 @@ public class WindowManagerService extends IWindowManager.Stub
            // Otherwise, we'll update it when it's prepared.
            if (mDisplayReady) {
                final int forcedDensity = getForcedDisplayDensityForUserLocked(newUserId);
                final int targetDensity = forcedDensity != 0 ? forcedDensity
                        : displayContent.mInitialDisplayDensity;
                final int targetDensity = forcedDensity != 0
                        ? forcedDensity : displayContent.getInitialDisplayDensity();
                displayContent.setForcedDensity(targetDensity, UserHandle.USER_CURRENT);
            }
        }
@@ -5829,7 +5829,7 @@ public class WindowManagerService extends IWindowManager.Stub
        synchronized (mGlobalLock) {
            final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
            if (displayContent != null && displayContent.hasAccess(Binder.getCallingUid())) {
                return displayContent.mInitialDisplayDensity;
                return displayContent.getInitialDisplayDensity();
            }
        }
        return -1;
@@ -5884,7 +5884,7 @@ public class WindowManagerService extends IWindowManager.Stub
            synchronized (mGlobalLock) {
                final DisplayContent displayContent = mRoot.getDisplayContent(displayId);
                if (displayContent != null) {
                    displayContent.setForcedDensity(displayContent.mInitialDisplayDensity,
                    displayContent.setForcedDensity(displayContent.getInitialDisplayDensity(),
                            callingUserId);
                }
            }