Return friction table, tweak values for line rather than pages.
diff --git a/res/raw/rollo3.c b/res/raw/rollo3.c
index ffd59d0..1e7b5f0 100644
--- a/res/raw/rollo3.c
+++ b/res/raw/rollo3.c
@@ -9,6 +9,7 @@
 
 // Attraction to center values from page edge to page center.
 float g_AttractionTable[9];
+float g_FrictionTable[9];
 float g_PhysicsTableSize;
 
 float g_PosPage;
@@ -66,15 +67,24 @@
 }
 
 void init() {
-    g_AttractionTable[0] = 6.5f;
-    g_AttractionTable[1] = 6.5f;
-    g_AttractionTable[2] = 7.0f;
-    g_AttractionTable[3] = 6.0f;
-    g_AttractionTable[4] = -6.0f;
-    g_AttractionTable[5] = -7.0f;
-    g_AttractionTable[6] = -6.5f;
-    g_AttractionTable[7] = -6.5f;
-    g_AttractionTable[8] = -6.5f;  // dup 7 to avoid a clamp later
+    g_AttractionTable[0] = 20.0f;
+    g_AttractionTable[1] = 20.0f;
+    g_AttractionTable[2] = 15.0f;
+    g_AttractionTable[3] = 10.0f;
+    g_AttractionTable[4] = -10.0f;
+    g_AttractionTable[5] = -15.0f;
+    g_AttractionTable[6] = -15.0f;
+    g_AttractionTable[7] = -20.0f;
+    g_AttractionTable[8] = -20.0f;  // dup 7 to avoid a clamp later
+    g_FrictionTable[0] = 10.0f;
+    g_FrictionTable[1] = 10.0f;
+    g_FrictionTable[2] = 11.0f;
+    g_FrictionTable[3] = 15.0f;
+    g_FrictionTable[4] = 15.0f;
+    g_FrictionTable[5] = 11.0f;
+    g_FrictionTable[6] = 10.0f;
+    g_FrictionTable[7] = 10.0f;
+    g_FrictionTable[8] = 10.0f;  // dup 7 to avoid a clamp later
     g_PhysicsTableSize = 7;
 
     g_PosVelocity = 0;
@@ -112,7 +122,7 @@
     g_MoveToTime = g_MoveToTotalTime;
     g_PosVelocity = 0;
     g_MoveToOldPos = g_PosPage;
-	
+
 	// debugF("======= moveTo", state->targetPos);
 }
 
@@ -170,10 +180,12 @@
     float accel = lerpf(g_AttractionTable[tablePosI],
                         g_AttractionTable[tablePosI + 1],
                         tablePosFrac) * g_DT;
