From d28aab50d77879ec6f4a676dd1e16d97124adc12 Mon Sep 17 00:00:00 2001 From: "Jordan Smith (IGDS)" Date: Tue, 18 Oct 2022 15:52:10 -0700 Subject: [PATCH] Calculate talkback role based on supported paging actions Summary: Google Talkback identifies nodes with supported actions up, down, left and right to be of the role Pager. Reference here: https://github.com/google/talkback/blob/master/utils/src/main/java/com/google/android/accessibility/utils/Role.java#L376-L385 This diff give us the ability to correctly calculate those roles when we come across them in flipper Reviewed By: blavalla Differential Revision: D40449485 fbshipit-source-id: 5a9dfe3f807b7fce8043eaab2695d864f93a1392 --- .../descriptors/utils/AccessibilityRoleUtil.java | 12 ++++++++++++ .../descriptors/utils/AccessibilityUtil.java | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityRoleUtil.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityRoleUtil.java index cfd1273e8..4ad9ce960 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityRoleUtil.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityRoleUtil.java @@ -11,6 +11,7 @@ import android.view.View; import android.view.accessibility.AccessibilityNodeInfo; import androidx.core.view.ViewCompat; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat; import javax.annotation.Nullable; /** @@ -119,6 +120,17 @@ public class AccessibilityRoleUtil { } if (role.equals(AccessibilityRole.NONE)) { + if (AccessibilityUtil.supportsAction( + nodeInfo, AccessibilityActionCompat.ACTION_PAGE_UP.getId()) + || AccessibilityUtil.supportsAction( + nodeInfo, AccessibilityActionCompat.ACTION_PAGE_DOWN.getId()) + || AccessibilityUtil.supportsAction( + nodeInfo, AccessibilityActionCompat.ACTION_PAGE_LEFT.getId()) + || AccessibilityUtil.supportsAction( + nodeInfo, AccessibilityActionCompat.ACTION_PAGE_RIGHT.getId())) { + return AccessibilityRole.PAGER; + } + AccessibilityNodeInfoCompat.CollectionInfoCompat collection = nodeInfo.getCollectionInfo(); if (collection != null) { // RecyclerView will be classified as a list or grid. diff --git a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java index 75bdf6723..ddbb88fb6 100644 --- a/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java +++ b/android/src/main/java/com/facebook/flipper/plugins/inspector/descriptors/utils/AccessibilityUtil.java @@ -211,7 +211,7 @@ public final class AccessibilityUtil { } } - private static boolean supportsAction(AccessibilityNodeInfoCompat node, int action) { + protected static boolean supportsAction(AccessibilityNodeInfoCompat node, int action) { if (node != null) { final int supportedActions = node.getActions();