diff options
author | Adam Cohen <adamcohen@google.com> | 2011-06-09 15:06:52 -0700 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2011-06-09 15:10:43 -0700 |
commit | 76078c4ef35b6e95fb6d8129a32cf52a36625e28 (patch) | |
tree | 85eaddc65ac4b5fb7a57c52bbc0b84e3017c35be /src/com/android/launcher2/Folder.java | |
parent | c0dcf597084d00e4c23a7fea5fd0738f6c095a6b (diff) | |
download | android_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.java | 44 |
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); + } } } } |