mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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:
committed by
Facebook GitHub Bot
parent
d831134d51
commit
73bc96ecf9
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user