Folder auto-destroys itself when there is only one item left.
Change-Id: I4ea41e0730e3dc474a518eba0a04c11167b5c1df
This commit is contained in:
@@ -329,7 +329,7 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
|
||||
mItemsInvalidated = true;
|
||||
mInfo.addListener(this);
|
||||
|
||||
if (sDefaultFolderName != mInfo.title) {
|
||||
if (!sDefaultFolderName.contentEquals(mInfo.title)) {
|
||||
mFolderName.setText(mInfo.title);
|
||||
} else {
|
||||
mFolderName.setText("");
|
||||
@@ -784,6 +784,42 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
|
||||
setupContentForNumItems(getItemCount());
|
||||
mRearrangeOnClose = false;
|
||||
}
|
||||
if (getItemCount() <= 1) {
|
||||
replaceFolderWithFinalItem();
|
||||
}
|
||||
}
|
||||
|
||||
private void replaceFolderWithFinalItem() {
|
||||
ItemInfo finalItem = null;
|
||||
|
||||
if (getItemCount() == 1) {
|
||||
finalItem = mInfo.contents.get(0);
|
||||
}
|
||||
|
||||
// Remove the folder completely
|
||||
final CellLayout cellLayout = (CellLayout)
|
||||
mLauncher.getWorkspace().getChildAt(mInfo.screen);
|
||||
cellLayout.removeView(mFolderIcon);
|
||||
if (mFolderIcon instanceof DropTarget) {
|
||||
mDragController.removeDropTarget((DropTarget) mFolderIcon);
|
||||
}
|
||||
mLauncher.removeFolder(mInfo);
|
||||
|
||||
if (finalItem != null) {
|
||||
LauncherModel.addOrMoveItemInDatabase(mLauncher, finalItem,
|
||||
LauncherSettings.Favorites.CONTAINER_DESKTOP, mInfo.screen,
|
||||
mInfo.cellX, mInfo.cellY);
|
||||
}
|
||||
LauncherModel.deleteFolderContentsFromDatabase(mLauncher, mInfo, true);
|
||||
|
||||
// Add the last remaining child to the workspace in place of the folder
|
||||
if (finalItem != null) {
|
||||
View child = mLauncher.createShortcut(R.layout.application, cellLayout,
|
||||
(ShortcutInfo) finalItem);
|
||||
|
||||
mLauncher.getWorkspace().addInScreen(child, mInfo.screen, mInfo.cellX, mInfo.cellY,
|
||||
mInfo.spanX, mInfo.spanY);
|
||||
}
|
||||
}
|
||||
|
||||
public void onDrop(DragObject d) {
|
||||
@@ -833,6 +869,9 @@ public class Folder extends LinearLayout implements DragSource, OnItemLongClickL
|
||||
} else {
|
||||
setupContentForNumItems(getItemCount());
|
||||
}
|
||||
if (getItemCount() <= 1) {
|
||||
replaceFolderWithFinalItem();
|
||||
}
|
||||
}
|
||||
|
||||
public void onItemsChanged() {
|
||||
|
||||
@@ -380,15 +380,33 @@ public class LauncherModel extends BroadcastReceiver {
|
||||
});
|
||||
}
|
||||
|
||||
static void deleteFolderContentsFromDatabase(Context context, final FolderInfo info) {
|
||||
deleteFolderContentsFromDatabase(context, info, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the contents of the specified folder from the database
|
||||
*/
|
||||
static void deleteFolderContentsFromDatabase(Context context, FolderInfo info) {
|
||||
static void deleteFolderContentsFromDatabase(Context context, final FolderInfo info,
|
||||
boolean post) {
|
||||
// TODO: this post flag is temporary to fix an ordering of commands issue. In future,
|
||||
// all db operations will be moved to the worker thread, so this can be discarded at
|
||||
// that time.
|
||||
final ContentResolver cr = context.getContentResolver();
|
||||
|
||||
cr.delete(LauncherSettings.Favorites.getContentUri(info.id, false), null, null);
|
||||
cr.delete(LauncherSettings.Favorites.CONTENT_URI,
|
||||
LauncherSettings.Favorites.CONTAINER + "=" + info.id, null);
|
||||
if (!post) {
|
||||
cr.delete(LauncherSettings.Favorites.getContentUri(info.id, false), null, null);
|
||||
cr.delete(LauncherSettings.Favorites.CONTENT_URI,
|
||||
LauncherSettings.Favorites.CONTAINER + "=" + info.id, null);
|
||||
} else {
|
||||
sWorker.post(new Runnable() {
|
||||
public void run() {
|
||||
cr.delete(LauncherSettings.Favorites.getContentUri(info.id, false), null, null);
|
||||
cr.delete(LauncherSettings.Favorites.CONTENT_URI,
|
||||
LauncherSettings.Favorites.CONTAINER + "=" + info.id, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user