Skip to content

Commit 8cc94ff

Browse files
committed
Rebuild the content description when accessibilityValue is removed on Android
1 parent ed15270 commit 8cc94ff

2 files changed

Lines changed: 29 additions & 12 deletions

File tree

‎packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java‎

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -489,9 +489,8 @@ private void updateViewContentDescription(@NonNull T view) {
489489
contentDescription.add(text.asString());
490490
}
491491
}
492-
if (!contentDescription.isEmpty()) {
493-
view.setContentDescription(TextUtils.join(", ", contentDescription));
494-
}
492+
view.setContentDescription(
493+
contentDescription.isEmpty() ? null : TextUtils.join(", ", contentDescription));
495494
}
496495

497496
@ReactProp(name = ViewProps.ACCESSIBILITY_ACTIONS)
@@ -505,15 +504,8 @@ public void setAccessibilityActions(T view, ReadableArray accessibilityActions)
505504

506505
@ReactProp(name = ViewProps.ACCESSIBILITY_VALUE)
507506
public void setAccessibilityValue(T view, ReadableMap accessibilityValue) {
508-
if (accessibilityValue == null) {
509-
view.setTag(R.id.accessibility_value, null);
510-
view.setContentDescription(null);
511-
} else {
512-
view.setTag(R.id.accessibility_value, accessibilityValue);
513-
if (accessibilityValue.hasKey("text")) {
514-
updateViewContentDescription(view);
515-
}
516-
}
507+
view.setTag(R.id.accessibility_value, accessibilityValue);
508+
updateViewContentDescription(view);
517509
}
518510

519511
@ReactProp(name = ViewProps.IMPORTANT_FOR_ACCESSIBILITY)

‎packages/react-native/ReactAndroid/src/test/java/com/facebook/react/uimanager/BaseViewManagerTest.kt‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,31 @@ class BaseViewManagerTest {
127127
Assertions.assertThat(view.isEnabled).isFalse()
128128
}
129129

130+
@Test
131+
fun testAccessibilityValueWithoutTextRemovesThePreviousText() {
132+
viewManager.setAccessibilityLabel(view, "Country")
133+
viewManager.setAccessibilityValue(view, JavaOnlyMap.of("text", "Ukraine"))
134+
Assertions.assertThat(view.contentDescription).isEqualTo("Country, Ukraine")
135+
136+
viewManager.setAccessibilityValue(view, JavaOnlyMap())
137+
Assertions.assertThat(view.contentDescription).isEqualTo("Country")
138+
}
139+
140+
@Test
141+
fun testAccessibilityValueNullKeepsTheLabel() {
142+
viewManager.setAccessibilityLabel(view, "Country")
143+
viewManager.setAccessibilityValue(view, JavaOnlyMap.of("text", "Ukraine"))
144+
viewManager.setAccessibilityValue(view, null)
145+
Assertions.assertThat(view.contentDescription).isEqualTo("Country")
146+
}
147+
148+
@Test
149+
fun testAccessibilityValueNullClearsAValueOnlyDescription() {
150+
viewManager.setAccessibilityValue(view, JavaOnlyMap.of("text", "Ukraine"))
151+
viewManager.setAccessibilityValue(view, null)
152+
Assertions.assertThat(view.contentDescription).isNull()
153+
}
154+
130155
@Test
131156
fun testRoleList() {
132157
viewManager.setRole(view, "list")

0 commit comments

Comments
 (0)