diff options
3 files changed, 16 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 359079a1474b..62427e1d8e52 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7813,11 +7813,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A newParentConfiguration.windowConfiguration.getWindowingMode(); final boolean isFixedOrientationLetterboxAllowed = parentWindowingMode == WINDOWING_MODE_MULTI_WINDOW - || parentWindowingMode == WINDOWING_MODE_FULLSCREEN; + || parentWindowingMode == WINDOWING_MODE_FULLSCREEN + // Switching from PiP to fullscreen. + || (parentWindowingMode == WINDOWING_MODE_PINNED + && resolvedConfig.windowConfiguration.getWindowingMode() + == WINDOWING_MODE_FULLSCREEN); // TODO(b/181207944): Consider removing the if condition and always run // resolveFixedOrientationConfiguration() since this should be applied for all cases. if (isFixedOrientationLetterboxAllowed) { - resolveFixedOrientationConfiguration(newParentConfiguration, parentWindowingMode); + resolveFixedOrientationConfiguration(newParentConfiguration); } if (mCompatDisplayInsets != null) { @@ -8109,8 +8113,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A * <p>If letterboxed due to fixed orientation then aspect ratio restrictions are also applied * in this method. */ - private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig, - int windowingMode) { + private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig) { mLetterboxBoundsForFixedOrientationAndAspectRatio = null; mIsEligibleForFixedOrientationLetterbox = false; final Rect parentBounds = newParentConfig.windowConfiguration.getBounds(); @@ -8130,11 +8133,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (organizedTf != null && !organizedTf.fillsParent()) { return; } - if (windowingMode == WINDOWING_MODE_PINNED) { - // PiP bounds have higher priority than the requested orientation. Otherwise the - // activity may be squeezed into a small piece. - return; - } final Rect resolvedBounds = getResolvedOverrideConfiguration().windowConfiguration.getBounds(); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index c096e959a99e..288777bdb324 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1610,7 +1610,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (mTransitionController.useShellTransitionsRotation()) { return ROTATION_UNDEFINED; } - if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM) { + if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM + || getIgnoreOrientationRequest()) { return ROTATION_UNDEFINED; } if (r.mOrientation == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index d737963f80e7..40e266c71328 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -1699,6 +1699,13 @@ public class DisplayContentTests extends WindowTestsBase { assertFalse(displayContent.mPinnedTaskController.isFreezingTaskConfig(pinnedTask)); assertEquals(pinnedActivity.getConfiguration().orientation, displayContent.getConfiguration().orientation); + + // No need to apply rotation if the display ignores orientation request. + doCallRealMethod().when(displayContent).rotationForActivityInDifferentOrientation(any()); + pinnedActivity.mOrientation = SCREEN_ORIENTATION_LANDSCAPE; + displayContent.setIgnoreOrientationRequest(true); + assertEquals(WindowConfiguration.ROTATION_UNDEFINED, + displayContent.rotationForActivityInDifferentOrientation(pinnedActivity)); } @Test |