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

Commit 58d3c552 authored by Massimo Carli's avatar Massimo Carli
Browse files

[21/n] Reduce dependencies from LetterboxUiController

Reduces dependencies from LetterboxUiController.

Introduce isChangeEnabled() to AppCOmpatUtils.

Flag: EXEMPT refactor
Bug: 346264992
Test: atest WmTests:LetterboxUControllerTest
Test: atest WmTests:AppCompatOrientationOverridesTest

Change-Id: Iddc996a96a5dfe43306553b3c71dc2cb5fc012a3
parent 14529165
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -4290,7 +4290,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
    }

    void finishRelaunching() {
        mLetterboxUiController.setRelaunchingAfterRequestedOrientationChanged(false);
        mAppCompatController.getAppCompatOrientationOverrides()
                .setRelaunchingAfterRequestedOrientationChanged(false);
        mTaskSupervisor.getActivityMetricsLogger().notifyActivityRelaunched(this);

        if (mPendingRelaunchCount > 0) {
@@ -8181,7 +8182,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                mLastReportedConfiguration.getMergedConfiguration())) {
            ensureActivityConfiguration(false /* ignoreVisibility */);
            if (mPendingRelaunchCount > originalRelaunchingCount) {
                mLetterboxUiController.setRelaunchingAfterRequestedOrientationChanged(true);
                mAppCompatController.getAppCompatOrientationOverrides()
                        .setRelaunchingAfterRequestedOrientationChanged(true);
            }
            if (mTransitionController.inPlayingTransition(this)) {
                mTransitionController.mValidateActivityCompat.add(this);
+3 −6
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_POSITION_MULTIPLIER_CENTER;
import static com.android.server.wm.AppCompatConfiguration.MIN_FIXED_ORIENTATION_LETTERBOX_ASPECT_RATIO;
import static com.android.server.wm.AppCompatUtils.isChangeEnabled;

import android.annotation.NonNull;
import android.content.pm.PackageManager;
@@ -115,7 +116,7 @@ class AppCompatAspectRatioOverrides {
     */
    boolean shouldOverrideMinAspectRatio() {
        return mAllowMinAspectRatioOverrideOptProp.shouldEnableWithOptInOverrideAndOptOutProperty(
                isCompatChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO));
                isChangeEnabled(mActivityRecord, OVERRIDE_MIN_ASPECT_RATIO));
    }

    /**
@@ -154,7 +155,7 @@ class AppCompatAspectRatioOverrides {
    }

    boolean isSystemOverrideToFullscreenEnabled() {
        return isCompatChangeEnabled(OVERRIDE_ANY_ORIENTATION_TO_USER)
        return isChangeEnabled(mActivityRecord, OVERRIDE_ANY_ORIENTATION_TO_USER)
                && !mAllowOrientationOverrideOptProp.isFalse()
                && (mUserAspectRatioState.mUserAspectRatio == USER_MIN_ASPECT_RATIO_UNSET
                || mUserAspectRatioState.mUserAspectRatio == USER_MIN_ASPECT_RATIO_FULLSCREEN);
@@ -302,10 +303,6 @@ class AppCompatAspectRatioOverrides {
        private int mUserAspectRatio = USER_MIN_ASPECT_RATIO_UNSET;
    }

    private boolean isCompatChangeEnabled(long overrideChangeId) {
        return mActivityRecord.info.isChangeEnabled(overrideChangeId);
    }

    private Resources getResources() {
        return mActivityRecord.mWmService.mContext.getResources();
    }
+8 −10
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_

import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.AppCompatUtils.isChangeEnabled;

import android.annotation.NonNull;
import android.app.CameraCompatTaskInfo.FreeformCameraCompatMode;
@@ -99,7 +100,8 @@ class AppCompatCameraOverrides {
    boolean shouldOverrideMinAspectRatioForCamera() {
        return isCameraActive() && mAllowMinAspectRatioOverrideOptProp
                .shouldEnableWithOptInOverrideAndOptOutProperty(
                        isCompatChangeEnabled(OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA));
                        isChangeEnabled(mActivityRecord,
                                OVERRIDE_MIN_ASPECT_RATIO_ONLY_FOR_CAMERA));
    }

    /**
@@ -115,7 +117,7 @@ class AppCompatCameraOverrides {
     */
    boolean shouldRefreshActivityForCameraCompat() {
        return mCameraCompatAllowRefreshOptProp.shouldEnableWithOptOutOverrideAndProperty(
                isCompatChangeEnabled(OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH));
                isChangeEnabled(mActivityRecord, OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH));
    }

    /**
@@ -134,7 +136,7 @@ class AppCompatCameraOverrides {
     */
    boolean shouldRefreshActivityViaPauseForCameraCompat() {
        return mCameraCompatEnableRefreshViaPauseOptProp.shouldEnableWithOverrideAndProperty(
                isCompatChangeEnabled(OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE));
                isChangeEnabled(mActivityRecord, OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE));
    }

    /**
@@ -150,7 +152,7 @@ class AppCompatCameraOverrides {
     */
    boolean shouldForceRotateForCameraCompat() {
        return mCameraCompatAllowForceRotationOptProp.shouldEnableWithOptOutOverrideAndProperty(
                isCompatChangeEnabled(OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION));
                isChangeEnabled(mActivityRecord, OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION));
    }

    /**
@@ -168,7 +170,7 @@ class AppCompatCameraOverrides {
     * </ul>
     */
    boolean shouldApplyFreeformTreatmentForCameraCompat() {
        return Flags.cameraCompatForFreeform() && !isCompatChangeEnabled(
        return Flags.cameraCompatForFreeform() && !isChangeEnabled(mActivityRecord,
                OVERRIDE_CAMERA_COMPAT_DISABLE_FREEFORM_WINDOWING_TREATMENT);
    }

@@ -191,7 +193,7 @@ class AppCompatCameraOverrides {
    }

    boolean isOverrideOrientationOnlyForCameraEnabled() {
        return isCompatChangeEnabled(OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA);
        return isChangeEnabled(mActivityRecord, OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA);
    }

    /**
@@ -227,10 +229,6 @@ class AppCompatCameraOverrides {
        mAppCompatCameraOverridesState.mFreeformCameraCompatMode = freeformCameraCompatMode;
    }

    private boolean isCompatChangeEnabled(long overrideChangeId) {
        return mActivityRecord.info.isChangeEnabled(overrideChangeId);
    }

    static class AppCompatCameraOverridesState {
        // Whether activity "refresh" was requested but not finished in
        // ActivityRecord#activityResumedLocked following the camera compat force rotation in
+49 −0
Original line number Diff line number Diff line
@@ -20,14 +20,20 @@ import static android.content.pm.ActivityInfo.OVERRIDE_ANY_ORIENTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED;
import static android.content.pm.ActivityInfo.OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE;
import static android.content.pm.ActivityInfo.OVERRIDE_RESPECT_REQUESTED_ORIENTATION;
import static android.content.pm.ActivityInfo.OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR;
import static android.content.pm.ActivityInfo.OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT;
import static android.content.pm.ActivityInfo.OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED;
import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE;
import static android.view.WindowManager.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION;

import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_ATM;
import static com.android.server.wm.ActivityTaskManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.AppCompatUtils.asLazy;
import static com.android.server.wm.AppCompatUtils.isChangeEnabled;

import android.annotation.NonNull;

@@ -54,6 +60,10 @@ class AppCompatOrientationOverrides {
    private final OptPropFactory.OptProp mIgnoreRequestedOrientationOptProp;
    @NonNull
    private final OptPropFactory.OptProp mAllowIgnoringOrientationRequestWhenLoopDetectedOptProp;
    @NonNull
    private final OptPropFactory.OptProp mAllowOrientationOverrideOptProp;
    @NonNull
    private final OptPropFactory.OptProp mAllowDisplayOrientationOverrideOptProp;

    @NonNull
    final OrientationOverridesState mOrientationOverridesState;
@@ -74,6 +84,17 @@ class AppCompatOrientationOverrides {
        mAllowIgnoringOrientationRequestWhenLoopDetectedOptProp = optPropBuilder.create(
                PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED,
                isPolicyForIgnoringRequestedOrientationEnabled);
        mAllowOrientationOverrideOptProp = optPropBuilder.create(
                PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE);
        mAllowDisplayOrientationOverrideOptProp = optPropBuilder.create(
                PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE,
                () -> mActivityRecord.mDisplayContent != null
                        && mActivityRecord.getTask() != null
                        && mActivityRecord.mDisplayContent.getIgnoreOrientationRequest()
                        && !mActivityRecord.getTask().inMultiWindowMode()
                        && mActivityRecord.mDisplayContent.getNaturalOrientation()
                            == ORIENTATION_LANDSCAPE
        );
    }

    boolean shouldEnableIgnoreOrientationRequest() {
@@ -81,6 +102,10 @@ class AppCompatOrientationOverrides {
                isCompatChangeEnabled(OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION));
    }

    boolean isOverrideRespectRequestedOrientationEnabled() {
        return isChangeEnabled(mActivityRecord, OVERRIDE_RESPECT_REQUESTED_ORIENTATION);
    }

    /**
     * Whether an app is calling {@link android.app.Activity#setRequestedOrientation}
     * in a loop and orientation request should be ignored.
@@ -112,6 +137,26 @@ class AppCompatOrientationOverrides {
                    .isLetterboxedForFixedOrientationAndAspectRatio();
    }

    /**
     * Whether should fix display orientation to landscape natural orientation when a task is
     * fullscreen and the display is ignoring orientation requests.
     *
     * <p>This treatment is enabled when the following conditions are met:
     * <ul>
     *     <li>Opt-out component property isn't enabled
     *     <li>Opt-in per-app override is enabled
     *     <li>Task is in fullscreen.
     *     <li>{@link DisplayContent#getIgnoreOrientationRequest} is enabled
     *     <li>Natural orientation of the display is landscape.
     * </ul>
     */
    boolean shouldUseDisplayLandscapeNaturalOrientation() {
        return mAllowDisplayOrientationOverrideOptProp
                .shouldEnableWithOptInOverrideAndOptOutProperty(
                        isChangeEnabled(mActivityRecord,
                                OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION));
    }

    /**
     * Sets whether an activity is relaunching after the app has called {@link
     * android.app.Activity#setRequestedOrientation}.
@@ -125,6 +170,10 @@ class AppCompatOrientationOverrides {
        return mOrientationOverridesState.mIsRelaunchingAfterRequestedOrientationChanged;
    }

    boolean isAllowOrientationOverrideOptOut() {
        return mAllowOrientationOverrideOptProp.isFalse();
    }

    @VisibleForTesting
    int getSetOrientationRequestCounter() {
        return mOrientationOverridesState.mSetOrientationRequestCounter;
+2 −1
Original line number Diff line number Diff line
@@ -86,7 +86,8 @@ class AppCompatOrientationPolicy {
            return SCREEN_ORIENTATION_PORTRAIT;
        }

        if (mAppCompatOverrides.isAllowOrientationOverrideOptOut()) {
        if (mAppCompatOverrides.getAppCompatOrientationOverrides()
                .isAllowOrientationOverrideOptOut()) {
            return candidate;
        }

Loading