summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2023-11-02 20:57:39 +0800
committer Riddle Hsu <riddlehsu@google.com> 2023-11-03 21:50:41 +0800
commitc545ce99d147cbb0a2808a20d501bd42d223fd81 (patch)
tree0049bc1f3d349939a9472185827994fe4f2774c8
parent488eb9856a19aa14faaaca1ae056d960531278d3 (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.java3
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java7
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