diff --git a/services/core/java/com/android/server/wm/AsyncRotationController.java b/services/core/java/com/android/server/wm/AsyncRotationController.java index 220d9ec8febbf..e79e77cee58ba 100644 --- a/services/core/java/com/android/server/wm/AsyncRotationController.java +++ b/services/core/java/com/android/server/wm/AsyncRotationController.java @@ -144,7 +144,8 @@ class AsyncRotationController extends FadeAnimationController implements Consume // Legacy animation doesn't need to wait for the start transaction. if (mTransitionOp == OP_LEGACY) { mIsStartTransactionCommitted = true; - } else if (displayContent.mTransitionController.useShellTransitionsRotation()) { + } else if (displayContent.mTransitionController.useShellTransitionsRotation() + || displayContent.mTransitionController.isCollecting(displayContent)) { keepAppearanceInPreviousRotation(); } } diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java index 08681119a3063..dfa3b743292e2 100644 --- a/services/core/java/com/android/server/wm/DisplayArea.java +++ b/services/core/java/com/android/server/wm/DisplayArea.java @@ -662,7 +662,7 @@ public class DisplayArea extends WindowContainer { mDimmer.resetDimStates(); } - if (mDimmer.updateDims(getPendingTransaction(), mTmpDimBoundsRect)) { + if (mDimmer.updateDims(getSyncTransaction(), mTmpDimBoundsRect)) { scheduleAnimation(); } } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 9f23f2055ebc2..f3cefca10b065 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3297,9 +3297,10 @@ class Task extends TaskFragment { mTmpDimBoundsRect.offsetTo(0, 0); } - updateShadowsRadius(isFocused(), getSyncTransaction()); + final SurfaceControl.Transaction t = getSyncTransaction(); + updateShadowsRadius(isFocused(), t); - if (mDimmer.updateDims(getPendingTransaction(), mTmpDimBoundsRect)) { + if (mDimmer.updateDims(t, mTmpDimBoundsRect)) { scheduleAnimation(); } @@ -3309,7 +3310,7 @@ class Task extends TaskFragment { final boolean show = isVisible() || isAnimating(TRANSITION | PARENTS | CHILDREN); if (mSurfaceControl != null) { if (show != mLastSurfaceShowing) { - getSyncTransaction().setVisibility(mSurfaceControl, show); + t.setVisibility(mSurfaceControl, show); } } mLastSurfaceShowing = show; diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java index 2ac41a7c1c1d2..c0bc0191b16d6 100644 --- a/services/core/java/com/android/server/wm/TaskFragment.java +++ b/services/core/java/com/android/server/wm/TaskFragment.java @@ -2425,7 +2425,7 @@ class TaskFragment extends WindowContainer { // Bounds need to be relative, as the dim layer is a child. final Rect dimBounds = getBounds(); dimBounds.offsetTo(0 /* newLeft */, 0 /* newTop */); - if (mDimmer.updateDims(getPendingTransaction(), dimBounds)) { + if (mDimmer.updateDims(getSyncTransaction(), dimBounds)) { scheduleAnimation(); } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index f8b9453c1d624..bb7876734260c 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5272,6 +5272,12 @@ class WindowState extends WindowContainer implements WindowManagerP if (mControllableInsetProvider != null) { return; } + if (mDisplayContent.inTransition()) { + // Skip because the animation is usually unnoticeable (e.g. covered by rotation + // animation) and the animation bounds could be inconsistent, such as depending + // on when the window applies its draw transaction with new rotation. + return; + } final DisplayInfo displayInfo = getDisplayInfo(); anim.initialize(mWindowFrames.mFrame.width(), mWindowFrames.mFrame.height(), @@ -5516,10 +5522,8 @@ class WindowState extends WindowContainer implements WindowManagerP } float newHScale = mHScale * mGlobalScale * mWallpaperScale; float newVScale = mVScale * mGlobalScale * mWallpaperScale; - if (mLastHScale != newHScale || - mLastVScale != newVScale ) { - getPendingTransaction().setMatrix(getSurfaceControl(), - newHScale, 0, 0, newVScale); + if (mLastHScale != newHScale || mLastVScale != newVScale) { + getSyncTransaction().setMatrix(mSurfaceControl, newHScale, 0, 0, newVScale); mLastHScale = newHScale; mLastVScale = newVScale; }