From 2e8828bd309cd7a0f88d63051aa16078fffb702e Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Thu, 16 Jan 2020 18:30:45 -0800 Subject: [PATCH] Enable All Apps spring. Bug: 147302669 Change-Id: I944ce7d181c554d840329a3affe0dee76eed9143 --- .../com/android/quickstep/LauncherSwipeHandler.java | 4 ++-- .../PortraitStatesTouchController.java | 4 ++-- .../allapps/AllAppsTransitionController.java | 6 +++--- .../launcher3/anim/SpringObjectAnimator.java | 13 ++++++++----- .../touch/AbstractStateChangeTouchController.java | 11 ++++++----- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java index 8b5283e8e3..1b60404556 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherSwipeHandler.java @@ -21,7 +21,7 @@ import static com.android.launcher3.anim.Interpolators.DEACCEL; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.anim.Interpolators.OVERSHOOT_1_2; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; +import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS; import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs; import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW; import static com.android.quickstep.GestureState.GestureEndTarget.HOME; @@ -973,7 +973,7 @@ public class LauncherSwipeHandler } mLauncherTransitionController.getAnimationPlayer().setDuration(Math.max(0, duration)); - if (UNSTABLE_SPRINGS.get()) { + if (QUICKSTEP_SPRINGS.get()) { mLauncherTransitionController.dispatchOnStartWithVelocity(end, velocityPxPerMs.y); } mLauncherTransitionController.getAnimationPlayer().start(); diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java index d5ce73429d..99b2a81386 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/PortraitStatesTouchController.java @@ -25,7 +25,7 @@ import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_VERTICAL_PROGRE import static com.android.launcher3.anim.Interpolators.ACCEL; import static com.android.launcher3.anim.Interpolators.DEACCEL; import static com.android.launcher3.anim.Interpolators.LINEAR; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; +import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_OVERVIEW_DISABLED; import android.animation.TimeInterpolator; @@ -277,7 +277,7 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr private void handleFirstSwipeToOverview(final ValueAnimator animator, final long expectedDuration, final LauncherState targetState, final float velocity, final boolean isFling) { - if (UNSTABLE_SPRINGS.get() && mFromState == OVERVIEW && mToState == ALL_APPS + if (QUICKSTEP_SPRINGS.get() && mFromState == OVERVIEW && mToState == ALL_APPS && targetState == OVERVIEW) { mFinishFastOnSecondTouch = true; } else if (mFromState == NORMAL && mToState == OVERVIEW && targetState == OVERVIEW) { diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 0681919a3b..1bde138e79 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -11,7 +11,7 @@ import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_VERTICAL_PROGRE import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; +import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS; import static com.android.launcher3.util.SystemUiController.UI_STATE_ALL_APPS; import android.animation.Animator; @@ -46,7 +46,7 @@ import com.android.launcher3.views.ScrimView; */ public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener { - private static final float SPRING_DAMPING_RATIO = 0.9f; + private static final float SPRING_DAMPING_RATIO = 0.75f; private static final float SPRING_STIFFNESS = 600f; public static final FloatProperty ALL_APPS_PROGRESS = @@ -185,7 +185,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil } public Animator createSpringAnimation(float... progressValues) { - if (UNSTABLE_SPRINGS.get()) { + if (QUICKSTEP_SPRINGS.get()) { return new SpringObjectAnimator<>(this, ALL_APPS_PROGRESS, 1f / mShiftRange, SPRING_DAMPING_RATIO, SPRING_STIFFNESS, progressValues); } diff --git a/src/com/android/launcher3/anim/SpringObjectAnimator.java b/src/com/android/launcher3/anim/SpringObjectAnimator.java index 91a31069c1..27b9c18cd4 100644 --- a/src/com/android/launcher3/anim/SpringObjectAnimator.java +++ b/src/com/android/launcher3/anim/SpringObjectAnimator.java @@ -29,12 +29,13 @@ import android.os.Looper; import android.util.FloatProperty; import android.util.Log; -import java.util.ArrayList; - import androidx.dynamicanimation.animation.DynamicAnimation.OnAnimationEndListener; import androidx.dynamicanimation.animation.SpringAnimation; import androidx.dynamicanimation.animation.SpringForce; +import java.util.ArrayList; + + /** * This animator allows for an object's property to be be controlled by an {@link ObjectAnimator} or * a {@link SpringAnimation}. It extends ValueAnimator so it can be used in an AnimatorSet. @@ -137,11 +138,13 @@ public class SpringObjectAnimator extends ValueAnimator { mProperty.switchToSpring(); - mSpring.setStartVelocity(velocity); - float startValue = end == 0 ? mValues[1] : mValues[0]; float endValue = end == 0 ? mValues[0] : mValues[1]; - mSpring.setStartValue(startValue); + + // Ensures that the velocity matches the direction of the values. + velocity = Math.signum(endValue - startValue) * Math.abs(velocity); + mSpring.setStartVelocity(velocity); + new Handler(Looper.getMainLooper()).postDelayed(() -> { mSpring.animateToFinalPosition(endValue); }, getStartDelay()); diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 3ec480d43e..7ae0526c6d 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -23,7 +23,7 @@ import static com.android.launcher3.LauncherStateManager.ANIM_ALL; import static com.android.launcher3.LauncherStateManager.ATOMIC_OVERVIEW_SCALE_COMPONENT; import static com.android.launcher3.LauncherStateManager.NON_ATOMIC_COMPONENT; import static com.android.launcher3.anim.Interpolators.scrollInterpolatorForVelocity; -import static com.android.launcher3.config.FeatureFlags.UNSTABLE_SPRINGS; +import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS; import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs; import android.animation.Animator; @@ -380,6 +380,7 @@ public abstract class AbstractStateChangeTouchController final LauncherState targetState; final float progress = mCurrentAnimation.getProgressFraction(); + final float progressVelocity = velocity * mProgressMultiplier; final float interpolatedProgress = mCurrentAnimation.getInterpolatedProgress(); if (fling) { targetState = @@ -406,7 +407,7 @@ public abstract class AbstractStateChangeTouchController startProgress = 1; } else { startProgress = Utilities.boundToRange(progress - + velocity * getSingleFrameMs(mLauncher) * mProgressMultiplier, 0f, 1f); + + progressVelocity * getSingleFrameMs(mLauncher), 0f, 1f); duration = BaseSwipeDetector.calculateDuration(velocity, endProgress - Math.max(progress, 0)) * durationMultiplier; } @@ -421,7 +422,7 @@ public abstract class AbstractStateChangeTouchController startProgress = 0; } else { startProgress = Utilities.boundToRange(progress - + velocity * getSingleFrameMs(mLauncher) * mProgressMultiplier, 0f, 1f); + + progressVelocity * getSingleFrameMs(mLauncher), 0f, 1f); duration = BaseSwipeDetector.calculateDuration(velocity, Math.min(progress, 1) - endProgress) * durationMultiplier; } @@ -433,8 +434,8 @@ public abstract class AbstractStateChangeTouchController maybeUpdateAtomicAnim(mFromState, targetState, targetState == mToState ? 1f : 0f); updateSwipeCompleteAnimation(anim, Math.max(duration, getRemainingAtomicDuration()), targetState, velocity, fling); - mCurrentAnimation.dispatchOnStartWithVelocity(endProgress, velocity); - if (fling && targetState == LauncherState.ALL_APPS && !UNSTABLE_SPRINGS.get()) { + mCurrentAnimation.dispatchOnStartWithVelocity(endProgress, progressVelocity); + if (fling && targetState == LauncherState.ALL_APPS && !QUICKSTEP_SPRINGS.get()) { mLauncher.getAppsView().addSpringFromFlingUpdateListener(anim, velocity); } anim.start();