summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorim Jaggi <jjaggi@google.com>2014-11-26 18:10:19 +0100
committerJorim Jaggi <jjaggi@google.com>2014-11-26 18:14:50 +0100
commit00d947bda0b9a2ea133dfd7b0e445245a0e2c23c (patch)
tree5810a0f7eb8af30661dc6cb5f85d5e0ac5f41059
parent38499cf8a129b15fd526d45aad96657d96235abf (diff)
downloadframeworks_base-00d947bda0b9a2ea133dfd7b0e445245a0e2c23c.zip
frameworks_base-00d947bda0b9a2ea133dfd7b0e445245a0e2c23c.tar.gz
frameworks_base-00d947bda0b9a2ea133dfd7b0e445245a0e2c23c.tar.bz2
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
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java19
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 fa44551..0428b48 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 2b173a9..c59f82c 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;