work around and fix bugs

- Make rollo always draw.  This works around the bug somewhere that makes
  it show gray when all apps shold be closed
- Simplify the SwipeController now that we're not zooming the workspace.
- Make the readback data sane by splitting it to a different allocation.
  Now there is one allocation for each direction of data flow.
- Make AllAppsView.isVisible return the correct value.
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 3813afe..7075b5f 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -82,8 +82,7 @@
  * Default launcher application.
  */
 public final class Launcher extends Activity
-        implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks,
-        SwipeController.SwipeListener {
+        implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks {
     static final String LOG_TAG = "Launcher";
     static final String TAG = LOG_TAG;
     static final boolean LOGD = false;
@@ -109,10 +108,6 @@
     private static final int REQUEST_PICK_LIVE_FOLDER = 8;
     private static final int REQUEST_PICK_APPWIDGET = 9;
 
-    private static final int MODE_WORKSPACE = 0;
-    private static final int MODE_ALL_APPS = 1;
-    private static final int MODE_ALL_APPS_ZOOMED = 2;
-
     static final String EXTRA_SHORTCUT_DUPLICATE = "duplicate";
 
     static final String EXTRA_CUSTOM_WIDGET = "custom_widget";
@@ -177,7 +172,6 @@
     private DeleteZone mDeleteZone;
     private HandleView mHandleView;
     private AllAppsView mAllAppsGrid;
-    private int mMode = MODE_WORKSPACE;
 
     private Bundle mSavedState;
 
@@ -423,7 +417,7 @@
     @Override
     protected void onPause() {
         super.onPause();
-        closeAllApps();
+        closeAllApps(false);
     }
 
     @Override
@@ -519,9 +513,8 @@
     private void setupViews() {
         mDragController = new DragController(this);
         DragController dragController = mDragController;
-        mSwipeController = new SwipeController(this, this);
+        mSwipeController = new SwipeController(this);
         SwipeController swipeController = mSwipeController;
-        swipeController.setRange(-1, 0);
 
         DragLayer dragLayer = (DragLayer) findViewById(R.id.drag_layer);
         dragLayer.setDragController(dragController);
@@ -531,6 +524,7 @@
         mAllAppsGrid.setLauncher(this);
         mAllAppsGrid.setDragController(dragController);
         mAllAppsGrid.setWillNotDraw(false); // We don't want a hole punched in our window.
+        swipeController.setAllAppsView(mAllAppsGrid);
 
         mWorkspace = (Workspace) dragLayer.findViewById(R.id.workspace);
         final Workspace workspace = mWorkspace;
@@ -811,7 +805,7 @@
                     mWorkspace.moveToDefaultScreen();
                 }
 
-                closeAllApps();
+                closeAllApps(true);
 
                 final View v = getWindow().peekDecorView();
                 if (v != null && v.getWindowToken() != null) {
@@ -820,7 +814,7 @@
                     imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                 }
             } else {
-                closeAllApps();
+                closeAllApps(false);
             }
         }
     }
