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
This commit is contained in:
@@ -456,6 +456,11 @@ public class CellLayout extends ViewGroup implements Dimmable {
|
||||
}
|
||||
|
||||
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 @@ public class CellLayout extends ViewGroup implements Dimmable {
|
||||
child.setAlpha(getAlpha());
|
||||
addView(child, index, lp);
|
||||
|
||||
markCellsAsOccupiedForView(child);
|
||||
if (markCells) markCellsAsOccupiedForView(child);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -500,6 +505,10 @@ public class CellLayout extends ViewGroup implements Dimmable {
|
||||
clearOccupiedCells();
|
||||
}
|
||||
|
||||
public void removeViewWithoutMarkingCells(View view) {
|
||||
super.removeView(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeView(View view) {
|
||||
markCellsAsUnoccupiedForView(view);
|
||||
|
||||
@@ -1696,7 +1696,8 @@ public final class Launcher extends Activity
|
||||
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);
|
||||
|
||||
@@ -364,7 +364,8 @@ public class Workspace extends SmoothPagedView
|
||||
|
||||
// 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?
|
||||
|
||||
Reference in New Issue
Block a user