diff options
author | Jorim Jaggi <jjaggi@google.com> | 2014-06-30 01:39:07 +0200 |
---|---|---|
committer | Jorim Jaggi <jjaggi@google.com> | 2014-07-01 15:08:30 +0200 |
commit | b7240136b748e548069c7fe2bd77a7ed4148728e (patch) | |
tree | ba68a8fbd1fb6b37bb3a389f9c0e8c37e80d32ac | |
parent | 3857ac4b3f24e13bac255d162249dd8b2ccb63ac (diff) | |
download | frameworks_base-b7240136b748e548069c7fe2bd77a7ed4148728e.zip frameworks_base-b7240136b748e548069c7fe2bd77a7ed4148728e.tar.gz frameworks_base-b7240136b748e548069c7fe2bd77a7ed4148728e.tar.bz2 |
Improve fling logic for opening the notification shade
Bug: 15858126
Change-Id: I800b00f80b315218358ea9acbd3614e6d5c87c45
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java index c592486..7093787 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java @@ -195,7 +195,12 @@ public abstract class PanelView extends FrameLayout { case MotionEvent.ACTION_MOVE: float h = y - mInitialTouchY; - if (Math.abs(h) > mTouchSlop && Math.abs(h) > Math.abs(x - mInitialTouchX)) { + + // If the panel was collapsed when touching, we only need to check for the + // y-component of the gesture, as we have no conflicting horizontal gesture. + if (Math.abs(h) > mTouchSlop + && (Math.abs(h) > Math.abs(x - mInitialTouchX) + || mInitialOffsetOnTouch == 0f)) { mTouchSlopExceeded = true; if (waitForTouchSlop && !mTracking) { mInitialOffsetOnTouch = mExpandedHeight; @@ -229,8 +234,15 @@ public abstract class PanelView extends FrameLayout { trackMovement(event); if ((mTracking && mTouchSlopExceeded) || event.getActionMasked() == MotionEvent.ACTION_CANCEL) { - float vel = getCurrentVelocity(); - boolean expand = flingExpands(vel); + float vel = 0f; + float vectorVel = 0f; + if (mVelocityTracker != null) { + mVelocityTracker.computeCurrentVelocity(1000); + vel = mVelocityTracker.getYVelocity(); + vectorVel = (float) Math.hypot( + mVelocityTracker.getXVelocity(), mVelocityTracker.getYVelocity()); + } + boolean expand = flingExpands(vel, vectorVel); onTrackingStopped(expand); fling(vel, expand); } else { @@ -259,16 +271,6 @@ public abstract class PanelView extends FrameLayout { onExpandingStarted(); } - private float getCurrentVelocity() { - - // the velocitytracker might be null if we got a bad input stream - if (mVelocityTracker == null) { - return 0; - } - mVelocityTracker.computeCurrentVelocity(1000); - return mVelocityTracker.getYVelocity(); - } - @Override public boolean onInterceptTouchEvent(MotionEvent event) { if (mInstantExpanding) { @@ -368,11 +370,12 @@ public abstract class PanelView extends FrameLayout { } /** - * @param vel the current velocity of the motion + * @param vel the current vertical velocity of the motion + * @param vectorVel the length of the vectorial velocity * @return whether a fling should expands the panel; contracts otherwise */ - private boolean flingExpands(float vel) { - if (Math.abs(vel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) { + private boolean flingExpands(float vel, float vectorVel) { + if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) { return getExpandedFraction() > 0.5f; } else { return vel > 0; |