Apply max scroll velocity to QC

Bug: 17446457
Change-Id: Iae79e9f41b44ce99c93024f725a5529286590e6b
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index bba8a93..1b4f1c3 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -84,6 +84,11 @@
      */
     private static final float INTERMEDIATE_HEADER_HEIGHT_RATIO = 0.5f;
 
+    /**
+     * Maximum velocity for flings in dips per second. Picked via non-rigorous experimentation.
+     */
+    private static final float MAXIMUM_FLING_VELOCITY = 2000;
+
     private float[] mLastEventPosition = { 0, 0 };
     private VelocityTracker mVelocityTracker;
     private boolean mIsBeingDragged = false;
@@ -242,7 +247,9 @@
         mScroller = new Scroller(context, sInterpolator);
         mTouchSlop = configuration.getScaledTouchSlop();
         mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
-        mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
+        mMaximumVelocity = (int)TypedValue.applyDimension(
+                TypedValue.COMPLEX_UNIT_DIP, MAXIMUM_FLING_VELOCITY,
+                getResources().getDisplayMetrics());
         mTransparentStartHeight = (int) getResources().getDimension(
                 R.dimen.quickcontact_starting_empty_height);
         mToolbarElevation = getResources().getDimension(
@@ -839,6 +846,9 @@
     }
 
     private void fling(float velocity) {
+        if (Math.abs(mMaximumVelocity) < Math.abs(velocity)) {
+            velocity = -mMaximumVelocity * Math.signum(velocity);
+        }
         // For reasons I do not understand, scrolling is less janky when maxY=Integer.MAX_VALUE
         // then when maxY is set to an actual value.
         mScroller.fling(0, getScroll(), 0, (int) velocity, 0, 0, -Integer.MAX_VALUE,