diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java index b2e8fec7833..bef69e2102f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java @@ -489,9 +489,8 @@ private void updateViewContentDescription(@NonNull T view) { contentDescription.add(text.asString()); } } - if (!contentDescription.isEmpty()) { - view.setContentDescription(TextUtils.join(", ", contentDescription)); - } + view.setContentDescription( + contentDescription.isEmpty() ? null : TextUtils.join(", ", contentDescription)); } @ReactProp(name = ViewProps.ACCESSIBILITY_ACTIONS) @@ -505,15 +504,8 @@ public void setAccessibilityActions(T view, ReadableArray accessibilityActions) @ReactProp(name = ViewProps.ACCESSIBILITY_VALUE) public void setAccessibilityValue(T view, ReadableMap accessibilityValue) { - if (accessibilityValue == null) { - view.setTag(R.id.accessibility_value, null); - view.setContentDescription(null); - } else { - view.setTag(R.id.accessibility_value, accessibilityValue); - if (accessibilityValue.hasKey("text")) { - updateViewContentDescription(view); - } - } + view.setTag(R.id.accessibility_value, accessibilityValue); + updateViewContentDescription(view); } @ReactProp(name = ViewProps.IMPORTANT_FOR_ACCESSIBILITY) diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt index 8e089c9d3de..666aa2bd71e 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt @@ -127,6 +127,31 @@ class BaseViewManagerTest { Assertions.assertThat(view.isEnabled).isFalse() } + @Test + fun testAccessibilityValueWithoutTextRemovesThePreviousText() { + viewManager.setAccessibilityLabel(view, "Country") + viewManager.setAccessibilityValue(view, JavaOnlyMap.of("text", "Ukraine")) + Assertions.assertThat(view.contentDescription).isEqualTo("Country, Ukraine") + + viewManager.setAccessibilityValue(view, JavaOnlyMap()) + Assertions.assertThat(view.contentDescription).isEqualTo("Country") + } + + @Test + fun testAccessibilityValueNullKeepsTheLabel() { + viewManager.setAccessibilityLabel(view, "Country") + viewManager.setAccessibilityValue(view, JavaOnlyMap.of("text", "Ukraine")) + viewManager.setAccessibilityValue(view, null) + Assertions.assertThat(view.contentDescription).isEqualTo("Country") + } + + @Test + fun testAccessibilityValueNullClearsAValueOnlyDescription() { + viewManager.setAccessibilityValue(view, JavaOnlyMap.of("text", "Ukraine")) + viewManager.setAccessibilityValue(view, null) + Assertions.assertThat(view.contentDescription).isNull() + } + @Test fun testRoleList() { viewManager.setRole(view, "list")