Fix bug that allowed multiple items in one cell

Fixed issue where opening a folder allowed items to be placed on any cell, even if it was occupied.

Bug: 3094164

Change-Id: I392e7236f9cd7ea0b09f36e249d2a57c9934dc8e
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java
index d94bacf..98aad14 100644
--- a/src/com/android/launcher2/CellLayout.java
+++ b/src/com/android/launcher2/CellLayout.java
@@ -456,6 +456,11 @@
     }
 
     public boolean addViewToCellLayout(View child, int index, int childId, LayoutParams params) {
+        return addViewToCellLayout(child, index, childId, params, true);
+    }
+
+    public boolean addViewToCellLayout(
+            View child, int index, int childId, LayoutParams params, boolean markCells) {
         final LayoutParams lp = params;
 
         // Generate an id for each view, this assumes we have at most 256x256 cells
@@ -473,7 +478,7 @@
             child.setAlpha(getAlpha());
             addView(child, index, lp);
 
-            markCellsAsOccupiedForView(child);
+            if (markCells) markCellsAsOccupiedForView(child);
 
             return true;
         }
@@ -500,6 +505,10 @@
         clearOccupiedCells();
     }
 
+    public void removeViewWithoutMarkingCells(View view) {
+        super.removeView(view);
+    }
+
     @Override
     public void removeView(View view) {
         markCellsAsUnoccupiedForView(view);
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 2688e54..471cb3e 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -1696,7 +1696,8 @@
         folder.getInfo().opened = false;
         ViewGroup parent = (ViewGroup) folder.getParent();
         if (parent != null) {
-            parent.removeView(folder);
+            CellLayout cl = (CellLayout) parent;
+            cl.removeViewWithoutMarkingCells(folder);
             if (folder instanceof DropTarget) {
                 // Live folders aren't DropTargets.
                 mDragController.removeDropTarget((DropTarget)folder);
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index 42a6f1b..44127fe 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -364,7 +364,8 @@
 
         // Get the canonical child id to uniquely represent this view in this screen
         int childId = LauncherModel.getCellLayoutChildId(-1, screen, x, y, spanX, spanY);
-        if (!group.addViewToCellLayout(child, insert ? 0 : -1, childId, lp)) {
+        boolean markCellsAsOccupied = !(child instanceof Folder);
+        if (!group.addViewToCellLayout(child, insert ? 0 : -1, childId, lp, markCellsAsOccupied)) {
             // TODO: This branch occurs when the workspace is adding views
             // outside of the defined grid
             // maybe we should be deleting these items from the LauncherModel?