Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d63e6dff authored by Adam Cohen's avatar Adam Cohen
Browse files

Last minute swipe up overshoot tweaks

b/109709720

Change-Id: Ie3831289a9af2ba4b03fcbb4f2cbb3f4c2431aec
parent 969abca8
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -118,8 +118,7 @@ public class LongSwipeHelper {
            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;
+9 −3
Original line number Diff line number Diff line
@@ -57,6 +57,9 @@ public class Interpolators {

    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 @@ public class Interpolators {
            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 @@ public class Interpolators {
            // 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;