Skip to content

Commit e739143

Browse files
Ziqi Chenfacebook-github-bot
authored andcommitted
added in the three roles: search, adjustable, link that require localization
Summary: Added the android functionality for those three roles: search, adjustable, and link. Until React Native internal framework ports internationalization and localization of strings, I'll handle localization by allowing an extra prop to be passed in that can override talkback's description in another language if needed. Reviewed By: blavalla Differential Revision: D8807692 fbshipit-source-id: b51877d187cb6cb663d65d6b4d072e6dc52a2d03
1 parent d0b86ec commit e739143

File tree

1 file changed

+24
-26
lines changed

1 file changed

+24
-26
lines changed

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

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@ public class AccessibilityRoleUtil {
3131
public enum AccessibilityRole {
3232
NONE(null),
3333
BUTTON("android.widget.Button"),
34+
LINK("android.widget.Button"),
35+
SEARCH("android.widget.EditText"),
3436
IMAGE("android.widget.ImageView"),
35-
KEYBOARD_KEY("android.inputmethodservice.Keyboard$Key"),
36-
TEXT("android.widget.ViewGroup");
37+
KEYBOARDKEY("android.inputmethodservice.Keyboard$Key"),
38+
TEXT("android.widget.ViewGroup"),
39+
ADJUSTABLE("android.widget.SeekBar");
3740

3841
@Nullable private final String mValue;
3942

@@ -79,38 +82,33 @@ public void onInitializeAccessibilityNodeInfo(
7982

8083
public static void setRole(AccessibilityNodeInfoCompat nodeInfo, final AccessibilityRole role) {
8184
nodeInfo.setClassName(role.getValue());
85+
if (role.equals(AccessibilityRole.LINK)) {
86+
nodeInfo.setRoleDescription("Link");
87+
}
88+
if (role.equals(AccessibilityRole.SEARCH)) {
89+
nodeInfo.setRoleDescription("Search Field");
90+
}
91+
if (role.equals(AccessibilityRole.IMAGE)) {
92+
nodeInfo.setRoleDescription("Image");
93+
}
94+
if (role.equals(AccessibilityRole.ADJUSTABLE)) {
95+
nodeInfo.setRoleDescription("Adjustable");
96+
}
8297
}
83-
98+
8499
/**
85100
* Variables and methods for setting accessibilityRole on view properties.
86101
*/
87-
private static final String NONE = "none";
88-
private static final String BUTTON = "button";
89-
private static final String IMAGE = "image";
90-
private static final String KEYBOARDKEY = "keyboardkey";
91-
private static final String TEXT = "text";
92-
93102
public static void updateAccessibilityRole(View view, String role) {
94103
if (role == null) {
95104
view.setAccessibilityDelegate(null);
96105
}
97-
switch (role) {
98-
case NONE:
99-
break;
100-
case BUTTON:
101-
setRole(view, AccessibilityRoleUtil.AccessibilityRole.BUTTON);
102-
break;
103-
case IMAGE:
104-
setRole(view, AccessibilityRoleUtil.AccessibilityRole.IMAGE);
105-
break;
106-
case KEYBOARDKEY:
107-
setRole(view, AccessibilityRoleUtil.AccessibilityRole.KEYBOARD_KEY);
108-
break;
109-
case TEXT:
110-
setRole(view, AccessibilityRoleUtil.AccessibilityRole.TEXT);
111-
break;
112-
default:
113-
view.setAccessibilityDelegate(null);
106+
try {
107+
setRole(view, AccessibilityRole.valueOf(role.toUpperCase()));
108+
} catch (NullPointerException e) {
109+
view.setAccessibilityDelegate(null);
110+
} catch (IllegalArgumentException e) {
111+
view.setAccessibilityDelegate(null);
114112
}
115113
}
116114
}

0 commit comments

Comments
 (0)