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

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

Merge "Clear close prepare transition token by TransitionObserver" into main

parents 50d9df22 c1bca5a0
Loading
Loading
Loading
Loading
+24 −12
Original line number Diff line number Diff line
@@ -164,8 +164,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
     */
    private BackTouchTracker mQueuedTracker = new BackTouchTracker();

    private final FocusTaskTrackerObserver mFocusTaskTrackerObserver =
            new FocusTaskTrackerObserver();
    private final BackTransitionObserver mBackTransitionObserver =
            new BackTransitionObserver();

    private final Runnable mAnimationTimeoutRunnable = () -> {
        ProtoLog.w(WM_SHELL_BACK_PREVIEW, "Animation didn't finish in %d ms. Resetting...",
@@ -271,7 +271,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
        mBackTransitionHandler = new BackTransitionHandler();
        mTransitions.addHandler(mBackTransitionHandler);
        mHandler = handler;
        mTransitions.registerObserver(mFocusTaskTrackerObserver);
        mTransitions.registerObserver(mBackTransitionObserver);
        mBackTransitionObserver.setBackTransitionHandler(mBackTransitionHandler);
        updateTouchableArea();
    }

@@ -736,7 +737,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
     * @return Latest task id which back gesture has occurred on it.
     */
    public int getLatestTriggerBackTask() {
        return mFocusTaskTrackerObserver.mFocusedTaskId;
        return mBackTransitionObserver.mFocusedTaskId;
    }

    /**
@@ -804,7 +805,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
        ProtoLog.d(WM_SHELL_BACK_PREVIEW, "onGestureFinished() mTriggerBack == %s", triggerBack);

        if (triggerBack) {
            mFocusTaskTrackerObserver.update(mBackNavigationInfo != null
            mBackTransitionObserver.update(mBackNavigationInfo != null
                            ? mBackNavigationInfo.getFocusedTaskId()
                            : INVALID_TASK_ID);
        }
@@ -1234,6 +1235,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
            }

            if (shouldCancelAnimation(info)) {
                mPrepareOpenTransition = null;
                return false;
            }

@@ -1663,9 +1665,13 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
    }

    // Record the latest back gesture happen on which task.
    static class FocusTaskTrackerObserver implements Transitions.TransitionObserver {
    static class BackTransitionObserver implements Transitions.TransitionObserver {
        int mFocusedTaskId = INVALID_TASK_ID;
        IBinder mMonitorBinder;
        IBinder mFocusTaskMonitorToken;
        private BackTransitionHandler mBackTransitionHandler;
        void setBackTransitionHandler(BackTransitionHandler handler) {
            mBackTransitionHandler = handler;
        }

        void update(int focusedTaskId) {
            mFocusedTaskId = focusedTaskId;
@@ -1681,28 +1687,34 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
            for (int i = info.getChanges().size() - 1; i >= 0; --i) {
                final TransitionInfo.Change c = info.getChanges().get(i);
                if (c.getTaskInfo() != null && c.getTaskInfo().taskId == mFocusedTaskId) {
                    mMonitorBinder = transition;
                    mFocusTaskMonitorToken = transition;
                    break;
                }
            }
            // Transition happen but the task isn't involved, reset.
            if (mMonitorBinder == null) {
            if (mFocusTaskMonitorToken == null) {
                mFocusedTaskId = INVALID_TASK_ID;
            }
        }

        @Override
        public void onTransitionMerged(@NonNull IBinder merged, @NonNull IBinder playing) {
            if (mMonitorBinder == merged) {
                mMonitorBinder = playing;
            if (mFocusTaskMonitorToken == merged) {
                mFocusTaskMonitorToken = playing;
            }
            if (mBackTransitionHandler.mClosePrepareTransition == merged) {
                mBackTransitionHandler.mClosePrepareTransition = null;
            }
        }

        @Override
        public void onTransitionFinished(@NonNull IBinder transition, boolean aborted) {
            if (mMonitorBinder == transition) {
            if (mFocusTaskMonitorToken == transition) {
                mFocusedTaskId = INVALID_TASK_ID;
            }
            if (mBackTransitionHandler.mClosePrepareTransition == transition) {
                mBackTransitionHandler.mClosePrepareTransition = null;
            }
        }
    }
}