summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJorim Jaggi <jjaggi@google.com>2014-06-30 01:39:07 +0200
committerJorim Jaggi <jjaggi@google.com>2014-07-01 15:08:30 +0200
commitb7240136b748e548069c7fe2bd77a7ed4148728e (patch)
treeba68a8fbd1fb6b37bb3a389f9c0e8c37e80d32ac
parent3857ac4b3f24e13bac255d162249dd8b2ccb63ac (diff)
downloadframeworks_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.java35
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;