Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 655f81d3 authored by Wei Sheng Shih's avatar Wei Sheng Shih Committed by Android (Google) Code Review
Browse files

Merge "Create close_prepare_back transition after animation finish." into main

parents 6501ca31 726526e5
Loading
Loading
Loading
Loading
+9 −44
Original line number Diff line number Diff line
@@ -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) {
+2 −1
Original line number Diff line number Diff line
@@ -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());
    }