From 0b70b38547685b6b978cacedf3ff36723d79a594 Mon Sep 17 00:00:00 2001 From: fabriziobertoglio1987 Date: Thu, 25 Aug 2022 15:37:29 -0700 Subject: [PATCH] Re-implement accessibilityHint on Android to use AccessibililltyNodeInfo#setToolTipText instead of contentDescription (#34427) Summary: https://github.com/facebook/react-native/issues/31056#issuecomment-786349025 >Re-implement accessibilityHint on Android so that rather that concatenate into the contentDescription, it sets the toolTipText property on the AccessibilityNodeInfo (not on the view). This is the closest analog to iOS's hint that Android has, as the text is announced after the contentDescription rather than part of it. It will will not adhere to users preferences on whether they want hints disabled or not, and still has no pause before it like real hints have, but it's far closer than using the contentDescription directly. fixes https://github.com/facebook/react-native/issues/31056 ## Changelog [Android] [Fixed] - Re-implement accessibilityHint on Android to use AccessibililltyNodeInfo#setToolTipText instead of contentDescription Pull Request resolved: https://github.com/facebook/react-native/pull/34427 Test Plan: https://user-images.githubusercontent.com/24992535/184837154-5c65dbf1-1031-4d56-ac1e-066af7e08edc.mp4 Reviewed By: christophpurrer Differential Revision: D38982158 Pulled By: cipolleschi fbshipit-source-id: 7a616e6df9f83bd21ca02cc26b5918986a1d64f8 --- .../java/com/facebook/react/uimanager/BaseViewManager.java | 4 ---- .../facebook/react/uimanager/ReactAccessibilityDelegate.java | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java index 8f1239d7456..293ff055d07 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java @@ -317,7 +317,6 @@ public abstract class BaseViewManager contentDescription = new ArrayList<>(); final ReadableMap accessibilityValue = (ReadableMap) view.getTag(R.id.accessibility_value); if (accessibilityLabel != null) { @@ -352,9 +351,6 @@ public abstract class BaseViewManager 0) { view.setContentDescription(TextUtils.join(", ", contentDescription)); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java index 3e6d1b36b08..1c635887924 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java @@ -225,10 +225,15 @@ public class ReactAccessibilityDelegate extends ExploreByTouchHelper { super.onInitializeAccessibilityNodeInfo(host, info); final AccessibilityRole accessibilityRole = (AccessibilityRole) host.getTag(R.id.accessibility_role); + final String accessibilityHint = (String) host.getTag(R.id.accessibility_hint); if (accessibilityRole != null) { setRole(info, accessibilityRole, host.getContext()); } + if (accessibilityHint != null) { + info.setTooltipText(accessibilityHint); + } + final Object accessibilityLabelledBy = host.getTag(R.id.labelled_by); if (accessibilityLabelledBy != null) { mAccessibilityLabelledBy =