diff options
author | Adam Cohen <adamcohen@google.com> | 2011-07-29 14:07:04 -0700 |
---|---|---|
committer | Adam Cohen <adamcohen@google.com> | 2011-07-29 15:17:32 -0700 |
commit | 67bd9ccf856840856944815a382e4bbb0e71e949 (patch) | |
tree | 1aa9bdd9588499ea3ca26aa75495454a5e4069a3 /src/com/android/launcher2/Folder.java | |
parent | fda77c1d268a7cdc73fe77de63212d4c3a0b13c8 (diff) | |
download | android_packages_apps_Trebuchet-67bd9ccf856840856944815a382e4bbb0e71e949.tar.gz android_packages_apps_Trebuchet-67bd9ccf856840856944815a382e4bbb0e71e949.tar.bz2 android_packages_apps_Trebuchet-67bd9ccf856840856944815a382e4bbb0e71e949.zip |
Completing fix for issue 5052078, folder items no longer lost
Change-Id: I9d9cc4658122816e2a60de2e12da65f3fe42bc5c
Diffstat (limited to 'src/com/android/launcher2/Folder.java')
-rw-r--r-- | src/com/android/launcher2/Folder.java | 57 |
1 files changed, 40 insertions, 17 deletions
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java index 780d0ed26..652c8b03d 100644 --- a/src/com/android/launcher2/Folder.java +++ b/src/com/android/launcher2/Folder.java @@ -91,7 +91,6 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList private int[] mTargetCell = new int[2]; private int[] mPreviousTargetCell = new int[2]; private int[] mEmptyCell = new int[2]; - private int[] mTempXY = new int[2]; private Alarm mReorderAlarm = new Alarm(); private Alarm mOnExitAlarm = new Alarm(); private TextView mFolderName; @@ -99,10 +98,10 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList private Rect mHitRect = new Rect(); private Rect mTempRect = new Rect(); private boolean mFirstOpen = true; - - // Internal variable to track whether the folder was destroyed due to only a single - // item remaining - private boolean mDestroyed = false; + private boolean mDragInProgress = false; + private boolean mDeleteFolderOnDropCompleted = false; + private boolean mSuppressFolderDeletion = false; + private boolean mItemAddedBackToSelf = false; private boolean mIsEditingName = false; private InputMethodManager mInputMethodManager; @@ -221,6 +220,8 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mContent.removeView(mCurrentDragView); mInfo.remove(mCurrentDragInfo); + mDragInProgress = true; + mItemAddedBackToSelf = false; } return true; } @@ -660,20 +661,38 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList } public void onDropCompleted(View target, DragObject d, boolean success) { + if (success) { + if (mDeleteFolderOnDropCompleted && !mItemAddedBackToSelf) { + replaceFolderWithFinalItem(); + } + } else { + // The drag failed, we need to return the item to the folder + mFolderIcon.onDrop(d); + + // We're going to trigger a "closeFolder" which may occur before this item has + // been added back to the folder -- this could cause the folder to be deleted + if (mOnExitAlarm.alarmPending()) { + mSuppressFolderDeletion = true; + } + } + + if (target != this) { + if (mOnExitAlarm.alarmPending()) { + mOnExitAlarm.cancelAlarm(); + completeDragExit(); + } + } + mDeleteFolderOnDropCompleted = false; + mDragInProgress = false; + mItemAddedBackToSelf = false; mCurrentDragInfo = null; mCurrentDragView = null; mSuppressOnAdd = false; - if (target != this) { - mOnExitAlarm.cancelAlarm(); - completeDragExit(); - } + } - if (!success) { - if (!mDestroyed) { - mFolderIcon.onDrop(d); - } else { - // TODO: if the folder was removed, recreate it - } + public void notifyDrop() { + if (mDragInProgress) { + mItemAddedBackToSelf = true; } } @@ -839,14 +858,18 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList mRearrangeOnClose = false; } if (getItemCount() <= 1) { - replaceFolderWithFinalItem(); + if (!mDragInProgress && !mSuppressFolderDeletion) { + replaceFolderWithFinalItem(); + } else if (mDragInProgress) { + mDeleteFolderOnDropCompleted = true; + } } + mSuppressFolderDeletion = false; } private void replaceFolderWithFinalItem() { ItemInfo finalItem = null; - mDestroyed = true; if (getItemCount() == 1) { finalItem = mInfo.contents.get(0); } |