From 2fa2db1e8c2c963d917f0563d7961f45e57ab8aa Mon Sep 17 00:00:00 2001 From: Adam Cohen Date: Tue, 18 Nov 2014 17:53:44 -0800 Subject: Prevent multiple workspace state animators from being started -> Probably an issue with the way we're wrapping ViewPropertyAnimator which can lead to us acting like it's valid to have multiple instances of a VPA. In reality I think this is very problematic. -> For now, we can just make sure the previous animation is canceled if it hasn't yet completed. Bug 18428886 Change-Id: I097eec08ec68ed098e68866fb5eda72734c51b00 --- src/com/android/launcher3/Workspace.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 3c6ab317a..ad045ccf4 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -289,6 +289,7 @@ public class Workspace extends SmoothPagedView private float[] mNewAlphas; private int mLastChildCount = -1; private float mTransitionProgress; + private Animator mStateAnimator = null; float mOverScrollEffect = 0f; @@ -2341,6 +2342,13 @@ public class Workspace extends SmoothPagedView AnimatorSet anim = animated ? LauncherAnimUtils.createAnimatorSet() : null; + // We only want a single instance of a workspace animation to be running at once, so + // we cancel any incomplete transition. + if (mStateAnimator != null) { + mStateAnimator.cancel(); + } + mStateAnimator = anim; + final State oldState = mState; final boolean oldStateIsNormal = (oldState == State.NORMAL); final boolean oldStateIsSpringLoaded = (oldState == State.SPRING_LOADED); @@ -2627,6 +2635,12 @@ public class Workspace extends SmoothPagedView anim.play(hotseatAlpha); anim.play(pageIndicatorAlpha); anim.setStartDelay(delay); + anim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mStateAnimator = null; + } + }); } else { overviewPanel.setAlpha(finalOverviewPanelAlpha); AlphaUpdateListener.updateVisibility(overviewPanel); -- cgit v1.2.3