@@ -906,7 +900,7 @@
     public void startSearch(String initialQuery, boolean selectInitialQuery,
             Bundle appSearchData, boolean globalSearch) {
 
-        closeAllApps();
+        closeAllApps(true);
 
         // Slide the search widget to the top, if it's on the current screen,
         // otherwise show the search dialog immediately.
@@ -1283,7 +1277,7 @@
                     if (!event.isCanceled()) {
                         mWorkspace.dispatchKeyEvent(event);
                         if (isAllAppsVisible()) {
-                            closeAllApps();
+                            closeAllApps(true);
                         } else {
                             closeFolder();
                         }
@@ -1343,7 +1337,7 @@
         } else if (v == mHandleView) {
             Log.d(TAG, "onClick");
             if (isAllAppsVisible()) {
-                closeAllApps();
+                closeAllApps(true);
             } else {
                 showAllApps();
             }
@@ -1433,7 +1427,6 @@
         }
 
         if (mWorkspace.allowLongPress()) {
-        Log.d(TAG, "there");
             mSwipeController.cancelSwipe();
             if (cellInfo.cell == null) {
                 if (cellInfo.valid) {
@@ -1604,27 +1597,21 @@
     }
 
     boolean isAllAppsVisible() {
-        return mAllAppsGrid.isZooming() || mAllAppsGrid.isVisible();
+        return mAllAppsGrid.isVisible();
     }
 
     void showAllApps() {
-        if (mMode == MODE_ALL_APPS) {
-            return;
-        }
-
-        mSwipeController.setRange(-1, 0);
-        mSwipeController.setImmediate(-1);
-        mWorkspace.hide();
+        mSwipeController.setMode(SwipeController.MODE_ALL_APPS, true);
+        //mWorkspace.hide();
 
         // TODO: fade these two too
         mDeleteZone.setVisibility(View.GONE);
         //mHandleView.setVisibility(View.GONE);
     }
 
-    void closeAllApps() {
+    void closeAllApps(boolean animated) {
         if (mAllAppsGrid.isVisible()) {
-            mSwipeController.setRange(0, 1);
-            mSwipeController.setImmediate(1);
+            mSwipeController.setMode(SwipeController.MODE_WORKSPACE, animated);
             mWorkspace.getChildAt(mWorkspace.getCurrentScreen()).requestFocus();
 
             // TODO: fade these two too
@@ -1761,91 +1748,6 @@
     }
 
     /**
-     * Implementation of the method from SwipeController.SwipeListener.
-     */
-    public void onStartSwipe() {
-        switch (mMode) {
-        case MODE_WORKSPACE:
-            mWorkspace.enableChildrenCache();
-            break;
-        case MODE_ALL_APPS:
-            break;
-        case MODE_ALL_APPS_ZOOMED:
-            break;
-        }
-    }
-
-    /**
-     * Implementation of the method from SwipeController.SwipeListener.
-     *
-     * @param amount The final value of the swipe (-1, 0 or 1)
-     */
-    public void onFinishSwipe(int amount) {
-        switch (mMode) {
-        case MODE_WORKSPACE:
-            if (amount == -1) {
-                setWorkspaceAndAllAppsScale(-amount);
-                mWorkspace.clearChildrenCache();
-                mMode = MODE_ALL_APPS;
-                mSwipeController.setRange(0, 1);
-            }
-            break;
-        case MODE_ALL_APPS:
-            if (amount == 1) {
-                setWorkspaceAndAllAppsScale(1-amount);
-                mWorkspace.clearChildrenCache();
-                mMode = MODE_WORKSPACE;
-                mSwipeController.setRange(-1, 0);
-            }
-            break;
-        case MODE_ALL_APPS_ZOOMED:
-            break;
-        }
-    }
-
-    /**
-     * Implementation of the method from SwipeController.SwipeListener.
-     */
-    public void onSwipe(float amount) {
-        switch (mMode) {
-        case MODE_WORKSPACE:
-            // We can open the all apps view.
-            //   0 == workspace is showing
-            //  -1 == all apps is showing
-            setWorkspaceAndAllAppsScale(-amount);
-            break;
-        case MODE_ALL_APPS:
-            // We can close it, or (someday) zoom it further
-            //   0 == all apps showing
-            //   1 == workspace is showing
-            setWorkspaceAndAllAppsScale(1-amount);
-            break;
-        }
-    }
-
-    /**
-     * Set the scale factor for the workspace and the all apps grid.
-     *
-     * @param amount A float between 0 and 1, where:
-     *                  0 == workspace is showing and
-     *                  1 == the all apps grid is showing.
-     */
-    private void setWorkspaceAndAllAppsScale(float amount) {
-        //Log.d("setWorkspaceAndAllAppsScale", "setWorkspaceAndAllAppsScale amount=" + amount);
-        if (amount < 0.001f) {
-            amount = 0.0f;
-        }
-        if (amount > 0.999f) {
-            amount = 1.0f;
-            mWorkspace.setVisibility(View.INVISIBLE);
-        } else {
-            mWorkspace.setVisibility(View.VISIBLE);
-        }
-        //mWorkspace.setScale(1-amount);
-        mAllAppsGrid.setScale(amount);
-    }
-
-    /**
      * Implementation of the method from LauncherModel.Callbacks.
      */
     public int getCurrentWorkspaceScreen() {