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

Commit 00d947bd authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Improve fling physics for recents

- Don't limit swipe out velocity
- Make sure we pick up all touch events in VelocityTracker
- When already scrolling and touching again, don't reset scroll
  state, so we don't wait for the touch slop again to start
  scrolling (this makes it more consistent with ScrollView).

Bug: 18536759
Change-Id: I1d43c77db78beec6d0b8c949e67141a2665de892
parent 38499cf8
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ public class SwipeHelper {
    private float SWIPE_ESCAPE_VELOCITY = 100f; // dp/sec
    private int DEFAULT_ESCAPE_ANIMATION_DURATION = 75; // ms
    private int MAX_ESCAPE_ANIMATION_DURATION = 150; // ms
    private int MAX_DISMISS_VELOCITY = 2000; // dp/sec
    private static final int SNAP_ANIM_LEN = SLOW_ANIMATIONS ? 1000 : 250; // ms

    public static float ALPHA_FADE_START = 0.15f; // fraction of thumbnail width
@@ -350,8 +349,7 @@ public class SwipeHelper {
    }

    private void endSwipe(VelocityTracker velocityTracker) {
        float maxVelocity = MAX_DISMISS_VELOCITY * mDensityScale;
        velocityTracker.computeCurrentVelocity(1000 /* px/sec */, maxVelocity);
        velocityTracker.computeCurrentVelocity(1000 /* px/sec */);
        float velocity = getVelocity(velocityTracker);
        float perpendicularVelocity = getPerpendicularVelocity(velocityTracker);
        float escapeVelocity = SWIPE_ESCAPE_VELOCITY * mDensityScale;
+6 −13
Original line number Diff line number Diff line
@@ -143,22 +143,21 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback {
                // Initialize the velocity tracker
                initOrResetVelocityTracker();
                mVelocityTracker.addMovement(createMotionEventForStackScroll(ev));
                // Check if the scroller is finished yet
                mIsScrolling = mScroller.isScrolling();
                break;
            }
            case MotionEvent.ACTION_MOVE: {
                if (mActivePointerId == INACTIVE_POINTER_ID) break;

                // Initialize the velocity tracker if necessary
                initVelocityTrackerIfNotExists();
                mVelocityTracker.addMovement(createMotionEventForStackScroll(ev));

                int activePointerIndex = ev.findPointerIndex(mActivePointerId);
                int y = (int) ev.getY(activePointerIndex);
                int x = (int) ev.getX(activePointerIndex);
                if (Math.abs(y - mInitialMotionY) > mScrollTouchSlop) {
                    // Save the touch move info
                    mIsScrolling = true;
                    // Initialize the velocity tracker if necessary
                    initVelocityTrackerIfNotExists();
                    mVelocityTracker.addMovement(createMotionEventForStackScroll(ev));
                    // Disallow parents from intercepting touch events
                    final ViewParent parent = mSv.getParent();
                    if (parent != null) {
@@ -237,6 +236,8 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback {
            case MotionEvent.ACTION_MOVE: {
                if (mActivePointerId == INACTIVE_POINTER_ID) break;

                mVelocityTracker.addMovement(createMotionEventForStackScroll(ev));

                int activePointerIndex = ev.findPointerIndex(mActivePointerId);
                int x = (int) ev.getX(activePointerIndex);
                int y = (int) ev.getY(activePointerIndex);
@@ -246,9 +247,6 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback {
                if (!mIsScrolling) {
                    if (yTotal > mScrollTouchSlop) {
                        mIsScrolling = true;
                        // Initialize the velocity tracker
                        initOrResetVelocityTracker();
                        mVelocityTracker.addMovement(createMotionEventForStackScroll(ev));
                        // Disallow parents from intercepting touch events
                        final ViewParent parent = mSv.getParent();
                        if (parent != null) {
@@ -267,11 +265,6 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback {
                                / maxOverScroll));
                    }
                    mScroller.setStackScroll(curStackScroll + deltaP);
                    if (mScroller.isScrollOutOfBounds()) {
                        mVelocityTracker.clear();
                    } else {
                        mVelocityTracker.addMovement(createMotionEventForStackScroll(ev));
                    }
                }
                mLastMotionX = x;
                mLastMotionY = y;