Merge "Disable fullscreen override while camera is active." into 24D1-dev
diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java
index 7192a20..b8f01b8 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 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 @@
// 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 @@
}
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 @@
}
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 80f2ada..0810258 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 @@
/* 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 @@
// Recreate DisplayContent with DisplayRotationCompatPolicy
mActivity = setUpActivityWithComponent();
mController = new LetterboxUiController(mWm, mActivity);
- spyOn(mDisplayContent.mDisplayRotationCompatPolicy);
+ spyOn(mController);
+ doReturn(true).when(mController).shouldApplyUserFullscreenOverride();
- doReturn(false).when(mDisplayContent.mDisplayRotationCompatPolicy)
+ spyOn(mDisplayContent.mDisplayRotationCompatPolicy);
+ doReturn(true).when(mDisplayContent.mDisplayRotationCompatPolicy)
+ .isCameraActive(mActivity, /* mustBeFullscreen= */ true);
+
+ 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 @@
}
@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 @@
}
@Test
- public void testShouldApplyUserMinAspectRatioOverride_noIgnoreOrientationreturnsFalse() {
+ public void testShouldApplyUserMinAspectRatioOverride_noIgnoreOrientation_returnsFalse() {
prepareActivityForShouldApplyUserMinAspectRatioOverride(/* orientationRequest */ false);
assertFalse(mController.shouldApplyUserMinAspectRatioOverride());