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

Commit 1a0ff576 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Only enforce max width for non-initial requested display size

For example, the initial size is 1000x2000 and max-width is 800.
When setting 1000x2000, it should clear the override setting
instead of override as 800x1600.

Bug: 274111844
Flag: EXEMPT bugfix
Test: atest DisplayWindowSettingsTests#testSetForcedSize

Change-Id: I1a685111bf6fad9f0fb737e51bb13f5ab25e41b1
parent 2f4e0476
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -3215,15 +3215,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
     * If xPpi or yDpi is equal to {@link #INVALID_DPI}, the values are ignored.
     */
    void setForcedSize(int width, int height, float xDPI, float yDPI) {
  	// Can't force size higher than the maximal allowed
        mIsSizeForced = mInitialDisplayWidth != width || mInitialDisplayHeight != height;
        if (mIsSizeForced) {
            if (mMaxUiWidth > 0 && width > mMaxUiWidth) {
                final float ratio = mMaxUiWidth / (float) width;
                height = (int) (height * ratio);
                width = mMaxUiWidth;
            }

        mIsSizeForced = mInitialDisplayWidth != width || mInitialDisplayHeight != height;
        if (mIsSizeForced) {
            final Point size = getValidForcedSize(width, height);
            width = size.x;
            height = size.y;
+1 −0
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ class DisplayWindowSettings {
        mSettingsProvider.updateOverrideSettings(displayInfo, overrideSettings);
    }

    /** Stores the size override settings. If the width or height is zero, it means to clear. */
    void setForcedSize(@NonNull DisplayContent displayContent, int width, int height) {
        if (displayContent.isDefaultDisplay) {
            final String sizeString = (width == 0 || height == 0) ? "" : (width + "," + height);
+1 −1
Original line number Diff line number Diff line
@@ -6025,7 +6025,7 @@ public class WindowManagerService extends IWindowManager.Stub
                    displayContent.setForcedSize(displayContent.mInitialDisplayWidth,
                            displayContent.mInitialDisplayHeight,
                            displayContent.mInitialPhysicalXDpi,
                            displayContent.mInitialPhysicalXDpi);
                            displayContent.mInitialPhysicalYDpi);
                }
            }
        } finally {
+13 −0
Original line number Diff line number Diff line
@@ -244,6 +244,19 @@ public class DisplayWindowSettingsTests extends WindowTestsBase {
        mWm.clearForcedDisplaySize(mSecondaryDisplay.getDisplayId());
        assertEquals(mSecondaryDisplay.mInitialDisplayWidth, mSecondaryDisplay.mBaseDisplayWidth);
        assertEquals(mSecondaryDisplay.mInitialDisplayHeight, mSecondaryDisplay.mBaseDisplayHeight);

        // Forced size can be cleared even if the initial display size is smaller than max width.
        final int maxWidth = mSecondaryDisplay.mInitialDisplayWidth - 20;
        mSecondaryDisplay.setMaxUiWidth(maxWidth);
        assertEquals(maxWidth, mSecondaryDisplay.mBaseDisplayWidth);
        mSecondaryDisplay.setForcedSize(maxWidth - 10, maxWidth + 10);
        assertNotEquals(maxWidth, mSecondaryDisplay.mBaseDisplayHeight);
        assertTrue(mSecondaryDisplay.mIsSizeForced);

        mWm.clearForcedDisplaySize(mSecondaryDisplay.mDisplayId);
        assertFalse(mSecondaryDisplay.mIsSizeForced);
        assertEquals(maxWidth, mSecondaryDisplay.mBaseDisplayWidth);
        assertEquals(0, mSettingsProvider.getSettings(originalInfo).mForcedWidth);
    }

    @Test