diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index c11de7f..3c05fe6 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -71,6 +71,7 @@
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.MotionEvent;
+import android.view.VelocityTracker;
 import android.view.View;
 import android.view.ViewConfiguration;
 import android.view.animation.Interpolator;
@@ -181,6 +182,8 @@
     public static boolean IS_RUNNING_IN_TEST_HARNESS =
                     ActivityManager.isRunningInTestHarness();
 
+    private static final int TRACKPAD_GESTURE_SCALE = 60;
+
     public static void enableRunningInTestHarnessForTests() {
         IS_RUNNING_IN_TEST_HARNESS = true;
     }
@@ -927,6 +930,38 @@
                 && (event.getSource() & SOURCE_TOUCHSCREEN) != SOURCE_TOUCHSCREEN;
     }
 
+    public static int getTrackpadMotionEventScale(Context context) {
+        return ViewConfiguration.get(context).getScaledTouchSlop() * TRACKPAD_GESTURE_SCALE;
+    }
+
+    public static float getXVelocity(VelocityTracker velocityTracker, MotionEvent event,
+            int pointerId) {
+        // Will be enabled after ag/20353570 is submitted
+//        if (isTrackpadMotionEvent(event)) {
+//            return velocityTracker.getAxisVelocity(AXIS_GESTURE_X_OFFSET, pointerId);
+//        } else {
+            return velocityTracker.getXVelocity(pointerId);
+//        }
+    }
+
+    public static float getXVelocity(VelocityTracker velocityTracker, MotionEvent event) {
+        return getXVelocity(velocityTracker, event, -1 /* ACTIVE_POINTER_ID */);
+    }
+
+    public static float getYVelocity(VelocityTracker velocityTracker, MotionEvent event,
+            int pointerId) {
+        // Will be enabled after ag/20353570 is submitted
+//        if (isTrackpadMotionEvent(event)) {
+//            return velocityTracker.getAxisVelocity(AXIS_GESTURE_Y_OFFSET, pointerId);
+//        } else {
+            return velocityTracker.getYVelocity(pointerId);
+//        }
+    }
+
+    public static float getYVelocity(VelocityTracker velocityTracker, MotionEvent event) {
+        return getYVelocity(velocityTracker, event, -1 /* ACTIVE_POINTER_ID */);
+    }
+
     public static boolean bothNull(@Nullable Object a, @Nullable Object b) {
         return a == null && b == null;
     }
