From 58fc9739b95f4ed6bffdba58ccde005b35eca50d Mon Sep 17 00:00:00 2001 From: Mina Granic Date: Mon, 2 Dec 2024 11:26:45 +0000 Subject: Check feature enabled on isCameraRunningAndWindowingModeEligible. This method is used in shouldOverrideMinAspectRatioForCamera, which should return false if the feature is disabled, or if the app is not opted-in. Flag: com.android.window.flags.enable_camera_compat_for_desktop_windowing Bug: 368573687 Test: atest WmTests:CameraCompatFreeformPolicyTests Change-Id: Iff542ec54a051ed11d32519b62f13a1d856cbfa3 --- .../server/wm/CameraCompatFreeformPolicy.java | 4 +- .../server/wm/CameraCompatFreeformPolicyTests.java | 56 +++++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java b/services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java index cb95b3655c61..1676bfadab43 100644 --- a/services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java +++ b/services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java @@ -191,7 +191,9 @@ final class CameraCompatFreeformPolicy implements CameraStateMonitor.CameraCompa } boolean isCameraRunningAndWindowingModeEligible(@NonNull ActivityRecord activity) { - return activity.inFreeformWindowingMode() + return activity.mAppCompatController.getAppCompatCameraOverrides() + .shouldApplyFreeformTreatmentForCameraCompat() + && activity.inFreeformWindowingMode() && mCameraStateMonitor.isCameraRunningForActivity(activity); } diff --git a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java index c427583d3001..2ceff62203d6 100644 --- a/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/CameraCompatFreeformPolicyTests.java @@ -62,6 +62,7 @@ import android.content.res.Configuration.Orientation; import android.graphics.Rect; import android.hardware.camera2.CameraManager; import android.os.Handler; +import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.view.DisplayInfo; @@ -142,6 +143,58 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase { cameraStateMonitor.startListeningToCameraState(); } + @Test + @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) + @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT}) + public void testIsCameraRunningAndWindowingModeEligible_featureDisabled_returnsFalse() { + configureActivity(SCREEN_ORIENTATION_PORTRAIT); + + mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); + + assertFalse(mCameraCompatFreeformPolicy.isCameraRunningAndWindowingModeEligible(mActivity)); + } + + @Test + @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) + public void testIsCameraRunningAndWindowingModeEligible_overrideDisabled_returnsFalse() { + configureActivity(SCREEN_ORIENTATION_PORTRAIT); + + mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); + + assertFalse(mCameraCompatFreeformPolicy.isCameraRunningAndWindowingModeEligible(mActivity)); + } + + @Test + @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) + @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT}) + public void testIsCameraRunningAndWindowingModeEligible_cameraNotRunning_returnsFalse() { + configureActivity(SCREEN_ORIENTATION_PORTRAIT); + + assertFalse(mCameraCompatFreeformPolicy.isCameraRunningAndWindowingModeEligible(mActivity)); + } + + @Test + @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) + @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT}) + public void testIsCameraRunningAndWindowingModeEligible_notFreeformWindowing_returnsFalse() { + configureActivity(SCREEN_ORIENTATION_PORTRAIT, WINDOWING_MODE_FULLSCREEN); + + mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); + + assertFalse(mCameraCompatFreeformPolicy.isCameraRunningAndWindowingModeEligible(mActivity)); + } + + @Test + @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) + @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT}) + public void testIsCameraRunningAndWindowingModeEligible_optInFreeformCameraRunning_true() { + configureActivity(SCREEN_ORIENTATION_PORTRAIT); + + mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); + + assertTrue(mCameraCompatFreeformPolicy.isCameraRunningAndWindowingModeEligible(mActivity)); + } + @Test @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING) @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT}) @@ -444,7 +497,8 @@ public class CameraCompatFreeformPolicyTests extends WindowTestsBase { doReturn(mActivity).when(mDisplayContent).topRunningActivity(anyBoolean()); doReturn(naturalOrientation).when(mDisplayContent).getNaturalOrientation(); - doReturn(true).when(mActivity).inFreeformWindowingMode(); + doReturn(windowingMode == WINDOWING_MODE_FREEFORM).when(mActivity) + .inFreeformWindowingMode(); } private void assertInCameraCompatMode(@CameraCompatTaskInfo.FreeformCameraCompatMode int mode) { -- cgit v1.2.3-59-g8ed1b