OSDN Git Service

Track status bar fling velocity using screen coords.
authorJeff Brown <jeffbrown@google.com>
Mon, 12 Sep 2011 21:21:17 +0000 (14:21 -0700)
committerJeff Brown <jeffbrown@google.com>
Mon, 12 Sep 2011 21:21:17 +0000 (14:21 -0700)
Bug: 5210198

Change-Id: I58630ab861c0934755a4aac4b96fdc5634c4a438

packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

index e0a8d7e..8cf1b47 100644 (file)
@@ -1491,11 +1491,11 @@ public class PhoneStatusBar extends StatusBar {
                 final int edgeBorder = mEdgeBorder;
                 if (x >= edgeBorder && x < mDisplayMetrics.widthPixels - edgeBorder) {
                     prepareTracking(y, !mExpanded);// opening if we're not already fully visible
-                    mVelocityTracker.addMovement(event);
+                    trackMovement(event);
                 }
             }
         } else if (mTracking) {
-            mVelocityTracker.addMovement(event);
+            trackMovement(event);
             final int minY = statusBarSize + mCloseView.getHeight();
             if (action == MotionEvent.ACTION_MOVE) {
                 int y = (int)event.getRawY();
@@ -1540,6 +1540,16 @@ public class PhoneStatusBar extends StatusBar {
         return false;
     }
 
+    private void trackMovement(MotionEvent event) {
+        // Add movement to velocity tracker using raw screen X and Y coordinates instead
+        // of window coordinates because the window frame may be moving at the same time.
+        float deltaX = event.getRawX() - event.getX();
+        float deltaY = event.getRawY() - event.getY();
+        event.offsetLocation(deltaX, deltaY);
+        mVelocityTracker.addMovement(event);
+        event.offsetLocation(-deltaX, -deltaY);
+    }
+
     @Override // CommandQueue
     public void setSystemUiVisibility(int vis) {
         final int old = mSystemUiVisibility;