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

Commit 6dc652f6 authored by Mina Granic's avatar Mina Granic
Browse files

Freeform: Use camera compat aspect ratio when in camera compat mode.

Add a `WindowManagerShellCommand` to enable changing camera compat
aspect ratio dynamically. Use per-app override aspect ratio only for
camera if such exists over the configuration camera compat aspect ratio.

Also rename some camera compat API methods and move the business logic
from `AppCompatCameraPolicy` facade to the strategy camera policies.
This makes it clearer for the clients which signals should be used.

Flag: com.android.window.flags.camera_compat_for_freeform
Bug: 347864073
Bug: 369082932
Fixes: 368573687
Test: atest WmTests:CameraCompatFreeformPolicyTests
Test: atest WmTests:AppCompatOrientationPolicyTests
Change-Id: I2993e98209fec532fa5cec33a8adef885846233e
parent 27a0aa54
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -6183,6 +6183,10 @@
        is enabled and activity is connected to the camera in fullscreen. -->
    <bool name="config_isWindowManagerCameraCompatSplitScreenAspectRatioEnabled">false</bool>

    <!-- Which aspect ratio to use when camera compat treatment is enabled and an activity eligible
        for treatment is connected to the camera. -->
    <item name="config_windowManagerCameraCompatAspectRatio" format="float" type="dimen">1.0</item>

    <!-- Docking is a uiMode configuration change and will cause activities to relaunch if it's not
         handled. If true, the configuration change will be sent but activities will not be
         relaunched upon docking. Apps with desk resources will behave like normal, since they may
+1 −0
Original line number Diff line number Diff line
@@ -4778,6 +4778,7 @@
  <java-symbol type="bool" name="config_isCompatFakeFocusEnabled" />
  <java-symbol type="bool" name="config_isWindowManagerCameraCompatTreatmentEnabled" />
  <java-symbol type="bool" name="config_isWindowManagerCameraCompatSplitScreenAspectRatioEnabled" />
  <java-symbol type="dimen" name="config_windowManagerCameraCompatAspectRatio" />
  <java-symbol type="bool" name="config_skipActivityRelaunchWhenDocking" />

  <java-symbol type="bool" name="config_hideDisplayCutoutWithDisplayArea" />
+11 −3
Original line number Diff line number Diff line
@@ -6409,7 +6409,11 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            // and the token could be null.
            return;
        }
        r.mDisplayContent.mAppCompatCameraPolicy.onActivityRefreshed(r);
        final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy
                .getAppCompatCameraPolicy(r);
        if (cameraPolicy != null) {
            cameraPolicy.onActivityRefreshed(r);
        }
    }

    static void splashScreenAttachedLocked(IBinder token) {
@@ -9451,8 +9455,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        if (!shouldBeResumed(/* activeActivity */ null)) {
            return;
        }
        mDisplayContent.mAppCompatCameraPolicy.onActivityConfigurationChanging(
                this, newConfig, lastReportedConfig);

        final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy(
                this);
        if (cameraPolicy != null) {
            cameraPolicy.onActivityConfigurationChanging(this, newConfig, lastReportedConfig);
        }
    }

    /** Get process configuration, or global config if the process is not set. */
+2 −2
Original line number Diff line number Diff line
@@ -255,8 +255,8 @@ class AppCompatAspectRatioOverrides {
                mActivityRecord.getOverrideOrientation());
        final AppCompatCameraOverrides cameraOverrides =
                mActivityRecord.mAppCompatController.getAppCompatCameraOverrides();
        final AppCompatCameraPolicy cameraPolicy =
                mActivityRecord.mAppCompatController.getAppCompatCameraPolicy();
        final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy(
                mActivityRecord);
        // Don't resize to split screen size when in book mode if letterbox position is centered
        return (isBookMode && isNotCenteredHorizontally || isTabletopMode && isLandscape)
                || cameraOverrides.isCameraCompatSplitScreenAspectRatioAllowed()
+13 −4
Original line number Diff line number Diff line
@@ -72,6 +72,15 @@ class AppCompatAspectRatioPolicy {

    float getDesiredAspectRatio(@NonNull Configuration newParentConfig,
            @NonNull Rect parentBounds) {
        // If in camera compat mode, aspect ratio from the camera compat policy has priority over
        // default letterbox aspect ratio.
        final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy(
                mActivityRecord);
        if (cameraPolicy != null && cameraPolicy.shouldCameraCompatControlAspectRatio(
                mActivityRecord)) {
            return cameraPolicy.getCameraCompatAspectRatio(mActivityRecord);
        }

        final float letterboxAspectRatioOverride =
                mAppCompatOverrides.getAppCompatAspectRatioOverrides()
                        .getFixedOrientationLetterboxAspectRatio(newParentConfig);
@@ -119,10 +128,10 @@ class AppCompatAspectRatioPolicy {
        if (aspectRatioOverrides.shouldApplyUserMinAspectRatioOverride()) {
            return aspectRatioOverrides.getUserMinAspectRatio();
        }
        final DisplayContent displayContent = mActivityRecord.getDisplayContent();
        final boolean shouldOverrideMinAspectRatioForCamera = displayContent != null
                && displayContent.mAppCompatCameraPolicy.shouldOverrideMinAspectRatioForCamera(
        final AppCompatCameraPolicy cameraPolicy = AppCompatCameraPolicy.getAppCompatCameraPolicy(
                mActivityRecord);
        final boolean shouldOverrideMinAspectRatioForCamera = cameraPolicy != null
                && cameraPolicy.shouldOverrideMinAspectRatioForCamera(mActivityRecord);
        if (!aspectRatioOverrides.shouldOverrideMinAspectRatio()
                && !shouldOverrideMinAspectRatioForCamera) {
            if (mActivityRecord.isUniversalResizeable()) {
Loading