summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2/Folder.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2011-07-29 14:07:04 -0700
committerAdam Cohen <adamcohen@google.com>2011-07-29 15:17:32 -0700
commit67bd9ccf856840856944815a382e4bbb0e71e949 (patch)
tree1aa9bdd9588499ea3ca26aa75495454a5e4069a3 /src/com/android/launcher2/Folder.java
parentfda77c1d268a7cdc73fe77de63212d4c3a0b13c8 (diff)
downloadandroid_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.java57
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);
}