Loading services/core/java/com/android/server/display/LogicalDisplay.java +2 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,8 @@ final class LogicalDisplay { info.largestNominalAppHeight = mOverrideDisplayInfo.largestNominalAppHeight; info.logicalWidth = mOverrideDisplayInfo.logicalWidth; info.logicalHeight = mOverrideDisplayInfo.logicalHeight; info.physicalXDpi = mOverrideDisplayInfo.physicalXDpi; info.physicalYDpi = mOverrideDisplayInfo.physicalYDpi; info.rotation = mOverrideDisplayInfo.rotation; info.displayCutout = mOverrideDisplayInfo.displayCutout; info.logicalDensityDpi = mOverrideDisplayInfo.logicalDensityDpi; Loading services/core/java/com/android/server/wm/DisplayContent.java +35 −7 Original line number Diff line number Diff line Loading @@ -355,6 +355,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp int mInitialDisplayWidth = 0; int mInitialDisplayHeight = 0; int mInitialDisplayDensity = 0; float mInitialPhysicalXDpi = 0.0f; float mInitialPhysicalYDpi = 0.0f; DisplayCutout mInitialDisplayCutout; private final RotationCache<DisplayCutout, WmDisplayCutout> mDisplayCutoutCache Loading Loading @@ -394,6 +396,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp int mBaseDisplayDensity = 0; boolean mIsDensityForced = false; /** * Overridden display physical dpi. */ float mBaseDisplayPhysicalXDpi = 0.0f; float mBaseDisplayPhysicalYDpi = 0.0f; /** * Whether to disable display scaling. This can be set via shell command "adb shell wm scaling". * @see WindowManagerService#setForcedDisplayScalingMode(int, int) Loading Loading @@ -427,7 +435,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** * Compat metrics computed based on {@link #mDisplayMetrics}. * @see #updateDisplayAndOrientation(int) * @see #updateDisplayAndOrientation(int, Configuration) */ private final DisplayMetrics mCompatDisplayMetrics = new DisplayMetrics(); Loading Loading @@ -2035,6 +2043,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDisplayInfo.logicalWidth = dw; mDisplayInfo.logicalHeight = dh; mDisplayInfo.logicalDensityDpi = mBaseDisplayDensity; mDisplayInfo.physicalXDpi = mBaseDisplayPhysicalXDpi; mDisplayInfo.physicalYDpi = mBaseDisplayPhysicalYDpi; mDisplayInfo.appWidth = appWidth; mDisplayInfo.appHeight = appHeight; if (isDefaultDisplay) { Loading Loading @@ -2697,10 +2707,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } updateBaseDisplayMetrics(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, mDisplayInfo.logicalDensityDpi); mDisplayInfo.logicalDensityDpi, mDisplayInfo.physicalXDpi, mDisplayInfo.physicalYDpi); mInitialDisplayWidth = mDisplayInfo.logicalWidth; mInitialDisplayHeight = mDisplayInfo.logicalHeight; mInitialDisplayDensity = mDisplayInfo.logicalDensityDpi; mInitialPhysicalXDpi = mDisplayInfo.physicalXDpi; mInitialPhysicalYDpi = mDisplayInfo.physicalYDpi; mInitialDisplayCutout = mDisplayInfo.displayCutout; mInitialRoundedCorners = mDisplayInfo.roundedCorners; mCurrentPrivacyIndicatorBounds = new PrivacyIndicatorBounds(new Rect[4], Loading @@ -2719,6 +2732,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final int newWidth = rotated ? mDisplayInfo.logicalHeight : mDisplayInfo.logicalWidth; final int newHeight = rotated ? mDisplayInfo.logicalWidth : mDisplayInfo.logicalHeight; final int newDensity = mDisplayInfo.logicalDensityDpi; final float newXDpi = mDisplayInfo.physicalXDpi; final float newYDpi = mDisplayInfo.physicalYDpi; final DisplayCutout newCutout = mIgnoreDisplayCutout ? DisplayCutout.NO_CUTOUT : mDisplayInfo.displayCutout; final String newUniqueId = mDisplayInfo.uniqueId; Loading @@ -2726,7 +2741,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final boolean displayMetricsChanged = mInitialDisplayWidth != newWidth || mInitialDisplayHeight != newHeight || mInitialDisplayDensity != mDisplayInfo.logicalDensityDpi || mInitialDisplayDensity != newDensity || mInitialPhysicalXDpi != newXDpi || mInitialPhysicalYDpi != newYDpi || !Objects.equals(mInitialDisplayCutout, newCutout) || !Objects.equals(mInitialRoundedCorners, newRoundedCorners); final boolean physicalDisplayChanged = !newUniqueId.equals(mCurrentUniqueDisplayId); Loading @@ -2743,7 +2760,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // If there is an override set for base values - use it, otherwise use new values. updateBaseDisplayMetrics(mIsSizeForced ? mBaseDisplayWidth : newWidth, mIsSizeForced ? mBaseDisplayHeight : newHeight, mIsDensityForced ? mBaseDisplayDensity : newDensity); mIsDensityForced ? mBaseDisplayDensity : newDensity, mIsSizeForced ? mBaseDisplayPhysicalXDpi : newXDpi, mIsSizeForced ? mBaseDisplayPhysicalYDpi : newYDpi); configureDisplayPolicy(); Loading @@ -2758,6 +2777,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mInitialDisplayWidth = newWidth; mInitialDisplayHeight = newHeight; mInitialDisplayDensity = newDensity; mInitialPhysicalXDpi = newXDpi; mInitialPhysicalYDpi = newYDpi; mInitialDisplayCutout = newCutout; mInitialRoundedCorners = newRoundedCorners; mCurrentUniqueDisplayId = newUniqueId; Loading @@ -2774,19 +2795,25 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mMaxUiWidth = width; // Update existing metrics. updateBaseDisplayMetrics(mBaseDisplayWidth, mBaseDisplayHeight, mBaseDisplayDensity); updateBaseDisplayMetrics(mBaseDisplayWidth, mBaseDisplayHeight, mBaseDisplayDensity, mBaseDisplayPhysicalXDpi, mBaseDisplayPhysicalYDpi); } /** Update base (override) display metrics. */ void updateBaseDisplayMetrics(int baseWidth, int baseHeight, int baseDensity) { void updateBaseDisplayMetrics(int baseWidth, int baseHeight, int baseDensity, float baseXDpi, float baseYDpi) { mBaseDisplayWidth = baseWidth; mBaseDisplayHeight = baseHeight; mBaseDisplayDensity = baseDensity; mBaseDisplayPhysicalXDpi = baseXDpi; mBaseDisplayPhysicalYDpi = baseYDpi; if (mMaxUiWidth > 0 && mBaseDisplayWidth > mMaxUiWidth) { final float ratio = mMaxUiWidth / (float) mBaseDisplayWidth; mBaseDisplayHeight = (int) (mBaseDisplayHeight * ratio); mBaseDisplayWidth = mMaxUiWidth; mBaseDisplayPhysicalXDpi = mBaseDisplayPhysicalXDpi * ratio; mBaseDisplayPhysicalYDpi = mBaseDisplayPhysicalYDpi * ratio; if (!mIsDensityForced) { // Update the density proportionally so the size of the UI elements won't change // from the user's perspective. Loading Loading @@ -2860,7 +2887,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } Slog.i(TAG_WM, "Using new display size: " + width + "x" + height); updateBaseDisplayMetrics(width, height, mBaseDisplayDensity); updateBaseDisplayMetrics(width, height, mBaseDisplayDensity, mBaseDisplayPhysicalXDpi, mBaseDisplayPhysicalYDpi); reconfigureDisplayLocked(); if (!mIsSizeForced) { Loading services/core/java/com/android/server/wm/DisplayWindowSettings.java +2 −1 Original line number Diff line number Diff line Loading @@ -277,7 +277,8 @@ class DisplayWindowSettings { final int height = hasSizeOverride ? settings.mForcedHeight : dc.mInitialDisplayHeight; final int density = hasDensityOverride ? settings.mForcedDensity : dc.mInitialDisplayDensity; dc.updateBaseDisplayMetrics(width, height, density); dc.updateBaseDisplayMetrics(width, height, density, dc.mBaseDisplayPhysicalXDpi, dc.mBaseDisplayPhysicalYDpi); final int forcedScalingMode = settings.mForcedScalingMode != null ? settings.mForcedScalingMode : FORCE_SCALING_MODE_AUTO; Loading services/core/java/com/android/server/wm/WindowManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -5691,7 +5691,9 @@ public class WindowManagerService extends IWindowManager.Stub || displayContent.mBaseDisplayHeight != height) { ProtoLog.i(WM_ERROR, "FORCED DISPLAY SIZE: %dx%d", width, height); displayContent.updateBaseDisplayMetrics(width, height, displayContent.mBaseDisplayDensity); displayContent.mBaseDisplayDensity, displayContent.mBaseDisplayPhysicalXDpi, displayContent.mBaseDisplayPhysicalYDpi); changed = true; } } catch (NumberFormatException ex) { Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +43 −12 Original line number Diff line number Diff line Loading @@ -682,31 +682,43 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1440; final int baseHeight = 2560; final int baseDensity = 300; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseYDpi, baseYDpi); final int maxWidth = 300; final int resultingHeight = (maxWidth * baseHeight) / baseWidth; final int resultingDensity = (baseDensity * maxWidth) / baseWidth; final float ratioChange = maxWidth / (float) baseWidth; final int resultingHeight = (int) (baseHeight * ratioChange); final int resultingDensity = (int) (baseDensity * ratioChange); final float resultingXDpi = baseXDpi * ratioChange; final float resultingYDpi = baseYDpi * ratioChange; displayContent.setMaxUiWidth(maxWidth); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity, resultingXDpi, resultingYDpi); // Assert setting values again does not change; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity, resultingXDpi, resultingYDpi); final int smallerWidth = 200; final int smallerHeight = 400; final int smallerDensity = 100; // Specify smaller dimension, verify that it is honored displayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity); displayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity, baseXDpi, baseYDpi); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity, baseXDpi, baseYDpi); // Verify that setting the max width to a greater value than the base width has no effect displayContent.setMaxUiWidth(maxWidth); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity, baseXDpi, baseYDpi); } @Test Loading @@ -716,11 +728,14 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1280; final int baseHeight = 720; final int baseDensity = 320; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.mInitialDisplayWidth = baseWidth; displayContent.mInitialDisplayHeight = baseHeight; displayContent.mInitialDisplayDensity = baseDensity; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); final int forcedWidth = 1920; final int forcedHeight = 1080; Loading @@ -741,11 +756,14 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1280; final int baseHeight = 720; final int baseDensity = 320; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.mInitialDisplayWidth = baseWidth; displayContent.mInitialDisplayHeight = baseHeight; displayContent.mInitialDisplayDensity = baseDensity; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); displayContent.setMaxUiWidth(baseWidth); Loading @@ -767,11 +785,14 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1280; final int baseHeight = 720; final int baseDensity = 320; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.mInitialDisplayWidth = baseWidth; displayContent.mInitialDisplayHeight = baseHeight; displayContent.mInitialDisplayDensity = baseDensity; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); final int forcedDensity = 600; Loading Loading @@ -2513,6 +2534,16 @@ public class DisplayContentTests extends WindowTestsBase { assertEquals(expectedBaseDensity, displayContent.mBaseDisplayDensity); } private static void verifySizes(DisplayContent displayContent, int expectedBaseWidth, int expectedBaseHeight, int expectedBaseDensity, float expectedBaseXDpi, float expectedBaseYDpi) { assertEquals(expectedBaseWidth, displayContent.mBaseDisplayWidth); assertEquals(expectedBaseHeight, displayContent.mBaseDisplayHeight); assertEquals(expectedBaseDensity, displayContent.mBaseDisplayDensity); assertEquals(expectedBaseXDpi, displayContent.mBaseDisplayPhysicalXDpi, 1.0f /* delta */); assertEquals(expectedBaseYDpi, displayContent.mBaseDisplayPhysicalYDpi, 1.0f /* delta */); } private void updateFocusedWindow() { mWm.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, false /* updateInputWindows */); } Loading Loading
services/core/java/com/android/server/display/LogicalDisplay.java +2 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,8 @@ final class LogicalDisplay { info.largestNominalAppHeight = mOverrideDisplayInfo.largestNominalAppHeight; info.logicalWidth = mOverrideDisplayInfo.logicalWidth; info.logicalHeight = mOverrideDisplayInfo.logicalHeight; info.physicalXDpi = mOverrideDisplayInfo.physicalXDpi; info.physicalYDpi = mOverrideDisplayInfo.physicalYDpi; info.rotation = mOverrideDisplayInfo.rotation; info.displayCutout = mOverrideDisplayInfo.displayCutout; info.logicalDensityDpi = mOverrideDisplayInfo.logicalDensityDpi; Loading
services/core/java/com/android/server/wm/DisplayContent.java +35 −7 Original line number Diff line number Diff line Loading @@ -355,6 +355,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp int mInitialDisplayWidth = 0; int mInitialDisplayHeight = 0; int mInitialDisplayDensity = 0; float mInitialPhysicalXDpi = 0.0f; float mInitialPhysicalYDpi = 0.0f; DisplayCutout mInitialDisplayCutout; private final RotationCache<DisplayCutout, WmDisplayCutout> mDisplayCutoutCache Loading Loading @@ -394,6 +396,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp int mBaseDisplayDensity = 0; boolean mIsDensityForced = false; /** * Overridden display physical dpi. */ float mBaseDisplayPhysicalXDpi = 0.0f; float mBaseDisplayPhysicalYDpi = 0.0f; /** * Whether to disable display scaling. This can be set via shell command "adb shell wm scaling". * @see WindowManagerService#setForcedDisplayScalingMode(int, int) Loading Loading @@ -427,7 +435,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** * Compat metrics computed based on {@link #mDisplayMetrics}. * @see #updateDisplayAndOrientation(int) * @see #updateDisplayAndOrientation(int, Configuration) */ private final DisplayMetrics mCompatDisplayMetrics = new DisplayMetrics(); Loading Loading @@ -2035,6 +2043,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mDisplayInfo.logicalWidth = dw; mDisplayInfo.logicalHeight = dh; mDisplayInfo.logicalDensityDpi = mBaseDisplayDensity; mDisplayInfo.physicalXDpi = mBaseDisplayPhysicalXDpi; mDisplayInfo.physicalYDpi = mBaseDisplayPhysicalYDpi; mDisplayInfo.appWidth = appWidth; mDisplayInfo.appHeight = appHeight; if (isDefaultDisplay) { Loading Loading @@ -2697,10 +2707,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } updateBaseDisplayMetrics(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, mDisplayInfo.logicalDensityDpi); mDisplayInfo.logicalDensityDpi, mDisplayInfo.physicalXDpi, mDisplayInfo.physicalYDpi); mInitialDisplayWidth = mDisplayInfo.logicalWidth; mInitialDisplayHeight = mDisplayInfo.logicalHeight; mInitialDisplayDensity = mDisplayInfo.logicalDensityDpi; mInitialPhysicalXDpi = mDisplayInfo.physicalXDpi; mInitialPhysicalYDpi = mDisplayInfo.physicalYDpi; mInitialDisplayCutout = mDisplayInfo.displayCutout; mInitialRoundedCorners = mDisplayInfo.roundedCorners; mCurrentPrivacyIndicatorBounds = new PrivacyIndicatorBounds(new Rect[4], Loading @@ -2719,6 +2732,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final int newWidth = rotated ? mDisplayInfo.logicalHeight : mDisplayInfo.logicalWidth; final int newHeight = rotated ? mDisplayInfo.logicalWidth : mDisplayInfo.logicalHeight; final int newDensity = mDisplayInfo.logicalDensityDpi; final float newXDpi = mDisplayInfo.physicalXDpi; final float newYDpi = mDisplayInfo.physicalYDpi; final DisplayCutout newCutout = mIgnoreDisplayCutout ? DisplayCutout.NO_CUTOUT : mDisplayInfo.displayCutout; final String newUniqueId = mDisplayInfo.uniqueId; Loading @@ -2726,7 +2741,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final boolean displayMetricsChanged = mInitialDisplayWidth != newWidth || mInitialDisplayHeight != newHeight || mInitialDisplayDensity != mDisplayInfo.logicalDensityDpi || mInitialDisplayDensity != newDensity || mInitialPhysicalXDpi != newXDpi || mInitialPhysicalYDpi != newYDpi || !Objects.equals(mInitialDisplayCutout, newCutout) || !Objects.equals(mInitialRoundedCorners, newRoundedCorners); final boolean physicalDisplayChanged = !newUniqueId.equals(mCurrentUniqueDisplayId); Loading @@ -2743,7 +2760,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // If there is an override set for base values - use it, otherwise use new values. updateBaseDisplayMetrics(mIsSizeForced ? mBaseDisplayWidth : newWidth, mIsSizeForced ? mBaseDisplayHeight : newHeight, mIsDensityForced ? mBaseDisplayDensity : newDensity); mIsDensityForced ? mBaseDisplayDensity : newDensity, mIsSizeForced ? mBaseDisplayPhysicalXDpi : newXDpi, mIsSizeForced ? mBaseDisplayPhysicalYDpi : newYDpi); configureDisplayPolicy(); Loading @@ -2758,6 +2777,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mInitialDisplayWidth = newWidth; mInitialDisplayHeight = newHeight; mInitialDisplayDensity = newDensity; mInitialPhysicalXDpi = newXDpi; mInitialPhysicalYDpi = newYDpi; mInitialDisplayCutout = newCutout; mInitialRoundedCorners = newRoundedCorners; mCurrentUniqueDisplayId = newUniqueId; Loading @@ -2774,19 +2795,25 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mMaxUiWidth = width; // Update existing metrics. updateBaseDisplayMetrics(mBaseDisplayWidth, mBaseDisplayHeight, mBaseDisplayDensity); updateBaseDisplayMetrics(mBaseDisplayWidth, mBaseDisplayHeight, mBaseDisplayDensity, mBaseDisplayPhysicalXDpi, mBaseDisplayPhysicalYDpi); } /** Update base (override) display metrics. */ void updateBaseDisplayMetrics(int baseWidth, int baseHeight, int baseDensity) { void updateBaseDisplayMetrics(int baseWidth, int baseHeight, int baseDensity, float baseXDpi, float baseYDpi) { mBaseDisplayWidth = baseWidth; mBaseDisplayHeight = baseHeight; mBaseDisplayDensity = baseDensity; mBaseDisplayPhysicalXDpi = baseXDpi; mBaseDisplayPhysicalYDpi = baseYDpi; if (mMaxUiWidth > 0 && mBaseDisplayWidth > mMaxUiWidth) { final float ratio = mMaxUiWidth / (float) mBaseDisplayWidth; mBaseDisplayHeight = (int) (mBaseDisplayHeight * ratio); mBaseDisplayWidth = mMaxUiWidth; mBaseDisplayPhysicalXDpi = mBaseDisplayPhysicalXDpi * ratio; mBaseDisplayPhysicalYDpi = mBaseDisplayPhysicalYDpi * ratio; if (!mIsDensityForced) { // Update the density proportionally so the size of the UI elements won't change // from the user's perspective. Loading Loading @@ -2860,7 +2887,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } Slog.i(TAG_WM, "Using new display size: " + width + "x" + height); updateBaseDisplayMetrics(width, height, mBaseDisplayDensity); updateBaseDisplayMetrics(width, height, mBaseDisplayDensity, mBaseDisplayPhysicalXDpi, mBaseDisplayPhysicalYDpi); reconfigureDisplayLocked(); if (!mIsSizeForced) { Loading
services/core/java/com/android/server/wm/DisplayWindowSettings.java +2 −1 Original line number Diff line number Diff line Loading @@ -277,7 +277,8 @@ class DisplayWindowSettings { final int height = hasSizeOverride ? settings.mForcedHeight : dc.mInitialDisplayHeight; final int density = hasDensityOverride ? settings.mForcedDensity : dc.mInitialDisplayDensity; dc.updateBaseDisplayMetrics(width, height, density); dc.updateBaseDisplayMetrics(width, height, density, dc.mBaseDisplayPhysicalXDpi, dc.mBaseDisplayPhysicalYDpi); final int forcedScalingMode = settings.mForcedScalingMode != null ? settings.mForcedScalingMode : FORCE_SCALING_MODE_AUTO; Loading
services/core/java/com/android/server/wm/WindowManagerService.java +3 −1 Original line number Diff line number Diff line Loading @@ -5691,7 +5691,9 @@ public class WindowManagerService extends IWindowManager.Stub || displayContent.mBaseDisplayHeight != height) { ProtoLog.i(WM_ERROR, "FORCED DISPLAY SIZE: %dx%d", width, height); displayContent.updateBaseDisplayMetrics(width, height, displayContent.mBaseDisplayDensity); displayContent.mBaseDisplayDensity, displayContent.mBaseDisplayPhysicalXDpi, displayContent.mBaseDisplayPhysicalYDpi); changed = true; } } catch (NumberFormatException ex) { Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +43 −12 Original line number Diff line number Diff line Loading @@ -682,31 +682,43 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1440; final int baseHeight = 2560; final int baseDensity = 300; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseYDpi, baseYDpi); final int maxWidth = 300; final int resultingHeight = (maxWidth * baseHeight) / baseWidth; final int resultingDensity = (baseDensity * maxWidth) / baseWidth; final float ratioChange = maxWidth / (float) baseWidth; final int resultingHeight = (int) (baseHeight * ratioChange); final int resultingDensity = (int) (baseDensity * ratioChange); final float resultingXDpi = baseXDpi * ratioChange; final float resultingYDpi = baseYDpi * ratioChange; displayContent.setMaxUiWidth(maxWidth); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity, resultingXDpi, resultingYDpi); // Assert setting values again does not change; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity, resultingXDpi, resultingYDpi); final int smallerWidth = 200; final int smallerHeight = 400; final int smallerDensity = 100; // Specify smaller dimension, verify that it is honored displayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity); displayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity, baseXDpi, baseYDpi); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity, baseXDpi, baseYDpi); // Verify that setting the max width to a greater value than the base width has no effect displayContent.setMaxUiWidth(maxWidth); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity); verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity, baseXDpi, baseYDpi); } @Test Loading @@ -716,11 +728,14 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1280; final int baseHeight = 720; final int baseDensity = 320; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.mInitialDisplayWidth = baseWidth; displayContent.mInitialDisplayHeight = baseHeight; displayContent.mInitialDisplayDensity = baseDensity; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); final int forcedWidth = 1920; final int forcedHeight = 1080; Loading @@ -741,11 +756,14 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1280; final int baseHeight = 720; final int baseDensity = 320; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.mInitialDisplayWidth = baseWidth; displayContent.mInitialDisplayHeight = baseHeight; displayContent.mInitialDisplayDensity = baseDensity; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); displayContent.setMaxUiWidth(baseWidth); Loading @@ -767,11 +785,14 @@ public class DisplayContentTests extends WindowTestsBase { final int baseWidth = 1280; final int baseHeight = 720; final int baseDensity = 320; final float baseXDpi = 60; final float baseYDpi = 60; displayContent.mInitialDisplayWidth = baseWidth; displayContent.mInitialDisplayHeight = baseHeight; displayContent.mInitialDisplayDensity = baseDensity; displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity); displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi, baseYDpi); final int forcedDensity = 600; Loading Loading @@ -2513,6 +2534,16 @@ public class DisplayContentTests extends WindowTestsBase { assertEquals(expectedBaseDensity, displayContent.mBaseDisplayDensity); } private static void verifySizes(DisplayContent displayContent, int expectedBaseWidth, int expectedBaseHeight, int expectedBaseDensity, float expectedBaseXDpi, float expectedBaseYDpi) { assertEquals(expectedBaseWidth, displayContent.mBaseDisplayWidth); assertEquals(expectedBaseHeight, displayContent.mBaseDisplayHeight); assertEquals(expectedBaseDensity, displayContent.mBaseDisplayDensity); assertEquals(expectedBaseXDpi, displayContent.mBaseDisplayPhysicalXDpi, 1.0f /* delta */); assertEquals(expectedBaseYDpi, displayContent.mBaseDisplayPhysicalYDpi, 1.0f /* delta */); } private void updateFocusedWindow() { mWm.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, false /* updateInputWindows */); } Loading