Hybrid Hotseat a11y
- speak meaningful accessibility label for predicted items
- disable accessibility focus for on-boarding preview items
- add PIN as an accessibility action
- remove move and remove actions for prediction icons
Bug:152376193
Bug:152359303
Bug:152374583
Bug:152357657
Bug:152268303
Bug:152379490
Change-Id: I40fe0ef6329cd5b1d9215ac5fa1716f15db89ac8
diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java
index 423f2bb..6f0ebd2 100644
--- a/src/com/android/launcher3/DeleteDropTarget.java
+++ b/src/com/android/launcher3/DeleteDropTarget.java
@@ -67,7 +67,7 @@
public boolean supportsAccessibilityDrop(ItemInfo info, View view) {
if (info instanceof WorkspaceItemInfo) {
// Support the action unless the item is in a context menu.
- return info.screenId >= 0;
+ return canRemove(info);
}
return (info instanceof LauncherAppWidgetInfo)
diff --git a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
index 6f7f8e6..0337fd6 100644
--- a/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
+++ b/src/com/android/launcher3/accessibility/LauncherAccessibilityDelegate.java
@@ -56,6 +56,7 @@
public static final int REMOVE = R.id.action_remove;
public static final int UNINSTALL = R.id.action_uninstall;
public static final int DISMISS_PREDICTION = R.id.action_dismiss_prediction;
+ public static final int PIN_PREDICTION = R.id.action_pin_prediction;
public static final int RECONFIGURE = R.id.action_reconfigure;
protected static final int ADD_TO_WORKSPACE = R.id.action_add_to_workspace;
protected static final int MOVE = R.id.action_move;
@@ -120,6 +121,10 @@
if (!(host.getTag() instanceof ItemInfo)) return;
ItemInfo item = (ItemInfo) host.getTag();
+ if (host instanceof AccessibilityActionHandler) {
+ ((AccessibilityActionHandler) host).addSupportedAccessibilityActions(info);
+ }
+
// If the request came from keyboard, do not add custom shortcuts as that is already
// exposed as a direct shortcut
if (!fromKeyboard && ShortcutUtil.supportsShortcuts(item)) {
@@ -154,7 +159,7 @@
private boolean itemSupportsAccessibleDrag(ItemInfo item) {
if (item instanceof WorkspaceItemInfo) {
// Support the action unless the item is in a context menu.
- return item.screenId >= 0;
+ return item.screenId >= 0 && item.container != Favorites.CONTAINER_HOTSEAT_PREDICTION;
}
return (item instanceof LauncherAppWidgetInfo)
|| (item instanceof FolderInfo);
@@ -185,7 +190,10 @@
return true;
}
}
-
+ if (host instanceof AccessibilityActionHandler
+ && ((AccessibilityActionHandler) host).performAccessibilityAction(action, item)) {
+ return true;
+ }
if (action == MOVE) {
beginAccessibleDrag(host, item);
} else if (action == ADD_TO_WORKSPACE) {
@@ -456,4 +464,20 @@
}
return screenId;
}
+
+ /**
+ * An interface allowing views to handle their own action.
+ */
+ public interface AccessibilityActionHandler {
+
+ /**
+ * performs accessibility action and returns true on success
+ */
+ boolean performAccessibilityAction(int action, ItemInfo itemInfo);
+
+ /**
+ * adds all the accessibility actions that can be handled.
+ */
+ void addSupportedAccessibilityActions(AccessibilityNodeInfo accessibilityNodeInfo);
+ }
}