Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8bb470d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Rename camera compat freeform -> simulate requested orientation." into main

parents 22709573 c2b75e86
Loading
Loading
Loading
Loading
+48 −50
Original line number Original line Diff line number Diff line
@@ -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.
@@ -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();
    }
    }


@@ -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);
    }
    }


@@ -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;
    }
    }


@@ -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)
                + "}";
                + "}";
    }
    }
@@ -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) {
@@ -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);
        };
        };
    }
    }
}
}
+11 −11
Original line number Original line Diff line number Diff line
@@ -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);
                        }
                        }
@@ -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(
@@ -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
+2 −2
Original line number Original line Diff line number Diff line
@@ -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());
@@ -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 {
+39 −40
Original line number Original line Diff line number Diff line
@@ -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) {
@@ -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;
        }
        }
@@ -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();
@@ -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();
@@ -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() {
@@ -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));
    }
    }


@@ -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);
    }
    }


@@ -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));
    }
    }


@@ -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));
    }
    }


@@ -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;
    }
    }


+25 −26

File changed and moved.

Preview size limit exceeded, changes collapsed.

Loading