summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/Folder.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2011-06-09 15:06:52 -0700
committerAdam Cohen <adamcohen@google.com>2011-06-09 15:10:43 -0700
commit76078c4ef35b6e95fb6d8129a32cf52a36625e28 (patch)
tree85eaddc65ac4b5fb7a57c52bbc0b84e3017c35be /src/com/android/launcher2/Folder.java
parentc0dcf597084d00e4c23a7fea5fd0738f6c095a6b (diff)
downloadandroid_packages_apps_Trebuchet-76078c4ef35b6e95fb6d8129a32cf52a36625e28.tar.gz
android_packages_apps_Trebuchet-76078c4ef35b6e95fb6d8129a32cf52a36625e28.tar.bz2
android_packages_apps_Trebuchet-76078c4ef35b6e95fb6d8129a32cf52a36625e28.zip
Fixing up some folder-related drag and drop bugs
Change-Id: I712ffd0ccfc0154a5a9e74e3f585157a86986882
Diffstat (limited to 'src/com/android/launcher2/Folder.java')
-rw-r--r--src/com/android/launcher2/Folder.java44
1 files changed, 39 insertions, 5 deletions
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index 08907c99a..d6be3072c 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -84,6 +84,7 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
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 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
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 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
} 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 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
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 class Folder extends LinearLayout implements DragSource, OnItemLongClickL
}
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 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
findAndSetEmptyCells(item);
}
createAndAddShortcut(item);
+ LauncherModel.addOrMoveItemInDatabase(
+ mLauncher, item, mInfo.id, 0, item.cellX, item.cellY);
}
public int getItemCount() {
@@ -608,14 +632,24 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
}
}
+ 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);
+ }
}
}
}