Fixing up some folder-related drag and drop bugs
Change-Id: I712ffd0ccfc0154a5a9e74e3f585157a86986882
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index 08907c9..d6be307 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -84,6 +84,7 @@
private ArrayList<View> mItemsInReadingOrder = new ArrayList<View>();
private Drawable mIconDrawable;
boolean mItemsInvalidated = false;
+ ShortcutInfo mCurrentDragInfo;
/**
* Used to inflate the Workspace from XML.
@@ -147,7 +148,10 @@
mDragItemPosition[0] = item.cellX;
mDragItemPosition[1] = item.cellY;
mIconDrawable = ((TextView) v).getCompoundDrawables()[1];
- mInfo.remove(item);
+
+ mCurrentDragInfo = item;
+ mItemsInvalidated = true;
+ mInfo.itemsChanged();
mDragItem = item;
} else {
@@ -388,8 +392,13 @@
} else {
item = (ShortcutInfo) d.dragInfo;
}
+
+ // Dragged from self onto self
+ if (item == mCurrentDragInfo) {
+ mInfo.remove(item);
+ }
+
mInfo.add(item);
- LauncherModel.addOrMoveItemInDatabase(mLauncher, item, mInfo.id, 0, item.cellX, item.cellY);
}
protected boolean findAndSetEmptyCells(ShortcutInfo item) {
@@ -397,8 +406,6 @@
if (mContent.findCellForSpan(emptyCell, item.spanX, item.spanY)) {
item.cellX = emptyCell[0];
item.cellY = emptyCell[1];
- LauncherModel.addOrMoveItemInDatabase(
- mLauncher, item, mInfo.id, 0, item.cellX, item.cellY);
return true;
} else {
return false;
@@ -449,6 +456,21 @@
}
public void onDropCompleted(View target, DragObject d, boolean success) {
+ if (!success) {
+ if (d.dragView != null) {
+ if (target instanceof CellLayout) {
+ // TODO: we should animate the item back to the folder in this case
+ }
+ }
+ mCurrentDragInfo = null;
+ mItemsInvalidated = true;
+ mInfo.itemsChanged();
+ } else {
+ if (target != this) {
+ mInfo.remove(mCurrentDragInfo);
+ mCurrentDragInfo = null;
+ }
+ }
}
public boolean isDropEnabled() {
@@ -580,6 +602,8 @@
findAndSetEmptyCells(item);
}
createAndAddShortcut(item);
+ LauncherModel.addOrMoveItemInDatabase(
+ mLauncher, item, mInfo.id, 0, item.cellX, item.cellY);
}
public int getItemCount() {
@@ -608,14 +632,24 @@
}
}
+ public void onItemsChanged() {
+ }
+
public ArrayList<View> getItemsInReadingOrder() {
+ return getItemsInReadingOrder(true);
+ }
+
+ public ArrayList<View> getItemsInReadingOrder(boolean includeCurrentDragItem) {
if (mItemsInvalidated) {
mItemsInReadingOrder.clear();
for (int j = 0; j < mContent.getCountY(); j++) {
for (int i = 0; i < mContent.getCountX(); i++) {
View v = mContent.getChildAt(i, j);
if (v != null) {
- mItemsInReadingOrder.add(v);
+ ShortcutInfo info = (ShortcutInfo) v.getTag();
+ if (info != mCurrentDragInfo || includeCurrentDragItem) {
+ mItemsInReadingOrder.add(v);
+ }
}
}
}