diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java index 2a1883d5e0bbd..d275c8336251d 100644 --- a/core/java/android/app/ResourcesManager.java +++ b/core/java/android/app/ResourcesManager.java @@ -365,8 +365,8 @@ public class ResourcesManager { @NonNull Configuration config) { config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH; config.densityDpi = dm.densityDpi; - config.screenWidthDp = (int) (dm.widthPixels / dm.density); - config.screenHeightDp = (int) (dm.heightPixels / dm.density); + config.screenWidthDp = (int) (dm.widthPixels / dm.density + 0.5f); + config.screenHeightDp = (int) (dm.heightPixels / dm.density + 0.5f); int sl = Configuration.resetScreenLayout(config.screenLayout); if (dm.widthPixels > dm.heightPixels) { config.orientation = Configuration.ORIENTATION_LANDSCAPE; diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 17ce26535e3aa..d22daf5b8dd61 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2210,9 +2210,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final float density = mDisplayMetrics.density; outConfig.screenWidthDp = (int) (mDisplayPolicy.getConfigDisplayWidth(dw, dh, rotation, - uiMode, displayCutout) / density); + uiMode, displayCutout) / density + 0.5f); outConfig.screenHeightDp = (int) (mDisplayPolicy.getConfigDisplayHeight(dw, dh, rotation, - uiMode, displayCutout) / density); + uiMode, displayCutout) / density + 0.5f); outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale); outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale); diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index 89dfffb532ea1..4004a359a42d3 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -2212,23 +2212,28 @@ public class DisplayContentTests extends WindowTestsBase { */ @Test public void testCreateTestDisplayContentFromDimensions() { - final int displayWidth = 1000; - final int displayHeight = 2000; + final int displayWidth = 540; + final int displayHeight = 960; + final int density = 192; + final int expectedWidthDp = 450; // = 540/(192/160) + final int expectedHeightDp = 800; // = 960/(192/160) final int windowingMode = WINDOWING_MODE_FULLSCREEN; final boolean ignoreOrientationRequests = false; final float fixedOrientationLetterboxRatio = 0; final DisplayContent testDisplayContent = new TestDisplayContent.Builder(mAtm, displayWidth, - displayHeight).build(); + displayHeight).setDensityDpi(density).build(); // test display info final DisplayInfo di = testDisplayContent.getDisplayInfo(); assertEquals(displayWidth, di.logicalWidth); assertEquals(displayHeight, di.logicalHeight); - assertEquals(TestDisplayContent.DEFAULT_LOGICAL_DISPLAY_DENSITY, di.logicalDensityDpi); + assertEquals(density, di.logicalDensityDpi); // test configuration - final WindowConfiguration windowConfig = testDisplayContent.getConfiguration() - .windowConfiguration; + final Configuration config = testDisplayContent.getConfiguration(); + assertEquals(expectedWidthDp, config.screenWidthDp); + assertEquals(expectedHeightDp, config.screenHeightDp); + final WindowConfiguration windowConfig = config.windowConfiguration; assertEquals(displayWidth, windowConfig.getBounds().width()); assertEquals(displayHeight, windowConfig.getBounds().height()); assertEquals(windowingMode, windowConfig.getWindowingMode());