Skip to content

Commit d3f2f96

Browse files
ayc1facebook-github-bot
authored andcommitted
Fix default accessibility delegate
Summary: The current accessibility implementation tries to generalize every view's accessibility node info by setting an accessibility delegate on every view -- regardless of whether or not any accessibility properties are set. This delegate however doesn't correctly set the appropriate accessibility node fields for every view. For example, ScrollViews needs AccessibilityNode.setScrollable(true) set, but the generic delegate does not account for this. For now let's avoid unnecessarily setting an accessibility delegate on views that don't have any accessibility props set, which will likely fix the majority of these issues. Reviewed By: mdvacca Differential Revision: D10138128 fbshipit-source-id: b999b41e7256e3dce94cd70e9b944979d52f74fd
1 parent 637d74f commit d3f2f96

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

ReactAndroid/src/main/java/com/facebook/react/uimanager/AccessibilityDelegateUtil.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,21 +67,20 @@ private AccessibilityDelegateUtil() {
6767
}
6868

6969
public static void setDelegate(final View view) {
70+
final String accessibilityHint = (String) view.getTag(R.id.accessibility_hint);
71+
final AccessibilityRole accessibilityRole = (AccessibilityRole) view.getTag(R.id.accessibility_role);
7072
// if a view already has an accessibility delegate, replacing it could cause problems,
7173
// so leave it alone.
72-
if (!ViewCompat.hasAccessibilityDelegate(view)) {
74+
if (!ViewCompat.hasAccessibilityDelegate(view) &&
75+
accessibilityHint != null &&
76+
accessibilityRole != null) {
7377
ViewCompat.setAccessibilityDelegate(
7478
view,
7579
new AccessibilityDelegateCompat() {
7680
@Override
7781
public void onInitializeAccessibilityNodeInfo(
7882
View host, AccessibilityNodeInfoCompat info) {
7983
super.onInitializeAccessibilityNodeInfo(host, info);
80-
String accessibilityHint = (String) view.getTag(R.id.accessibility_hint);
81-
AccessibilityRole accessibilityRole = (AccessibilityRole) view.getTag(R.id.accessibility_role);
82-
if (accessibilityRole == null) {
83-
accessibilityRole = AccessibilityRole.NONE;
84-
}
8584
setRole(info, accessibilityRole, view.getContext());
8685
if (!(accessibilityHint == null)) {
8786
String contentDescription=(String)info.getContentDescription();
@@ -103,7 +102,10 @@ public void onInitializeAccessibilityNodeInfo(
103102

104103
//TODO: Eventually support for other languages on talkback
105104

106-
public static void setRole(AccessibilityNodeInfoCompat nodeInfo, final AccessibilityRole role, final Context context) {
105+
public static void setRole(AccessibilityNodeInfoCompat nodeInfo, AccessibilityRole role, final Context context) {
106+
if (role == null) {
107+
role = AccessibilityRole.NONE;
108+
}
107109
nodeInfo.setClassName(role.getValue());
108110
if (Locale.getDefault().getLanguage().equals(new Locale("en").getLanguage())) {
109111
if (role.equals(AccessibilityRole.LINK)) {

0 commit comments

Comments
 (0)