Round screen size of configuration

To avoid precision problem of float, such as
(int)(960/1.2f)=799
(int)(960/1.2f+0.5f)=800

(int)(540/1.2f)=449
(int)(540/1.2f+0.5f)=450

Bug: 204481252
Test: DisplayContentTests#testCreateTestDisplayContentFromDimensions
Change-Id: I8f78d9bd14b7fb9d12a20a662ad4ec04f82ce7f2
This commit is contained in:
Riddle Hsu
2022-05-12 00:51:09 +08:00
parent c3565a503d
commit 5bfdaddc98
3 changed files with 15 additions and 10 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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());