Completing fix for issue 5052078, folder items no longer lost
Change-Id: I9d9cc4658122816e2a60de2e12da65f3fe42bc5c
diff --git a/src/com/android/launcher2/Folder.java b/src/com/android/launcher2/Folder.java
index 780d0ed..652c8b0 100644
--- a/src/com/android/launcher2/Folder.java
+++ b/src/com/android/launcher2/Folder.java
@@ -91,7 +91,6 @@
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 @@
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 @@
mContent.removeView(mCurrentDragView);
mInfo.remove(mCurrentDragInfo);
+ mDragInProgress = true;
+ mItemAddedBackToSelf = false;
}
return true;
}
@@ -660,20 +661,38 @@
}
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 @@
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);
}