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

Commit fa6cbbe1 authored by Tony Wickham's avatar Tony Wickham
Browse files

Cleanup swipe detector in case of double cancel

We manually dispatch cancel when returning to the previous state in
onDragEnd(), but could end in a bad state if getting a second,
external cancel (e.g. by pressing home). Thus, we restore the
onCancelListener after manually dispatching cancel.

Bug: 79258868
Change-Id: Idc4c33cede1d8af1829a4a744b9348d379bcf8f7
parent 4c750757
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -206,6 +206,10 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat
        mOnCancelRunnable = runnable;
    }

    public Runnable getOnCancelRunnable() {
        return mOnCancelRunnable;
    }

    public static class AnimatorPlaybackControllerVL extends AnimatorPlaybackController {

        private final ValueAnimator[] mChildAnimations;
+5 −0
Original line number Diff line number Diff line
@@ -244,8 +244,13 @@ public abstract class AbstractStateChangeTouchController
                        endProgress - Math.max(progress, 0));
            }
        } else {
            // Let the state manager know that the animation didn't go to the target state,
            // but don't cancel ourselves (we already clean up when the animation completes).
            Runnable onCancel = mCurrentAnimation.getOnCancelRunnable();
            mCurrentAnimation.setOnCancelRunnable(null);
            mCurrentAnimation.dispatchOnCancel();
            mCurrentAnimation.setOnCancelRunnable(onCancel);

            endProgress = 0;
            if (progress <= 0) {
                duration = 0;