diff options
4 files changed, 20 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 34bbe6ad8e21..71695920a6fc 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -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 - if (mMaxUiWidth > 0 && width > mMaxUiWidth) { - final float ratio = mMaxUiWidth / (float) width; - height = (int) (height * ratio); - width = mMaxUiWidth; - } - mIsSizeForced = mInitialDisplayWidth != width || mInitialDisplayHeight != height; if (mIsSizeForced) { + if (mMaxUiWidth > 0 && width > mMaxUiWidth) { + final float ratio = mMaxUiWidth / (float) width; + height = (int) (height * ratio); + width = mMaxUiWidth; + } final Point size = getValidForcedSize(width, height); width = size.x; height = size.y; diff --git a/services/core/java/com/android/server/wm/DisplayWindowSettings.java b/services/core/java/com/android/server/wm/DisplayWindowSettings.java index f40f26179f85..e585efa8a3cc 100644 --- a/services/core/java/com/android/server/wm/DisplayWindowSettings.java +++ b/services/core/java/com/android/server/wm/DisplayWindowSettings.java @@ -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); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 29ab4dd79edc..d9b0b26c0e3b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6025,7 +6025,7 @@ public class WindowManagerService extends IWindowManager.Stub displayContent.setForcedSize(displayContent.mInitialDisplayWidth, displayContent.mInitialDisplayHeight, displayContent.mInitialPhysicalXDpi, - displayContent.mInitialPhysicalXDpi); + displayContent.mInitialPhysicalYDpi); } } } finally { diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java index 57839e2b795e..ffe38936bcc1 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java @@ -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 |