summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/AppCompatCameraOverrides.java8
-rw-r--r--services/core/java/com/android/server/wm/AppCompatConfiguration.java29
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerShellCommand.java21
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java17
4 files changed, 70 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
index 9754595581a0..47d30c98120c 100644
--- a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
+++ b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java
@@ -164,12 +164,14 @@ class AppCompatCameraOverrides {
* <p>The treatment is enabled when the following conditions are met:
* <ul>
* <li>Feature flag gating the camera compatibility free-form treatment is enabled.
- * <li>Activity is opted in by the device manufacturer with override.
+ * <li>Activity is opted-in using per-app override, or the treatment is enabled for all apps.
* </ul>
*/
boolean shouldApplyFreeformTreatmentForCameraCompat() {
- return Flags.enableCameraCompatForDesktopWindowing() && isChangeEnabled(mActivityRecord,
- OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT);
+ return Flags.enableCameraCompatForDesktopWindowing() && (isChangeEnabled(mActivityRecord,
+ OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT)
+ || mActivityRecord.mWmService.mAppCompatConfiguration
+ .isCameraCompatFreeformWindowingTreatmentEnabled());
}
boolean isOverrideOrientationOnlyForCameraEnabled() {
diff --git a/services/core/java/com/android/server/wm/AppCompatConfiguration.java b/services/core/java/com/android/server/wm/AppCompatConfiguration.java
index 38c6de146293..9a15c4a8bff2 100644
--- a/services/core/java/com/android/server/wm/AppCompatConfiguration.java
+++ b/services/core/java/com/android/server/wm/AppCompatConfiguration.java
@@ -304,6 +304,11 @@ final class AppCompatConfiguration {
// See RefreshCallbackItem for context.
private boolean mIsCameraCompatRefreshCycleThroughStopEnabled = true;
+ // Whether camera compat freeform treatment should be enabled for all eligible activities.
+ // This has the same effect as enabling the per-app override
+ // ActivityInfo.OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT for every app.
+ private boolean mIsCameraCompatFreeformWindowingTreatmentEnabled = false;
+
// Whether should ignore app requested orientation in response to an app
// calling Activity#setRequestedOrientation. See
// LetterboxUiController#shouldIgnoreRequestedOrientation for details.
@@ -1351,6 +1356,30 @@ final class AppCompatConfiguration {
}
/**
+ * Sets whether the camera compatibility treatment in freeform windowing mode is enabled for
+ * all fixed-orientation apps when using camera.
+ */
+ void setIsCameraCompatFreeformWindowingTreatmentEnabled(boolean enabled) {
+ mIsCameraCompatFreeformWindowingTreatmentEnabled = enabled;
+ }
+
+ /**
+ * Whether the camera compatibility treatment in freeform windowing mode is enabled for all
+ * fixed-orientation apps when using camera.
+ */
+ boolean isCameraCompatFreeformWindowingTreatmentEnabled() {
+ return mIsCameraCompatFreeformWindowingTreatmentEnabled;
+ }
+
+ /**
+ * Resets whether the camera compatibility treatment in freeform windowing mode is enabled for
+ * all fixed-orientation apps when using camera.
+ */
+ void resetIsCameraCompatFreeformWindowingTreatmentEnabled() {
+ mIsCameraCompatFreeformWindowingTreatmentEnabled = false;
+ }
+
+ /**
* Checks whether rotation compat policy for immersive apps that prevents auto rotation
* into non-optimal screen orientation while in fullscreen is enabled at build time. This is
* used when we need to safely initialize a component before the {@link DeviceConfig} flag
diff --git a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
index fe2bcc7a74f3..44f5f51eb623 100644
--- a/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
+++ b/services/core/java/com/android/server/wm/WindowManagerShellCommand.java
@@ -1166,6 +1166,10 @@ public class WindowManagerShellCommand extends ShellCommand {
case "--cameraCompatAspectRatio":
runSetCameraCompatAspectRatio(pw);
break;
+ case "--isCameraCompatFreeformWindowingTreatmentEnabled":
+ runSetBooleanFlag(pw, mAppCompatConfiguration
+ ::setIsCameraCompatFreeformWindowingTreatmentEnabled);
+ break;
default:
getErrPrintWriter().println(
"Error: Unrecognized letterbox style option: " + arg);
@@ -1260,6 +1264,10 @@ public class WindowManagerShellCommand extends ShellCommand {
case "cameraCompatAspectRatio":
mAppCompatConfiguration.resetCameraCompatAspectRatio();
break;
+ case "isCameraCompatFreeformWindowingTreatmentEnabled":
+ mAppCompatConfiguration
+ .resetIsCameraCompatFreeformWindowingTreatmentEnabled();
+ break;
default:
getErrPrintWriter().println(
"Error: Unrecognized letterbox style option: " + arg);
@@ -1371,6 +1379,7 @@ public class WindowManagerShellCommand extends ShellCommand {
mAppCompatConfiguration.resetCameraCompatRefreshEnabled();
mAppCompatConfiguration.resetCameraCompatRefreshCycleThroughStopEnabled();
mAppCompatConfiguration.resetCameraCompatAspectRatio();
+ mAppCompatConfiguration.resetIsCameraCompatFreeformWindowingTreatmentEnabled();
}
}
@@ -1445,6 +1454,10 @@ public class WindowManagerShellCommand extends ShellCommand {
+ mAppCompatConfiguration.isUserAppAspectRatioSettingsEnabled());
pw.println("Is the fullscreen option in user aspect ratio settings enabled: "
+ mAppCompatConfiguration.isUserAppAspectRatioFullscreenEnabled());
+ pw.println("Default aspect ratio for camera compat freeform: "
+ + mAppCompatConfiguration.getCameraCompatAspectRatio());
+ pw.println("Is camera compatibility freeform treatment enabled for all apps: "
+ + mAppCompatConfiguration.isCameraCompatFreeformWindowingTreatmentEnabled());
}
return 0;
}
@@ -1701,10 +1714,13 @@ public class WindowManagerShellCommand extends ShellCommand {
pw.println(" happen using the \"stopped -> resumed\" cycle rather than");
pw.println(" \"paused -> resumed\" cycle.");
pw.println(" --cameraCompatAspectRatio aspectRatio");
- pw.println(" Aspect ratio of letterbox for fixed-orientation camera apps, during ");
+ pw.println(" Aspect ratio of letterbox for fixed-orientation camera apps, during");
pw.println(" freeform camera compat mode. If aspectRatio <= "
+ AppCompatConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO);
pw.println(" it will be ignored.");
+ pw.println(" --isCameraCompatFreeformWindowingTreatmentEnabled [true|1|false|0]");
+ pw.println(" Whether camera compat treatment is enabled in freeform mode for all");
+ pw.println(" eligible apps.");
pw.println(" reset-letterbox-style [aspectRatio|cornerRadius|backgroundType");
pw.println(" |backgroundColor|wallpaperBlurRadius|wallpaperDarkScrimAlpha");
pw.println(" |horizontalPositionMultiplier|verticalPositionMultiplier");
@@ -1714,7 +1730,8 @@ public class WindowManagerShellCommand extends ShellCommand {
pw.println(" |persistentPositionMultiplierForHorizontalReachability");
pw.println(" |persistentPositionMultiplierForVerticalReachability");
pw.println(" |defaultPositionMultiplierForVerticalReachability");
- pw.println(" |cameraCompatAspectRatio]");
+ pw.println(" |cameraCompatAspectRatio");
+ pw.println(" |isCameraCompatFreeformWindowingTreatmentEnabled]");
pw.println(" Resets overrides to default values for specified properties separated");
pw.println(" by space, e.g. 'reset-letterbox-style aspectRatio cornerRadius'.");
pw.println(" If no arguments provided, all values will be reset.");
diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
index d5ed048032e7..1d138e4a48d9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatCameraOverridesTest.java
@@ -249,6 +249,18 @@ public class AppCompatCameraOverridesTest extends WindowTestsBase {
}
@Test
+ @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
+ public void testShouldApplyCameraCompatFreeformTreatment_enabledByShellCommand_returnsTrue() {
+ runTestScenario((robot) -> {
+ robot.activity().createActivityWithComponentInNewTask();
+
+ robot.setCameraCompatTreatmentEnabledViaShellCommand(true);
+
+ robot.checkShouldApplyFreeformTreatmentForCameraCompat(true);
+ });
+ }
+
+ @Test
@EnableCompatChanges({OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA,
OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA,
OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
@@ -350,6 +362,11 @@ public class AppCompatCameraOverridesTest extends WindowTestsBase {
spyOn(displayContent.mAppCompatCameraPolicy);
}
+ void setCameraCompatTreatmentEnabledViaShellCommand(boolean enabled) {
+ activity().top().mWmService.mAppCompatConfiguration
+ .setIsCameraCompatFreeformWindowingTreatmentEnabled(enabled);
+ }
+
void checkShouldRefreshActivityForCameraCompat(boolean expected) {
Assert.assertEquals(getAppCompatCameraOverrides()
.shouldRefreshActivityForCameraCompat(), expected);