Loading services/core/java/com/android/server/wm/ActivityRecord.java +7 −9 Original line number Original line Diff line number Diff line Loading @@ -7813,11 +7813,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A newParentConfiguration.windowConfiguration.getWindowingMode(); newParentConfiguration.windowConfiguration.getWindowingMode(); final boolean isFixedOrientationLetterboxAllowed = final boolean isFixedOrientationLetterboxAllowed = parentWindowingMode == WINDOWING_MODE_MULTI_WINDOW 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 // TODO(b/181207944): Consider removing the if condition and always run // resolveFixedOrientationConfiguration() since this should be applied for all cases. // resolveFixedOrientationConfiguration() since this should be applied for all cases. if (isFixedOrientationLetterboxAllowed) { if (isFixedOrientationLetterboxAllowed) { resolveFixedOrientationConfiguration(newParentConfiguration, parentWindowingMode); resolveFixedOrientationConfiguration(newParentConfiguration); } } if (mCompatDisplayInsets != null) { if (mCompatDisplayInsets != null) { Loading Loading @@ -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 * <p>If letterboxed due to fixed orientation then aspect ratio restrictions are also applied * in this method. * in this method. */ */ private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig, private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig) { int windowingMode) { mLetterboxBoundsForFixedOrientationAndAspectRatio = null; mLetterboxBoundsForFixedOrientationAndAspectRatio = null; mIsEligibleForFixedOrientationLetterbox = false; mIsEligibleForFixedOrientationLetterbox = false; final Rect parentBounds = newParentConfig.windowConfiguration.getBounds(); final Rect parentBounds = newParentConfig.windowConfiguration.getBounds(); Loading @@ -8130,11 +8133,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (organizedTf != null && !organizedTf.fillsParent()) { if (organizedTf != null && !organizedTf.fillsParent()) { return; 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 = final Rect resolvedBounds = getResolvedOverrideConfiguration().windowConfiguration.getBounds(); getResolvedOverrideConfiguration().windowConfiguration.getBounds(); Loading services/core/java/com/android/server/wm/DisplayContent.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -1610,7 +1610,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (mTransitionController.useShellTransitionsRotation()) { if (mTransitionController.useShellTransitionsRotation()) { return ROTATION_UNDEFINED; return ROTATION_UNDEFINED; } } if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM) { if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM || getIgnoreOrientationRequest()) { return ROTATION_UNDEFINED; return ROTATION_UNDEFINED; } } if (r.mOrientation == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { if (r.mOrientation == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -1699,6 +1699,13 @@ public class DisplayContentTests extends WindowTestsBase { assertFalse(displayContent.mPinnedTaskController.isFreezingTaskConfig(pinnedTask)); assertFalse(displayContent.mPinnedTaskController.isFreezingTaskConfig(pinnedTask)); assertEquals(pinnedActivity.getConfiguration().orientation, assertEquals(pinnedActivity.getConfiguration().orientation, displayContent.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 @Test Loading Loading
services/core/java/com/android/server/wm/ActivityRecord.java +7 −9 Original line number Original line Diff line number Diff line Loading @@ -7813,11 +7813,15 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A newParentConfiguration.windowConfiguration.getWindowingMode(); newParentConfiguration.windowConfiguration.getWindowingMode(); final boolean isFixedOrientationLetterboxAllowed = final boolean isFixedOrientationLetterboxAllowed = parentWindowingMode == WINDOWING_MODE_MULTI_WINDOW 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 // TODO(b/181207944): Consider removing the if condition and always run // resolveFixedOrientationConfiguration() since this should be applied for all cases. // resolveFixedOrientationConfiguration() since this should be applied for all cases. if (isFixedOrientationLetterboxAllowed) { if (isFixedOrientationLetterboxAllowed) { resolveFixedOrientationConfiguration(newParentConfiguration, parentWindowingMode); resolveFixedOrientationConfiguration(newParentConfiguration); } } if (mCompatDisplayInsets != null) { if (mCompatDisplayInsets != null) { Loading Loading @@ -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 * <p>If letterboxed due to fixed orientation then aspect ratio restrictions are also applied * in this method. * in this method. */ */ private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig, private void resolveFixedOrientationConfiguration(@NonNull Configuration newParentConfig) { int windowingMode) { mLetterboxBoundsForFixedOrientationAndAspectRatio = null; mLetterboxBoundsForFixedOrientationAndAspectRatio = null; mIsEligibleForFixedOrientationLetterbox = false; mIsEligibleForFixedOrientationLetterbox = false; final Rect parentBounds = newParentConfig.windowConfiguration.getBounds(); final Rect parentBounds = newParentConfig.windowConfiguration.getBounds(); Loading @@ -8130,11 +8133,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A if (organizedTf != null && !organizedTf.fillsParent()) { if (organizedTf != null && !organizedTf.fillsParent()) { return; 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 = final Rect resolvedBounds = getResolvedOverrideConfiguration().windowConfiguration.getBounds(); getResolvedOverrideConfiguration().windowConfiguration.getBounds(); Loading
services/core/java/com/android/server/wm/DisplayContent.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -1610,7 +1610,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (mTransitionController.useShellTransitionsRotation()) { if (mTransitionController.useShellTransitionsRotation()) { return ROTATION_UNDEFINED; return ROTATION_UNDEFINED; } } if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM) { if (!WindowManagerService.ENABLE_FIXED_ROTATION_TRANSFORM || getIgnoreOrientationRequest()) { return ROTATION_UNDEFINED; return ROTATION_UNDEFINED; } } if (r.mOrientation == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { if (r.mOrientation == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +7 −0 Original line number Original line Diff line number Diff line Loading @@ -1699,6 +1699,13 @@ public class DisplayContentTests extends WindowTestsBase { assertFalse(displayContent.mPinnedTaskController.isFreezingTaskConfig(pinnedTask)); assertFalse(displayContent.mPinnedTaskController.isFreezingTaskConfig(pinnedTask)); assertEquals(pinnedActivity.getConfiguration().orientation, assertEquals(pinnedActivity.getConfiguration().orientation, displayContent.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 @Test Loading