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

Commit 368583a2 authored by Mariia Sandrikova's avatar Mariia Sandrikova Committed by Automerger Merge Worker
Browse files

Merge "[7/n] Camera Compat: Split screen aspect ratio for resizeable...

Merge "[7/n] Camera Compat: Split screen aspect ratio for resizeable activities" into tm-qpr-dev am: e3ae617c am: e13ee792 am: 9fa9a3d1

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22191043



Change-Id: I55bcd4e4f1f61b7bc066da503cdbc17a3f7910ec
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents fb9803ba 9fa9a3d1
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5582,6 +5582,10 @@
        split screen. -->
    <bool name="config_isWindowManagerCameraCompatTreatmentEnabled">false</bool>

    <!-- Whether should use split screen aspect ratio for the activity when camera compat treatment
        is enabled and activity is connected to the camera in fullscreen. -->
    <bool name="config_isWindowManagerCameraCompatSplitScreenAspectRatioEnabled">false</bool>

    <!-- Whether a camera compat controller is enabled to allow the user to apply or revert
         treatment for stretched issues in camera viewfinder. -->
    <bool name="config_isCameraCompatControlForStretchedIssuesEnabled">false</bool>
+1 −0
Original line number Diff line number Diff line
@@ -4500,6 +4500,7 @@
  <java-symbol type="bool" name="config_letterboxIsDisplayAspectRatioForFixedOrientationLetterboxEnabled" />
  <java-symbol type="bool" name="config_isCompatFakeFocusEnabled" />
  <java-symbol type="bool" name="config_isWindowManagerCameraCompatTreatmentEnabled" />
  <java-symbol type="bool" name="config_isWindowManagerCameraCompatSplitScreenAspectRatioEnabled" />
  <java-symbol type="bool" name="config_isCameraCompatControlForStretchedIssuesEnabled" />

  <java-symbol type="bool" name="config_hideDisplayCutoutWithDisplayArea" />
+2 −7
Original line number Diff line number Diff line
@@ -378,10 +378,7 @@ final class DisplayRotationCompatPolicy {
            // Checking whether an activity in fullscreen rather than the task as this camera
            // compat treatment doesn't cover activity embedding.
            if (topActivity.getWindowingMode() == WINDOWING_MODE_FULLSCREEN) {
                if (topActivity.mLetterboxUiController
                        .isOverrideOrientationOnlyForCameraEnabled()) {
                    topActivity.recomputeConfiguration();
                }
                topActivity.mLetterboxUiController.recomputeConfigurationForCameraCompatIfNeeded();
                mDisplayContent.updateOrientation();
                return;
            }
@@ -447,9 +444,7 @@ final class DisplayRotationCompatPolicy {
                    || topActivity.getWindowingMode() != WINDOWING_MODE_FULLSCREEN) {
                return;
            }
            if (topActivity.mLetterboxUiController.isOverrideOrientationOnlyForCameraEnabled()) {
                topActivity.recomputeConfiguration();
            }
            topActivity.mLetterboxUiController.recomputeConfigurationForCameraCompatIfNeeded();
            mDisplayContent.updateOrientation();
        }
    }
