From f7eeb3d63f2cebb6abb501d05c543737263d5d97 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 Merged-In: 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 | 161 +++++++++++++ .../server/wm/LetterboxConfiguration.java | 61 ++++- .../LetterboxConfigurationDeviceConfig.java | 120 ++++++++++ services/tests/wmtests/Android.bp | 4 + ...RotationImmersiveAppCompatPolicyTests.java | 225 ++++++++++++++++++ .../server/wm/DisplayRotationTests.java | 10 +- ...tterboxConfigurationDeviceConfigTests.java | 109 +++++++++ 12 files changed, 715 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 f7187c466799b..2f5efd12a2ba8 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -5213,6 +5213,14 @@ having a separating hinge. --> false + + false +