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

Commit a3c9fb12 authored by Winson Chung's avatar Winson Chung Committed by Android (Google) Code Review
Browse files

Merge "Requiring key chord to delete icons and folders on the workspace" into...

Merge "Requiring key chord to delete icons and folders on the workspace" into ub-launcher3-burnaby-polish
parents 77f67072 fa56b3f2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -25,5 +25,5 @@
    android:textSize="14sp"
    android:textColor="@color/launcher_accent_color"
    android:textAllCaps="true"
    android:focusable="false"
    android:focusable="true"
    android:background="@drawable/all_apps_search_market_bg" />
+4 −2
Original line number Diff line number Diff line
@@ -70,8 +70,10 @@ public class DeleteDropTarget extends ButtonDropTarget {
     * @return true if the item was removed.
     */
    public static boolean removeWorkspaceOrFolderItem(Launcher launcher, ItemInfo item, View view) {
        // Remove the item from launcher and the db
        launcher.removeItem(view, item, true /* deleteFromDb */);
        // Remove the item from launcher and the db, we can ignore the containerInfo in this call
        // because we already remove the drag view from the folder (if the drag originated from
        // a folder) in Folder.beginDrag()
        launcher.removeItem(view, null, item, true /* deleteFromDb */);
        launcher.getWorkspace().stripEmptyScreens();
        return true;
    }
+37 −9
Original line number Diff line number Diff line
@@ -72,7 +72,6 @@ public class FocusHelper {
                        KeyEvent.keyCodeToString(keyCode)));
            }


            if (!(v.getParent() instanceof ShortcutAndWidgetContainer)) {
                if (LauncherAppState.isDogfoodBuild()) {
                    throw new IllegalStateException("Parent of the focused item is not supported.");
@@ -195,10 +194,11 @@ public class FocusHelper {
        }

        // Initialize the variables.
        final Workspace workspace = (Workspace) v.getRootView().findViewById(R.id.workspace);
        final ShortcutAndWidgetContainer hotseatParent = (ShortcutAndWidgetContainer) v.getParent();
        final CellLayout hotseatLayout = (CellLayout) hotseatParent.getParent();

        Workspace workspace = (Workspace) v.getRootView().findViewById(R.id.workspace);
        final ItemInfo itemInfo = (ItemInfo) v.getTag();
        int pageIndex = workspace.getNextPage();
        int pageCount = workspace.getChildCount();
        int countX = -1;
@@ -240,9 +240,14 @@ public class FocusHelper {
        } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT &&
                profile.isVerticalBarLayout()) {
            keyCode = KeyEvent.KEYCODE_PAGE_DOWN;
        } else if (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) {
            ItemInfo info = (ItemInfo) v.getTag();
            launcher.removeItem(v, info, true /* deleteFromDb */);
        } else if (isUninstallKeyChord(e)) {
            matrix = FocusLogic.createSparseMatrix(iconLayout);
            if (UninstallDropTarget.supportsDrop(launcher, itemInfo)) {
                UninstallDropTarget.startUninstallActivity(launcher, itemInfo);
            }
        } else if (isDeleteKeyChord(e)) {
            matrix = FocusLogic.createSparseMatrix(iconLayout);
            launcher.removeItem(v, null, itemInfo, true /* deleteFromDb */);
        } else {
            // For other KEYCODE_DPAD_LEFT and KEYCODE_DPAD_RIGHT navigation, do not use the
            // matrix extended with hotseat.
@@ -304,6 +309,7 @@ public class FocusHelper {
        final ViewGroup tabs = (ViewGroup) dragLayer.findViewById(R.id.search_drop_target_bar);
        final Hotseat hotseat = (Hotseat) dragLayer.findViewById(R.id.hotseat);

        final ItemInfo itemInfo = (ItemInfo) v.getTag();
        final int iconIndex = parent.indexOfChild(v);
        final int pageIndex = workspace.indexOfChild(iconLayout);
        final int pageCount = workspace.getChildCount();
@@ -328,10 +334,14 @@ public class FocusHelper {
                    profile.inv.hotseatAllAppsRank,
                    !hotseat.hasIcons() /* ignore all apps icon, unless there are no other icons */);
            countX = countX + 1;
        } else if (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) {
            ItemInfo info = (ItemInfo) v.getTag();
            launcher.removeItem(v, info, true /* deleteFromDb */);
            return consume;
        } else if (isUninstallKeyChord(e)) {
            matrix = FocusLogic.createSparseMatrix(iconLayout);
            if (UninstallDropTarget.supportsDrop(launcher, itemInfo)) {
                UninstallDropTarget.startUninstallActivity(launcher, itemInfo);
            }
        } else if (isDeleteKeyChord(e)) {
            matrix = FocusLogic.createSparseMatrix(iconLayout);
            launcher.removeItem(v, null, itemInfo, true /* deleteFromDb */);
        } else {
            matrix = FocusLogic.createSparseMatrix(iconLayout);
        }
@@ -461,4 +471,22 @@ public class FocusHelper {
                break;
        }
    }

    /**
     * Returns whether the key event represents a valid uninstall key chord.
     */
    private static boolean isUninstallKeyChord(KeyEvent event) {
        int keyCode = event.getKeyCode();
        return (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) &&
                event.hasModifiers(KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON);
    }

    /**
     * Returns whether the key event represents a valid delete key chord.
     */
    private static boolean isDeleteKeyChord(KeyEvent event) {
        int keyCode = event.getKeyCode();
        return (keyCode == KeyEvent.KEYCODE_DEL || keyCode == KeyEvent.KEYCODE_FORWARD_DEL) &&
                event.hasModifiers(KeyEvent.META_CTRL_ON);
    }
}
+16 −13
Original line number Diff line number Diff line
@@ -1113,26 +1113,29 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
            public void run() {
                CellLayout cellLayout = mLauncher.getCellLayout(mInfo.container, mInfo.screenId);

                View child = null;
                // Move the item from the folder to the workspace, in the position of the folder
                if (getItemCount() == 1) {
                    ShortcutInfo finalItem = mInfo.contents.get(0);
                    child = 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 */);
                    mLauncher.removeItem(mFolderIcon, null, 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.
                if (child != null) {
                    mLauncher.getWorkspace().addInScreenFromBind(child, mInfo.container, mInfo.screenId,
                            mInfo.cellX, mInfo.cellY, mInfo.spanX, mInfo.spanY);

                    // Focus the newly created child
                    child.requestFocus();
                }
            }
        };
+14 −5
Original line number Diff line number Diff line
@@ -2390,13 +2390,22 @@ public class Launcher extends Activity
    }

    /**
     * Unbinds the view for the specified item, and removes the item and all its children items
     * from the database.  For folders, this incl udes the folder contents.  AppWidgets will also
     * have their widget ids deleted.
     * Unbinds the view for the specified item, and removes the item and all its children.
     *
     * @param v the view being removed.
     * @param containerInfo the {@link FolderInfo} container of this view (can be null).
     * @param itemInfo the {@link ItemInfo} for this view.
     * @param deleteFromDb whether or not to delete this item from the db.
     */
    public boolean removeItem(View v, ItemInfo itemInfo, boolean deleteFromDb) {
    public boolean removeItem(View v, FolderInfo containerInfo, ItemInfo itemInfo,
            boolean deleteFromDb) {
        if (itemInfo instanceof ShortcutInfo) {
            // Remove the shortcut from the folder before removing it from launcher
            if (containerInfo != null) {
                containerInfo.remove((ShortcutInfo) itemInfo);
            } else {
                mWorkspace.removeWorkspaceItem(v);
            }
            if (deleteFromDb) {
                LauncherModel.deleteItemFromDatabase(this, itemInfo);
            }
Loading