diff options
author | Mark Hong <sungmin.h@samsung.com> | 2020-01-10 10:20:45 -0800 |
---|---|---|
committer | Mark Hong <sungmin.h@samsung.com> | 2020-01-21 11:56:14 -0800 |
commit | 61fbb72c8f2cbd9fa0611ae54749666debc99923 (patch) | |
tree | 6a96f720f4b5a3a63ce9533ae30c2d91cffc7c23 | |
parent | 9f797b8f2a4606c873c7351e729c3d67f2d3a2fb (diff) | |
download | base-61fbb72c8f2cbd9fa0611ae54749666debc99923.tar.gz |
Apply proper displayCutout rotation in density 480 dpi and 270 degrees rotation.
In case device has 480 dpi and rotating the degrees then shortSizeDp value is less than 480 because of diaplay cutout.
So ScreenLayoutSize will not be properly set and there is difference in between expectedScreenLayout and actualScreenLayout.
In order to fix this issue, displayCutout should also be rotated while in calculating reduceConfigLayout.
Bug: b/147473991
Test: run cts-on-gsi -m CtsDpiTestCases -t android.dpi.cts.ConfigurationScreenLayyoutTest#testScreenLayout
Change-Id: Ie3d615e494cb3fd21f4388e969e5e637860b86ac
Signed-off-by: Mark Hong <sungmin.h@samsung.com>
-rwxr-xr-x[-rw-r--r--] | services/core/java/com/android/server/wm/DisplayContent.java | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index b837d9ec874b..771fb12cc0fb 100644..100755 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -338,7 +338,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo */ final DisplayMetrics mRealDisplayMetrics = new DisplayMetrics(); - /** @see #computeCompatSmallestWidth(boolean, int, int, int, DisplayCutout) */ + /** @see #computeCompatSmallestWidth(boolean, int, int, int) */ private final DisplayMetrics mTmpDisplayMetrics = new DisplayMetrics(); /** @@ -1709,7 +1709,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo config.compatScreenWidthDp = (int)(config.screenWidthDp / mCompatibleScreenScale); config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale); config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, config.uiMode, dw, - dh, displayInfo.displayCutout); + dh); config.densityDpi = displayInfo.logicalDensityDpi; config.colorMode = @@ -1794,8 +1794,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mWmService.mPolicy.adjustConfigurationLw(config, keyboardPresence, navigationPresence); } - private int computeCompatSmallestWidth(boolean rotated, int uiMode, int dw, int dh, - DisplayCutout displayCutout) { + private int computeCompatSmallestWidth(boolean rotated, int uiMode, int dw, int dh) { mTmpDisplayMetrics.setTo(mDisplayMetrics); final DisplayMetrics tmpDm = mTmpDisplayMetrics; final int unrotDw, unrotDh; @@ -1806,19 +1805,21 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo unrotDw = dw; unrotDh = dh; } - int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw, unrotDh, - displayCutout); - sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh, unrotDw, - displayCutout); - sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw, unrotDh, - displayCutout); - sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh, unrotDw, - displayCutout); + int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw, + unrotDh); + sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh, + unrotDw); + sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw, + unrotDh); + sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh, + unrotDw); return sw; } private int reduceCompatConfigWidthSize(int curSize, int rotation, int uiMode, - DisplayMetrics dm, int dw, int dh, DisplayCutout displayCutout) { + DisplayMetrics dm, int dw, int dh) { + final DisplayCutout displayCutout = calculateDisplayCutoutForRotation( + rotation).getDisplayCutout(); dm.noncompatWidthPixels = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayCutout); dm.noncompatHeightPixels = mDisplayPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, @@ -1859,20 +1860,20 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo return; } int sl = Configuration.resetScreenLayout(outConfig.screenLayout); - sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode, - displayInfo.displayCutout); - sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode, - displayInfo.displayCutout); - sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode, - displayInfo.displayCutout); - sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode, - displayInfo.displayCutout); + sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode); + sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode); + sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode); + sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode); outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density); outConfig.screenLayout = sl; } private int reduceConfigLayout(int curLayout, int rotation, float density, int dw, int dh, - int uiMode, DisplayCutout displayCutout) { + int uiMode) { + // Get the display cutout at this rotation. + final DisplayCutout displayCutout = calculateDisplayCutoutForRotation( + rotation).getDisplayCutout(); + // Get the app screen size at this rotation. int w = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayCutout); int h = mDisplayPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, displayCutout); |