From 37305d49fa1aa1beacadc2077e3e675543742dcf Mon Sep 17 00:00:00 2001 From: Fengjiang Li Date: Wed, 8 Mar 2023 14:00:13 -0800 Subject: [PATCH] [Predictive Back] Fix bug where closing task bar's all apps will show scale animation even if predicitve back is disabled TaskbarAllAppsSlideInView.onBackInvoked() can be triggered by ViewGroup.dispatchKeyEvent(event) with KEYCODE_BACK, in that case we should skip scale animation Test: manual Fix: b/272317866 Change-Id: I19468cfe4765de5276c479b0f7fa88ec0690bbfd --- src/com/android/launcher3/anim/AnimatedFloat.java | 5 +++++ .../android/launcher3/views/AbstractSlideInView.java | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/com/android/launcher3/anim/AnimatedFloat.java b/src/com/android/launcher3/anim/AnimatedFloat.java index b73621d414..2380af4e03 100644 --- a/src/com/android/launcher3/anim/AnimatedFloat.java +++ b/src/com/android/launcher3/anim/AnimatedFloat.java @@ -55,6 +55,11 @@ public class AnimatedFloat { mUpdateCallback = updateCallback; } + public AnimatedFloat(Runnable updateCallback, float initialValue) { + this(updateCallback); + value = initialValue; + } + /** * Returns an animation from the current value to the given value. */ diff --git a/src/com/android/launcher3/views/AbstractSlideInView.java b/src/com/android/launcher3/views/AbstractSlideInView.java index e2f1c04ced..382ba36317 100644 --- a/src/com/android/launcher3/views/AbstractSlideInView.java +++ b/src/com/android/launcher3/views/AbstractSlideInView.java @@ -76,6 +76,7 @@ public abstract class AbstractSlideInView }; protected static final float TRANSLATION_SHIFT_CLOSED = 1f; protected static final float TRANSLATION_SHIFT_OPENED = 0f; + private static final float VIEW_NO_SCALE = 1f; protected final T mActivityContext; @@ -93,7 +94,8 @@ public abstract class AbstractSlideInView protected @Nullable OnCloseListener mOnCloseBeginListener; protected List mOnCloseListeners = new ArrayList<>(); - private final AnimatedFloat mSlidInViewScale = new AnimatedFloat(this::onScaleProgressChanged); + private final AnimatedFloat mSlideInViewScale = + new AnimatedFloat(this::onScaleProgressChanged, VIEW_NO_SCALE); private boolean mIsBackProgressing; @Nullable private Drawable mContentBackground; @@ -184,12 +186,12 @@ public abstract class AbstractSlideInView float deceleratedProgress = Interpolators.PREDICTIVE_BACK_DECELERATED_EASE.getInterpolation(progress); mIsBackProgressing = progress > 0f; - mSlidInViewScale.updateValue(PREDICTIVE_BACK_MIN_SCALE + mSlideInViewScale.updateValue(PREDICTIVE_BACK_MIN_SCALE + (1 - PREDICTIVE_BACK_MIN_SCALE) * (1 - deceleratedProgress)); } private void onScaleProgressChanged() { - float scaleProgress = mSlidInViewScale.value; + float scaleProgress = mSlideInViewScale.value; SCALE_PROPERTY.set(this, scaleProgress); setClipChildren(!mIsBackProgressing); mContent.setClipChildren(!mIsBackProgressing); @@ -209,7 +211,7 @@ public abstract class AbstractSlideInView } protected void animateSlideInViewToNoScale() { - mSlidInViewScale.animateToValue(1f) + mSlideInViewScale.animateToValue(1f) .setDuration(REVERT_SWIPE_ALL_APPS_TO_HOME_ANIMATION_DURATION_MS) .start(); }