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

Commit f98e3a2b authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Fixes broken callbacks in RecentsAnimationCallbacks

finishRecentsAnimation calls cleanup immediately which removes all the
callbacks. This prevents any callback previousy added from getting
the cancelled callback.

Bug: 298069218
Test: Verified locally
Flag: N/A
Change-Id: I54b9a4529870d771f2eff8fd7cb6f2f376f9e112
parent dddd60e8
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -125,13 +125,14 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
            // If mCallbacks still != null, that means we are getting this startRecentsAnimation()
            // before the previous one got onRecentsAnimationStart(). In that case, cleanup the
            // previous animation so it doesn't mess up/listen to state changes in this animation.
            cleanUpRecentsAnimation();
            cleanUpRecentsAnimation(mCallbacks);
        }

        final BaseActivityInterface activityInterface = gestureState.getActivityInterface();
        mLastGestureState = gestureState;
        mCallbacks = new RecentsAnimationCallbacks(SystemUiProxy.INSTANCE.get(mCtx),
                activityInterface.allowMinimizeSplitScreen());
        RecentsAnimationCallbacks newCallbacks = new RecentsAnimationCallbacks(
                SystemUiProxy.INSTANCE.get(mCtx), activityInterface.allowMinimizeSplitScreen());
        mCallbacks = newCallbacks;
        mCallbacks.addListener(new RecentsAnimationCallbacks.RecentsAnimationListener() {
            @Override
            public void onRecentsAnimationStart(RecentsAnimationController controller,
@@ -157,12 +158,12 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn

            @Override
            public void onRecentsAnimationCanceled(HashMap<Integer, ThumbnailData> thumbnailDatas) {
                cleanUpRecentsAnimation();
                cleanUpRecentsAnimation(newCallbacks);
            }

            @Override
            public void onRecentsAnimationFinished(RecentsAnimationController controller) {
                cleanUpRecentsAnimation();
                cleanUpRecentsAnimation(newCallbacks);
            }

            @Override
@@ -334,7 +335,6 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
        if (mController != null) {
            ActiveGestureLog.INSTANCE.addLog(
                    /* event= */ "finishRunningRecentsAnimation", toHome);
            mCallbacks.notifyAnimationCanceled();
            if (forceFinish) {
                mController.finishController(toHome, null, false /* sendUserLeaveHint */,
                        true /* forceFinish */);
@@ -343,7 +343,6 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
                        ? mController::finishAnimationToHome
                        : mController::finishAnimationToApp);
            }
            cleanUpRecentsAnimation();
        }
    }

@@ -370,7 +369,12 @@ public class TaskAnimationManager implements RecentsAnimationCallbacks.RecentsAn
    /**
     * Cleans up the recents animation entirely.
     */
    private void cleanUpRecentsAnimation() {
    private void cleanUpRecentsAnimation(RecentsAnimationCallbacks targetCallbacks) {
        if (mCallbacks != targetCallbacks) {
            ActiveGestureLog.INSTANCE.addLog(
                    /* event= */ "cleanUpRecentsAnimation skipped due to wrong callbacks");
            return;
        }
        ActiveGestureLog.INSTANCE.addLog(/* event= */ "cleanUpRecentsAnimation");
        if (mLiveTileCleanUpHandler != null) {
            mLiveTileCleanUpHandler.run();