Loading core/java/android/app/CameraCompatTaskInfo.java +48 −50 Original line number Original line Diff line number Diff line Loading @@ -42,58 +42,58 @@ public class CameraCompatTaskInfo implements Parcelable { /** /** * Undefined camera compat mode. * Undefined camera compat mode. */ */ public static final int CAMERA_COMPAT_FREEFORM_UNSPECIFIED = 0; public static final int CAMERA_COMPAT_UNSPECIFIED = 0; /** /** * The value to use when no camera compat treatment should be applied to a windowed task. * The value to use when no camera compat treatment should be applied to a windowed task. */ */ public static final int CAMERA_COMPAT_FREEFORM_NONE = 1; public static final int CAMERA_COMPAT_NONE = 1; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * portrait orientation, while a device is in landscape. Applies only to freeform tasks. * portrait orientation, while a device is in landscape. */ */ public static final int CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE = 2; public static final int CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE = 2; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * landscape orientation, while a device is in landscape. Applies only to freeform tasks. * landscape orientation, while a device is in landscape. */ */ public static final int CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE = 3; public static final int CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE = 3; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * portrait orientation, while a device is in portrait. Applies only to freeform tasks. * portrait orientation, while a device is in portrait. */ */ public static final int CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT = 4; public static final int CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT = 4; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * landscape orientation, while a device is in portrait. Applies only to freeform tasks. * landscape orientation, while a device is in portrait. */ */ public static final int CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT = 5; public static final int CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT = 5; @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "CAMERA_COMPAT_FREEFORM_" }, value = { @IntDef(prefix = { "CAMERA_COMPAT_" }, value = { CAMERA_COMPAT_FREEFORM_UNSPECIFIED, CAMERA_COMPAT_UNSPECIFIED, CAMERA_COMPAT_FREEFORM_NONE, CAMERA_COMPAT_NONE, CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT, CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT, CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT, CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT, }) }) public @interface FreeformCameraCompatMode {} public @interface CameraCompatMode {} /** /** * Whether the camera activity is letterboxed in freeform windowing mode to emulate expected * Whether the camera activity is letterboxed to emulate expected aspect ratio for * aspect ratio for fixed-orientation apps. * fixed-orientation apps. * * * <p>This field is used by the WM and the camera framework, to coordinate camera compat mode * <p>This field is used by the WM and the camera framework, to coordinate camera compat mode * setup. * setup. */ */ // TODO(b/414347702): Revisit data structure. // TODO(b/414347702): Revisit data structure. @FreeformCameraCompatMode @CameraCompatMode public int freeformCameraCompatMode = CAMERA_COMPAT_FREEFORM_UNSPECIFIED; public int cameraCompatMode = CAMERA_COMPAT_UNSPECIFIED; /** /** * Real display rotation, never affected by camera compat sandboxing. * Real display rotation, never affected by camera compat sandboxing. Loading Loading @@ -139,7 +139,7 @@ public class CameraCompatTaskInfo implements Parcelable { * Reads the CameraCompatTaskInfo from a parcel. * Reads the CameraCompatTaskInfo from a parcel. */ */ void readFromParcel(Parcel source) { void readFromParcel(Parcel source) { freeformCameraCompatMode = source.readInt(); cameraCompatMode = source.readInt(); displayRotation = source.readInt(); displayRotation = source.readInt(); } } Loading @@ -148,7 +148,7 @@ public class CameraCompatTaskInfo implements Parcelable { */ */ @Override @Override public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(freeformCameraCompatMode); dest.writeInt(cameraCompatMode); dest.writeInt(displayRotation); dest.writeInt(displayRotation); } } Loading @@ -160,7 +160,7 @@ public class CameraCompatTaskInfo implements Parcelable { if (that == null) { if (that == null) { return false; return false; } } return freeformCameraCompatMode == that.freeformCameraCompatMode return cameraCompatMode == that.cameraCompatMode && displayRotation == that.displayRotation; && displayRotation == that.displayRotation; } } Loading @@ -171,14 +171,14 @@ public class CameraCompatTaskInfo implements Parcelable { if (that == null) { if (that == null) { return false; return false; } } return freeformCameraCompatMode == that.freeformCameraCompatMode return cameraCompatMode == that.cameraCompatMode && displayRotation == that.displayRotation; && displayRotation == that.displayRotation; } } @Override @Override public String toString() { public String toString() { return "CameraCompatTaskInfo { freeformCameraCompatMode=" return "CameraCompatTaskInfo { cameraCompatMode=" + freeformCameraCompatModeToString(freeformCameraCompatMode) + cameraCompatModeToString(cameraCompatMode) + displayRotationToString(displayRotation) + displayRotationToString(displayRotation) + "}"; + "}"; } } Loading @@ -187,44 +187,43 @@ public class CameraCompatTaskInfo implements Parcelable { * Returns the sandboxed display rotation based on the given {@code cameraCompatMode}. * Returns the sandboxed display rotation based on the given {@code cameraCompatMode}. * * * <p>This will be what the app likely expects in its requested orientation while running on a * <p>This will be what the app likely expects in its requested orientation while running on a * device with portrait natural orientation: `CAMERA_COMPAT_FREEFORM_PORTRAIT_*` is 0, and * device with portrait natural orientation: `CAMERA_COMPAT_PORTRAIT_*` is 0, and * `CAMERA_COMPAT_FREEFORM_LANDSCAPE_*` is 90. * `CAMERA_COMPAT_LANDSCAPE_*` is 90. * * * @return {@link WindowConfiguration#ROTATION_UNDEFINED} if not in camera compat mode. * @return {@link WindowConfiguration#ROTATION_UNDEFINED} if not in camera compat mode. */ */ @Surface.Rotation @Surface.Rotation public static int getDisplayRotationFromCameraCompatMode(@FreeformCameraCompatMode int public static int getDisplayRotationFromCameraCompatMode(@CameraCompatMode int cameraCompatMode) { cameraCompatMode) { return switch (cameraCompatMode) { return switch (cameraCompatMode) { case CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE, case CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT -> ROTATION_0; CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT -> ROTATION_0; case CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE, case CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT -> ROTATION_90; CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT -> ROTATION_90; default -> ROTATION_UNDEFINED; default -> ROTATION_UNDEFINED; }; }; } } /** Human readable version of the freeform camera compat mode. */ /** Human readable version of the camera compat mode. */ @NonNull @NonNull public static String freeformCameraCompatModeToString( public static String cameraCompatModeToString(@CameraCompatMode int cameraCompatMode) { @FreeformCameraCompatMode int freeformCameraCompatMode) { return switch (cameraCompatMode) { return switch (freeformCameraCompatMode) { case CAMERA_COMPAT_UNSPECIFIED -> "undefined"; case CAMERA_COMPAT_FREEFORM_UNSPECIFIED -> "undefined"; case CAMERA_COMPAT_NONE -> "inactive"; case CAMERA_COMPAT_FREEFORM_NONE -> "inactive"; case CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE -> case CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE -> "app-portrait-device-landscape"; "app-portrait-device-landscape"; case CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE -> case CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE -> "app-landscape-device-landscape"; "app-landscape-device-landscape"; case CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT -> case CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT -> "app-portrait-device-portrait"; "app-portrait-device-portrait"; case CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT -> case CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT -> "app-landscape-device-portrait"; "app-landscape-device-portrait"; default -> throw new AssertionError( default -> throw new AssertionError("Unexpected camera compat mode: " "Unexpected camera compat mode: " + freeformCameraCompatMode); + cameraCompatMode); }; }; } } /** Human readable version of the freeform camera compat mode. */ /** Human readable version of the camera compat mode. */ @NonNull @NonNull public static String displayRotationToString(@Surface.Rotation int displayRotation) { public static String displayRotationToString(@Surface.Rotation int displayRotation) { return switch (displayRotation) { return switch (displayRotation) { Loading @@ -233,8 +232,7 @@ public class CameraCompatTaskInfo implements Parcelable { case ROTATION_90 -> "90"; case ROTATION_90 -> "90"; case ROTATION_180 -> "180"; case ROTATION_180 -> "180"; case ROTATION_270 -> "270"; case ROTATION_270 -> "270"; default -> throw new AssertionError( default -> throw new AssertionError("Unexpected display rotation: " + displayRotation); "Unexpected display rotation: " + displayRotation); }; }; } } } } core/java/android/hardware/camera2/CameraManager.java +11 −11 Original line number Original line Diff line number Diff line Loading @@ -1719,13 +1719,13 @@ public final class CameraManager { if (activityManager != null) { if (activityManager != null) { for (ActivityManager.AppTask appTask : activityManager.getAppTasks()) { for (ActivityManager.AppTask appTask : activityManager.getAppTasks()) { final TaskInfo taskInfo = appTask.getTaskInfo(); final TaskInfo taskInfo = appTask.getTaskInfo(); final int freeformCameraCompatMode = taskInfo.appCompatTaskInfo final int cameraCompatMode = taskInfo.appCompatTaskInfo.cameraCompatTaskInfo .cameraCompatTaskInfo.freeformCameraCompatMode; .cameraCompatMode; if (isInCameraCompatMode(freeformCameraCompatMode) if (isInCameraCompatMode(cameraCompatMode) && taskInfo.topActivity != null && taskInfo.topActivity != null && taskInfo.topActivity.getPackageName().equals(packageName)) { && taskInfo.topActivity.getPackageName().equals(packageName)) { // WindowManager has requested rotation override. // WindowManager has requested rotation override. return getRotationOverrideForCompatFreeform(freeformCameraCompatMode, return getRotationOverrideForCompatFreeform(cameraCompatMode, taskInfo.appCompatTaskInfo.cameraCompatTaskInfo taskInfo.appCompatTaskInfo.cameraCompatTaskInfo .displayRotation); .displayRotation); } } Loading @@ -1751,10 +1751,10 @@ public final class CameraManager { : ICameraService.ROTATION_OVERRIDE_NONE; : ICameraService.ROTATION_OVERRIDE_NONE; } } private static boolean isInCameraCompatMode(@CameraCompatTaskInfo.FreeformCameraCompatMode int private static boolean isInCameraCompatMode(@CameraCompatTaskInfo.CameraCompatMode int freeformCameraCompatMode) { cameraCompatMode) { return (freeformCameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_UNSPECIFIED) return (cameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_UNSPECIFIED) && (freeformCameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE); && (cameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_NONE); } } private static int getRotationOverrideForCompatFreeform( private static int getRotationOverrideForCompatFreeform( Loading @@ -1769,13 +1769,13 @@ public final class CameraManager { } } private static int getRotationOverrideForCompatFreeform( private static int getRotationOverrideForCompatFreeform( @CameraCompatTaskInfo.FreeformCameraCompatMode int freeformCameraCompatMode, @CameraCompatTaskInfo.CameraCompatMode int freeformCameraCompatMode, @Surface.Rotation int displayRotation) { @Surface.Rotation int displayRotation) { // Only rotate-and-crop if the app and device orientations do not match. // Only rotate-and-crop if the app and device orientations do not match. if (freeformCameraCompatMode if (freeformCameraCompatMode == CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT == CameraCompatTaskInfo.CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT || freeformCameraCompatMode || freeformCameraCompatMode == CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE) { == CameraCompatTaskInfo.CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE) { // Rotate-and-crop compensates for changes in camera preview calculations (sandboxing). // Rotate-and-crop compensates for changes in camera preview calculations (sandboxing). // Recommended calculation of camera preview is: // Recommended calculation of camera preview is: // rotation = (sensorOrientationDegrees - deviceOrientationDegrees * sign + 360) % 360 // rotation = (sensorOrientationDegrees - deviceOrientationDegrees * sign + 360) % 360 Loading services/core/java/com/android/server/wm/AppCompatCameraOverrides.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -188,7 +188,7 @@ class AppCompatCameraOverrides { * <li>Activity is opted-in using per-app override, or the treatment is enabled for all apps. * <li>Activity is opted-in using per-app override, or the treatment is enabled for all apps. * </ul> * </ul> */ */ boolean shouldApplyFreeformTreatmentForCameraCompat() { boolean shouldApplyCameraCompatSimReqOrientationTreatment() { return DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() return DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() && (shouldEnableCameraCompatSimulateRequestedOrientationTreatmentForApp() && (shouldEnableCameraCompatSimulateRequestedOrientationTreatmentForApp() || shouldForceEnableCameraCompatSimulateRequestedOrientationTreatment()); || shouldForceEnableCameraCompatSimulateRequestedOrientationTreatment()); Loading Loading @@ -254,7 +254,7 @@ class AppCompatCameraOverrides { proto.write(SHOULD_REFRESH_ACTIVITY_VIA_PAUSE_FOR_CAMERA_COMPAT, proto.write(SHOULD_REFRESH_ACTIVITY_VIA_PAUSE_FOR_CAMERA_COMPAT, shouldRefreshActivityViaPauseForCameraCompat()); shouldRefreshActivityViaPauseForCameraCompat()); proto.write(SHOULD_ALLOW_SIMULATE_REQUESTED_ORIENTATION_FOR_CAMERA_COMPAT, proto.write(SHOULD_ALLOW_SIMULATE_REQUESTED_ORIENTATION_FOR_CAMERA_COMPAT, shouldApplyFreeformTreatmentForCameraCompat()); shouldApplyCameraCompatSimReqOrientationTreatment()); } } static class AppCompatCameraOverridesState { static class AppCompatCameraOverridesState { Loading services/core/java/com/android/server/wm/AppCompatCameraPolicy.java +39 −40 Original line number Original line Diff line number Diff line Loading @@ -46,7 +46,7 @@ class AppCompatCameraPolicy { @Nullable @Nullable final DisplayRotationCompatPolicy mDisplayRotationCompatPolicy; final DisplayRotationCompatPolicy mDisplayRotationCompatPolicy; @Nullable @Nullable final CameraCompatFreeformPolicy mCameraCompatFreeformPolicy; final AppCompatCameraSimReqOrientationPolicy mSimReqOrientationPolicy; AppCompatCameraPolicy(@NonNull WindowManagerService wmService, AppCompatCameraPolicy(@NonNull WindowManagerService wmService, @NonNull DisplayContent displayContent) { @NonNull DisplayContent displayContent) { Loading @@ -54,29 +54,28 @@ class AppCompatCameraPolicy { // without the need to restart the device. // without the need to restart the device. final boolean needsDisplayRotationCompatPolicy = wmService.mAppCompatConfiguration final boolean needsDisplayRotationCompatPolicy = wmService.mAppCompatConfiguration .isCameraCompatForceRotateTreatmentEnabledAtBuildTime(); .isCameraCompatForceRotateTreatmentEnabledAtBuildTime(); final boolean needsCameraCompatFreeformPolicy = final boolean needsSimReqOrientationPolicy = DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() && DesktopModeHelper.canEnterDesktopMode(wmService.mContext) && DesktopModeHelper.canEnterDesktopMode(wmService.mContext) && wmService.mAppCompatConfiguration && wmService.mAppCompatConfiguration .isCameraCompatSimulateRequestedOrientationTreatmentEnabled(); .isCameraCompatSimulateRequestedOrientationTreatmentEnabled(); if (needsDisplayRotationCompatPolicy || needsCameraCompatFreeformPolicy) { if (needsDisplayRotationCompatPolicy || needsSimReqOrientationPolicy) { final AppCompatCameraStateSource cameraStateListenerDelegate = final AppCompatCameraStateSource cameraStateListenerDelegate = new AppCompatCameraStateSource(); new AppCompatCameraStateSource(); mCameraStateMonitor = new CameraStateMonitor(displayContent, wmService.mH, mCameraStateMonitor = new CameraStateMonitor(displayContent, wmService.mH, cameraStateListenerDelegate); cameraStateListenerDelegate); mActivityRefresher = new ActivityRefresher(wmService, wmService.mH); mActivityRefresher = new ActivityRefresher(wmService, wmService.mH); mDisplayRotationCompatPolicy = mDisplayRotationCompatPolicy = needsDisplayRotationCompatPolicy needsDisplayRotationCompatPolicy ? new DisplayRotationCompatPolicy( ? new DisplayRotationCompatPolicy(displayContent, mCameraStateMonitor, displayContent, mCameraStateMonitor, cameraStateListenerDelegate, cameraStateListenerDelegate, mActivityRefresher) mActivityRefresher) : null; : null; mCameraCompatFreeformPolicy = mSimReqOrientationPolicy = needsSimReqOrientationPolicy needsCameraCompatFreeformPolicy ? new CameraCompatFreeformPolicy(displayContent, ? new AppCompatCameraSimReqOrientationPolicy(displayContent, mCameraStateMonitor, cameraStateListenerDelegate, mActivityRefresher) mCameraStateMonitor, cameraStateListenerDelegate, mActivityRefresher) : null; : null; } else { } else { mDisplayRotationCompatPolicy = null; mDisplayRotationCompatPolicy = null; mCameraCompatFreeformPolicy = null; mSimReqOrientationPolicy = null; mCameraStateMonitor = null; mCameraStateMonitor = null; mActivityRefresher = null; mActivityRefresher = null; } } Loading Loading @@ -150,8 +149,8 @@ class AppCompatCameraPolicy { if (mDisplayRotationCompatPolicy != null) { if (mDisplayRotationCompatPolicy != null) { mDisplayRotationCompatPolicy.start(); mDisplayRotationCompatPolicy.start(); } } if (mCameraCompatFreeformPolicy != null) { if (mSimReqOrientationPolicy != null) { mCameraCompatFreeformPolicy.start(); mSimReqOrientationPolicy.start(); } } if (mCameraStateMonitor != null) { if (mCameraStateMonitor != null) { mCameraStateMonitor.startListeningToCameraState(); mCameraStateMonitor.startListeningToCameraState(); Loading @@ -162,8 +161,8 @@ class AppCompatCameraPolicy { if (mDisplayRotationCompatPolicy != null) { if (mDisplayRotationCompatPolicy != null) { mDisplayRotationCompatPolicy.dispose(); mDisplayRotationCompatPolicy.dispose(); } } if (mCameraCompatFreeformPolicy != null) { if (mSimReqOrientationPolicy != null) { mCameraCompatFreeformPolicy.dispose(); mSimReqOrientationPolicy.dispose(); } } if (mCameraStateMonitor != null) { if (mCameraStateMonitor != null) { mCameraStateMonitor.stopListeningToCameraState(); mCameraStateMonitor.stopListeningToCameraState(); Loading @@ -174,8 +173,8 @@ class AppCompatCameraPolicy { return mDisplayRotationCompatPolicy != null; return mDisplayRotationCompatPolicy != null; } } boolean hasCameraCompatFreeformPolicy() { boolean hasSimReqOrientationPolicy() { return mCameraCompatFreeformPolicy != null; return mSimReqOrientationPolicy != null; } } boolean hasCameraStateMonitor() { boolean hasCameraStateMonitor() { Loading @@ -198,8 +197,8 @@ class AppCompatCameraPolicy { return (cameraPolicy.mDisplayRotationCompatPolicy != null return (cameraPolicy.mDisplayRotationCompatPolicy != null && cameraPolicy.mDisplayRotationCompatPolicy && cameraPolicy.mDisplayRotationCompatPolicy .shouldCameraCompatControlOrientation(activity)) .shouldCameraCompatControlOrientation(activity)) || (cameraPolicy.mCameraCompatFreeformPolicy != null || (cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .shouldCameraCompatControlOrientation(activity)); .shouldCameraCompatControlOrientation(activity)); } } Loading @@ -209,8 +208,8 @@ class AppCompatCameraPolicy { if (cameraPolicy == null) { if (cameraPolicy == null) { return false; return false; } } return cameraPolicy.mCameraCompatFreeformPolicy != null return cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .isFreeformLetterboxingForCameraAllowed(activity); .isFreeformLetterboxingForCameraAllowed(activity); } } Loading @@ -223,8 +222,8 @@ class AppCompatCameraPolicy { return (cameraPolicy.mDisplayRotationCompatPolicy != null return (cameraPolicy.mDisplayRotationCompatPolicy != null && cameraPolicy.mDisplayRotationCompatPolicy && cameraPolicy.mDisplayRotationCompatPolicy .shouldCameraCompatControlAspectRatio(activity)) .shouldCameraCompatControlAspectRatio(activity)) || (cameraPolicy.mCameraCompatFreeformPolicy != null || (cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .shouldCameraCompatControlAspectRatio(activity)); .shouldCameraCompatControlAspectRatio(activity)); } } Loading @@ -243,8 +242,8 @@ class AppCompatCameraPolicy { && cameraPolicy.mDisplayRotationCompatPolicy && cameraPolicy.mDisplayRotationCompatPolicy .isCameraRunningAndWindowingModeEligible(activity, .isCameraRunningAndWindowingModeEligible(activity, /* mustBeFullscreen */ true)) /* mustBeFullscreen */ true)) || (cameraPolicy.mCameraCompatFreeformPolicy != null || (cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .isCameraRunningAndWindowingModeEligible(activity)); .isCameraRunningAndWindowingModeEligible(activity)); } } Loading @@ -263,29 +262,29 @@ class AppCompatCameraPolicy { } } float displayRotationCompatPolicyAspectRatio = float displayRotationCompatPolicyAspectRatio = cameraPolicy.mDisplayRotationCompatPolicy != null cameraPolicy.mDisplayRotationCompatPolicy != null ? cameraPolicy.mDisplayRotationCompatPolicy.getCameraCompatAspectRatio(activity) ? cameraPolicy.mDisplayRotationCompatPolicy.getCameraCompatAspectRatio( activity) : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; float cameraCompatFreeformPolicyAspectRatio = float simReqOrientationPolicyAspectRatio = cameraPolicy.mSimReqOrientationPolicy != null cameraPolicy.mCameraCompatFreeformPolicy != null ? cameraPolicy.mSimReqOrientationPolicy.getCameraCompatAspectRatio(activity) ? cameraPolicy.mCameraCompatFreeformPolicy.getCameraCompatAspectRatio(activity) : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; return Math.max(displayRotationCompatPolicyAspectRatio, return Math.max(displayRotationCompatPolicyAspectRatio, simReqOrientationPolicyAspectRatio); cameraCompatFreeformPolicyAspectRatio); } } @CameraCompatTaskInfo.FreeformCameraCompatMode @CameraCompatTaskInfo.CameraCompatMode static int getCameraCompatFreeformMode(@NonNull ActivityRecord activity) { static int getCameraCompatSimReqOrientationMode(@NonNull ActivityRecord activity) { final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); return cameraPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy != null return cameraPolicy != null && cameraPolicy.mSimReqOrientationPolicy ? cameraPolicy.mCameraCompatFreeformPolicy.getCameraCompatMode(activity) != null : CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE; ? cameraPolicy.mSimReqOrientationPolicy.getCameraCompatMode(activity) : CameraCompatTaskInfo.CAMERA_COMPAT_NONE; } } @Surface.Rotation @Surface.Rotation static int getCameraDeviceRotation(@NonNull ActivityRecord activity) { static int getCameraDeviceRotation(@NonNull ActivityRecord activity) { final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); return cameraPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy != null return cameraPolicy != null && cameraPolicy.mSimReqOrientationPolicy != null ? cameraPolicy.mCameraCompatFreeformPolicy.getCameraDeviceRotation() ? cameraPolicy.mSimReqOrientationPolicy.getCameraDeviceRotation() : ROTATION_UNDEFINED; : ROTATION_UNDEFINED; } } Loading services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java→services/core/java/com/android/server/wm/AppCompatCameraSimReqOrientationPolicy.java +25 −26 File changed and moved.Preview size limit exceeded, changes collapsed. Show changes Loading
core/java/android/app/CameraCompatTaskInfo.java +48 −50 Original line number Original line Diff line number Diff line Loading @@ -42,58 +42,58 @@ public class CameraCompatTaskInfo implements Parcelable { /** /** * Undefined camera compat mode. * Undefined camera compat mode. */ */ public static final int CAMERA_COMPAT_FREEFORM_UNSPECIFIED = 0; public static final int CAMERA_COMPAT_UNSPECIFIED = 0; /** /** * The value to use when no camera compat treatment should be applied to a windowed task. * The value to use when no camera compat treatment should be applied to a windowed task. */ */ public static final int CAMERA_COMPAT_FREEFORM_NONE = 1; public static final int CAMERA_COMPAT_NONE = 1; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * portrait orientation, while a device is in landscape. Applies only to freeform tasks. * portrait orientation, while a device is in landscape. */ */ public static final int CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE = 2; public static final int CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE = 2; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * landscape orientation, while a device is in landscape. Applies only to freeform tasks. * landscape orientation, while a device is in landscape. */ */ public static final int CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE = 3; public static final int CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE = 3; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * portrait orientation, while a device is in portrait. Applies only to freeform tasks. * portrait orientation, while a device is in portrait. */ */ public static final int CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT = 4; public static final int CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT = 4; /** /** * The value to use when camera compat treatment should be applied to an activity requesting * The value to use when camera compat treatment should be applied to an activity requesting * landscape orientation, while a device is in portrait. Applies only to freeform tasks. * landscape orientation, while a device is in portrait. */ */ public static final int CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT = 5; public static final int CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT = 5; @Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "CAMERA_COMPAT_FREEFORM_" }, value = { @IntDef(prefix = { "CAMERA_COMPAT_" }, value = { CAMERA_COMPAT_FREEFORM_UNSPECIFIED, CAMERA_COMPAT_UNSPECIFIED, CAMERA_COMPAT_FREEFORM_NONE, CAMERA_COMPAT_NONE, CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT, CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT, CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT, CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT, }) }) public @interface FreeformCameraCompatMode {} public @interface CameraCompatMode {} /** /** * Whether the camera activity is letterboxed in freeform windowing mode to emulate expected * Whether the camera activity is letterboxed to emulate expected aspect ratio for * aspect ratio for fixed-orientation apps. * fixed-orientation apps. * * * <p>This field is used by the WM and the camera framework, to coordinate camera compat mode * <p>This field is used by the WM and the camera framework, to coordinate camera compat mode * setup. * setup. */ */ // TODO(b/414347702): Revisit data structure. // TODO(b/414347702): Revisit data structure. @FreeformCameraCompatMode @CameraCompatMode public int freeformCameraCompatMode = CAMERA_COMPAT_FREEFORM_UNSPECIFIED; public int cameraCompatMode = CAMERA_COMPAT_UNSPECIFIED; /** /** * Real display rotation, never affected by camera compat sandboxing. * Real display rotation, never affected by camera compat sandboxing. Loading Loading @@ -139,7 +139,7 @@ public class CameraCompatTaskInfo implements Parcelable { * Reads the CameraCompatTaskInfo from a parcel. * Reads the CameraCompatTaskInfo from a parcel. */ */ void readFromParcel(Parcel source) { void readFromParcel(Parcel source) { freeformCameraCompatMode = source.readInt(); cameraCompatMode = source.readInt(); displayRotation = source.readInt(); displayRotation = source.readInt(); } } Loading @@ -148,7 +148,7 @@ public class CameraCompatTaskInfo implements Parcelable { */ */ @Override @Override public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(freeformCameraCompatMode); dest.writeInt(cameraCompatMode); dest.writeInt(displayRotation); dest.writeInt(displayRotation); } } Loading @@ -160,7 +160,7 @@ public class CameraCompatTaskInfo implements Parcelable { if (that == null) { if (that == null) { return false; return false; } } return freeformCameraCompatMode == that.freeformCameraCompatMode return cameraCompatMode == that.cameraCompatMode && displayRotation == that.displayRotation; && displayRotation == that.displayRotation; } } Loading @@ -171,14 +171,14 @@ public class CameraCompatTaskInfo implements Parcelable { if (that == null) { if (that == null) { return false; return false; } } return freeformCameraCompatMode == that.freeformCameraCompatMode return cameraCompatMode == that.cameraCompatMode && displayRotation == that.displayRotation; && displayRotation == that.displayRotation; } } @Override @Override public String toString() { public String toString() { return "CameraCompatTaskInfo { freeformCameraCompatMode=" return "CameraCompatTaskInfo { cameraCompatMode=" + freeformCameraCompatModeToString(freeformCameraCompatMode) + cameraCompatModeToString(cameraCompatMode) + displayRotationToString(displayRotation) + displayRotationToString(displayRotation) + "}"; + "}"; } } Loading @@ -187,44 +187,43 @@ public class CameraCompatTaskInfo implements Parcelable { * Returns the sandboxed display rotation based on the given {@code cameraCompatMode}. * Returns the sandboxed display rotation based on the given {@code cameraCompatMode}. * * * <p>This will be what the app likely expects in its requested orientation while running on a * <p>This will be what the app likely expects in its requested orientation while running on a * device with portrait natural orientation: `CAMERA_COMPAT_FREEFORM_PORTRAIT_*` is 0, and * device with portrait natural orientation: `CAMERA_COMPAT_PORTRAIT_*` is 0, and * `CAMERA_COMPAT_FREEFORM_LANDSCAPE_*` is 90. * `CAMERA_COMPAT_LANDSCAPE_*` is 90. * * * @return {@link WindowConfiguration#ROTATION_UNDEFINED} if not in camera compat mode. * @return {@link WindowConfiguration#ROTATION_UNDEFINED} if not in camera compat mode. */ */ @Surface.Rotation @Surface.Rotation public static int getDisplayRotationFromCameraCompatMode(@FreeformCameraCompatMode int public static int getDisplayRotationFromCameraCompatMode(@CameraCompatMode int cameraCompatMode) { cameraCompatMode) { return switch (cameraCompatMode) { return switch (cameraCompatMode) { case CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE, case CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT -> ROTATION_0; CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT -> ROTATION_0; case CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE, case CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE, CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT -> ROTATION_90; CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT -> ROTATION_90; default -> ROTATION_UNDEFINED; default -> ROTATION_UNDEFINED; }; }; } } /** Human readable version of the freeform camera compat mode. */ /** Human readable version of the camera compat mode. */ @NonNull @NonNull public static String freeformCameraCompatModeToString( public static String cameraCompatModeToString(@CameraCompatMode int cameraCompatMode) { @FreeformCameraCompatMode int freeformCameraCompatMode) { return switch (cameraCompatMode) { return switch (freeformCameraCompatMode) { case CAMERA_COMPAT_UNSPECIFIED -> "undefined"; case CAMERA_COMPAT_FREEFORM_UNSPECIFIED -> "undefined"; case CAMERA_COMPAT_NONE -> "inactive"; case CAMERA_COMPAT_FREEFORM_NONE -> "inactive"; case CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE -> case CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE -> "app-portrait-device-landscape"; "app-portrait-device-landscape"; case CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_LANDSCAPE -> case CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_LANDSCAPE -> "app-landscape-device-landscape"; "app-landscape-device-landscape"; case CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_PORTRAIT -> case CAMERA_COMPAT_PORTRAIT_DEVICE_IN_PORTRAIT -> "app-portrait-device-portrait"; "app-portrait-device-portrait"; case CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT -> case CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT -> "app-landscape-device-portrait"; "app-landscape-device-portrait"; default -> throw new AssertionError( default -> throw new AssertionError("Unexpected camera compat mode: " "Unexpected camera compat mode: " + freeformCameraCompatMode); + cameraCompatMode); }; }; } } /** Human readable version of the freeform camera compat mode. */ /** Human readable version of the camera compat mode. */ @NonNull @NonNull public static String displayRotationToString(@Surface.Rotation int displayRotation) { public static String displayRotationToString(@Surface.Rotation int displayRotation) { return switch (displayRotation) { return switch (displayRotation) { Loading @@ -233,8 +232,7 @@ public class CameraCompatTaskInfo implements Parcelable { case ROTATION_90 -> "90"; case ROTATION_90 -> "90"; case ROTATION_180 -> "180"; case ROTATION_180 -> "180"; case ROTATION_270 -> "270"; case ROTATION_270 -> "270"; default -> throw new AssertionError( default -> throw new AssertionError("Unexpected display rotation: " + displayRotation); "Unexpected display rotation: " + displayRotation); }; }; } } } }
core/java/android/hardware/camera2/CameraManager.java +11 −11 Original line number Original line Diff line number Diff line Loading @@ -1719,13 +1719,13 @@ public final class CameraManager { if (activityManager != null) { if (activityManager != null) { for (ActivityManager.AppTask appTask : activityManager.getAppTasks()) { for (ActivityManager.AppTask appTask : activityManager.getAppTasks()) { final TaskInfo taskInfo = appTask.getTaskInfo(); final TaskInfo taskInfo = appTask.getTaskInfo(); final int freeformCameraCompatMode = taskInfo.appCompatTaskInfo final int cameraCompatMode = taskInfo.appCompatTaskInfo.cameraCompatTaskInfo .cameraCompatTaskInfo.freeformCameraCompatMode; .cameraCompatMode; if (isInCameraCompatMode(freeformCameraCompatMode) if (isInCameraCompatMode(cameraCompatMode) && taskInfo.topActivity != null && taskInfo.topActivity != null && taskInfo.topActivity.getPackageName().equals(packageName)) { && taskInfo.topActivity.getPackageName().equals(packageName)) { // WindowManager has requested rotation override. // WindowManager has requested rotation override. return getRotationOverrideForCompatFreeform(freeformCameraCompatMode, return getRotationOverrideForCompatFreeform(cameraCompatMode, taskInfo.appCompatTaskInfo.cameraCompatTaskInfo taskInfo.appCompatTaskInfo.cameraCompatTaskInfo .displayRotation); .displayRotation); } } Loading @@ -1751,10 +1751,10 @@ public final class CameraManager { : ICameraService.ROTATION_OVERRIDE_NONE; : ICameraService.ROTATION_OVERRIDE_NONE; } } private static boolean isInCameraCompatMode(@CameraCompatTaskInfo.FreeformCameraCompatMode int private static boolean isInCameraCompatMode(@CameraCompatTaskInfo.CameraCompatMode int freeformCameraCompatMode) { cameraCompatMode) { return (freeformCameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_UNSPECIFIED) return (cameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_UNSPECIFIED) && (freeformCameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE); && (cameraCompatMode != CameraCompatTaskInfo.CAMERA_COMPAT_NONE); } } private static int getRotationOverrideForCompatFreeform( private static int getRotationOverrideForCompatFreeform( Loading @@ -1769,13 +1769,13 @@ public final class CameraManager { } } private static int getRotationOverrideForCompatFreeform( private static int getRotationOverrideForCompatFreeform( @CameraCompatTaskInfo.FreeformCameraCompatMode int freeformCameraCompatMode, @CameraCompatTaskInfo.CameraCompatMode int freeformCameraCompatMode, @Surface.Rotation int displayRotation) { @Surface.Rotation int displayRotation) { // Only rotate-and-crop if the app and device orientations do not match. // Only rotate-and-crop if the app and device orientations do not match. if (freeformCameraCompatMode if (freeformCameraCompatMode == CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_LANDSCAPE_DEVICE_IN_PORTRAIT == CameraCompatTaskInfo.CAMERA_COMPAT_LANDSCAPE_DEVICE_IN_PORTRAIT || freeformCameraCompatMode || freeformCameraCompatMode == CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE) { == CameraCompatTaskInfo.CAMERA_COMPAT_PORTRAIT_DEVICE_IN_LANDSCAPE) { // Rotate-and-crop compensates for changes in camera preview calculations (sandboxing). // Rotate-and-crop compensates for changes in camera preview calculations (sandboxing). // Recommended calculation of camera preview is: // Recommended calculation of camera preview is: // rotation = (sensorOrientationDegrees - deviceOrientationDegrees * sign + 360) % 360 // rotation = (sensorOrientationDegrees - deviceOrientationDegrees * sign + 360) % 360 Loading
services/core/java/com/android/server/wm/AppCompatCameraOverrides.java +2 −2 Original line number Original line Diff line number Diff line Loading @@ -188,7 +188,7 @@ class AppCompatCameraOverrides { * <li>Activity is opted-in using per-app override, or the treatment is enabled for all apps. * <li>Activity is opted-in using per-app override, or the treatment is enabled for all apps. * </ul> * </ul> */ */ boolean shouldApplyFreeformTreatmentForCameraCompat() { boolean shouldApplyCameraCompatSimReqOrientationTreatment() { return DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() return DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() && (shouldEnableCameraCompatSimulateRequestedOrientationTreatmentForApp() && (shouldEnableCameraCompatSimulateRequestedOrientationTreatmentForApp() || shouldForceEnableCameraCompatSimulateRequestedOrientationTreatment()); || shouldForceEnableCameraCompatSimulateRequestedOrientationTreatment()); Loading Loading @@ -254,7 +254,7 @@ class AppCompatCameraOverrides { proto.write(SHOULD_REFRESH_ACTIVITY_VIA_PAUSE_FOR_CAMERA_COMPAT, proto.write(SHOULD_REFRESH_ACTIVITY_VIA_PAUSE_FOR_CAMERA_COMPAT, shouldRefreshActivityViaPauseForCameraCompat()); shouldRefreshActivityViaPauseForCameraCompat()); proto.write(SHOULD_ALLOW_SIMULATE_REQUESTED_ORIENTATION_FOR_CAMERA_COMPAT, proto.write(SHOULD_ALLOW_SIMULATE_REQUESTED_ORIENTATION_FOR_CAMERA_COMPAT, shouldApplyFreeformTreatmentForCameraCompat()); shouldApplyCameraCompatSimReqOrientationTreatment()); } } static class AppCompatCameraOverridesState { static class AppCompatCameraOverridesState { Loading
services/core/java/com/android/server/wm/AppCompatCameraPolicy.java +39 −40 Original line number Original line Diff line number Diff line Loading @@ -46,7 +46,7 @@ class AppCompatCameraPolicy { @Nullable @Nullable final DisplayRotationCompatPolicy mDisplayRotationCompatPolicy; final DisplayRotationCompatPolicy mDisplayRotationCompatPolicy; @Nullable @Nullable final CameraCompatFreeformPolicy mCameraCompatFreeformPolicy; final AppCompatCameraSimReqOrientationPolicy mSimReqOrientationPolicy; AppCompatCameraPolicy(@NonNull WindowManagerService wmService, AppCompatCameraPolicy(@NonNull WindowManagerService wmService, @NonNull DisplayContent displayContent) { @NonNull DisplayContent displayContent) { Loading @@ -54,29 +54,28 @@ class AppCompatCameraPolicy { // without the need to restart the device. // without the need to restart the device. final boolean needsDisplayRotationCompatPolicy = wmService.mAppCompatConfiguration final boolean needsDisplayRotationCompatPolicy = wmService.mAppCompatConfiguration .isCameraCompatForceRotateTreatmentEnabledAtBuildTime(); .isCameraCompatForceRotateTreatmentEnabledAtBuildTime(); final boolean needsCameraCompatFreeformPolicy = final boolean needsSimReqOrientationPolicy = DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() DesktopModeFlags.ENABLE_CAMERA_COMPAT_SIMULATE_REQUESTED_ORIENTATION.isTrue() && DesktopModeHelper.canEnterDesktopMode(wmService.mContext) && DesktopModeHelper.canEnterDesktopMode(wmService.mContext) && wmService.mAppCompatConfiguration && wmService.mAppCompatConfiguration .isCameraCompatSimulateRequestedOrientationTreatmentEnabled(); .isCameraCompatSimulateRequestedOrientationTreatmentEnabled(); if (needsDisplayRotationCompatPolicy || needsCameraCompatFreeformPolicy) { if (needsDisplayRotationCompatPolicy || needsSimReqOrientationPolicy) { final AppCompatCameraStateSource cameraStateListenerDelegate = final AppCompatCameraStateSource cameraStateListenerDelegate = new AppCompatCameraStateSource(); new AppCompatCameraStateSource(); mCameraStateMonitor = new CameraStateMonitor(displayContent, wmService.mH, mCameraStateMonitor = new CameraStateMonitor(displayContent, wmService.mH, cameraStateListenerDelegate); cameraStateListenerDelegate); mActivityRefresher = new ActivityRefresher(wmService, wmService.mH); mActivityRefresher = new ActivityRefresher(wmService, wmService.mH); mDisplayRotationCompatPolicy = mDisplayRotationCompatPolicy = needsDisplayRotationCompatPolicy needsDisplayRotationCompatPolicy ? new DisplayRotationCompatPolicy( ? new DisplayRotationCompatPolicy(displayContent, mCameraStateMonitor, displayContent, mCameraStateMonitor, cameraStateListenerDelegate, cameraStateListenerDelegate, mActivityRefresher) mActivityRefresher) : null; : null; mCameraCompatFreeformPolicy = mSimReqOrientationPolicy = needsSimReqOrientationPolicy needsCameraCompatFreeformPolicy ? new CameraCompatFreeformPolicy(displayContent, ? new AppCompatCameraSimReqOrientationPolicy(displayContent, mCameraStateMonitor, cameraStateListenerDelegate, mActivityRefresher) mCameraStateMonitor, cameraStateListenerDelegate, mActivityRefresher) : null; : null; } else { } else { mDisplayRotationCompatPolicy = null; mDisplayRotationCompatPolicy = null; mCameraCompatFreeformPolicy = null; mSimReqOrientationPolicy = null; mCameraStateMonitor = null; mCameraStateMonitor = null; mActivityRefresher = null; mActivityRefresher = null; } } Loading Loading @@ -150,8 +149,8 @@ class AppCompatCameraPolicy { if (mDisplayRotationCompatPolicy != null) { if (mDisplayRotationCompatPolicy != null) { mDisplayRotationCompatPolicy.start(); mDisplayRotationCompatPolicy.start(); } } if (mCameraCompatFreeformPolicy != null) { if (mSimReqOrientationPolicy != null) { mCameraCompatFreeformPolicy.start(); mSimReqOrientationPolicy.start(); } } if (mCameraStateMonitor != null) { if (mCameraStateMonitor != null) { mCameraStateMonitor.startListeningToCameraState(); mCameraStateMonitor.startListeningToCameraState(); Loading @@ -162,8 +161,8 @@ class AppCompatCameraPolicy { if (mDisplayRotationCompatPolicy != null) { if (mDisplayRotationCompatPolicy != null) { mDisplayRotationCompatPolicy.dispose(); mDisplayRotationCompatPolicy.dispose(); } } if (mCameraCompatFreeformPolicy != null) { if (mSimReqOrientationPolicy != null) { mCameraCompatFreeformPolicy.dispose(); mSimReqOrientationPolicy.dispose(); } } if (mCameraStateMonitor != null) { if (mCameraStateMonitor != null) { mCameraStateMonitor.stopListeningToCameraState(); mCameraStateMonitor.stopListeningToCameraState(); Loading @@ -174,8 +173,8 @@ class AppCompatCameraPolicy { return mDisplayRotationCompatPolicy != null; return mDisplayRotationCompatPolicy != null; } } boolean hasCameraCompatFreeformPolicy() { boolean hasSimReqOrientationPolicy() { return mCameraCompatFreeformPolicy != null; return mSimReqOrientationPolicy != null; } } boolean hasCameraStateMonitor() { boolean hasCameraStateMonitor() { Loading @@ -198,8 +197,8 @@ class AppCompatCameraPolicy { return (cameraPolicy.mDisplayRotationCompatPolicy != null return (cameraPolicy.mDisplayRotationCompatPolicy != null && cameraPolicy.mDisplayRotationCompatPolicy && cameraPolicy.mDisplayRotationCompatPolicy .shouldCameraCompatControlOrientation(activity)) .shouldCameraCompatControlOrientation(activity)) || (cameraPolicy.mCameraCompatFreeformPolicy != null || (cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .shouldCameraCompatControlOrientation(activity)); .shouldCameraCompatControlOrientation(activity)); } } Loading @@ -209,8 +208,8 @@ class AppCompatCameraPolicy { if (cameraPolicy == null) { if (cameraPolicy == null) { return false; return false; } } return cameraPolicy.mCameraCompatFreeformPolicy != null return cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .isFreeformLetterboxingForCameraAllowed(activity); .isFreeformLetterboxingForCameraAllowed(activity); } } Loading @@ -223,8 +222,8 @@ class AppCompatCameraPolicy { return (cameraPolicy.mDisplayRotationCompatPolicy != null return (cameraPolicy.mDisplayRotationCompatPolicy != null && cameraPolicy.mDisplayRotationCompatPolicy && cameraPolicy.mDisplayRotationCompatPolicy .shouldCameraCompatControlAspectRatio(activity)) .shouldCameraCompatControlAspectRatio(activity)) || (cameraPolicy.mCameraCompatFreeformPolicy != null || (cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .shouldCameraCompatControlAspectRatio(activity)); .shouldCameraCompatControlAspectRatio(activity)); } } Loading @@ -243,8 +242,8 @@ class AppCompatCameraPolicy { && cameraPolicy.mDisplayRotationCompatPolicy && cameraPolicy.mDisplayRotationCompatPolicy .isCameraRunningAndWindowingModeEligible(activity, .isCameraRunningAndWindowingModeEligible(activity, /* mustBeFullscreen */ true)) /* mustBeFullscreen */ true)) || (cameraPolicy.mCameraCompatFreeformPolicy != null || (cameraPolicy.mSimReqOrientationPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy && cameraPolicy.mSimReqOrientationPolicy .isCameraRunningAndWindowingModeEligible(activity)); .isCameraRunningAndWindowingModeEligible(activity)); } } Loading @@ -263,29 +262,29 @@ class AppCompatCameraPolicy { } } float displayRotationCompatPolicyAspectRatio = float displayRotationCompatPolicyAspectRatio = cameraPolicy.mDisplayRotationCompatPolicy != null cameraPolicy.mDisplayRotationCompatPolicy != null ? cameraPolicy.mDisplayRotationCompatPolicy.getCameraCompatAspectRatio(activity) ? cameraPolicy.mDisplayRotationCompatPolicy.getCameraCompatAspectRatio( activity) : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; float cameraCompatFreeformPolicyAspectRatio = float simReqOrientationPolicyAspectRatio = cameraPolicy.mSimReqOrientationPolicy != null cameraPolicy.mCameraCompatFreeformPolicy != null ? cameraPolicy.mSimReqOrientationPolicy.getCameraCompatAspectRatio(activity) ? cameraPolicy.mCameraCompatFreeformPolicy.getCameraCompatAspectRatio(activity) : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; : MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO; return Math.max(displayRotationCompatPolicyAspectRatio, return Math.max(displayRotationCompatPolicyAspectRatio, simReqOrientationPolicyAspectRatio); cameraCompatFreeformPolicyAspectRatio); } } @CameraCompatTaskInfo.FreeformCameraCompatMode @CameraCompatTaskInfo.CameraCompatMode static int getCameraCompatFreeformMode(@NonNull ActivityRecord activity) { static int getCameraCompatSimReqOrientationMode(@NonNull ActivityRecord activity) { final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); return cameraPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy != null return cameraPolicy != null && cameraPolicy.mSimReqOrientationPolicy ? cameraPolicy.mCameraCompatFreeformPolicy.getCameraCompatMode(activity) != null : CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_NONE; ? cameraPolicy.mSimReqOrientationPolicy.getCameraCompatMode(activity) : CameraCompatTaskInfo.CAMERA_COMPAT_NONE; } } @Surface.Rotation @Surface.Rotation static int getCameraDeviceRotation(@NonNull ActivityRecord activity) { static int getCameraDeviceRotation(@NonNull ActivityRecord activity) { final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); final AppCompatCameraPolicy cameraPolicy = getAppCompatCameraPolicy(activity); return cameraPolicy != null && cameraPolicy.mCameraCompatFreeformPolicy != null return cameraPolicy != null && cameraPolicy.mSimReqOrientationPolicy != null ? cameraPolicy.mCameraCompatFreeformPolicy.getCameraDeviceRotation() ? cameraPolicy.mSimReqOrientationPolicy.getCameraDeviceRotation() : ROTATION_UNDEFINED; : ROTATION_UNDEFINED; } } Loading
services/core/java/com/android/server/wm/CameraCompatFreeformPolicy.java→services/core/java/com/android/server/wm/AppCompatCameraSimReqOrientationPolicy.java +25 −26 File changed and moved.Preview size limit exceeded, changes collapsed. Show changes