Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6febe1f3 authored by Winson's avatar Winson
Browse files

Fixing regression when removing last item from folder.

- The regression caused the folder and all its contents to be removed
  before the new item could be moved to the place of the folder.  In
  addition, in this case, the LauncherModel would get out of sync with 
  the db because we move the last item to the workspace, but don’t 
  remove it from the contents, so deleting the folder would remove the
  item’s mapping in sBgItemIdMap.

Bug: 24620815
Change-Id: I17137f28b0f1617a890488c7a9c5b8a9e8df0e91
parent 95bae9a4
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -1116,31 +1116,37 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
        Runnable onCompleteRunnable = new Runnable() {
            @Override
            public void run() {
                CellLayout cellLayout = mLauncher.getCellLayout(mInfo.container, mInfo.screenId);
                int itemCount = getItemCount();
                if (itemCount <= 1) {
                    View newIcon = null;

                    if (itemCount == 1) {
                        // Move the item from the folder to the workspace, in the position of the
                        // folder
                        CellLayout cellLayout = mLauncher.getCellLayout(mInfo.container,
                                mInfo.screenId);
                        ShortcutInfo finalItem = mInfo.contents.remove(0);
                        newIcon = mLauncher.createShortcut(cellLayout, finalItem);
                        LauncherModel.addOrMoveItemInDatabase(mLauncher, finalItem, mInfo.container,
                                mInfo.screenId, mInfo.cellX, mInfo.cellY);
                    }

                    // Remove the folder
                if (getItemCount() <= 1) {
                    mLauncher.removeItem(mFolderIcon, mInfo, true /* deleteFromDb */);
                    if (mFolderIcon instanceof DropTarget) {
                        mDragController.removeDropTarget((DropTarget) mFolderIcon);
                    }
                }

                // Move the item from the folder to the workspace, in the position of the folder
                if (getItemCount() == 1) {
                    ShortcutInfo finalItem = mInfo.contents.get(0);
                    View child = mLauncher.createShortcut(cellLayout, finalItem);
                    LauncherModel.addOrMoveItemInDatabase(mLauncher, finalItem, mInfo.container,
                            mInfo.screenId, mInfo.cellX, mInfo.cellY);

                    // We add the child after removing the folder to prevent both from existing at
                    // the same time in the CellLayout.  We need to add the new item with addInScreenFromBind()
                    // to ensure that hotseat items are placed correctly.
                    mLauncher.getWorkspace().addInScreenFromBind(child, mInfo.container, mInfo.screenId,
                            mInfo.cellX, mInfo.cellY, mInfo.spanX, mInfo.spanY);
                    if (newIcon != null) {
                        // We add the child after removing the folder to prevent both from existing
                        // at the same time in the CellLayout.  We need to add the new item with
                        // addInScreenFromBind() to ensure that hotseat items are placed correctly.
                        mLauncher.getWorkspace().addInScreenFromBind(newIcon, mInfo.container,
                                mInfo.screenId, mInfo.cellX, mInfo.cellY, mInfo.spanX, mInfo.spanY);
                    }

                    // Focus the newly created child
                    child.requestFocus();
                    newIcon.requestFocus();
                }
            }
        };