diff options
14 files changed, 171 insertions, 162 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 2dbf5bbf2326..bea16dc3d59a 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4294,7 +4294,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) { @@ -8185,7 +8186,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); diff --git a/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java b/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java index 05d4c821c161..25cb134a7c52 100644 --- a/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java +++ b/services/core/java/com/android/server/wm/AppCompatAspectRatioOverrides.java @@ -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(); } diff --git a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java index 93a866380550..aeaaffd9b1b1 100644 --- a/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java +++ b/services/core/java/com/android/server/wm/AppCompatCameraOverrides.java @@ -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 diff --git a/services/core/java/com/android/server/wm/AppCompatOrientationOverrides.java b/services/core/java/com/android/server/wm/AppCompatOrientationOverrides.java index 0adf825b43ae..bd01351251a5 100644 --- a/services/core/java/com/android/server/wm/AppCompatOrientationOverrides.java +++ b/services/core/java/com/android/server/wm/AppCompatOrientationOverrides.java @@ -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. @@ -113,6 +138,26 @@ class AppCompatOrientationOverrides { } /** + * 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; diff --git a/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java b/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java index 17f0d970d043..c5506de419d0 100644 --- a/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java +++ b/services/core/java/com/android/server/wm/AppCompatOrientationPolicy.java @@ -86,7 +86,8 @@ class AppCompatOrientationPolicy { return SCREEN_ORIENTATION_PORTRAIT; } - if (mAppCompatOverrides.isAllowOrientationOverrideOptOut()) { + if (mAppCompatOverrides.getAppCompatOrientationOverrides() + .isAllowOrientationOverrideOptOut()) { return candidate; } diff --git a/services/core/java/com/android/server/wm/AppCompatOverrides.java b/services/core/java/com/android/server/wm/AppCompatOverrides.java index cde48d64d398..f1ee23b60038 100644 --- a/services/core/java/com/android/server/wm/AppCompatOverrides.java +++ b/services/core/java/com/android/server/wm/AppCompatOverrides.java @@ -18,13 +18,10 @@ package com.android.server.wm; import static android.content.pm.ActivityInfo.FORCE_NON_RESIZE_APP; import static android.content.pm.ActivityInfo.FORCE_RESIZE_APP; -import static android.content.pm.ActivityInfo.OVERRIDE_RESPECT_REQUESTED_ORIENTATION; -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_ORIENTATION_OVERRIDE; import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES; +import static com.android.server.wm.AppCompatUtils.isChangeEnabled; + import android.annotation.NonNull; import com.android.server.wm.utils.OptPropFactory; @@ -36,11 +33,6 @@ public class AppCompatOverrides { @NonNull private final ActivityRecord mActivityRecord; - - @NonNull - private final OptPropFactory.OptProp mAllowOrientationOverrideOptProp; - @NonNull - private final OptPropFactory.OptProp mAllowDisplayOrientationOverrideOptProp; @NonNull private final OptPropFactory.OptProp mAllowForceResizeOverrideOptProp; @NonNull @@ -69,19 +61,6 @@ public class AppCompatOverrides { mAppCompatFocusOverrides = new AppCompatFocusOverrides(mActivityRecord, appCompatConfiguration, optPropBuilder); - 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 - ); - mAllowForceResizeOverrideOptProp = optPropBuilder.create( PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES); } @@ -106,33 +85,6 @@ public class AppCompatOverrides { return mAppCompatFocusOverrides; } - boolean isAllowOrientationOverrideOptOut() { - return mAllowOrientationOverrideOptProp.isFalse(); - } - - boolean isOverrideRespectRequestedOrientationEnabled() { - return isCompatChangeEnabled(OVERRIDE_RESPECT_REQUESTED_ORIENTATION); - } - - /** - * 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( - isCompatChangeEnabled(OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION)); - } - /** * Whether we should apply the force resize per-app override. When this override is applied it * forces the packages it is applied to to be resizable. It won't change whether the app can be @@ -147,7 +99,7 @@ public class AppCompatOverrides { */ boolean shouldOverrideForceResizeApp() { return mAllowForceResizeOverrideOptProp.shouldEnableWithOptInOverrideAndOptOutProperty( - isCompatChangeEnabled(FORCE_RESIZE_APP)); + isChangeEnabled(mActivityRecord, FORCE_RESIZE_APP)); } /** @@ -162,10 +114,6 @@ public class AppCompatOverrides { */ boolean shouldOverrideForceNonResizeApp() { return mAllowForceResizeOverrideOptProp.shouldEnableWithOptInOverrideAndOptOutProperty( - isCompatChangeEnabled(FORCE_NON_RESIZE_APP)); - } - - private boolean isCompatChangeEnabled(long overrideChangeId) { - return mActivityRecord.info.isChangeEnabled(overrideChangeId); + isChangeEnabled(mActivityRecord, FORCE_NON_RESIZE_APP)); } } diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java index 75724eb6c3be..86f69cd3a802 100644 --- a/services/core/java/com/android/server/wm/DisplayArea.java +++ b/services/core/java/com/android/server/wm/DisplayArea.java @@ -267,7 +267,8 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { // between fullscreen and PiP would work well. Checking TaskFragment rather than // Task to ensure that Activity Embedding is excluded. && activity.getTaskFragment().getWindowingMode() == WINDOWING_MODE_FULLSCREEN - && activity.mLetterboxUiController.isOverrideRespectRequestedOrientationEnabled(); + && activity.mAppCompatController.getAppCompatOrientationOverrides() + .isOverrideRespectRequestedOrientationEnabled(); } boolean getIgnoreOrientationRequest() { diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 475b4737fd6b..403c3079e968 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2939,8 +2939,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (!handlesOrientationChangeFromDescendant(orientation)) { ActivityRecord topActivity = topRunningActivity(/* considerKeyguardState= */ true); - if (topActivity != null && topActivity.mLetterboxUiController - .shouldUseDisplayLandscapeNaturalOrientation()) { + if (topActivity != null && topActivity.mAppCompatController + .getAppCompatOrientationOverrides() + .shouldUseDisplayLandscapeNaturalOrientation()) { ProtoLog.v(WM_DEBUG_ORIENTATION, "Display id=%d is ignoring orientation request for %d, return %d" + " following a per-app override for %s", diff --git a/services/core/java/com/android/server/wm/LetterboxUiController.java b/services/core/java/com/android/server/wm/LetterboxUiController.java index 73f36557f3d6..5d4198fead34 100644 --- a/services/core/java/com/android/server/wm/LetterboxUiController.java +++ b/services/core/java/com/android/server/wm/LetterboxUiController.java @@ -147,20 +147,6 @@ final class LetterboxUiController { } /** - * Sets whether an activity is relaunching after the app has called {@link - * android.app.Activity#setRequestedOrientation}. - */ - void setRelaunchingAfterRequestedOrientationChanged(boolean isRelaunching) { - getAppCompatOverrides().getAppCompatOrientationOverrides() - .setRelaunchingAfterRequestedOrientationChanged(isRelaunching); - } - - - boolean isOverrideRespectRequestedOrientationEnabled() { - return getAppCompatOverrides().isOverrideRespectRequestedOrientationEnabled(); - } - - /** * Whether should fix display orientation to landscape natural orientation when a task is * fullscreen and the display is ignoring orientation requests. * @@ -174,7 +160,8 @@ final class LetterboxUiController { * </ul> */ boolean shouldUseDisplayLandscapeNaturalOrientation() { - return getAppCompatOverrides().shouldUseDisplayLandscapeNaturalOrientation(); + return getAppCompatOverrides().getAppCompatOrientationOverrides() + .shouldUseDisplayLandscapeNaturalOrientation(); } boolean hasWallpaperBackgroundForLetterbox() { @@ -800,11 +787,6 @@ final class LetterboxUiController { return null; } - boolean getIsRelaunchingAfterRequestedOrientationChanged() { - return getAppCompatOverrides().getAppCompatOrientationOverrides() - .getIsRelaunchingAfterRequestedOrientationChanged(); - } - private void adjustBoundsForTaskbar(final WindowState mainWindow, final Rect bounds) { // Rounded corners should be displayed above the taskbar. When taskbar is hidden, // an insets frame is equal to a navigation bar which shouldn't affect position of diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 164994c6513e..1cc5a8bec0c9 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5373,7 +5373,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // change then delay the position update until it has redrawn to avoid any flickers. final boolean isLetterboxedAndRelaunching = activityRecord != null && activityRecord.areBoundsLetterboxed() - && activityRecord.mLetterboxUiController + && activityRecord.mAppCompatController.getAppCompatOrientationOverrides() .getIsRelaunchingAfterRequestedOrientationChanged(); if (surfaceResizedWithoutMoveAnimation || isLetterboxedAndRelaunching) { applyWithNextDraw(mSetSurfacePositionConsumer); diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java index 11f7560a1409..f5c2e1924180 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java @@ -126,6 +126,10 @@ class AppCompatActivityRobot { .isCameraActive(any(ActivityRecord.class), anyBoolean()); } + void setDisplayNaturalOrientation(@Configuration.Orientation int naturalOrientation) { + doReturn(naturalOrientation).when(mDisplayContent).getNaturalOrientation(); + } + @NonNull ActivityRecord top() { return mActivityStack.top(); @@ -189,6 +193,11 @@ class AppCompatActivityRobot { mDisplayContent.setIgnoreOrientationRequest(enabled); } + void setTopTaskInMultiWindowMode(boolean inMultiWindowMode) { + doReturn(inMultiWindowMode).when(mTaskStack.top()) + .inMultiWindowMode(); + } + void setTopActivityAsEmbedded(boolean embedded) { doReturn(embedded).when(mActivityStack.top()).isEmbedded(); } @@ -225,20 +234,21 @@ class AppCompatActivityRobot { void createNewDisplay() { mDisplayContent = new TestDisplayContent.Builder(mAtm, mDisplayWidth, mDisplayHeight) .build(); + spyOn(mDisplayContent); spyOnAppCompatCameraPolicy(); } void createNewTask() { final Task newTask = new WindowTestsBase.TaskBuilder(mSupervisor) .setDisplay(mDisplayContent).build(); - mTaskStack.push(newTask); + pushTask(newTask); } void createNewTaskWithBaseActivity() { final Task newTask = new WindowTestsBase.TaskBuilder(mSupervisor) .setCreateActivity(true) .setDisplay(mDisplayContent).build(); - mTaskStack.push(newTask); + pushTask(newTask); pushActivity(newTask.getTopNonFinishingActivity()); } @@ -433,6 +443,11 @@ class AppCompatActivityRobot { spyOn(activity.mLetterboxUiController); } + private void pushTask(@NonNull Task task) { + spyOn(task); + mTaskStack.push(task); + } + private void spyOnAppCompatCameraPolicy() { spyOn(mDisplayContent.mAppCompatCameraPolicy); if (mDisplayContent.mAppCompatCameraPolicy.hasDisplayRotationCompatPolicy()) { diff --git a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java index 634453fe008c..6c0d8c4269af 100644 --- a/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/AppCompatOrientationOverridesTest.java @@ -16,6 +16,10 @@ package com.android.server.wm; import static android.content.pm.ActivityInfo.OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED; +import static android.content.pm.ActivityInfo.OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; +import static android.content.res.Configuration.ORIENTATION_PORTRAIT; +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 com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; @@ -158,6 +162,72 @@ public class AppCompatOrientationOverridesTest extends WindowTestsBase { }); } + @Test + @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) + public void testShouldUseDisplayLandscapeNaturalOrientation_override_returnsTrue() { + runTestScenario((robot) -> { + robot.applyOnActivity((a) -> { + a.setDisplayNaturalOrientation(ORIENTATION_LANDSCAPE); + a.setIgnoreOrientationRequest(true); + a.createActivityWithComponent(); + }); + robot.checkShouldUseDisplayLandscapeNaturalOrientation(/* expected */ true); + }); + } + + @Test + @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) + public void testShouldUseDisplayLandscapeNaturalOrientation_falseProperty_returnsFalse() { + runTestScenario((robot) -> { + robot.prop().disable(PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE); + robot.applyOnActivity((a) -> { + a.setDisplayNaturalOrientation(ORIENTATION_LANDSCAPE); + a.setIgnoreOrientationRequest(true); + a.createActivityWithComponent(); + }); + robot.checkShouldUseDisplayLandscapeNaturalOrientation(/* expected */ false); + }); + } + + @Test + @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) + public void testShouldUseDisplayLandscapeNaturalOrientation_portrait_isFalse() { + runTestScenario((robot) -> { + robot.applyOnActivity((a) -> { + a.setDisplayNaturalOrientation(ORIENTATION_PORTRAIT); + a.setIgnoreOrientationRequest(true); + a.createActivityWithComponent(); + }); + robot.checkShouldUseDisplayLandscapeNaturalOrientation(/* expected */ false); + }); + } + @Test + @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) + public void testShouldUseDisplayLandscapeNaturalOrientation_noIgnoreRequest_isFalse() { + runTestScenario((robot) -> { + robot.applyOnActivity((a) -> { + a.setDisplayNaturalOrientation(ORIENTATION_LANDSCAPE); + a.setIgnoreOrientationRequest(false); + a.createActivityWithComponent(); + }); + robot.checkShouldUseDisplayLandscapeNaturalOrientation(/* expected */ false); + }); + } + + @Test + @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) + public void testShouldUseDisplayLandscapeNaturalOrientation_inMultiWindowMode_returnsFalse() { + runTestScenario((robot) -> { + robot.applyOnActivity((a) -> { + a.setDisplayNaturalOrientation(ORIENTATION_LANDSCAPE); + a.setIgnoreOrientationRequest(true); + a.createActivityWithComponent(); + a.setTopTaskInMultiWindowMode(/* inMultiWindowMode */ true); + }); + robot.checkShouldUseDisplayLandscapeNaturalOrientation(/* expected */ false); + }); + } + /** * Runs a test scenario providing a Robot. */ @@ -215,6 +285,11 @@ public class AppCompatOrientationOverridesTest extends WindowTestsBase { } } + void checkShouldUseDisplayLandscapeNaturalOrientation(boolean expected) { + assertEquals(expected, + getTopOrientationOverrides().shouldUseDisplayLandscapeNaturalOrientation()); + } + private AppCompatOrientationOverrides getTopOrientationOverrides() { return activity().top().mAppCompatController.getAppCompatOverrides() .getAppCompatOrientationOverrides(); diff --git a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java index a0a29048fe26..26a4411f57c2 100644 --- a/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/LetterboxUiControllerTest.java @@ -18,11 +18,7 @@ package com.android.server.wm; import static android.content.pm.ActivityInfo.FORCE_NON_RESIZE_APP; import static android.content.pm.ActivityInfo.FORCE_RESIZE_APP; -import static android.content.pm.ActivityInfo.OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION; -import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; -import static android.content.res.Configuration.ORIENTATION_PORTRAIT; import static android.view.InsetsSource.FLAG_INSETS_ROUNDED_CORNER; -import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE; import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; @@ -309,56 +305,6 @@ public class LetterboxUiControllerTest extends WindowTestsBase { return mainWindow; } - // shouldUseDisplayLandscapeNaturalOrientation - - @Test - @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) - public void testShouldUseDisplayLandscapeNaturalOrientation_override_returnsTrue() { - prepareActivityThatShouldUseDisplayLandscapeNaturalOrientation(); - assertTrue(mController.shouldUseDisplayLandscapeNaturalOrientation()); - } - - @Test - @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) - public void testShouldUseDisplayLandscapeNaturalOrientation_overrideAndFalseProperty_returnsFalse() - throws Exception { - mockThatProperty(PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE, /* value */ false); - - mController = new LetterboxUiController(mWm, mActivity); - - prepareActivityThatShouldUseDisplayLandscapeNaturalOrientation(); - assertFalse(mController.shouldUseDisplayLandscapeNaturalOrientation()); - } - - @Test - @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) - public void testShouldUseDisplayLandscapeNaturalOrientation_portraitNaturalOrientation_returnsFalse() { - prepareActivityThatShouldUseDisplayLandscapeNaturalOrientation(); - doReturn(ORIENTATION_PORTRAIT).when(mDisplayContent).getNaturalOrientation(); - - assertFalse(mController.shouldUseDisplayLandscapeNaturalOrientation()); - } - - @Test - @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) - public void testShouldUseDisplayLandscapeNaturalOrientation_disabledIgnoreOrientationRequest_returnsFalse() { - prepareActivityThatShouldUseDisplayLandscapeNaturalOrientation(); - mDisplayContent.setIgnoreOrientationRequest(false); - - assertFalse(mController.shouldUseDisplayLandscapeNaturalOrientation()); - } - - @Test - @EnableCompatChanges({OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION}) - public void testShouldUseDisplayLandscapeNaturalOrientation_inMultiWindowMode_returnsFalse() { - prepareActivityThatShouldUseDisplayLandscapeNaturalOrientation(); - - spyOn(mTask); - doReturn(true).when(mTask).inMultiWindowMode(); - - assertFalse(mController.shouldUseDisplayLandscapeNaturalOrientation()); - } - @Test @EnableCompatChanges({FORCE_RESIZE_APP}) public void testshouldOverrideForceResizeApp_overrideEnabled_returnsTrue() { @@ -612,12 +558,6 @@ public class LetterboxUiControllerTest extends WindowTestsBase { doReturn(property).when(pm).getProperty(eq(propertyName), anyString()); } - private void prepareActivityThatShouldUseDisplayLandscapeNaturalOrientation() { - spyOn(mDisplayContent); - doReturn(ORIENTATION_LANDSCAPE).when(mDisplayContent).getNaturalOrientation(); - mDisplayContent.setIgnoreOrientationRequest(true); - } - private ActivityRecord setUpActivityWithComponent() { mDisplayContent = new TestDisplayContent .Builder(mAtm, /* dw */ 1000, /* dh */ 2000).build(); diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java index 72747c974694..ed93a8c6ecff 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java @@ -788,7 +788,7 @@ public class SizeCompatTests extends WindowTestsBase { // Change the fixed orientation. mActivity.setRequestedOrientation(SCREEN_ORIENTATION_LANDSCAPE); assertTrue(mActivity.isRelaunching()); - assertTrue(mActivity.mLetterboxUiController + assertTrue(mActivity.mAppCompatController.getAppCompatOrientationOverrides() .getIsRelaunchingAfterRequestedOrientationChanged()); assertFitted(); |