Last minute swipe up overshoot tweaks

b/109709720

Change-Id: Ie3831289a9af2ba4b03fcbb4f2cbb3f4c2431aec
diff --git a/quickstep/src/com/android/quickstep/LongSwipeHelper.java b/quickstep/src/com/android/quickstep/LongSwipeHelper.java
index 491cbb3..6b66ec8 100644
--- a/quickstep/src/com/android/quickstep/LongSwipeHelper.java
+++ b/quickstep/src/com/android/quickstep/LongSwipeHelper.java
@@ -118,8 +118,7 @@
             if (blockedFling && !toAllApps) {
                 Interpolators.OvershootParams overshoot = new OvershootParams(currentFraction,
                         currentFraction, endProgress, velocityPxPerMs, (int) mMaxSwipeDistance);
-                duration = (overshoot.duration + duration)
-                        * LauncherAnimUtils.blockedFlingDurationFactor(0);
+                duration = (overshoot.duration + duration);
                 duration = Utilities.boundToRange(duration, MIN_OVERSHOOT_DURATION,
                         MAX_SWIPE_DURATION);
                 interpolator = overshoot.interpolator;
diff --git a/src/com/android/launcher3/anim/Interpolators.java b/src/com/android/launcher3/anim/Interpolators.java
index 3e01f72..675e26d 100644
--- a/src/com/android/launcher3/anim/Interpolators.java
+++ b/src/com/android/launcher3/anim/Interpolators.java
@@ -57,6 +57,9 @@
 
     public static final Interpolator EXAGGERATED_EASE;
 
+    private static final int MIN_SETTLE_DURATION = 200;
+    private static final float OVERSHOOT_FACTOR = 0.9f;
+
     static {
         Path exaggeratedEase = new Path();
         exaggeratedEase.moveTo(0, 0);
@@ -186,7 +189,8 @@
             start = startProgress;
             int startPx = (int) (start * totalDistancePx);
             // Overshoot by about half a frame.
-            float overshootBy = velocityPxPerMs * SINGLE_FRAME_MS / totalDistancePx / 2;
+            float overshootBy = OVERSHOOT_FACTOR * velocityPxPerMs *
+                    SINGLE_FRAME_MS / totalDistancePx / 2;
             overshootBy = Utilities.boundToRange(overshootBy, 0.02f, 0.15f);
             end = overshootPastProgress + overshootBy;
             int endPx = (int) (end  * totalDistancePx);
@@ -211,7 +215,9 @@
             // Above formula assumes constant acceleration. Since we use ACCEL_DEACCEL, we actually
             // have acceleration to halfway then deceleration the rest. So the formula becomes:
             //          t = sqrt(d/a) * 2 (half the distance for accel, half for deaccel)
-            long settleDuration = (long) Math.sqrt(settleDistancePx / decelerationPxPerMs) * 2;
+            long settleDuration = (long) Math.sqrt(settleDistancePx / decelerationPxPerMs) * 4;
+
+            settleDuration = Math.max(MIN_SETTLE_DURATION, settleDuration);
             // How much of the animation to devote to playing the overshoot (the rest is for settle).
             float overshootFraction = (float) duration / (duration + settleDuration);
             duration += settleDuration;
@@ -228,4 +234,4 @@
                     : settle.getInterpolation(t);
         }
     }
-}
\ No newline at end of file
+}