diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 20 |
2 files changed, 18 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 9cf1e2f66be1..f725d1a11243 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7672,6 +7672,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // This activity may relaunch or perform configuration change so once it has reported drawn, // the screen can be unfrozen. ensureActivityConfiguration(0 /* globalChanges */, !PRESERVE_WINDOWS); + if (mTransitionController.isCollecting(this)) { + // In case the task was changed from PiP but still keeps old transform. + task.resetSurfaceControlTransforms(); + } } void setRequestedOrientation(int requestedOrientation) { diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index d5802cf37bad..c6dc24f32837 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -3392,6 +3392,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (!controller.isCollecting(this)) { controller.collect(this); startAsyncRotationIfNeeded(); + if (mFixedRotationLaunchingApp != null) { + setSeamlessTransitionForFixedRotation(controller.getCollectingTransition()); + } } return; } @@ -3401,12 +3404,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp mAtmService.startLaunchPowerMode(POWER_MODE_REASON_CHANGE_DISPLAY); if (mFixedRotationLaunchingApp != null) { // A fixed-rotation transition is done, then continue to start a seamless display - // transition. And be fore the start transaction is applied, the non-app windows - // need to keep in previous rotation to avoid showing inconsistent content. - t.setSeamlessRotation(this); - if (mAsyncRotationController != null) { - mAsyncRotationController.keepAppearanceInPreviousRotation(); - } + // transition. + setSeamlessTransitionForFixedRotation(t); } else if (isRotationChanging()) { if (displayChange != null) { final boolean seamless = mDisplayRotation.shouldRotateSeamlessly( @@ -3425,6 +3424,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } } + private void setSeamlessTransitionForFixedRotation(Transition t) { + t.setSeamlessRotation(this); + // Before the start transaction is applied, the non-app windows need to keep in previous + // rotation to avoid showing inconsistent content. + if (mAsyncRotationController != null) { + mAsyncRotationController.keepAppearanceInPreviousRotation(); + } + } + /** If the display is in transition, there should be a screenshot covering it. */ @Override boolean inTransition() { |