RN: Announce "unselected" Accessibility State (Android)

Summary:
Changes React Native so that when `accessibilityState` is used to change a view from `selected: true` to `selected: false`, the change in state is announced.

This is how `checked` works; it is unclear why Android does not do this for `selected`, too.

Changelog:
[Android][Added] - TalkBack now announces "unselected" when changing `accessibilityState.selected` to false.

Reviewed By: blavalla

Differential Revision: D27449293

fbshipit-source-id: a6d77b55d63655973ad93c4d5e3743742501f378
This commit is contained in:
Tim Yung 2021-04-05 17:44:02 -07:00 коммит произвёл Facebook GitHub Bot
Родитель d831134d51
Коммит 73bc96ecf9
2 изменённых файлов: 15 добавлений и 1 удалений

Просмотреть файл

@ -167,7 +167,17 @@ public abstract class BaseViewManager<T extends View, C extends LayoutShadowNode
return;
}
if (accessibilityState.hasKey("selected")) {
view.setSelected(accessibilityState.getBoolean("selected"));
boolean prevSelected = view.isSelected();
boolean nextSelected = accessibilityState.getBoolean("selected");
view.setSelected(nextSelected);
// For some reason, Android does not announce "unselected" when state changes.
// This is inconsistent with other platforms, but also with the "checked" state.
// So manually announce this.
if (view.isAccessibilityFocused() && prevSelected && !nextSelected) {
view.announceForAccessibility(
view.getContext().getString(R.string.state_unselected_description));
}
} else {
view.setSelected(false);
}

Просмотреть файл

@ -92,6 +92,10 @@
name="state_collapsed_description"
translatable="false"
>collapsed</string>
<string
name="state_unselected_description"
translatable="false"
>unselected</string>
<string
name="state_on_description"
translatable="false"