code cleanup, preparing for spring-loaded adding to screens

Change-Id: Ic52b8df2b4c4998272fbfe2b1b195c177cac9a23
diff --git a/src/com/android/launcher2/AllAppsPagedView.java b/src/com/android/launcher2/AllAppsPagedView.java
index ecdb7b3..8d4ddba 100644
--- a/src/com/android/launcher2/AllAppsPagedView.java
+++ b/src/com/android/launcher2/AllAppsPagedView.java
@@ -16,9 +16,7 @@
 
 package com.android.launcher2;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
+import com.android.launcher.R;
 
 import android.content.ComponentName;
 import android.content.Context;
@@ -30,7 +28,9 @@
 import android.widget.Checkable;
 import android.widget.TextView;
 
-import com.android.launcher.R;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
 
 /**
  * An implementation of PagedView that populates the pages of the workspace
@@ -43,9 +43,6 @@
     private static final String TAG = "AllAppsPagedView";
     private static final boolean DEBUG = false;
 
-    private static final int MENU_DELETE_APP = 1;
-    private static final int MENU_APP_INFO = 2;
-
     private Launcher mLauncher;
     private DragController mDragController;
 
@@ -199,7 +196,7 @@
     }
 
     private void setupDragMode() {
-        mLauncher.getWorkspace().shrinkToBottomVisible();
+        mLauncher.getWorkspace().shrink(Workspace.ShrinkState.BOTTOM_VISIBLE);
 
         ApplicationInfoDropTarget infoButton =
                 (ApplicationInfoDropTarget) mLauncher.findViewById(R.id.info_button);
diff --git a/src/com/android/launcher2/CustomizePagedView.java b/src/com/android/launcher2/CustomizePagedView.java
index 50ec64b..e9a82d6 100644
--- a/src/com/android/launcher2/CustomizePagedView.java
+++ b/src/com/android/launcher2/CustomizePagedView.java
@@ -16,10 +16,7 @@
 
 package com.android.launcher2;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import com.android.launcher.R;
 
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProviderInfo;
@@ -31,11 +28,8 @@
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
 import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.Region.Op;
+import android.graphics.Bitmap.Config;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -48,9 +42,11 @@
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.TextView;
 
-import com.android.launcher.R;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 public class CustomizePagedView extends PagedView
     implements View.OnLongClickListener, View.OnClickListener, View.OnTouchListener,
@@ -90,9 +86,6 @@
     // The size of the items on the wallpaper tab
     private int mWallpaperCellHSpan;
 
-    // The max dimensions for the ImageView we use for displaying a wallpaper
-    private int mMaxWallpaperWidth;
-
     // The raw sources of data for each of the different tabs of the customization page
     private List<AppWidgetProviderInfo> mWidgetList;
     private List<ResolveInfo> mShortcutList;
@@ -473,6 +466,14 @@
         return super.onTouchEvent(ev);
     }
 
+    Bitmap drawableToBitmap(Drawable d) {
+        Bitmap b = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(),
+                Bitmap.Config.ARGB_8888);
+        Canvas c = new Canvas(b);
+        d.draw(c);
+        return b;
+    }
+
     private boolean beginDragging(View v) {
         // End the current choice mode before we start dragging anything
         if (isChoiceMode(CHOICE_MODE_SINGLE)) {
@@ -486,10 +487,7 @@
             // Get the icon as the drag representation
             final LinearLayout l = (LinearLayout) v;
             final Drawable icon = ((ImageView) l.findViewById(R.id.widget_preview)).getDrawable();
-            Bitmap b = Bitmap.createBitmap(icon.getIntrinsicWidth(), icon.getIntrinsicHeight(),
-                    Bitmap.Config.ARGB_8888);
-            Canvas c = new Canvas(b);
-            icon.draw(c);
+            Bitmap b = drawableToBitmap(icon);
             PendingAddWidgetInfo createWidgetInfo = (PendingAddWidgetInfo) v.getTag();
 
             mLauncher.getWorkspace().onDragStartedWithItemMinSize(
@@ -692,7 +690,6 @@
         mWorkspaceWidgetLayout.setPadding(20, 10, 20, 0);
 
         mMaxWidgetWidth = mWorkspaceWidgetLayout.estimateCellWidth(sMaxWidgetCellHSpan);
-        mMaxWallpaperWidth = mWorkspaceWidgetLayout.estimateCellWidth(mWallpaperCellHSpan);
     }
 
     private void syncWidgetPages() {
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index bbb5967..d5f20c5 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -17,13 +17,9 @@
 
 package com.android.launcher2;
 
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+import com.android.common.Search;
+import com.android.launcher.R;
+import com.android.launcher2.Workspace.ShrinkState;
 
 import android.animation.Animator;
 import android.animation.AnimatorSet;
@@ -59,7 +55,6 @@
 import android.database.ContentObserver;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Rect;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -104,8 +99,13 @@
 import android.widget.TabHost.OnTabChangeListener;
 import android.widget.TabHost.TabContentFactory;
 
-import com.android.common.Search;
-import com.android.launcher.R;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 
 /**
@@ -2621,9 +2621,9 @@
         setPivotsForZoom(toView, toState, scale);
 
         if (toAllApps) {
-            mWorkspace.shrinkToBottomHidden(animated);
+            mWorkspace.shrink(ShrinkState.BOTTOM_HIDDEN, animated);
         } else {
-            mWorkspace.shrinkToTop(animated);
+            mWorkspace.shrink(ShrinkState.TOP, animated);
         }
 
         if (animated) {
@@ -2760,9 +2760,9 @@
         mAllAppsPagedView.endChoiceMode();
 
         if (toState == State.ALL_APPS) {
-            mWorkspace.shrinkToBottomHidden(animated);
+            mWorkspace.shrink(Workspace.ShrinkState.BOTTOM_HIDDEN, animated);
         } else {
-            mWorkspace.shrinkToTop(animated);
+            mWorkspace.shrink(Workspace.ShrinkState.TOP, animated);
         }
 
         if (animated) {
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index 257531e..fed0884 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -16,8 +16,7 @@
 
 package com.android.launcher2;
 
-import java.util.ArrayList;
-import java.util.HashMap;
+import com.android.launcher.R;
 
 import android.content.Context;
 import android.content.res.TypedArray;
@@ -41,7 +40,8 @@
 import android.widget.Checkable;
 import android.widget.Scroller;
 
-import com.android.launcher.R;
+import java.util.ArrayList;
+import java.util.HashMap;
 
 /**
  * An abstraction of the original Workspace which supports browsing through a
@@ -433,6 +433,18 @@
         setMeasuredDimension(widthSize, heightSize);
     }
 
+    protected void moveToNewPageWithoutMovingCellLayouts(int newCurrentPage) {
+        int newX = getChildOffset(newCurrentPage) - getRelativeChildOffset(newCurrentPage);
+        int delta = newX - mScrollX;
+
+        final int screenCount = getChildCount();
+        for (int i = 0; i < screenCount; i++) {
+            CellLayout cl = (CellLayout) getChildAt(i);
+            cl.setX(cl.getX() + delta);
+        }
+        setCurrentPage(newCurrentPage);
+    }
+
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         if (mFirstLayout && mCurrentPage >= 0 && mCurrentPage < getChildCount()) {
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 42dbc9a..4203277 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -16,9 +16,8 @@
 
 package com.android.launcher2;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
+import com.android.launcher.R;
+import com.android.launcher2.InstallWidgetReceiver.WidgetMimeTypeHandlerData;
 
 import android.animation.Animator;
 import android.animation.AnimatorSet;
@@ -64,8 +63,9 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.android.launcher.R;
-import com.android.launcher2.InstallWidgetReceiver.WidgetMimeTypeHandlerData;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
 
 /**
  * The workspace is a wide area with a wallpaper and a finite number of pages.
@@ -160,11 +160,10 @@
     private boolean mIsSmall = false;
     private boolean mIsInUnshrinkAnimation = false;
     private AnimatorListener mUnshrinkAnimationListener;
-    private enum ShrinkPosition {
-        SHRINK_TO_TOP, SHRINK_TO_MIDDLE, SHRINK_TO_BOTTOM_HIDDEN, SHRINK_TO_BOTTOM_VISIBLE };
-    private ShrinkPosition mShrunkenState;
+    enum ShrinkState { TOP, SPRING_LOADED, MIDDLE, BOTTOM_HIDDEN, BOTTOM_VISIBLE };
+    private ShrinkState mShrinkState;
     private boolean mWaitingToShrink = false;
-    private ShrinkPosition mWaitingToShrinkPosition;
+    private ShrinkState mWaitingToShrinkState;
     private AnimatorSet mAnimator;
 
     /** Is the user is dragging an item near the edge of a page? */