-    float friction = 4.f * g_DT;
+    float friction = lerpf(g_FrictionTable[tablePosI],
+                        g_FrictionTable[tablePosI + 1],
+                        tablePosFrac) * g_DT;
 
     if (g_MoveToTime) {
-		
+
 		/*
         float a = 2.f * (state->targetPos - g_MoveToOldPos) /
                   (g_MoveToTotalTime * g_MoveToTotalTime);
@@ -186,10 +198,10 @@
             g_PosPage = g_MoveToOldPos + 0.5f * a * (t * t);
         }
 		 */
-		
+
 		// New position is old posiition + (total distance) * (interpolated time)
 		g_PosPage = g_MoveToOldPos + (state->targetPos - g_MoveToOldPos) * getInterpolation((g_MoveToTotalTime - g_MoveToTime) / g_MoveToTotalTime);
-		
+
         g_MoveToTime -= g_DT;
         if (g_MoveToTime <= 0) {
             g_MoveToTime = 0;
@@ -208,7 +220,7 @@
     }
 
     // If our velocity is low OR acceleration is opposing it, apply it.
-    if (fabsf(g_PosVelocity) < 1.0f || (g_PosVelocity * accel) < 0 || outOfRange) {
+    if (fabsf(g_PosVelocity) < 2.5f || (g_PosVelocity * accel) < 0 || outOfRange) {
         g_PosVelocity += accel;
     }
 
@@ -424,7 +436,7 @@
     int newTime = uptimeMillis();
     g_DT = (newTime - g_LastTime) / 1000.f;
     g_LastTime = newTime;
-	
+
     if (!g_DrawLastFrame) {
         // If we stopped rendering we cannot use DT.
         // assume 30fps in this case.
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index 9c73a01..d842f2d 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -88,12 +88,12 @@
     private RenderScript mRS;
     private RolloRS mRollo;
     private ArrayList<ApplicationInfo> mAllAppsList;
-    
+
     /**
      * True when we are using arrow keys or trackball to drive navigation
      */
     private boolean mArrowNavigation = false;
-    
+
     private int mPageCount;
     private boolean mStartedScrolling;
     private VelocityTracker mVelocity;
@@ -181,7 +181,7 @@
         long endTime = SystemClock.uptimeMillis();
         Log.d(TAG, "surfaceChanged took " + (endTime-startTime) + "ms");
     }
-    
+
 
     @Override
     protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
@@ -205,7 +205,7 @@
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
-        
+
         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) {
             if (mArrowNavigation) {
                 int whichApp = mRollo.mState.selectedIconIndex;
@@ -215,20 +215,20 @@
                 }
             }
         }
-        
+
         if (mArrowNavigation && mRollo.mState.iconCount > 0) {
             mArrowNavigation = true;
-            
+
             int currentSelection = mRollo.mState.selectedIconIndex;
             int currentTopRow = (int) mRollo.mMessageProc.mPosX;
-            
+
             // The column of the current selection, in the range 0..COLUMNS_PER_PAGE-1
             int currentPageCol = currentSelection % Defines.COLUMNS_PER_PAGE;
-            
+
             // The row of the current selection, in the range 0..ROWS_PER_PAGE-1
             int currentPageRow = (currentSelection - (currentTopRow * Defines.COLUMNS_PER_PAGE))
                     / Defines.ROWS_PER_PAGE;
-            
+
             int newSelection = currentSelection;
 
             switch (keyCode) {
@@ -237,7 +237,7 @@
                     newSelection = currentSelection - Defines.COLUMNS_PER_PAGE;
                 } else if (currentTopRow > 0) {
                     mRollo.moveTo(currentTopRow - 1);
-                    newSelection = currentSelection - Defines.COLUMNS_PER_PAGE; 
+                    newSelection = currentSelection - Defines.COLUMNS_PER_PAGE;
                 }
                 break;
             case KeyEvent.KEYCODE_DPAD_DOWN:
@@ -256,7 +256,7 @@
                 }
                 break;
             case KeyEvent.KEYCODE_DPAD_RIGHT:
-                if ((currentPageCol < Defines.COLUMNS_PER_PAGE - 1) && 
+                if ((currentPageCol < Defines.COLUMNS_PER_PAGE - 1) &&
                         (currentSelection < mRollo.mState.iconCount - 1)) {
                     newSelection = currentSelection + 1;
                 }
@@ -276,7 +276,7 @@
     public boolean onTouchEvent(MotionEvent ev)
     {
         mArrowNavigation = false;
-        
+
         if (!isVisible()) {
             return true;
         }
@@ -635,8 +635,8 @@
 
         private boolean checkClickOK() {
             //android.util.Log.e("rs", "check click " + Float.toString(mReadback.velocity) + ", " + Float.toString(mReadback.posX));
-            return (Math.abs(mMessageProc.mVelocity) < 0.1f) &&
-                   (Math.abs(mMessageProc.mPosX - Math.round(mMessageProc.mPosX)) < 0.1f);
+            return (Math.abs(mMessageProc.mVelocity) < 0.4f) &&
+                   (Math.abs(mMessageProc.mPosX - Math.round(mMessageProc.mPosX)) < 0.4f);
         }
 
         class Params extends BaseAlloc {