[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
diff --git a/src/com/android/launcher3/anim/AnimatedFloat.java b/src/com/android/launcher3/anim/AnimatedFloat.java
index b73621d..2380af4 100644
--- a/src/com/android/launcher3/anim/AnimatedFloat.java
+++ b/src/com/android/launcher3/anim/AnimatedFloat.java
@@ -55,6 +55,11 @@
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 e2f1c04..382ba36 100644
--- a/src/com/android/launcher3/views/AbstractSlideInView.java
+++ b/src/com/android/launcher3/views/AbstractSlideInView.java
@@ -76,6 +76,7 @@
};
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 @@
protected @Nullable OnCloseListener mOnCloseBeginListener;
protected List<OnCloseListener> 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 @@
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 @@
}
protected void animateSlideInViewToNoScale() {
- mSlidInViewScale.animateToValue(1f)
+ mSlideInViewScale.animateToValue(1f)
.setDuration(REVERT_SWIPE_ALL_APPS_TO_HOME_ANIMATION_DURATION_MS)
.start();
}