From 292826ee35dff9abd0ccedd19153ea0bb5c8dda7 Mon Sep 17 00:00:00 2001 From: Mariia Sandrikova Date: Sun, 25 Dec 2022 19:47:59 +0000 Subject: [PATCH] Add a way to disable auto rotation for immersive apps Provide a way to always show a rotation button instead of auto rotating for immersive applications when the following conditions are met: 1) Top activity requests to hide status and navigation bars 2) Top activity is fullscreen and in optimal orientation (without letterboxing) 3) Rotation will lead to letterboxing due to fixed orientation. 4) ignoreOrientationRequest is enabled and config_letterboxIsDisplayRotationImmersiveAppCompatPolicyEnabled is enabled This is needed because immersive apps, such as games, are often not optimized for all orientations and can have a poor UX when rotated. Additionally, some games relying on sensors for the gameplay so users can trigger such rotations accidentally when auto rotation is on. Test: atest LetterboxConfigurationDeviceConfigTests DisplayRotationCompatPolicyForImmersiveAppsTests Bug: 251404186 Change-Id: I0b5d8f666b8bec9bd9d6fb5303986d3c288e283f --- core/res/res/values/config.xml | 8 + core/res/res/values/symbols.xml | 1 + .../rotation/RotationButtonController.java | 3 +- .../com/android/server/wm/DisplayContent.java | 1 + .../android/server/wm/DisplayRotation.java | 36 ++- ...splayRotationImmersiveAppCompatPolicy.java | 158 +++++++++++++ .../server/wm/LetterboxConfiguration.java | 61 +++-- .../LetterboxConfigurationDeviceConfig.java | 120 ++++++++++ services/tests/wmtests/Android.bp | 4 + ...RotationImmersiveAppCompatPolicyTests.java | 219 ++++++++++++++++++ .../server/wm/DisplayRotationTests.java | 10 +- ...tterboxConfigurationDeviceConfigTests.java | 109 +++++++++ 12 files changed, 706 insertions(+), 24 deletions(-) create mode 100644 services/core/java/com/android/server/wm/DisplayRotationImmersiveAppCompatPolicy.java create mode 100644 services/core/java/com/android/server/wm/LetterboxConfigurationDeviceConfig.java create mode 100644 services/tests/wmtests/src/com/android/server/wm/DisplayRotationImmersiveAppCompatPolicyTests.java create mode 100644 services/tests/wmtests/src/com/android/server/wm/LetterboxConfigurationDeviceConfigTests.java diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index aad88c45f9563..24de6ad48ca38 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -5245,6 +5245,14 @@ having a separating hinge. --> false + + false +