+14 −0
Original line number Diff line number Diff line
@@ -212,6 +212,10 @@ final class LetterboxConfiguration {
    // otherwise the apps get blacked out when they are resumed and do not have focus yet.
    private boolean mIsCompatFakeFocusEnabled;

    // Whether should use split screen aspect ratio for the activity when camera compat treatment
    // is enabled and activity is connected to the camera in fullscreen.
    private final boolean mIsCameraCompatSplitScreenAspectRatioEnabled;

    // Whether camera compatibility treatment is enabled.
    // See DisplayRotationCompatPolicy for context.
    private final boolean mIsCameraCompatTreatmentEnabled;
@@ -300,6 +304,8 @@ final class LetterboxConfiguration {
                R.bool.config_letterboxIsEnabledForTranslucentActivities);
        mIsCameraCompatTreatmentEnabled = mContext.getResources().getBoolean(
                R.bool.config_isWindowManagerCameraCompatTreatmentEnabled);
        mIsCameraCompatSplitScreenAspectRatioEnabled = mContext.getResources().getBoolean(
                R.bool.config_isWindowManagerCameraCompatSplitScreenAspectRatioEnabled);
        mIsCompatFakeFocusEnabled = mContext.getResources().getBoolean(
                R.bool.config_isCompatFakeFocusEnabled);
        mIsPolicyForIgnoringRequestedOrientationEnabled = mContext.getResources().getBoolean(
@@ -1122,6 +1128,14 @@ final class LetterboxConfiguration {
        return mIsPolicyForIgnoringRequestedOrientationEnabled;
    }

    /**
     * Whether should use split screen aspect ratio for the activity when camera compat treatment
     * is enabled and activity is connected to the camera in fullscreen.
     */
    boolean isCameraCompatSplitScreenAspectRatioEnabled() {
        return mIsCameraCompatSplitScreenAspectRatioEnabled;
    }

    /** Whether camera compatibility treatment is enabled. */
    boolean isCameraCompatTreatmentEnabled(boolean checkDeviceConfig) {
        return mIsCameraCompatTreatmentEnabled && (!checkDeviceConfig
+39 −13
Original line number Diff line number Diff line
@@ -390,13 +390,7 @@ final class LetterboxUiController {
                        + mActivityRecord);
                return true;
            }
            DisplayContent displayContent = mActivityRecord.mDisplayContent;
            if (displayContent == null) {
                return false;
            }
            if (displayContent.mDisplayRotationCompatPolicy != null
                    && displayContent.mDisplayRotationCompatPolicy
                    .isTreatmentEnabledForActivity(mActivityRecord)) {
            if (isCameraCompatTreatmentActive()) {
                Slog.w(TAG, "Ignoring orientation update to "
                        + screenOrientationToString(requestedOrientation)
                        + " due to camera compat treatment for " + mActivityRecord);
@@ -634,6 +628,16 @@ final class LetterboxUiController {
                mBooleanPropertyCameraCompatAllowForceRotation);
    }

    private boolean isCameraCompatTreatmentActive() {
        DisplayContent displayContent = mActivityRecord.mDisplayContent;
        if (displayContent == null) {
            return false;
        }
        return displayContent.mDisplayRotationCompatPolicy != null
                && displayContent.mDisplayRotationCompatPolicy
                        .isTreatmentEnabledForActivity(mActivityRecord);
    }

    private boolean isCompatChangeEnabled(long overrideChangeId) {
        return mActivityRecord.info.isChangeEnabled(overrideChangeId);
    }
@@ -896,15 +900,37 @@ final class LetterboxUiController {
    }

    float getFixedOrientationLetterboxAspectRatio(@NonNull Configuration parentConfiguration) {
        // Don't resize to split screen size when half folded if letterbox position is centered
        return isDisplayFullScreenAndSeparatingHinge()
                    && getHorizontalPositionMultiplier(parentConfiguration) != 0.5f
        return shouldUseSplitScreenAspectRatio(parentConfiguration)
                ? getSplitScreenAspectRatio()
                : mActivityRecord.shouldCreateCompatDisplayInsets()
                        ? getDefaultMinAspectRatioForUnresizableApps()
                        : getDefaultMinAspectRatio();
    }

    void recomputeConfigurationForCameraCompatIfNeeded() {
        if (isOverrideOrientationOnlyForCameraEnabled()
                || isCameraCompatSplitScreenAspectRatioAllowed()) {
            mActivityRecord.recomputeConfiguration();
        }
    }

    /**
     * Whether we use split screen aspect ratio for the activity when camera compat treatment
     * is active because the corresponding config is enabled and activity supports resizing.
     */
    private boolean isCameraCompatSplitScreenAspectRatioAllowed() {
        return mLetterboxConfiguration.isCameraCompatSplitScreenAspectRatioEnabled()
                && !mActivityRecord.shouldCreateCompatDisplayInsets();
    }

    private boolean shouldUseSplitScreenAspectRatio(@NonNull Configuration parentConfiguration) {
        return isDisplayFullScreenAndSeparatingHinge()
                // Don't resize to split screen size when half folded and centered
                && getHorizontalPositionMultiplier(parentConfiguration) != 0.5f
                        || isCameraCompatSplitScreenAspectRatioAllowed()
                                && isCameraCompatTreatmentActive();
    }

    private float getDefaultMinAspectRatioForUnresizableApps() {
        if (!mLetterboxConfiguration.getIsSplitScreenAspectRatioForUnresizableAppsEnabled()
                || mActivityRecord.getDisplayContent() == null) {
Loading