@@ -448,7 +447,7 @@
         // this is an intercepted event being forwarded from a cell layout
         if (mIsSmall || mIsInUnshrinkAnimation) {
             // Only allow clicks on a CellLayout if it is visible
-            if (mShrunkenState != ShrinkPosition.SHRINK_TO_BOTTOM_HIDDEN) {
+            if (mShrinkState != ShrinkState.BOTTOM_HIDDEN) {
                 mLauncher.onWorkspaceClick((CellLayout) v);
             }
             return true;
@@ -481,7 +480,7 @@
     public boolean onInterceptTouchEvent(MotionEvent ev) {
         if (mIsSmall || mIsInUnshrinkAnimation) {
             if (mLauncher.isAllAppsVisible() &&
-                    mShrunkenState == ShrinkPosition.SHRINK_TO_BOTTOM_HIDDEN) {
+                    mShrinkState == ShrinkState.BOTTOM_HIDDEN) {
                 // Intercept this event so we can show the workspace in full view
                 // when it is clicked on and it is small
                 return true;
@@ -721,7 +720,7 @@
         // if shrinkToBottom() is called on initialization, it has to be deferred
         // until after the first call to onLayout so that it has the correct width
         if (mWaitingToShrink) {
-            shrink(mWaitingToShrinkPosition, false);
+            shrink(mWaitingToShrinkState, false);
             mWaitingToShrink = false;
         }
 
@@ -876,7 +875,7 @@
             }
             setCurrentPage(mCurrentPage);
 
-            if (mShrunkenState == ShrinkPosition.SHRINK_TO_BOTTOM_HIDDEN) {
+            if (mShrinkState == ShrinkState.BOTTOM_HIDDEN) {
                 mLauncher.showWorkspace(true);
                 // Let the events fall through to the CellLayouts because if they are not
                 // hit, then we get a crash due to a missing ACTION_DOWN touch event
@@ -907,30 +906,6 @@
         return mIsSmall;
     }
 
-    void shrinkToTop(boolean animated) {
-        shrink(ShrinkPosition.SHRINK_TO_TOP, animated);
-    }
-
-    void shrinkToMiddle() {
-        shrink(ShrinkPosition.SHRINK_TO_MIDDLE, true);
-    }
-
-    void shrinkToBottomHidden() {
-        shrinkToBottomHidden(true);
-    }
-
-    void shrinkToBottomVisible() {
-        shrinkToBottomVisible(true);
-    }
-
-    void shrinkToBottomHidden(boolean animated) {
-        shrink(ShrinkPosition.SHRINK_TO_BOTTOM_HIDDEN, animated);
-    }
-
-    void shrinkToBottomVisible(boolean animated) {
-        shrink(ShrinkPosition.SHRINK_TO_BOTTOM_VISIBLE, animated);
-    }
-
     private float getYScaleForScreen(int screen) {
         int x = Math.abs(screen - 2);
 
@@ -943,24 +918,27 @@
         return 1.0f;
     }
 
-    // we use this to shrink the workspace for the all apps view and the customize view
-    private void shrink(ShrinkPosition shrinkPosition, boolean animated) {
+    public void shrink(ShrinkState shrinkState) {
+        shrink(shrinkState, true);
+    }
 
+    // we use this to shrink the workspace for the all apps view and the customize view
+    public void shrink(ShrinkState shrinkState, boolean animated) {
         if (mFirstLayout) {
             // (mFirstLayout == "first layout has not happened yet")
             // if we get a call to shrink() as part of our initialization (for example, if
             // Launcher is started in All Apps mode) then we need to wait for a layout call
             // to get our width so we can layout the mini-screen views correctly
             mWaitingToShrink = true;
-            mWaitingToShrinkPosition = shrinkPosition;
+            mWaitingToShrinkState = shrinkState;
             return;
         }
         mIsSmall = true;
-        mShrunkenState = shrinkPosition;
+        mShrinkState = shrinkState;
 
         // Stop any scrolling, move to the current page right away
         setCurrentPage((mNextPage != INVALID_PAGE) ? mNextPage : mCurrentPage);
-        updateWhichPagesAcceptDrops(mShrunkenState);
+        updateWhichPagesAcceptDrops(mShrinkState);
 
         // we intercept and reject all touch events when we're small, so be sure to reset the state
         mTouchState = TOUCH_STATE_REST;
@@ -993,18 +971,18 @@
                 getResources().getDimension(R.dimen.allAppsSmallScreenVerticalMarginLandscape));
         float finalAlpha = 1.0f;
         float extraShrinkFactor = 1.0f;
-        if (shrinkPosition == ShrinkPosition.SHRINK_TO_BOTTOM_VISIBLE) {
+        if (shrinkState == ShrinkState.BOTTOM_VISIBLE) {
              newY = screenHeight - newY - scaledPageHeight;
-        } else if (shrinkPosition == ShrinkPosition.SHRINK_TO_BOTTOM_HIDDEN) {
+        } else if (shrinkState == ShrinkState.BOTTOM_HIDDEN) {
 
             // We shrink and disappear to nothing in the case of all apps
             // (which is when we shrink to the bottom)
             newY = screenHeight - newY - scaledPageHeight;
             finalAlpha = 0.0f;
-        } else if (shrinkPosition == ShrinkPosition.SHRINK_TO_MIDDLE) {
+        } else if (shrinkState == ShrinkState.MIDDLE) {
             newY = screenHeight / 2 - scaledPageHeight / 2;
             finalAlpha = 1.0f;
-        } else if (shrinkPosition == ShrinkPosition.SHRINK_TO_TOP) {
+        } else if (shrinkState == ShrinkState.TOP) {
             newY = (isPortrait ?
                 getResources().getDimension(R.dimen.customizeSmallScreenVerticalMarginPortrait) :
                 getResources().getDimension(R.dimen.customizeSmallScreenVerticalMarginLandscape));
@@ -1066,7 +1044,7 @@
         }
         setChildrenDrawnWithCacheEnabled(true);
 
-        if (shrinkPosition == ShrinkPosition.SHRINK_TO_TOP) {
+        if (shrinkState == ShrinkState.TOP) {
             showBackgroundGradientForCustomizeTray();
         } else {
             showBackgroundGradient();
@@ -1132,30 +1110,30 @@
     private final ZoomOutInterpolator mZoomOutInterpolator = new ZoomOutInterpolator();
     private final ZoomInInterpolator mZoomInInterpolator = new ZoomInInterpolator();
 
-    private void updateWhichPagesAcceptDrops(ShrinkPosition state) {
+    private void updateWhichPagesAcceptDrops(ShrinkState state) {
         updateWhichPagesAcceptDropsHelper(state, false, 1, 1);
     }
 
-    private void updateWhichPagesAcceptDropsDuringDrag(ShrinkPosition state, int spanX, int spanY) {
+    private void updateWhichPagesAcceptDropsDuringDrag(ShrinkState state, int spanX, int spanY) {
         updateWhichPagesAcceptDropsHelper(state, true, spanX, spanY);
     }
 
     private void updateWhichPagesAcceptDropsHelper(
-            ShrinkPosition state, boolean isDragHappening, int spanX, int spanY) {
+            ShrinkState state, boolean isDragHappening, int spanX, int spanY) {
         final int screenCount = getChildCount();
         for (int i = 0; i < screenCount; i++) {
             CellLayout cl = (CellLayout) getChildAt(i);
 
             switch (state) {
-                case SHRINK_TO_TOP:
+                case TOP:
                     if (!isDragHappening) {
                         boolean showDropHighlight = i == mCurrentPage;
                         cl.setAcceptsDrops(showDropHighlight);
                         break;
                     }
                     // otherwise, fall through below and mark non-full screens as accepting drops
-                case SHRINK_TO_BOTTOM_HIDDEN:
-                case SHRINK_TO_BOTTOM_VISIBLE:
+                case BOTTOM_HIDDEN:
+                case BOTTOM_VISIBLE:
                     if (!isDragHappening) {
                         // even if a drag isn't happening, we don't want to show a screen as
                         // accepting drops if it doesn't have at least one free cell
@@ -1167,7 +1145,7 @@
                     break;
                 default:
                      throw new RuntimeException(
-                             "updateWhichPagesAcceptDropsHelper passed an unhandled ShrinkPosition");
+                             "updateWhichPagesAcceptDropsHelper passed an unhandled ShrinkState");
             }
         }
     }
@@ -1182,7 +1160,7 @@
      *
      */
     public void onDragStartedWithItemSpans(int spanX, int spanY) {
-        updateWhichPagesAcceptDropsDuringDrag(mShrunkenState, spanX, spanY);
+        updateWhichPagesAcceptDropsDuringDrag(mShrinkState, spanX, spanY);
     }
 
     public void onDragStartedWithItemMinSize(int minWidth, int minHeight) {
@@ -1193,7 +1171,7 @@
     // we call this method whenever a drag and drop in Launcher finishes, even if Workspace was
     // never dragged over
     public void onDragStopped() {
-        updateWhichPagesAcceptDrops(mShrunkenState);
+        updateWhichPagesAcceptDrops(mShrinkState);
     }
 
     @Override
@@ -1205,23 +1183,11 @@
     public void unshrink(CellLayout clThatWasClicked) {
         int newCurrentPage = indexOfChild(clThatWasClicked);
         if (mIsSmall) {
-            int newX = getChildOffset(newCurrentPage) - getRelativeChildOffset(newCurrentPage);
-            int delta = newX - mScrollX;
-
-            final int screenCount = getChildCount();
-            for (int i = 0; i < screenCount; i++) {
-                CellLayout cl = (CellLayout) getChildAt(i);
-                cl.setX(cl.getX() + delta);
-            }
-            setCurrentPage(newCurrentPage);
-            unshrink();
+            moveToNewPageWithoutMovingCellLayouts(newCurrentPage);
+            unshrink(true);
         }
     }
 
-    void unshrink() {
-        unshrink(true);
-    }
-
     void unshrink(boolean animated) {
         if (mIsSmall) {
             mIsSmall = false;