diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/LetterboxUiController.java | 30 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java | 30 |
2 files changed, 42 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java index 7192a20935da..b8f01b8721e5 100644 --- a/services/core/java/com/android/server/wm/LetterboxUiController.java +++ b/services/core/java/com/android/server/wm/LetterboxUiController.java @@ -610,7 +610,13 @@ final class LetterboxUiController { final DisplayContent displayContent = mActivityRecord.mDisplayContent; final boolean isIgnoreOrientationRequestEnabled = displayContent != null && displayContent.getIgnoreOrientationRequest(); - if (shouldApplyUserFullscreenOverride() && isIgnoreOrientationRequestEnabled) { + if (shouldApplyUserFullscreenOverride() && isIgnoreOrientationRequestEnabled + // Do not override orientation to fullscreen for camera activities. + // Fixed-orientation activities are rarely tested in other orientations, and it + // often results in sideways or stretched previews. As the camera compat treatment + // targets fixed-orientation activities, overriding the orientation disables the + // treatment. + && !mActivityRecord.isCameraActive()) { Slog.v(TAG, "Requested orientation " + screenOrientationToString(candidate) + " for " + mActivityRecord + " is overridden to " + screenOrientationToString(SCREEN_ORIENTATION_USER) @@ -645,7 +651,13 @@ final class LetterboxUiController { // mUserAspectRatio is always initialized first in shouldApplyUserFullscreenOverride(), // which will always come first before this check as user override > device // manufacturer override. - if (isSystemOverrideToFullscreenEnabled() && isIgnoreOrientationRequestEnabled) { + if (isSystemOverrideToFullscreenEnabled() && isIgnoreOrientationRequestEnabled + // Do not override orientation to fullscreen for camera activities. + // Fixed-orientation activities are rarely tested in other orientations, and it + // often results in sideways or stretched previews. As the camera compat treatment + // targets fixed-orientation activities, overriding the orientation disables the + // treatment. + && !mActivityRecord.isCameraActive()) { Slog.v(TAG, "Requested orientation " + screenOrientationToString(candidate) + " for " + mActivityRecord + " is overridden to " + screenOrientationToString(SCREEN_ORIENTATION_USER)); @@ -1131,17 +1143,6 @@ final class LetterboxUiController { } boolean shouldApplyUserFullscreenOverride() { - // Do not override orientation to fullscreen for camera activities. - // Fixed-orientation activities are rarely tested in other orientations, and it often - // results in sideways or stretched previews. As the camera compat treatment targets - // fixed-orientation activities, overriding the orientation disables the treatment. - final DisplayContent displayContent = mActivityRecord.mDisplayContent; - if (displayContent != null && displayContent.mDisplayRotationCompatPolicy != null - && displayContent.mDisplayRotationCompatPolicy - .isCameraActive(mActivityRecord, /* mustBeFullscreen= */ true)) { - return false; - } - if (isUserFullscreenOverrideEnabled()) { mUserAspectRatio = getUserMinAspectRatioOverrideCode(); @@ -1159,7 +1160,8 @@ final class LetterboxUiController { } boolean hasFullscreenOverride() { - return isSystemOverrideToFullscreenEnabled() || shouldApplyUserFullscreenOverride(); + // `mUserAspectRatio` is always initialized first in `shouldApplyUserFullscreenOverride()`. + return shouldApplyUserFullscreenOverride() || isSystemOverrideToFullscreenEnabled(); } float getUserMinAspectRatio() { diff --git a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java index 80f2ada34197..081025895013 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java @@ -867,7 +867,7 @@ public class LetterboxUiControllerTest extends WindowTestsBase { /* candidate */ SCREEN_ORIENTATION_UNSPECIFIED)); } @Test - public void testOverrideOrientationIfNeeded_fullscreenOverride_cameraActivity_unchanged() { + public void testOverrideOrientationIfNeeded_userFullscreenOverride_cameraActivity_noChange() { doReturn(true).when(mLetterboxConfiguration).isCameraCompatTreatmentEnabled(); doReturn(true).when(mLetterboxConfiguration) .isCameraCompatTreatmentEnabledAtBuildTime(); @@ -875,9 +875,31 @@ public class LetterboxUiControllerTest extends WindowTestsBase { // Recreate DisplayContent with DisplayRotationCompatPolicy mActivity = setUpActivityWithComponent(); mController = new LetterboxUiController(mWm, mActivity); + spyOn(mController); + doReturn(true).when(mController).shouldApplyUserFullscreenOverride(); + spyOn(mDisplayContent.mDisplayRotationCompatPolicy); + doReturn(true).when(mDisplayContent.mDisplayRotationCompatPolicy) + .isCameraActive(mActivity, /* mustBeFullscreen= */ true); - doReturn(false).when(mDisplayContent.mDisplayRotationCompatPolicy) + assertEquals(SCREEN_ORIENTATION_PORTRAIT, mController.overrideOrientationIfNeeded( + /* candidate */ SCREEN_ORIENTATION_PORTRAIT)); + } + + @Test + public void testOverrideOrientationIfNeeded_systemFullscreenOverride_cameraActivity_noChange() { + doReturn(true).when(mLetterboxConfiguration).isCameraCompatTreatmentEnabled(); + doReturn(true).when(mLetterboxConfiguration) + .isCameraCompatTreatmentEnabledAtBuildTime(); + + // Recreate DisplayContent with DisplayRotationCompatPolicy + mActivity = setUpActivityWithComponent(); + mController = new LetterboxUiController(mWm, mActivity); + spyOn(mController); + doReturn(true).when(mController).isSystemOverrideToFullscreenEnabled(); + + spyOn(mDisplayContent.mDisplayRotationCompatPolicy); + doReturn(true).when(mDisplayContent.mDisplayRotationCompatPolicy) .isCameraActive(mActivity, /* mustBeFullscreen= */ true); assertEquals(SCREEN_ORIENTATION_PORTRAIT, mController.overrideOrientationIfNeeded( @@ -1015,7 +1037,7 @@ public class LetterboxUiControllerTest extends WindowTestsBase { } @Test - public void testShouldEnableUserAspectRatioSettings_noIgnoreOrientaion_returnsFalse() + public void testShouldEnableUserAspectRatioSettings_noIgnoreOrientation_returnsFalse() throws Exception { prepareActivityForShouldApplyUserMinAspectRatioOverride(/* orientationRequest */ false); mockThatProperty(PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE, /* value */ true); @@ -1063,7 +1085,7 @@ public class LetterboxUiControllerTest extends WindowTestsBase { } @Test - public void testShouldApplyUserMinAspectRatioOverride_noIgnoreOrientationreturnsFalse() { + public void testShouldApplyUserMinAspectRatioOverride_noIgnoreOrientation_returnsFalse() { prepareActivityForShouldApplyUserMinAspectRatioOverride(/* orientationRequest */ false); assertFalse(mController.shouldApplyUserMinAspectRatioOverride()); |