Making hotseat a fiver.

Change-Id: I18737692a115f8fd77c6feb3062f4bfeca3506ae
diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java
index 2f5cc40..8aa7c59 100644
--- a/src/com/android/launcher2/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher2/AppsCustomizeTabHost.java
@@ -39,7 +39,6 @@
 
     private static final String APPS_TAB_TAG = "APPS";
     private static final String WIDGETS_TAB_TAG = "WIDGETS";
-    private static final int sTabBarFadeInDuration = 150;
 
     private final LayoutInflater mLayoutInflater;
     private ViewGroup mTabs;
@@ -130,7 +129,7 @@
                 // Set the width and show the tab bar (if we have a loading graphic, we can switch
                 // it off here)
                 mTabs.getLayoutParams().width = contentWidth;
-                mTabsContainer.animate().alpha(1f).setDuration(sTabBarFadeInDuration);
+                mTabsContainer.setAlpha(1f);
             }
         }
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
diff --git a/src/com/android/launcher2/Hotseat.java b/src/com/android/launcher2/Hotseat.java
index 491691e..c53a743 100644
--- a/src/com/android/launcher2/Hotseat.java
+++ b/src/com/android/launcher2/Hotseat.java
@@ -27,7 +27,8 @@
 import com.android.launcher.R;
 
 public class Hotseat extends FrameLayout {
-    static final String TAG = "Hotseat";
+    private static final String TAG = "Hotseat";
+    private static final int sAllAppsButtonRank = 2; // In the middle of the dock
 
     private Launcher mLauncher;
     private CellLayout mContent;
@@ -75,6 +76,9 @@
     int getCellYFromOrder(int rank) {
         return mIsLandscape ? (mContent.getCountY() - (rank + 1)) : 0;
     }
+    public static boolean isAllAppsButtonRank(int rank) {
+        return rank == sAllAppsButtonRank;
+    }
 
     @Override
     protected void onFinishInflate() {
@@ -110,8 +114,8 @@
 
         // Note: We do this to ensure that the hotseat is always laid out in the orientation of
         // the hotseat in order regardless of which orientation they were added
-        int x = getCellXFromOrder(0);
-        int y = getCellYFromOrder(0);
+        int x = getCellXFromOrder(sAllAppsButtonRank);
+        int y = getCellYFromOrder(sAllAppsButtonRank);
         mContent.addViewToCellLayout(allAppsButton, -1, 0, new CellLayout.LayoutParams(x,y,1,1),
                 true);
     }
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 1573483..206de14 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -816,26 +816,37 @@
 
         // check & update map of what's occupied; used to discard overlapping/invalid items
         private boolean checkItemPlacement(ItemInfo occupied[][][], ItemInfo item) {
-            if (item.container != LauncherSettings.Favorites.CONTAINER_DESKTOP) {
+            int containerIndex = item.screen;
+            if (item.container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
+                // We use the last index to refer to the hotseat
+                containerIndex = Launcher.SCREEN_COUNT;
+                // Return early if we detect that an item is under the hotseat button
+                if (Hotseat.isAllAppsButtonRank(item.screen)) {
+                    return false;
+                }
+            } else if (item.container != LauncherSettings.Favorites.CONTAINER_DESKTOP) {
+                // Skip further checking if it is not the hotseat or workspace container
                 return true;
             }
+
             for (int x = item.cellX; x < (item.cellX+item.spanX); x++) {
                 for (int y = item.cellY; y < (item.cellY+item.spanY); y++) {
-                    if (occupied[item.screen][x][y] != null) {
+                    if (occupied[containerIndex][x][y] != null) {
                         Log.e(TAG, "Error loading shortcut " + item
-                            + " into cell (" + item.screen + ":"
+                            + " into cell (" + containerIndex + "-" + item.screen + ":"
                             + x + "," + y
                             + ") occupied by "
-                            + occupied[item.screen][x][y]);
+                            + occupied[containerIndex][x][y]);
                         return false;
                     }
                 }
             }
             for (int x = item.cellX; x < (item.cellX+item.spanX); x++) {
                 for (int y = item.cellY; y < (item.cellY+item.spanY); y++) {
-                    occupied[item.screen][x][y] = item;
+                    occupied[containerIndex][x][y] = item;
                 }
             }
+
             return true;
         }
 
@@ -858,8 +869,9 @@
             final Cursor c = contentResolver.query(
                     LauncherSettings.Favorites.CONTENT_URI, null, null, null, null);
 
+            // +1 for the hotseat (it can be larger than the workspace)
             final ItemInfo occupied[][][] =
-                    new ItemInfo[Launcher.SCREEN_COUNT][mCellCountX][mCellCountY];
+                    new ItemInfo[Launcher.SCREEN_COUNT + 1][mCellCountX + 1][mCellCountY + 1];
 
             try {
                 final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID);
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 6ca16de..53f7b42 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -737,7 +737,7 @@
                         // hotset. This screen can't be at position 0 because AllApps is in the
                         // zeroth position.
                         if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT &&
-                                Integer.valueOf(screen) <= 0) {
+                                Hotseat.isAllAppsButtonRank(Integer.valueOf(screen))) {
                             throw new RuntimeException("Invalid screen position for hotseat item");
                         }