Implement safer test for min click velocity.
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index df43814..ba437d9 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -204,7 +204,7 @@
             mRollo.mState.newPositionX = ev.getRawX() / Defines.SCREEN_WIDTH_PX;
             mRollo.mState.newTouchDown = 1;
 
-            if (mRollo.mReadback.velocity != 0) {
+            if (!mRollo.checkClickOK()) {
                 mRollo.clearSelectedIcon();
             } else {
                 mRollo.selectIcon(x, (int)ev.getY(), mRollo.mReadback.posX);
@@ -237,17 +237,21 @@
             break;
         case MotionEvent.ACTION_UP:
         case MotionEvent.ACTION_CANCEL:
-            if (!mZoomSwipeInProgress) {
-                mRollo.mState.newPositionX = ev.getRawX() / Defines.SCREEN_WIDTH_PX;
-                mRollo.mState.newTouchDown = 0;
+            mRollo.mState.newTouchDown = 0;
+            mRollo.mState.newPositionX = ev.getRawX() / Defines.SCREEN_WIDTH_PX;
 
+            if (!mZoomSwipeInProgress) {
                 mVelocity.computeCurrentVelocity(1000 /* px/sec */,
                         mConfig.getScaledMaximumFlingVelocity());
                 mRollo.mState.flingVelocityX = mVelocity.getXVelocity() / Defines.SCREEN_WIDTH_PX;
                 mRollo.clearSelectedIcon();
                 mRollo.mState.save();
                 mRollo.mInvokeFling.execute();
+            } else {
+                mRollo.mState.save();
+                mRollo.mInvokeMove.execute();
             }
+
             mLastMotionX = -10000;
             mVelocity.recycle();
             mVelocity = null;
@@ -262,7 +266,7 @@
             return;
         }
         int index = mRollo.mState.selectedIconIndex;
-        if (mRollo.mReadback.velocity < 1 && index >= 0 && index < mAllAppsList.size()) {
+        if (mRollo.checkClickOK() && index >= 0 && index < mAllAppsList.size()) {
             ApplicationInfo app = mAllAppsList.get(index);
             mLauncher.startActivitySafely(app.intent);
         }
@@ -273,8 +277,8 @@
             return true;
         }
         int index = mRollo.mState.selectedIconIndex;
-        Log.d(TAG, "long click! velocity=" + mRollo.mState.flingVelocityX + " index=" + index);
-        if (mRollo.mState.flingVelocityX == 0 && index >= 0 && index < mAllAppsList.size()) {
+        Log.d(TAG, "long click! velocity=" + mRollo.mReadback.velocity + " index=" + index);
+        if (mRollo.checkClickOK() && index >= 0 && index < mAllAppsList.size()) {
             ApplicationInfo app = mAllAppsList.get(index);
 
             // We don't really have an accurate location to use.  This will do.
@@ -456,6 +460,12 @@
             }
         }
 
+        private boolean checkClickOK() {
+            //android.util.Log.e("rs", "check click " + Float.toString(mReadback.velocity) + ", " + Float.toString(mReadback.posX));
+            return (Math.abs(mReadback.velocity) < 0.1f) &&
+                   (Math.abs(mReadback.posX - Math.round(mReadback.posX)) < 0.1f);
+        }
+
         class Params extends BaseAlloc {
             Params() {
                 mType = Type.createFromClass(mRS, Params.class, 1, "ParamsClass");