Adding accessibility action to move item out of a folder
Change-Id: If67e3472793d6e0913adfbc9d78f64de7f751664
diff --git a/src/com/android/launcher3/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/LauncherAccessibilityDelegate.java
index a527db4..8a9a050 100644
--- a/src/com/android/launcher3/LauncherAccessibilityDelegate.java
+++ b/src/com/android/launcher3/LauncherAccessibilityDelegate.java
@@ -4,6 +4,7 @@
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
+import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
@@ -26,6 +27,7 @@
private static final int UNINSTALL = R.id.action_uninstall;
private static final int ADD_TO_WORKSPACE = R.id.action_add_to_workspace;
private static final int MOVE = R.id.action_move;
+ private static final int MOVE_TO_WORKSPACE = R.id.action_move_to_workspace;
public enum DragType {
ICON,
@@ -58,6 +60,8 @@
launcher.getText(R.string.action_add_to_workspace)));
mActions.put(MOVE, new AccessibilityAction(MOVE,
launcher.getText(R.string.action_move)));
+ mActions.put(MOVE_TO_WORKSPACE, new AccessibilityAction(MOVE_TO_WORKSPACE,
+ launcher.getText(R.string.action_move_to_workspace)));
}
@Override
@@ -80,6 +84,10 @@
|| (item instanceof LauncherAppWidgetInfo)
|| (item instanceof FolderInfo)) {
info.addAction(mActions.get(MOVE));
+
+ if (item.container >= 0) {
+ info.addAction(mActions.get(MOVE_TO_WORKSPACE));
+ }
} if ((item instanceof AppInfo) || (item instanceof PendingAddItemInfo)) {
info.addAction(mActions.get(ADD_TO_WORKSPACE));
}
@@ -135,6 +143,30 @@
}
});
return true;
+ } else if (action == MOVE_TO_WORKSPACE) {
+ Folder folder = mLauncher.getWorkspace().getOpenFolder();
+ mLauncher.closeFolder(folder);
+ ShortcutInfo info = (ShortcutInfo) item;
+ folder.getInfo().remove(info);
+
+ final int[] coordinates = new int[2];
+ final long screenId = findSpaceOnWorkspace(item, coordinates);
+ LauncherModel.moveItemInDatabase(mLauncher, info,
+ LauncherSettings.Favorites.CONTAINER_DESKTOP,
+ screenId, coordinates[0], coordinates[1]);
+
+ // Bind the item in next frame so that if a new workspace page was created,
+ // it will get laid out.
+ new Handler().post(new Runnable() {
+
+ @Override
+ public void run() {
+ ArrayList<ItemInfo> itemList = new ArrayList<>();
+ itemList.add(item);
+ mLauncher.bindItems(itemList, 0, itemList.size(), true);
+ announceConfirmation(R.string.item_moved);
+ }
+ });
}
return false;
}