Fixing issue where migration all apps folder couldn't be picked up.

- Ensuring that we add items to the non-primary home page
- Fixing issue with drop-target touch handling on tablets

Change-Id: Iea5a383dc735a8f6044a00982f05789f8328ab63
diff --git a/src/com/android/launcher3/ButtonDropTarget.java b/src/com/android/launcher3/ButtonDropTarget.java
index 3fcc2b9..d51ae46 100644
--- a/src/com/android/launcher3/ButtonDropTarget.java
+++ b/src/com/android/launcher3/ButtonDropTarget.java
@@ -115,6 +115,10 @@
     public void getHitRectRelativeToDragLayer(android.graphics.Rect outRect) {
         super.getHitRect(outRect);
         outRect.bottom += mBottomDragPadding;
+
+        int[] coords = new int[2];
+        mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(this, coords);
+        outRect.offsetTo(coords[0], coords[1]);
     }
 
     private boolean isRtl() {
diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java
index 054ef2f..7b96d651 100644
--- a/src/com/android/launcher3/Hotseat.java
+++ b/src/com/android/launcher3/Hotseat.java
@@ -114,8 +114,9 @@
         mContent.removeAllViewsInLayout();
     }
 
-    void addAllAppsFolder(IconCache iconCache, ArrayList<ApplicationInfo> allApps,
-            ArrayList<ComponentName> onWorkspace, Launcher launcher) {
+    void addAllAppsFolder(IconCache iconCache,
+            ArrayList<ApplicationInfo> allApps, ArrayList<ComponentName> onWorkspace,
+            Launcher launcher, Workspace workspace) {
         FolderInfo fi = new FolderInfo();
 
         fi.cellX = getCellXFromOrder(mAllAppsButtonRank);
@@ -130,9 +131,8 @@
                 fi.cellY, false);
         FolderIcon folder = FolderIcon.fromXml(R.layout.folder_icon, launcher,
                 getLayout(), fi, iconCache);
-
-        CellLayout.LayoutParams lp = new CellLayout.LayoutParams(fi.cellX,fi.cellY,1,1);
-        mContent.addViewToCellLayout(folder, -1, 0, lp, true);
+        workspace.addInScreen(folder, fi.container, fi.screenId, fi.cellX, fi.cellY,
+                fi.spanX, fi.spanY);
 
         for (ApplicationInfo info: allApps) {
             ComponentName cn = info.intent.getComponent();
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index d1959df..d1284d8 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -3779,7 +3779,7 @@
     public void bindAllApplications(final ArrayList<ApplicationInfo> apps) {
         if (mIntentsOnWorkspaceFromUpgradePath != null) {
             getHotseat().addAllAppsFolder(mIconCache, apps,
-                    mIntentsOnWorkspaceFromUpgradePath, Launcher.this);
+                    mIntentsOnWorkspaceFromUpgradePath, Launcher.this, mWorkspace);
             mIntentsOnWorkspaceFromUpgradePath = null;
         }
     }
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 0b69a09..07787cc 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -237,7 +237,8 @@
         return CellLayout.findVacantCell(xy, 1, 1, xCount, yCount, occupied);
     }
     static Pair<Long, int[]> findNextAvailableIconSpace(Context context, String name,
-                                                        Intent launchIntent) {
+                                                        Intent launchIntent,
+                                                        int firstScreenIndex) {
         // Lock on the app so that we don't try and get the items while apps are being added
         LauncherAppState app = LauncherAppState.getInstance();
         LauncherModel model = app.getModel();
@@ -253,7 +254,9 @@
 
             // Try adding to the workspace screens incrementally, starting at the default or center
             // screen and alternating between +1, -1, +2, -2, etc. (using ~ ceil(i/2f)*(-1)^(i-1))
-            for (int screen = 0; screen < sBgWorkspaceScreens.size() && !found; screen++) {
+            firstScreenIndex = Math.min(firstScreenIndex, sBgWorkspaceScreens.size());
+            int count = sBgWorkspaceScreens.size();
+            for (int screen = firstScreenIndex; screen < count && !found; screen++) {
                 int[] tmpCoordinates = new int[2];
                 if (findNextAvailableIconSpaceInScreen(items, tmpCoordinates,
                         sBgWorkspaceScreens.get(screen))) {
@@ -287,8 +290,9 @@
                         }
 
                         // Add this icon to the db, creating a new page if necessary
+                        int startSearchPageIndex = 1;
                         Pair<Long, int[]> coords = LauncherModel.findNextAvailableIconSpace(context,
-                                name, launchIntent);
+                                name, launchIntent, startSearchPageIndex);
                         if (coords == null) {
                             // If we can't find a valid position, then just add a new screen.
                             // This takes time so we need to re-queue the add until the new
@@ -303,7 +307,7 @@
                             addedWorkspaceScreensFinal.add(screenId);
                             // Find the coordinate again
                             coords = LauncherModel.findNextAvailableIconSpace(context,
-                                    a.title.toString(), a.intent);
+                                    a.title.toString(), a.intent, startSearchPageIndex);
                         }
                         if (coords == null) {
                             throw new RuntimeException("Coordinates should not be null");
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index cd31722..b03536b 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -2710,9 +2710,7 @@
        mTempPt[0] = (int) xy[0];
        mTempPt[1] = (int) xy[1];
        mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(this, mTempPt, true);
-
-       mTempPt[0] -= hotseat.getLeft();
-       mTempPt[1] -= hotseat.getTop();
+       mLauncher.getDragLayer().mapCoordInSelfToDescendent(hotseat.getLayout(), mTempPt);
 
        xy[0] = mTempPt[0];
        xy[1] = mTempPt[1];