diff options
| author | 2023-11-02 20:57:39 +0800 | |
|---|---|---|
| committer | 2023-11-03 21:50:41 +0800 | |
| commit | c545ce99d147cbb0a2808a20d501bd42d223fd81 (patch) | |
| tree | 0049bc1f3d349939a9472185827994fe4f2774c8 | |
| parent | 488eb9856a19aa14faaaca1ae056d960531278d3 (diff) | |
Compute configuration orientation by available screen size
It aligns the same calculation as
TaskFragment#computeConfigResourceOverrides.
Otherwise when the display size is close to square and there are
decor windows, the configuration of activity and non-activity
component will be inconsistent.
Bug: 233855302
Test: atest DisplayContentTests#testOrientationForAspectRatio
Change-Id: If6a1d5e28b51b14a2d154872b3e65f6b3c82c101
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 3 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index f31490060fc8..336bcf953788 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2422,13 +2422,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp // AppBounds at the root level should mirror the app screen size. outConfig.windowConfiguration.setAppBounds(info.mNonDecorFrame); outConfig.windowConfiguration.setRotation(rotation); - outConfig.orientation = (dw <= dh) ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; final float density = mDisplayMetrics.density; outConfig.screenWidthDp = (int) (info.mConfigFrame.width() / density + 0.5f); outConfig.screenHeightDp = (int) (info.mConfigFrame.height() / density + 0.5f); outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale); outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale); + outConfig.orientation = (outConfig.screenWidthDp <= outConfig.screenHeightDp) + ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; outConfig.screenLayout = computeScreenLayout( Configuration.resetScreenLayout(outConfig.screenLayout), outConfig.screenWidthDp, outConfig.screenHeightDp); 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 c2b7fec4ff66..c698b055135c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -969,6 +969,13 @@ public class DisplayContentTests extends WindowTestsBase { assertEquals( "Screen orientation must be defined by the window even on close-to-square display.", window.mAttrs.screenOrientation, dc.getOrientation()); + + // Assume that a decor window occupies the display height, so the configuration orientation + // should be landscape. + dc.getDisplayPolicy().getDecorInsetsInfo(ROTATION_0, dc.mBaseDisplayHeight, + dc.mBaseDisplayWidth).mConfigFrame.set(0, 0, 1000, 990); + dc.computeScreenConfiguration(config, ROTATION_0); + assertEquals(Configuration.ORIENTATION_LANDSCAPE, config.orientation); } @Test |