From 00d947bda0b9a2ea133dfd7b0e445245a0e2c23c Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 26 Nov 2014 18:10:19 +0100 Subject: [PATCH] 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 --- .../android/systemui/recents/views/SwipeHelper.java | 4 +--- .../recents/views/TaskStackViewTouchHandler.java | 19 ++++++------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java index fa44551ec507..0428b48490d6 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java @@ -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; diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java index 2b173a965e22..c59f82c6153f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java @@ -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; -- 2.11.0