diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2018-04-19 12:34:43 -0700 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2018-04-20 20:53:16 +0000 |
commit | ed2d2bcbb8541eb811615638e6bcf93524c2b333 (patch) | |
tree | ae4e24acfe267fd1cdaf6019fd48852d2c73698a /src/com/android/launcher3/anim | |
parent | 69632a46ab975e5410a098425c54d7d39cdc5d16 (diff) | |
download | android_packages_apps_Trebuchet-ed2d2bcbb8541eb811615638e6bcf93524c2b333.tar.gz android_packages_apps_Trebuchet-ed2d2bcbb8541eb811615638e6bcf93524c2b333.tar.bz2 android_packages_apps_Trebuchet-ed2d2bcbb8541eb811615638e6bcf93524c2b333.zip |
Force finish any pending animations if the insets or orientation change
Some animation might be running from a previous orientation, which can cuase property changes
to get skipped.
Bug: 77848165
Bug: 77774619
Change-Id: I3e198196192746abdd72a1970ff2ef407bf4aff9
Diffstat (limited to 'src/com/android/launcher3/anim')
-rw-r--r-- | src/com/android/launcher3/anim/AnimatorPlaybackController.java | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/com/android/launcher3/anim/AnimatorPlaybackController.java b/src/com/android/launcher3/anim/AnimatorPlaybackController.java index 087752df1..1dba7d665 100644 --- a/src/com/android/launcher3/anim/AnimatorPlaybackController.java +++ b/src/com/android/launcher3/anim/AnimatorPlaybackController.java @@ -17,6 +17,7 @@ package com.android.launcher3.anim; import android.animation.Animator; import android.animation.Animator.AnimatorListener; +import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; @@ -52,45 +53,37 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat private final long mDuration; protected final AnimatorSet mAnim; - private AnimatorSet mOriginalTarget; protected float mCurrentFraction; private Runnable mEndAction; + protected boolean mTargetCancelled = false; + protected AnimatorPlaybackController(AnimatorSet anim, long duration) { mAnim = anim; - mOriginalTarget = mAnim; mDuration = duration; mAnimationPlayer = ValueAnimator.ofFloat(0, 1); mAnimationPlayer.setInterpolator(Interpolators.LINEAR); mAnimationPlayer.addListener(new OnAnimationEndDispatcher()); mAnimationPlayer.addUpdateListener(this); + + mAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationCancel(Animator animation) { + mTargetCancelled = true; + } + }); } public AnimatorSet getTarget() { return mAnim; } - public void setOriginalTarget(AnimatorSet anim) { - mOriginalTarget = anim; - } - - public AnimatorSet getOriginalTarget() { - return mOriginalTarget; - } - public long getDuration() { return mDuration; } - public AnimatorPlaybackController cloneFor(AnimatorSet anim) { - AnimatorPlaybackController controller = AnimatorPlaybackController.wrap(anim, mDuration); - controller.setOriginalTarget(mOriginalTarget); - controller.setPlayFraction(mCurrentFraction); - return controller; - } - /** * Starts playing the animation forward from current position. */ @@ -206,6 +199,11 @@ public abstract class AnimatorPlaybackController implements ValueAnimator.Animat @Override public void setPlayFraction(float fraction) { mCurrentFraction = fraction; + // Let the animator report the progress but don't apply the progress to child + // animations if it has been cancelled. + if (mTargetCancelled) { + return; + } long playPos = clampDuration(fraction); for (ValueAnimator anim : mChildAnimations) { anim.setCurrentPlayTime(Math.min(playPos, anim.getDuration())); |