diff --git a/src/com/android/launcher3/anim/AnimatorPlaybackController.java b/src/com/android/launcher3/anim/AnimatorPlaybackController.java index 8e729e884e..84085cb6c0 100644 --- a/src/com/android/launcher3/anim/AnimatorPlaybackController.java +++ b/src/com/android/launcher3/anim/AnimatorPlaybackController.java @@ -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; diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 658af955ad..bad4976e4e 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -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;