diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 00b2a58dbe8fb..7f03778ab1c76 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -819,6 +819,22 @@ class ActivityStack extends Task { mRootWindowContainer.ensureActivitiesVisible(null, 0, PRESERVE_WINDOWS); mRootWindowContainer.resumeFocusedStacksTopActivities(); + + final boolean pinnedToFullscreen = currentMode == WINDOWING_MODE_PINNED + && windowingMode == WINDOWING_MODE_FULLSCREEN; + if (pinnedToFullscreen && topActivity != null && !isForceHidden()) { + mDisplayContent.getPinnedStackController().setPipWindowingModeChanging(true); + try { + // Report orientation as soon as possible so that the display can freeze earlier if + // the display orientation will be changed. Because the surface bounds of activity + // may have been set to fullscreen but the activity hasn't redrawn its content yet, + // the rotation animation needs to capture snapshot earlier to avoid animating from + // an intermediate state. + topActivity.reportDescendantOrientationChangeIfNeeded(); + } finally { + mDisplayContent.getPinnedStackController().setPipWindowingModeChanging(false); + } + } } @Override diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 8903776469db9..59181a64f423e 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1481,6 +1481,10 @@ class DisplayContent extends WindowContainer