Merge "Use seamless for collecting transition with fixed rotation" into tm-qpr-dev am: 1b89cdbde8 am: c974894b15

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20674431

Change-Id: I1c1a7ab63f7611e981f7b7f0e151c9f5b8937485
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Riddle Hsu
2022-12-12 15:23:22 +00:00
committed by Automerger Merge Worker
2 changed files with 18 additions and 6 deletions

View File

@@ -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) {

View File

@@ -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() {