From 54a44d4c44de4407c6480ee8ebf76211e5fbb90b Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Mon, 14 Jun 2021 16:33:05 -0700 Subject: [PATCH] All apps motion Bug: 189970327 Test: manual TL;DR;; equation: settleVelocity = releaseVelocity + interpolator 2nd deritive * t Change-Id: I86fec339523fbc3bb347dec4affbd2d1c063d13d --- res/values/dimens.xml | 2 +- .../allapps/AllAppsContainerView.java | 31 +++++++++---------- .../allapps/AllAppsTransitionController.java | 2 ++ .../AbstractStateChangeTouchController.java | 4 +-- 4 files changed, 18 insertions(+), 21 deletions(-) diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 430a1abb90..542e062abc 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -98,7 +98,7 @@ 48dp 2dp 36dp - 16dp + 6dp 16dp 20dp 6dp diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index d749e02d73..555c911861 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -21,6 +21,8 @@ import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_HAS_SHORTCU import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_CHANGE_PERMISSION; import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_ENABLED; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.Configuration; @@ -82,10 +84,7 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo ScrimView.ScrimDrawingController { public static final float PULL_MULTIPLIER = .02f; - public static final float FLING_VELOCITY_MULTIPLIER = 2000f; - - // Starts the springs after at least 25% of the animation has passed. - public static final float FLING_ANIMATION_THRESHOLD = 0.25f; + public static final float FLING_VELOCITY_MULTIPLIER = 1200f; private final Paint mHeaderPaint = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -658,20 +657,18 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo /** * Adds an update listener to {@param animator} that adds springs to the animation. */ - public void addSpringFromFlingUpdateListener(ValueAnimator animator, float velocity) { - animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - boolean shouldSpring = true; - + public void addSpringFromFlingUpdateListener(ValueAnimator animator, + float velocity /* release velocity */, + float progress /* portion of the distance to travel*/) { + animator.addListener(new AnimatorListenerAdapter() { @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - if (shouldSpring - && valueAnimator.getAnimatedFraction() >= FLING_ANIMATION_THRESHOLD) { - absorbSwipeUpVelocity(Math.max(100, Math.abs( - Math.round(velocity * FLING_VELOCITY_MULTIPLIER)))); - // calculate the velocity of using the not user controlled interpolator - // of when the container reach the end. - shouldSpring = false; - } + public void onAnimationStart(Animator animator) { + float distance = (float) ((1 - progress) * getHeight()); // px + float settleVelocity = Math.min(0, distance + / (AllAppsTransitionController.INTERP_COEFF * animator.getDuration()) + + velocity); + absorbSwipeUpVelocity(Math.max(1000, Math.abs( + Math.round(settleVelocity * FLING_VELOCITY_MULTIPLIER)))); } }); } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index 8ec8269ba0..a0551f019a 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -57,6 +57,8 @@ import com.android.launcher3.views.ScrimView; */ public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener { + // This constant should match the second derivative of the animator interpolator. + public static final float INTERP_COEFF = 1.7f; private static final float CONTENT_VISIBLE_MAX_THRESHOLD = 0.5f; public static final FloatProperty ALL_APPS_PROGRESS = diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index a086635d57..90f37f3404 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -335,12 +335,10 @@ public abstract class AbstractStateChangeTouchController mCurrentAnimation.dispatchOnStart(); if (targetState == LauncherState.ALL_APPS && !UNSTABLE_SPRINGS.get()) { if (mAllAppsOvershootStarted) { - mLauncher.getAppsView().onRelease(); mAllAppsOvershootStarted = false; - } else { - mLauncher.getAppsView().addSpringFromFlingUpdateListener(anim, velocity); + mLauncher.getAppsView().addSpringFromFlingUpdateListener(anim, velocity, progress); } } anim.start();