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

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

Ensure that the cancel and end listener are called when cancelling state animation

Bug: 190856140
Test: Manual
Change-Id: Ib6b869445cee9fad2a97a590d27429140f2b3ba9
parent eb161752
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -290,7 +290,10 @@ public class AnimatorPlaybackController implements ValueAnimator.AnimatorUpdateL
        callAnimatorCommandRecursively(mAnim, a -> a.setInterpolator(interpolator));
    }

    private static void callListenerCommandRecursively(
    /**
     * Recursively calls a command on all the listeners of the provided animation
     */
    public static void callListenerCommandRecursively(
            Animator anim, BiConsumer<AnimatorListener, Animator> command) {
        callAnimatorCommandRecursively(anim, a-> {
            for (AnimatorListener l : nonNullList(a.getListeners())) {
+10 −2
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.launcher3.statemanager;

import static android.animation.ValueAnimator.areAnimatorsEnabled;

import static com.android.launcher3.anim.AnimatorPlaybackController.callListenerCommandRecursively;
import static com.android.launcher3.states.StateAnimationConfig.SKIP_ALL_ANIMATIONS;

import android.animation.Animator;
@@ -514,8 +515,15 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>> {
                playbackController.getAnimationPlayer().cancel();
                playbackController.dispatchOnCancel();
            } else if (currentAnimation != null) {
                currentAnimation.setDuration(0);
                currentAnimation.cancel();
                AnimatorSet anim = currentAnimation;
                anim.setDuration(0);
                if (!anim.isStarted()) {
                    // If the animation is not started the listeners do not get notified,
                    // notify manually.
                    callListenerCommandRecursively(anim, AnimatorListener::onAnimationCancel);
                    callListenerCommandRecursively(anim, AnimatorListener::onAnimationEnd);
                }
                anim.cancel();
            }

            currentAnimation = null;