Merge "Keep rotation transform for exiting PiP with fixed rotation" into tm-qpr-dev

This commit is contained in:
Riddle Hsu
2022-12-09 14:45:11 +00:00
committed by Android (Google) Code Review
3 changed files with 7 additions and 9 deletions

View File

@@ -358,8 +358,10 @@ public class PipTransition extends PipTransitionController {
WindowContainerTransaction wct = null;
if (isOutPipDirection(direction)) {
// Only need to reset surface properties. The server-side operations were already
// done at the start.
if (tx != null) {
// done at the start. But if it is running fixed rotation, there will be a seamless
// display transition later. So the last rotation transform needs to be kept to
// avoid flickering, and then the display transition will reset the transform.
if (tx != null && !mInFixedRotation) {
mFinishTransaction.merge(tx);
}
} else {

View File

@@ -1930,7 +1930,6 @@ class Task extends TaskFragment {
mTaskSupervisor.scheduleUpdateMultiWindowMode(this);
}
final int newWinMode = getWindowingMode();
if (shouldStartChangeTransition(prevWinMode, mTmpPrevBounds)) {
initializeChangeTransition(mTmpPrevBounds);
}
@@ -1944,16 +1943,15 @@ class Task extends TaskFragment {
}
}
if (pipChanging && wasInPictureInPicture) {
if (pipChanging && wasInPictureInPicture
&& !mTransitionController.isShellTransitionsEnabled()) {
// If the top activity is changing from PiP to fullscreen with fixed rotation,
// clear the crop and rotation matrix of task because fixed rotation will handle
// the transformation on activity level. This also avoids flickering caused by the
// latency of fullscreen task organizer configuring the surface.
final ActivityRecord r = topRunningActivity();
if (r != null && mDisplayContent.isFixedRotationLaunchingApp(r)) {
getSyncTransaction().setWindowCrop(mSurfaceControl, null)
.setCornerRadius(mSurfaceControl, 0f)
.setMatrix(mSurfaceControl, Matrix.IDENTITY_MATRIX, new float[9]);
resetSurfaceControlTransforms();
}
}

View File

@@ -588,9 +588,7 @@ class WindowToken extends WindowContainer<WindowState> {
.setCallsite("WindowToken.getOrCreateFixedRotationLeash")
.build();
t.setPosition(leash, mLastSurfacePosition.x, mLastSurfacePosition.y);
t.show(leash);
t.reparent(getSurfaceControl(), leash);
t.setAlpha(getSurfaceControl(), 1.f);
mFixedRotationTransformLeash = leash;
updateSurfaceRotation(t, rotation, mFixedRotationTransformLeash);
return mFixedRotationTransformLeash;