LauncherAccessibilityDelegate.java revision 71b5c0b988a64b3a0613ded5403749bc537ee8a5
171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalpackage com.android.launcher3; 271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.annotation.TargetApi; 471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.os.Build; 571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.os.Bundle; 671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.util.SparseArray; 771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.View; 871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.View.AccessibilityDelegate; 971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.accessibility.AccessibilityNodeInfo; 1071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; 1171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 1271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport com.android.launcher3.LauncherModel.ScreenPosProvider; 1371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 1471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport java.util.ArrayList; 1571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 1671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal@TargetApi(Build.VERSION_CODES.LOLLIPOP) 1771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalpublic class LauncherAccessibilityDelegate extends AccessibilityDelegate { 1871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 1971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int REMOVE = R.id.action_remove; 2071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int INFO = R.id.action_info; 2171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int UNINSTALL = R.id.action_uninstall; 2271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int ADD_TO_WORKSPACE = R.id.action_add_to_workspace; 2371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 2471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal private final SparseArray<AccessibilityAction> mActions = 2571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal new SparseArray<AccessibilityAction>(); 2671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal private final Launcher mLauncher; 2771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 2871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public LauncherAccessibilityDelegate(Launcher launcher) { 2971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher = launcher; 3071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 3171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(REMOVE, new AccessibilityAction(REMOVE, 3271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.delete_target_label))); 3371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(INFO, new AccessibilityAction(INFO, 3471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.info_target_label))); 3571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(UNINSTALL, new AccessibilityAction(UNINSTALL, 3671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.delete_target_uninstall_label))); 3771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(ADD_TO_WORKSPACE, new AccessibilityAction(ADD_TO_WORKSPACE, 3871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.action_add_to_workspace))); 3971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 4071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 4171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 4271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { 4371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal super.onInitializeAccessibilityNodeInfo(host, info); 4471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if (!(host.getTag() instanceof ItemInfo)) return; 4571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal ItemInfo item = (ItemInfo) host.getTag(); 4671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 4771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if ((item instanceof ShortcutInfo) 4871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal || (item instanceof LauncherAppWidgetInfo) 4971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal || (item instanceof FolderInfo)) { 5071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal // Workspace shortcut / widget 5171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal info.addAction(mActions.get(REMOVE)); 5271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if ((item instanceof AppInfo) || (item instanceof PendingAddItemInfo)) { 5371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal // App or Widget from customization tray 5471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if (item instanceof AppInfo) { 5571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal info.addAction(mActions.get(UNINSTALL)); 5671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 5771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal info.addAction(mActions.get(INFO)); 5871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal info.addAction(mActions.get(ADD_TO_WORKSPACE)); 5971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 6071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 6171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 6271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 6371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public boolean performAccessibilityAction(View host, int action, Bundle args) { 6471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if ((host.getTag() instanceof ItemInfo) 6571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal && performAction(host, (ItemInfo) host.getTag(), action)) { 6671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 6771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 6871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return super.performAccessibilityAction(host, action, args); 6971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 7071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 7171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public boolean performAction(View host, ItemInfo item, int action) { 7271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if (action == REMOVE) { 7371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return DeleteDropTarget.removeWorkspaceOrFolderItem(mLauncher, item, host); 7471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (action == INFO) { 7571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal InfoDropTarget.startDetailsActivityForInfo(item, mLauncher); 7671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 7771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (action == UNINSTALL) { 7871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal DeleteDropTarget.uninstallApp(mLauncher, (AppInfo) item); 7971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 8071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (action == ADD_TO_WORKSPACE) { 8171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal final int preferredPage = mLauncher.getWorkspace().getCurrentPage(); 8271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal final ScreenPosProvider screenProvider = new ScreenPosProvider() { 8371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 8471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 8571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public int getScreenIndex(ArrayList<Long> screenIDs) { 8671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return preferredPage; 8771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 8871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal }; 8971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if (item instanceof AppInfo) { 9071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal final ArrayList<ItemInfo> addShortcuts = new ArrayList<ItemInfo>(); 9171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal addShortcuts.add(((AppInfo) item).makeShortcut()); 9271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher.showWorkspace(true, new Runnable() { 9371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 9471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 9571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public void run() { 9671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher.getModel().addAndBindAddedWorkspaceApps( 9771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher, addShortcuts, screenProvider, 0, true); 9871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 9971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal }); 10071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 10171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (item instanceof PendingAddItemInfo) { 10271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher.getModel().addAndBindPendingItem( 10371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher, (PendingAddItemInfo) item, screenProvider, 0); 10471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 10571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 10671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 10771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return false; 10871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 10971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal} 110