LauncherAccessibilityDelegate.java revision 1a70cef9884270f2f0a760f079a10fdfb1544c98
171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalpackage com.android.launcher3; 271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.annotation.TargetApi; 4c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohenimport android.graphics.Rect; 571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.os.Build; 671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.os.Bundle; 71a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyalimport android.text.TextUtils; 871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.util.SparseArray; 971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.View; 1071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.View.AccessibilityDelegate; 1171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.accessibility.AccessibilityNodeInfo; 1271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; 1371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 1471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport com.android.launcher3.LauncherModel.ScreenPosProvider; 15091440a9cb9d4f42406631004aa484cbb79214caAdam Cohenimport com.android.launcher3.util.Thunk; 1671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 1771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalimport java.util.ArrayList; 1871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 1971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal@TargetApi(Build.VERSION_CODES.LOLLIPOP) 2071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyalpublic class LauncherAccessibilityDelegate extends AccessibilityDelegate { 2171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 2271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int REMOVE = R.id.action_remove; 2371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int INFO = R.id.action_info; 2471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int UNINSTALL = R.id.action_uninstall; 2571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public static final int ADD_TO_WORKSPACE = R.id.action_add_to_workspace; 26c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen public static final int MOVE = R.id.action_move; 27c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 28c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen enum DragType { 29c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen ICON, 30c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen FOLDER, 31c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen WIDGET 32c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 33c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 34c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen public static class DragInfo { 35c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen DragType dragType; 36c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen ItemInfo info; 37c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen View item; 38c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 39c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 40c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen private DragInfo mDragInfo = null; 4171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 4271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal private final SparseArray<AccessibilityAction> mActions = 4371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal new SparseArray<AccessibilityAction>(); 44091440a9cb9d4f42406631004aa484cbb79214caAdam Cohen @Thunk final Launcher mLauncher; 4571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 4671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public LauncherAccessibilityDelegate(Launcher launcher) { 4771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher = launcher; 4871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 4971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(REMOVE, new AccessibilityAction(REMOVE, 5071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.delete_target_label))); 5171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(INFO, new AccessibilityAction(INFO, 5271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.info_target_label))); 5371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(UNINSTALL, new AccessibilityAction(UNINSTALL, 5471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.delete_target_uninstall_label))); 5571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mActions.put(ADD_TO_WORKSPACE, new AccessibilityAction(ADD_TO_WORKSPACE, 5671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal launcher.getText(R.string.action_add_to_workspace))); 57c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mActions.put(MOVE, new AccessibilityAction(MOVE, 58c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen launcher.getText(R.string.action_move))); 59c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 6071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 6171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 6271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 6371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) { 6471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal super.onInitializeAccessibilityNodeInfo(host, info); 6571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if (!(host.getTag() instanceof ItemInfo)) return; 6671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal ItemInfo item = (ItemInfo) host.getTag(); 6771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 681a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal if (DeleteDropTarget.supportsDrop(item)) { 691a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal info.addAction(mActions.get(REMOVE)); 701a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal } 711a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal if (UninstallDropTarget.supportsDrop(host.getContext(), item)) { 721a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal info.addAction(mActions.get(UNINSTALL)); 731a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal } 741a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal if (InfoDropTarget.supportsDrop(host.getContext(), item)) { 751a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal info.addAction(mActions.get(INFO)); 761a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal } 771a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal 7871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if ((item instanceof ShortcutInfo) 7971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal || (item instanceof LauncherAppWidgetInfo) 8071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal || (item instanceof FolderInfo)) { 81c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen info.addAction(mActions.get(MOVE)); 821a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal } if ((item instanceof AppInfo) || (item instanceof PendingAddItemInfo)) { 8371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal info.addAction(mActions.get(ADD_TO_WORKSPACE)); 8471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 8571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 8671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 8771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 8871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public boolean performAccessibilityAction(View host, int action, Bundle args) { 8971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if ((host.getTag() instanceof ItemInfo) 9071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal && performAction(host, (ItemInfo) host.getTag(), action)) { 9171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 9271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 9371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return super.performAccessibilityAction(host, action, args); 9471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 9571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 9671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public boolean performAction(View host, ItemInfo item, int action) { 9771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if (action == REMOVE) { 98c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen if (DeleteDropTarget.removeWorkspaceOrFolderItem(mLauncher, item, host)) { 991a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal announceConfirmation(R.string.item_removed); 100c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen return true; 101c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 102c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen return false; 10371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (action == INFO) { 10471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal InfoDropTarget.startDetailsActivityForInfo(item, mLauncher); 10571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 10671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (action == UNINSTALL) { 1071a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal return UninstallDropTarget.startUninstallActivity(mLauncher, item); 108c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } else if (action == MOVE) { 109c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen beginAccessibleDrag(host, item); 11071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (action == ADD_TO_WORKSPACE) { 11171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal final int preferredPage = mLauncher.getWorkspace().getCurrentPage(); 11271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal final ScreenPosProvider screenProvider = new ScreenPosProvider() { 11371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal 11471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 11571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public int getScreenIndex(ArrayList<Long> screenIDs) { 11671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return preferredPage; 11771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 11871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal }; 11971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal if (item instanceof AppInfo) { 12071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal final ArrayList<ItemInfo> addShortcuts = new ArrayList<ItemInfo>(); 12171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal addShortcuts.add(((AppInfo) item).makeShortcut()); 12271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher.showWorkspace(true, new Runnable() { 12371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal @Override 12471b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal public void run() { 12518bf8e2ffde3444d53aaa9654da02cdedd0b7cd1Sunny Goyal mLauncher.getModel().addAndBindAddedWorkspaceItems( 12671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher, addShortcuts, screenProvider, 0, true); 127c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen announceConfirmation(R.string.item_added_to_workspace); 12871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 12971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal }); 13071b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 13171b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } else if (item instanceof PendingAddItemInfo) { 13271b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher.getModel().addAndBindPendingItem( 13371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal mLauncher, (PendingAddItemInfo) item, screenProvider, 0); 134c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen announceConfirmation(R.string.item_added_to_workspace); 13571b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return true; 13671b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 13771b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 13871b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal return false; 13971b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal } 140c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 141091440a9cb9d4f42406631004aa484cbb79214caAdam Cohen @Thunk void announceConfirmation(int resId) { 142c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen announceConfirmation(mLauncher.getResources().getString(resId)); 143c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 144c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 145091440a9cb9d4f42406631004aa484cbb79214caAdam Cohen @Thunk void announceConfirmation(String confirmation) { 146c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getDragLayer().announceForAccessibility(confirmation); 147c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 148c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 149c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 150c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen public boolean isInAccessibleDrag() { 151c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen return mDragInfo != null; 152c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 153c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 154c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen public DragInfo getDragInfo() { 155c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen return mDragInfo; 156c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 157c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 1581a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal /** 1591a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal * @param clickedTarget the actual view that was clicked 1601a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal * @param dropLocation relative to {@param clickedTarget}. If provided, its center is used 1611a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal * as the actual drop location otherwise the views center is used. 1621a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal */ 1631a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal public void handleAccessibleDrop(View clickedTarget, Rect dropLocation, 164c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen String confirmation) { 165c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen if (!isInAccessibleDrag()) return; 166c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 167c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen int[] loc = new int[2]; 1681a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal if (dropLocation == null) { 1691a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal loc[0] = clickedTarget.getWidth() / 2; 1701a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal loc[1] = clickedTarget.getHeight() / 2; 1711a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal } else { 1721a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal loc[0] = dropLocation.centerX(); 1731a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal loc[1] = dropLocation.centerY(); 1741a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal } 175c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 1761a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal mLauncher.getDragLayer().getDescendantCoordRelativeToSelf(clickedTarget, loc); 177c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getDragController().completeAccessibleDrag(loc); 178c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 179c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen endAccessibleDrag(); 1801a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal if (!TextUtils.isEmpty(confirmation)) { 1811a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal announceConfirmation(confirmation); 1821a70cef9884270f2f0a760f079a10fdfb1544c98Sunny Goyal } 183c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 184c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 185c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen public void beginAccessibleDrag(View item, ItemInfo info) { 186c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mDragInfo = new DragInfo(); 187c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mDragInfo.info = info; 188c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mDragInfo.item = item; 189c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mDragInfo.dragType = DragType.ICON; 190c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen if (info instanceof FolderInfo) { 191c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mDragInfo.dragType = DragType.FOLDER; 192c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } else if (info instanceof LauncherAppWidgetInfo) { 193c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mDragInfo.dragType = DragType.WIDGET; 194c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 195c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 196c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen CellLayout.CellInfo cellInfo = new CellLayout.CellInfo(item, info); 197c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 198c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen Rect pos = new Rect(); 199c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getDragLayer().getDescendantRectRelativeToSelf(item, pos); 200c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 201c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getDragController().prepareAccessibleDrag(pos.centerX(), pos.centerY()); 202c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getWorkspace().enableAccessibleDrag(true); 203c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getWorkspace().startDrag(cellInfo, true); 204c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 205c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 206c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen public boolean onBackPressed() { 207c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen if (isInAccessibleDrag()) { 208c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen cancelAccessibleDrag(); 209c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen return true; 210c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 211c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen return false; 212c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 213c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 214c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen private void cancelAccessibleDrag() { 215c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getDragController().cancelDrag(); 216c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen endAccessibleDrag(); 217c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 218c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen 219c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen private void endAccessibleDrag() { 220c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mDragInfo = null; 221c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen mLauncher.getWorkspace().enableAccessibleDrag(false); 222c9735cff2e558aa3f3810e49c15ef13049b9429cAdam Cohen } 22371b5c0b988a64b3a0613ded5403749bc537ee8a5Sunny Goyal} 224