From 80653eaa4096f0958c282764763b169f6599bd3d Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Thu, 14 May 2020 22:36:59 +0800 Subject: Use normal rotation while PiP is toggling or active Seamless rotation of PiP has not been defined. To avoid ugly jump cut when moving PiP with different orientation, the display is still frozen to perform normal rotation animation. Fixes: 156593887 Test: atest DisplayContentTests#testNoFixedRotationWithPip Change-Id: I6830970ada96023fc5b93afb2f9a917988c93b59 --- .../java/com/android/server/wm/ActivityStack.java | 16 +++++++ .../java/com/android/server/wm/DisplayContent.java | 4 ++ .../android/server/wm/PinnedStackController.java | 21 ++++++-- .../com/android/server/wm/DisplayContentTests.java | 56 ++++++++++++++++++++++ 4 files changed, 93 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 00b2a58dbe8f..7f03778ab1c7 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 8903776469db..59181a64f423 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