summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java4
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java20
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() {