mirror of
https://github.com/status-im/react-native.git
synced 2025-02-21 13:48:13 +00:00
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
This commit is contained in:
parent
637d74f2a6
commit
d3f2f96f93
@ -67,9 +67,13 @@ public class AccessibilityDelegateUtil {
|
||||
}
|
||||
|
||||
public static void setDelegate(final View view) {
|
||||
final String accessibilityHint = (String) view.getTag(R.id.accessibility_hint);
|
||||
final AccessibilityRole accessibilityRole = (AccessibilityRole) view.getTag(R.id.accessibility_role);
|
||||
// if a view already has an accessibility delegate, replacing it could cause problems,
|
||||
// so leave it alone.
|
||||
if (!ViewCompat.hasAccessibilityDelegate(view)) {
|
||||
if (!ViewCompat.hasAccessibilityDelegate(view) &&
|
||||
accessibilityHint != null &&
|
||||
accessibilityRole != null) {
|
||||
ViewCompat.setAccessibilityDelegate(
|
||||
view,
|
||||
new AccessibilityDelegateCompat() {
|
||||
@ -77,11 +81,6 @@ public class AccessibilityDelegateUtil {
|
||||
public void onInitializeAccessibilityNodeInfo(
|
||||
View host, AccessibilityNodeInfoCompat info) {
|
||||
super.onInitializeAccessibilityNodeInfo(host, info);
|
||||
String accessibilityHint = (String) view.getTag(R.id.accessibility_hint);
|
||||
AccessibilityRole accessibilityRole = (AccessibilityRole) view.getTag(R.id.accessibility_role);
|
||||
if (accessibilityRole == null) {
|
||||
accessibilityRole = AccessibilityRole.NONE;
|
||||
}
|
||||
setRole(info, accessibilityRole, view.getContext());
|
||||
if (!(accessibilityHint == null)) {
|
||||
String contentDescription=(String)info.getContentDescription();
|
||||
@ -103,7 +102,10 @@ public class AccessibilityDelegateUtil {
|
||||
|
||||
//TODO: Eventually support for other languages on talkback
|
||||
|
||||
public static void setRole(AccessibilityNodeInfoCompat nodeInfo, final AccessibilityRole role, final Context context) {
|
||||
public static void setRole(AccessibilityNodeInfoCompat nodeInfo, AccessibilityRole role, final Context context) {
|
||||
if (role == null) {
|
||||
role = AccessibilityRole.NONE;
|
||||
}
|
||||
nodeInfo.setClassName(role.getValue());
|
||||
if (Locale.getDefault().getLanguage().equals(new Locale("en").getLanguage())) {
|
||||
if (role.equals(AccessibilityRole.LINK)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user