diff options
10 files changed, 165 insertions, 106 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 29727717bfc1..0b36c7eb5fdf 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -6429,11 +6429,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // and the token could be null. return; } - final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy - .getAppCompatCameraPolicy(r); - if (cameraPolicy != null) { - cameraPolicy.onActivityRefreshed(r); - } + AppCompatCameraPolicy.onActivityRefreshed(r); } static void splashScreenAttachedLocked(IBinder token) { @@ -9476,11 +9472,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A return; } - final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy( - this); - if (cameraPolicy != null) { - cameraPolicy.onActivityConfigurationChanging(this, newConfig, lastReportedConfig); - } + AppCompatCameraPolicy.onActivityConfigurationChanging(this, newConfig, lastReportedConfig); } /** Get process configuration, or global config if the process is not set. */ diff --git a/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java b/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java index 0e666296dc33..d59046f44129 100644 --- a/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java +++ b/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java @@ -255,13 +255,10 @@ class AppCompatAspectRatioOverrides { mActivityRecord.getOverrideOrientation()); final AppCompatCameraOverrides cameraOverrides = mActivityRecord.mAppCompatController.getAppCompatCameraOverrides(); - final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy( - mActivityRecord); // Don't resize to split screen size when in book mode if letterbox position is centered return (isBookMode && isNotCenteredHorizontally || isTabletopMode && isLandscape) || cameraOverrides.isCameraCompatSplitScreenAspectRatioAllowed() - && (cameraPolicy != null - && cameraPolicy.isTreatmentEnabledForActivity(mActivityRecord)); + && AppCompatCameraPolicy.isTreatmentEnabledForActivity(mActivityRecord); } /** diff --git a/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java b/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java index 3b023fe451bf..548c0a34bf99 100644 --- a/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java +++ b/services/core/java/com/android/server/wm/AppCompatAspectRatioPolicy.java @@ -74,11 +74,9 @@ class AppCompatAspectRatioPolicy { @NonNull Rect parentBounds) { // If in camera compat mode, aspect ratio from the camera compat policy has priority over // default letterbox aspect ratio. - final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy( - mActivityRecord); - if (cameraPolicy != null && cameraPolicy.shouldCameraCompatControlAspectRatio( + if (AppCompatCameraPolicy.shouldCameraCompatControlAspectRatio( mActivityRecord)) { - return cameraPolicy.getCameraCompatAspectRatio(mActivityRecord); + return AppCompatCameraPolicy.getCameraCompatAspectRatio(mActivityRecord); } final float letterboxAspectRatioOverride = @@ -128,12 +126,8 @@ class AppCompatAspectRatioPolicy { if (aspectRatioOverrides.shouldApplyUserMinAspectRatioOverride()) { return aspectRatioOverrides.getUserMinAspectRatio(); } - final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy( - mActivityRecord); - final boolean shouldOverrideMinAspectRatioForCamera = cameraPolicy != null - && cameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord); if (!aspectRatioOverrides.shouldOverrideMinAspectRatio() - && !shouldOverrideMinAspectRatioForCamera) { + && !AppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord)) { if (mActivityRecord.isUniversalResizeable()) { return 0; } diff --git a/services/core/java/com/android/server/wm/AppCompatCameraPolicy.java b/services/core/java/com/android/server/wm/AppCompatCameraPolicy.java index f6090eb89345..1d00136ccfe1 100644 --- a/services/core/java/com/android/server/wm/AppCompatCameraPolicy.java +++ b/services/core/java/com/android/server/wm/AppCompatCameraPolicy.java @@ -70,9 +70,10 @@ class AppCompatCameraPolicy { } } - void onActivityRefreshed(@NonNull ActivityRecord activity) { - if (mActivityRefresher != null) { - mActivityRefresher.onActivityRefreshed(activity); + static void onActivityRefreshed(@NonNull ActivityRecord activity) { + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + if (cameraPolicy != null && cameraPolicy.mActivityRefresher != null) { + cameraPolicy.mActivityRefresher.onActivityRefreshed(activity); } } @@ -88,10 +89,11 @@ class AppCompatCameraPolicy { * camera preview and can lead to sideways or stretching issues persisting even after force * rotation. */ - void onActivityConfigurationChanging(@NonNull ActivityRecord activity, + static void onActivityConfigurationChanging(@NonNull ActivityRecord activity, @NonNull Configuration newConfig, @NonNull Configuration lastReportedConfig) { - if (mActivityRefresher != null) { - mActivityRefresher.onActivityConfigurationChanging(activity, newConfig, + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + if (cameraPolicy != null && cameraPolicy.mActivityRefresher != null) { + cameraPolicy.mActivityRefresher.onActivityConfigurationChanging(activity, newConfig, lastReportedConfig); } } @@ -108,11 +110,11 @@ class AppCompatCameraPolicy { } } - boolean isActivityEligibleForOrientationOverride(@NonNull ActivityRecord activity) { - if (mDisplayRotationCompatPolicy != null) { - return mDisplayRotationCompatPolicy.isActivityEligibleForOrientationOverride(activity); - } - return false; + static boolean isActivityEligibleForOrientationOverride(@NonNull ActivityRecord activity) { + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + return cameraPolicy != null && cameraPolicy.mDisplayRotationCompatPolicy != null + && cameraPolicy.mDisplayRotationCompatPolicy + .isActivityEligibleForOrientationOverride(activity); } /** @@ -125,11 +127,11 @@ class AppCompatCameraPolicy { * <li>The activity has fixed orientation but not "locked" or "nosensor" one. * </ul> */ - boolean isTreatmentEnabledForActivity(@Nullable ActivityRecord activity) { - if (mDisplayRotationCompatPolicy != null) { - return mDisplayRotationCompatPolicy.isTreatmentEnabledForActivity(activity); - } - return false; + static boolean isTreatmentEnabledForActivity(@NonNull ActivityRecord activity) { + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + return cameraPolicy != null && cameraPolicy.mDisplayRotationCompatPolicy != null + && cameraPolicy.mDisplayRotationCompatPolicy + .isTreatmentEnabledForActivity(activity); } void start() { @@ -176,23 +178,31 @@ class AppCompatCameraPolicy { } // TODO(b/369070416): have policies implement the same interface. - boolean shouldCameraCompatControlOrientation(@NonNull ActivityRecord activity) { - return (mDisplayRotationCompatPolicy != null - && mDisplayRotationCompatPolicy.shouldCameraCompatControlOrientation( - activity)) - || (mCameraCompatFreeformPolicy != null - && mCameraCompatFreeformPolicy.shouldCameraCompatControlOrientation( - activity)); + static boolean shouldCameraCompatControlOrientation(@NonNull ActivityRecord activity) { + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + if (cameraPolicy == null) { + return false; + } + return (cameraPolicy.mDisplayRotationCompatPolicy != null + && cameraPolicy.mDisplayRotationCompatPolicy + .shouldCameraCompatControlOrientation(activity)) + || (cameraPolicy.mCameraCompatFreeformPolicy != null + && cameraPolicy.mCameraCompatFreeformPolicy + .shouldCameraCompatControlOrientation(activity)); } // TODO(b/369070416): have policies implement the same interface. - boolean shouldCameraCompatControlAspectRatio(@NonNull ActivityRecord activity) { - return (mDisplayRotationCompatPolicy != null - && mDisplayRotationCompatPolicy.shouldCameraCompatControlAspectRatio( - activity)) - || (mCameraCompatFreeformPolicy != null - && mCameraCompatFreeformPolicy.shouldCameraCompatControlAspectRatio( - activity)); + static boolean shouldCameraCompatControlAspectRatio(@NonNull ActivityRecord activity) { + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + if (cameraPolicy == null) { + return false; + } + return (cameraPolicy.mDisplayRotationCompatPolicy != null + && cameraPolicy.mDisplayRotationCompatPolicy + .shouldCameraCompatControlAspectRatio(activity)) + || (cameraPolicy.mCameraCompatFreeformPolicy != null + && cameraPolicy.mCameraCompatFreeformPolicy + .shouldCameraCompatControlAspectRatio(activity)); } // TODO(b/369070416): have policies implement the same interface. @@ -200,29 +210,41 @@ class AppCompatCameraPolicy { * @return {@code true} if the Camera is active for the provided {@link ActivityRecord} and * any camera compat treatment could be triggered for the current windowing mode. */ - private boolean isCameraRunningAndWindowingModeEligible(@NonNull ActivityRecord activity) { - return (mDisplayRotationCompatPolicy != null - && mDisplayRotationCompatPolicy.isCameraRunningAndWindowingModeEligible(activity, - /* mustBeFullscreen */ true)) - || (mCameraCompatFreeformPolicy != null && mCameraCompatFreeformPolicy - .isCameraRunningAndWindowingModeEligible(activity)); + private static boolean isCameraRunningAndWindowingModeEligible( + @NonNull ActivityRecord activity) { + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + if (cameraPolicy == null) { + return false; + } + return (cameraPolicy.mDisplayRotationCompatPolicy != null + && cameraPolicy.mDisplayRotationCompatPolicy + .isCameraRunningAndWindowingModeEligible(activity, + /* mustBeFullscreen */ true)) + || (cameraPolicy.mCameraCompatFreeformPolicy != null + && cameraPolicy.mCameraCompatFreeformPolicy + .isCameraRunningAndWindowingModeEligible(activity)); } @Nullable String getSummaryForDisplayRotationHistoryRecord() { - if (mDisplayRotationCompatPolicy != null) { - return mDisplayRotationCompatPolicy.getSummaryForDisplayRotationHistoryRecord(); - } - return null; + return mDisplayRotationCompatPolicy != null + ? mDisplayRotationCompatPolicy.getSummaryForDisplayRotationHistoryRecord() + : null; } // TODO(b/369070416): have policies implement the same interface. - float getCameraCompatAspectRatio(@NonNull ActivityRecord activity) { - float displayRotationCompatPolicyAspectRatio = mDisplayRotationCompatPolicy != null - ? mDisplayRotationCompatPolicy.getCameraCompatAspectRatio(activity) + static float getCameraCompatAspectRatio(@NonNull ActivityRecord activity) { + final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); + if (cameraPolicy == null) { + return 1.0f; + } + float displayRotationCompatPolicyAspectRatio = + cameraPolicy.mDisplayRotationCompatPolicy != null + ? cameraPolicy.mDisplayRotationCompatPolicy.getCameraCompatAspectRatio(activity) : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; - float cameraCompatFreeformPolicyAspectRatio = mCameraCompatFreeformPolicy != null - ? mCameraCompatFreeformPolicy.getCameraCompatAspectRatio(activity) + float cameraCompatFreeformPolicyAspectRatio = + cameraPolicy.mCameraCompatFreeformPolicy != null + ? cameraPolicy.mCameraCompatFreeformPolicy.getCameraCompatAspectRatio(activity) : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; return Math.max(displayRotationCompatPolicyAspectRatio, cameraCompatFreeformPolicyAspectRatio); @@ -232,8 +254,8 @@ class AppCompatCameraPolicy { * Whether we should apply the min aspect ratio per-app override only when an app is connected * to the camera. */ - boolean shouldOverrideMinAspectRatioForCamera(@NonNull ActivityRecord activityRecord) { - return isCameraRunningAndWindowingModeEligible(activityRecord) + static boolean shouldOverrideMinAspectRatioForCamera(@NonNull ActivityRecord activityRecord) { + return AppCompatCameraPolicy.isCameraRunningAndWindowingModeEligible(activityRecord) && activityRecord.mAppCompatController.getAppCompatCameraOverrides() .isOverrideMinAspectRatioForCameraEnabled(); } diff --git a/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java b/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java index 5bd4aeb64b90..f5d58eac1113 100644 --- a/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java +++ b/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java @@ -58,10 +58,8 @@ class AppCompatOrientationPolicy { && displayContent.getIgnoreOrientationRequest(); final boolean shouldApplyUserFullscreenOverride = mAppCompatOverrides .getAppCompatAspectRatioOverrides().shouldApplyUserFullscreenOverride(); - final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy - .getAppCompatCameraPolicy(mActivityRecord); - final boolean shouldCameraCompatControlOrientation = cameraPolicy != null - && cameraPolicy.shouldCameraCompatControlOrientation(mActivityRecord); + final boolean shouldCameraCompatControlOrientation = + AppCompatCameraPolicy.shouldCameraCompatControlOrientation(mActivityRecord); if (shouldApplyUserFullscreenOverride && isIgnoreOrientationRequestEnabled // Do not override orientation to fullscreen for camera activities. // Fixed-orientation activities are rarely tested in other orientations, and it @@ -98,7 +96,7 @@ class AppCompatOrientationPolicy { if (displayContent != null && mAppCompatOverrides.getAppCompatCameraOverrides() .isOverrideOrientationOnlyForCameraEnabled() - && !displayContent.mAppCompatCameraPolicy + && !AppCompatCameraPolicy .isActivityEligibleForOrientationOverride(mActivityRecord)) { return candidate; } @@ -213,5 +211,4 @@ class AppCompatOrientationPolicy { } return false; } - } diff --git a/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java b/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java index 3b2f723fb172..c8cb62132b4c 100644 --- a/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java +++ b/services/core/java/com/android/server/wm/DesktopAppCompatAspectRatioPolicy.java @@ -194,12 +194,8 @@ public class DesktopAppCompatAspectRatioPolicy { return aspectRatioOverrides.getUserMinAspectRatio(); } - final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy( - mActivityRecord); - final boolean shouldOverrideMinAspectRatioForCamera = cameraPolicy != null - && cameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord); if (!aspectRatioOverrides.shouldOverrideMinAspectRatio() - && !shouldOverrideMinAspectRatioForCamera) { + && !AppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord)) { if (mActivityRecord.isUniversalResizeable()) { return 0; } diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java index 65736cbc519f..c8a35598479f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java @@ -179,17 +179,25 @@ class AppCompatActivityRobot { .getAppCompatAspectRatioPolicy()).isLetterboxedForFixedOrientationAndAspectRatio(); } - void enableTreatmentForTopActivity(boolean enabled) { - doReturn(enabled).when(mDisplayContent.mAppCompatCameraPolicy) - .isTreatmentEnabledForActivity(eq(mActivityStack.top())); + void enableFullscreenCameraCompatTreatmentForTopActivity(boolean enabled) { + if (mDisplayContent.mAppCompatCameraPolicy.hasDisplayRotationCompatPolicy()) { + doReturn(enabled).when( + mDisplayContent.mAppCompatCameraPolicy.mDisplayRotationCompatPolicy) + .isTreatmentEnabledForActivity(eq(mActivityStack.top())); + } } - void setTopActivityCameraActive(boolean enabled) { + void setIsCameraRunningAndWindowingModeEligibleFullscreen(boolean enabled) { doReturn(enabled).when(getTopDisplayRotationCompatPolicy()) .isCameraRunningAndWindowingModeEligible(eq(mActivityStack.top()), /* mustBeFullscreen= */ eq(true)); } + void setIsCameraRunningAndWindowingModeEligibleFreeform(boolean enabled) { + doReturn(enabled).when(getTopCameraCompatFreeformPolicy()) + .isCameraRunningAndWindowingModeEligible(eq(mActivityStack.top())); + } + void setTopActivityEligibleForOrientationOverride(boolean enabled) { doReturn(enabled).when(getTopDisplayRotationCompatPolicy()) .isActivityEligibleForOrientationOverride(eq(mActivityStack.top())); @@ -508,8 +516,13 @@ class AppCompatActivityRobot { } private DisplayRotationCompatPolicy getTopDisplayRotationCompatPolicy() { - return mActivityStack.top().mDisplayContent - .mAppCompatCameraPolicy.mDisplayRotationCompatPolicy; + return mActivityStack.top().mDisplayContent.mAppCompatCameraPolicy + .mDisplayRotationCompatPolicy; + } + + private CameraCompatFreeformPolicy getTopCameraCompatFreeformPolicy() { + return mActivityStack.top().mDisplayContent.mAppCompatCameraPolicy + .mCameraCompatFreeformPolicy; } // We add the activity to the stack and spyOn() on its properties. diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java index 1e40aa0c8da8..b83911337c5c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatAspectRatioOverridesTest.java @@ -282,7 +282,8 @@ public class AppCompatAspectRatioOverridesTest extends WindowTestsBase { robot.activity().createActivityWithComponentInNewTaskAndDisplay(); robot.checkFixedOrientationLetterboxAspectRatioForTopParent(/* expected */ 1.5f); - robot.activity().enableTreatmentForTopActivity(/* enabled */ true); + robot.activity().enableFullscreenCameraCompatTreatmentForTopActivity( + /* enabled */ true); robot.checkAspectRatioForTopParentIsSplitScreenRatio(/* expected */ true); }); } @@ -308,6 +309,12 @@ public class AppCompatAspectRatioOverridesTest extends WindowTestsBase { void onPostDisplayContentCreation(@NonNull DisplayContent displayContent) { super.onPostDisplayContentCreation(displayContent); spyOn(displayContent.mAppCompatCameraPolicy); + if (displayContent.mAppCompatCameraPolicy.hasDisplayRotationCompatPolicy()) { + spyOn(displayContent.mAppCompatCameraPolicy.mDisplayRotationCompatPolicy); + } + if (displayContent.mAppCompatCameraPolicy.hasCameraCompatFreeformPolicy()) { + spyOn(displayContent.mAppCompatCameraPolicy.mCameraCompatFreeformPolicy); + } } @Override diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java index 41102d6922da..9b9040b439c7 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraPolicyTest.java @@ -20,6 +20,8 @@ import static android.content.pm.ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; +import static com.android.server.wm.AppCompatCameraPolicy.isTreatmentEnabledForActivity; +import static com.android.server.wm.AppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera; import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING; import static org.junit.Assert.assertEquals; @@ -194,9 +196,10 @@ public class AppCompatCameraPolicyTest extends WindowTestsBase { @Test public void testIsCameraCompatTreatmentActive_whenTreatmentForTopActivityIsEnabled() { runTestScenario((robot) -> { + robot.conf().enableCameraCompatTreatmentAtBuildTime(/* enabled= */ true); robot.applyOnActivity((a)-> { - a.createActivityWithComponent(); - a.enableTreatmentForTopActivity(/* enabled */ true); + a.createActivityWithComponentInNewTaskAndDisplay(); + a.enableFullscreenCameraCompatTreatmentForTopActivity(/* enabled */ true); }); robot.checkIsCameraCompatTreatmentActiveForTopActivity(/* active */ true); @@ -206,9 +209,10 @@ public class AppCompatCameraPolicyTest extends WindowTestsBase { @Test public void testIsCameraCompatTreatmentNotActive_whenTreatmentForTopActivityIsDisabled() { runTestScenario((robot) -> { + robot.conf().enableCameraCompatTreatmentAtBuildTime(/* enabled= */ true); robot.applyOnActivity((a)-> { a.createActivityWithComponent(); - a.enableTreatmentForTopActivity(/* enabled */ false); + a.enableFullscreenCameraCompatTreatmentForTopActivity(/* enabled */ false); }); robot.checkIsCameraCompatTreatmentActiveForTopActivity(/* active */ false); @@ -220,9 +224,10 @@ public class AppCompatCameraPolicyTest extends WindowTestsBase { public void testShouldOverrideMinAspectRatioForCamera_whenCameraIsNotRunning() { runTestScenario((robot) -> { robot.applyOnActivity((a)-> { + robot.allowEnterDesktopMode(true); robot.conf().enableCameraCompatTreatmentAtBuildTime(/* enabled= */ true); a.createActivityWithComponentInNewTaskAndDisplay(); - a.setTopActivityCameraActive(/* active */ false); + a.setIsCameraRunningAndWindowingModeEligibleFullscreen(/* enabled */ false); }); robot.checkShouldOverrideMinAspectRatioForCamera(/* active */ false); @@ -234,9 +239,10 @@ public class AppCompatCameraPolicyTest extends WindowTestsBase { public void testShouldOverrideMinAspectRatioForCamera_whenCameraIsRunning_overrideDisabled() { runTestScenario((robot) -> { robot.applyOnActivity((a)-> { + robot.allowEnterDesktopMode(true); robot.conf().enableCameraCompatTreatmentAtBuildTime(/* enabled= */ true); a.createActivityWithComponentInNewTaskAndDisplay(); - a.setTopActivityCameraActive(/* active */ true); + a.setIsCameraRunningAndWindowingModeEligibleFullscreen(/* active */ true); }); robot.checkShouldOverrideMinAspectRatioForCamera(/* active */ false); @@ -245,12 +251,28 @@ public class AppCompatCameraPolicyTest extends WindowTestsBase { @Test @EnableCompatChanges(OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA) - public void testShouldOverrideMinAspectRatioForCamera_whenCameraIsRunning_overrideEnabled() { + public void testShouldOverrideMinAspectRatioForCameraFullscr_cameraIsRunning_overrideEnabled() { runTestScenario((robot) -> { robot.applyOnActivity((a)-> { robot.conf().enableCameraCompatTreatmentAtBuildTime(/* enabled= */ true); a.createActivityWithComponentInNewTaskAndDisplay(); - a.setTopActivityCameraActive(/* active */ true); + a.setIsCameraRunningAndWindowingModeEligibleFullscreen(/* active */ true); + }); + + robot.checkShouldOverrideMinAspectRatioForCamera(/* active */ true); + }); + } + + + @Test + @EnableCompatChanges(OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA) + @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) + public void testShouldOverrideMinAspectRatioForCameraFreeform_cameraRunning_overrideEnabled() { + runTestScenario((robot) -> { + robot.applyOnActivity((a)-> { + robot.allowEnterDesktopMode(true); + a.createActivityWithComponentInNewTaskAndDisplay(); + a.setIsCameraRunningAndWindowingModeEligibleFreeform(/* active */ true); }); robot.checkShouldOverrideMinAspectRatioForCamera(/* active */ true); @@ -318,13 +340,11 @@ public class AppCompatCameraPolicyTest extends WindowTestsBase { } void checkIsCameraCompatTreatmentActiveForTopActivity(boolean active) { - assertEquals(getTopAppCompatCameraPolicy() - .isTreatmentEnabledForActivity(activity().top()), active); + assertEquals(active, isTreatmentEnabledForActivity(activity().top())); } void checkShouldOverrideMinAspectRatioForCamera(boolean expected) { - assertEquals(getTopAppCompatCameraPolicy() - .shouldOverrideMinAspectRatioForCamera(activity().top()), expected); + assertEquals(expected, shouldOverrideMinAspectRatioForCamera(activity().top())); } // TODO(b/350460645): Create Desktop Windowing Robot to reuse common functionalities. @@ -332,9 +352,5 @@ public class AppCompatCameraPolicyTest extends WindowTestsBase { doReturn(isAllowed).when(() -> DesktopModeHelper.canEnterDesktopMode(any())); } - - private AppCompatCameraPolicy getTopAppCompatCameraPolicy() { - return activity().top().mDisplayContent.mAppCompatCameraPolicy; - } } } diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java index 9057b6cb99ea..76101d51f931 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationPolicyTest.java @@ -37,14 +37,18 @@ import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERR import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE; import static android.view.WindowManager.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION; +import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; +import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import android.compat.testing.PlatformCompatChangeRule; import android.content.pm.ActivityInfo; import android.content.res.Configuration; +import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import androidx.annotation.NonNull; @@ -321,7 +325,22 @@ public class AppCompatOrientationPolicyTest extends WindowTestsBase { }); robot.applyOnActivity((a) -> { a.createActivityWithComponentInNewTaskAndDisplay(); - a.setTopActivityCameraActive(false); + a.setIsCameraRunningAndWindowingModeEligibleFullscreen(false); + }); + + robot.checkOverrideOrientation(/* candidate */ SCREEN_ORIENTATION_PORTRAIT, + /* expected */ SCREEN_ORIENTATION_PORTRAIT); + }); + } + + @Test + @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) + public void testOverrideOrientationIfNeeded_fullscrOverrideFreeform_cameraActivity_unchanged() { + runTestScenario((robot) -> { + robot.applyOnActivity((a) -> { + robot.allowEnterDesktopMode(true); + a.createActivityWithComponentInNewTaskAndDisplay(); + a.setIsCameraRunningAndWindowingModeEligibleFreeform(false); }); robot.checkOverrideOrientation(/* candidate */ SCREEN_ORIENTATION_PORTRAIT, @@ -426,8 +445,8 @@ public class AppCompatOrientationPolicyTest extends WindowTestsBase { c.enablePolicyForIgnoringRequestedOrientation(true); }); robot.applyOnActivity((a) -> { - a.createActivityWithComponentInNewTask(); - a.enableTreatmentForTopActivity(true); + a.createActivityWithComponentInNewTaskAndDisplay(); + a.enableFullscreenCameraCompatTreatmentForTopActivity(true); }); robot.prepareRelaunchingAfterRequestedOrientationChanged(false); @@ -591,5 +610,11 @@ public class AppCompatOrientationPolicyTest extends WindowTestsBase { private AppCompatOrientationPolicy getTopAppCompatOrientationPolicy() { return activity().top().mAppCompatController.getOrientationPolicy(); } + + // TODO(b/350460645): Create Desktop Windowing Robot to reuse common functionalities. + void allowEnterDesktopMode(boolean isAllowed) { + doReturn(isAllowed).when(() -> + DesktopModeHelper.canEnterDesktopMode(any())); + } } } |