diff options
author | 2024-09-11 09:59:59 +0000 | |
---|---|---|
committer | 2024-09-11 09:59:59 +0000 | |
commit | 655f81d3372e3d3370919b275903a2e662c5ab8e (patch) | |
tree | 164df5fc5679ee9f310de7c6490178f41d729d73 | |
parent | 6501ca315efe4bddaac97ed2bfa0334b7858875a (diff) | |
parent | 726526e5fe8d67d97a0e343622b89e1aaa2e59c6 (diff) |
Merge "Create close_prepare_back transition after animation finish." into main
2 files changed, 11 insertions, 45 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index 156399499c5b..f478b4446cbe 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -874,10 +874,6 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont // start post animation dispatchOnBackInvoked(mActiveCallback); } else { - if (migrateBackToTransition - && mBackTransitionHandler.mPrepareOpenTransition != null) { - mBackTransitionHandler.createClosePrepareTransition(); - } tryDispatchOnBackCancelled(mActiveCallback); } } @@ -1163,8 +1159,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont IBinder mClosePrepareTransition; TransitionInfo mOpenTransitionInfo; void onAnimationFinished() { - if (!mCloseTransitionRequested && mClosePrepareTransition == null) { - applyFinishOpenTransition(); + if (!mCloseTransitionRequested && mPrepareOpenTransition != null) { + createClosePrepareTransition(); } if (mOnAnimationFinishCallback != null) { mOnAnimationFinishCallback.run(); @@ -1234,7 +1230,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont applyAndFinish(st, ft, finishCallback); return true; } else if (mClosePrepareTransition == null && isPrepareTransition) { - // Gesture animation was cancelled before prepare transition ready, create the + // Gesture animation was cancelled before prepare transition ready, create // the close prepare transition createClosePrepareTransition(); } @@ -1247,6 +1243,10 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } void createClosePrepareTransition() { + if (mClosePrepareTransition != null) { + Log.e(TAG, "Re-create close prepare transition"); + return; + } final WindowContainerTransaction wct = new WindowContainerTransaction(); wct.restoreBackNavi(); mClosePrepareTransition = mTransitions.startTransition( @@ -1384,10 +1384,10 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } if (info.getType() == TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION - && !mCloseTransitionRequested && info.getChanges().isEmpty() && mApps != null) { - // Wait for post animation finish + && !mCloseTransitionRequested && info.getChanges().isEmpty() && mApps == null) { finishCallback.onTransitionFinished(null); t.apply(); + applyFinishOpenTransition(); return; } if (isNotGestureBackTransition(info) || shouldCancelAnimation(info) @@ -1598,41 +1598,6 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } return null; } - - class QueuedTransition { - final TransitionInfo mInfo; - final SurfaceControl.Transaction mSt; - final SurfaceControl.Transaction mFt; - final Transitions.TransitionFinishCallback mFinishCallback; - QueuedTransition(@NonNull TransitionInfo info, - @NonNull SurfaceControl.Transaction st, - @NonNull SurfaceControl.Transaction ft, - @NonNull Transitions.TransitionFinishCallback finishCallback) { - mInfo = info; - mSt = st; - mFt = ft; - mFinishCallback = finishCallback; - } - - void consume() { - // not animating, consume transition directly - if (mApps == null || mApps.length == 0) { - applyAndFinish(mSt, mFt, mFinishCallback); - return; - } - // we are animating - if (handlePrepareTransition(mInfo, mSt, mFt, mFinishCallback)) { - // handle merge transition if any - if (mCloseTransitionRequested) { - mOnAnimationFinishCallback = () -> { - applyFinishOpenTransition(); - mCloseTransitionRequested = false; - }; - } - } - handleCloseTransition(mInfo, mSt, mFt, mFinishCallback); - } - } } private static boolean isNotGestureBackTransition(@NonNull TransitionInfo info) { diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java index 1e4b8b62a082..b53ea3837178 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java @@ -692,6 +692,8 @@ public class BackAnimationControllerTest extends ShellTestCase { mBackTransitionHandler.startAnimation(mockBinder, tInfo, st, ft, callback); verify(mBackTransitionHandler).handlePrepareTransition( eq(tInfo), eq(st), eq(ft), eq(callback)); + + mBackTransitionHandler.onAnimationFinished(); final TransitionInfo.Change openToClose = createAppChange(openTaskId, TRANSIT_CLOSE, FLAG_BACK_GESTURE_ANIMATED); tInfo2 = createTransitionInfo(TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION, openToClose); @@ -700,7 +702,6 @@ public class BackAnimationControllerTest extends ShellTestCase { mBackTransitionHandler.mergeAnimation(mBackTransitionHandler.mClosePrepareTransition, tInfo2, st, mock(IBinder.class), mergeCallback); assertTrue("Change should be consumed", tInfo2.getChanges().isEmpty()); - mBackTransitionHandler.onAnimationFinished(); verify(callback).onTransitionFinished(any()); } |