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

Commit e1fe3107 authored by Mina Karadzic's avatar Mina Karadzic Committed by Android (Google) Code Review
Browse files

Merge "Enable camera compat in split screen." into main

parents 87fff3a8 1c659cb6
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -279,7 +279,6 @@ final class AppCompatCameraDisplayRotationPolicy implements AppCompatCameraState
    private boolean isTreatmentEnabledForDisplay() {
        return mWmService.mAppCompatConfiguration.isCameraCompatForceRotateTreatmentEnabled()
                && mDisplayContent.getIgnoreOrientationRequest()
                // TODO(b/225928882): Support camera compat rotation for external displays
                && mDisplayContent.getDisplay().getType() == TYPE_INTERNAL;
    }

+9 −3
Original line number Diff line number Diff line
@@ -341,16 +341,22 @@ final class AppCompatCameraSimReqOrientationPolicy implements AppCompatCameraSta
    boolean isCameraRunningAndWindowingModeEligible(@NonNull ActivityRecord activity) {
        return  activity.mAppCompatController.getCameraOverrides()
                .shouldApplyCameraCompatSimReqOrientationTreatment()
                && activity.inFreeformWindowingMode()
                && isWindowingModeEligible(activity)
                && mCameraStateMonitor.isCameraRunningForActivity(activity);
    }

    private boolean isWindowingModeEligible(@NonNull ActivityRecord activity) {
        return activity.inFreeformWindowingMode()
                || (Flags.cameraCompatUnifyCameraPolicies() && activity.inMultiWindowMode());
    }

    boolean shouldCameraCompatControlAspectRatio(@NonNull ActivityRecord activity) {
        // Camera compat should direct aspect ratio when in camera compat mode, unless an app has a
        // different camera compat aspect ratio set: this allows per-app camera compat override
        // aspect ratio to be smaller than the default.
        return isInCameraCompatMode(activity) && !activity.mAppCompatController
                .getCameraOverrides().isOverrideMinAspectRatioForCameraEnabled();
        return isInCameraCompatMode(activity)
                && !activity.mAppCompatController.getCameraOverrides()
                        .isOverrideMinAspectRatioForCameraEnabled();
    }

    boolean isInCameraCompatMode(@NonNull ActivityRecord activity) {
+17 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_PORTRAIT_DEVICE_IN_
import static android.app.CameraCompatTaskInfo.CameraCompatMode;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW;
import static android.app.servertransaction.ActivityLifecycleItem.ON_PAUSE;
import static android.app.servertransaction.ActivityLifecycleItem.ON_STOP;
import static android.content.pm.ActivityInfo.OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION;
@@ -41,6 +42,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.server.wm.AppCompatConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO;
import static com.android.window.flags.Flags.FLAG_CAMERA_COMPAT_UNIFY_CAMERA_POLICIES;
import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_COMPATIBILITY_INFO_ROTATE_AND_CROP_BUGFIX;
import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING;
import static com.android.window.flags.Flags.FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT;
@@ -147,7 +149,7 @@ public class AppCompatCameraSimReqOrientationPolicyTests extends WindowTestsBase
    @Test
    @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
    @EnableCompatChanges({OVERRIDE_CAMERA_COMPAT_ENABLE_FREEFORM_WINDOWING_TREATMENT})
    public void testIsCameraRunningAndWindowingModeEligible_notFreeformWindowing_returnsFalse() {
    public void testIsCameraRunningAndWindowingModeEligible_fullscreen_returnsFalse() {
        runTestScenario((robot) -> {
            robot.configureActivity(SCREEN_ORIENTATION_PORTRAIT, WINDOWING_MODE_FULLSCREEN);

@@ -184,6 +186,20 @@ public class AppCompatCameraSimReqOrientationPolicyTests extends WindowTestsBase
        });
    }

    @Test
    @EnableFlags({FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING,
            FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT,
            FLAG_CAMERA_COMPAT_UNIFY_CAMERA_POLICIES})
    public void testIsCameraRunningAndWindowingModeEligible_splitScreenCameraRunning_true() {
        runTestScenario((robot) -> {
            robot.configureActivity(SCREEN_ORIENTATION_PORTRAIT, WINDOWING_MODE_MULTI_WINDOW);

            robot.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1);

            robot.checkIsCameraRunningAndWindowingModeEligible(true);
        });
    }

    @Test
    @EnableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING)
    @DisableFlags(FLAG_ENABLE_CAMERA_COMPAT_FOR_DESKTOP_WINDOWING_OPT_OUT)