Skip to content

Commit

Permalink
[fabric][a11y] Add role mapping for desktop specific traits
Browse files Browse the repository at this point in the history
Summary:
Paper was rendering text as AXStaticText. This diff updates the `RCTParagraphComponentView` to propagate the same role in Fabric for text.

This change will allow to select UI elements based on the text contents.

Test Plan:
Use the Accessibility Inspector in Zeratul with Fabric enabled. With the changes the text elements are presented in the a11y hierarchy with AXStaticText:
 {F1162808272}

Reviewers: shawndempsey, chpurrer, #rn-desktop

Reviewed By: chpurrer

Differential Revision: https://phabricator.intern.facebook.com/D51736933

Tasks: T170938725
  • Loading branch information
Nick Lefever authored and Saadnajmi committed Nov 21, 2024
1 parent 3d1d583 commit 0a67bd3
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 1 deletion.
56 changes: 55 additions & 1 deletion packages/react-native/React/Fabric/RCTConversions.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,15 @@ inline NSAccessibilityRole RCTUIAccessibilityRoleFromAccessibilityTraits(
{
using AccessibilityTraits = facebook::react::AccessibilityTraits;
if ((accessibilityTraits & AccessibilityTraits::Button) != AccessibilityTraits::None) {
if ((accessibilityTraits & AccessibilityTraits::Bar) != AccessibilityTraits::None) {
return NSAccessibilityToolbarRole;
}
if ((accessibilityTraits & AccessibilityTraits::PopUp) != AccessibilityTraits::None) {
return NSAccessibilityPopUpButtonRole;
}
if ((accessibilityTraits & AccessibilityTraits::Menu) != AccessibilityTraits::None) {
return NSAccessibilityMenuButtonRole;
}
return NSAccessibilityButtonRole;
}
if ((accessibilityTraits & AccessibilityTraits::Link) != AccessibilityTraits::None) {
Expand Down Expand Up @@ -159,7 +168,52 @@ inline NSAccessibilityRole RCTUIAccessibilityRoleFromAccessibilityTraits(
if ((accessibilityTraits & AccessibilityTraits::Switch) != AccessibilityTraits::None) {
return NSAccessibilityCheckBoxRole;
}

if ((accessibilityTraits & AccessibilityTraits::UpdatesFrequently) != AccessibilityTraits::None) {
return NSAccessibilityProgressIndicatorRole;
}
if ((accessibilityTraits & AccessibilityTraits::ComboBox) != AccessibilityTraits::None) {
return NSAccessibilityComboBoxRole;
}
if ((accessibilityTraits & AccessibilityTraits::Menu) != AccessibilityTraits::None) {
if ((accessibilityTraits & AccessibilityTraits::Bar) != AccessibilityTraits::None) {
return NSAccessibilityMenuBarRole;
}
if ((accessibilityTraits & AccessibilityTraits::Item) != AccessibilityTraits::None) {
return NSAccessibilityMenuItemRole;
}
return NSAccessibilityMenuRole;
}
if ((accessibilityTraits & AccessibilityTraits::Radio) != AccessibilityTraits::None) {
if ((accessibilityTraits & AccessibilityTraits::Group) != AccessibilityTraits::None) {
return NSAccessibilityRadioGroupRole;
}
return NSAccessibilityRadioButtonRole;
}
if ((accessibilityTraits & AccessibilityTraits::ScrollBar) != AccessibilityTraits::None) {
return NSAccessibilityScrollBarRole;
}
if ((accessibilityTraits & AccessibilityTraits::SpinButton) != AccessibilityTraits::None) {
return NSAccessibilityIncrementorRole;
}
if ((accessibilityTraits & AccessibilityTraits::Tab) != AccessibilityTraits::None) {
if ((accessibilityTraits & AccessibilityTraits::List) != AccessibilityTraits::None) {
return NSAccessibilityTabGroupRole;
}
return NSAccessibilityButtonRole;
}
if ((accessibilityTraits & AccessibilityTraits::Disclosure) != AccessibilityTraits::None) {
return NSAccessibilityDisclosureTriangleRole;
}
if ((accessibilityTraits & AccessibilityTraits::Group) != AccessibilityTraits::None) {
return NSAccessibilityGroupRole;
}
if ((accessibilityTraits & AccessibilityTraits::List) != AccessibilityTraits::None) {
return NSAccessibilityListRole;
}
if ((accessibilityTraits & AccessibilityTraits::Table) != AccessibilityTraits::None) {
return NSAccessibilityTableRole;
}

return NSAccessibilityUnknownRole;
};
#endif // macOS]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,21 @@ enum class AccessibilityTraits : uint32_t {
Header = (1 << 15),
Switch = (1 << 16),
TabBar = (1 << 17),
// [macOS
ComboBox = (1 << 18),
Menu = (1 << 19),
PopUp = (1 << 20),
Bar = (1 << 21),
Item = (1 << 22),
Group = (1 << 23),
List = (1 << 24),
Tab = (1 << 25),
Table = (1 << 26),
Disclosure = (1 << 27),
Radio = (1 << 28),
ScrollBar = (1 << 29),
SpinButton = (1 << 30),
// macOS]
};

constexpr enum AccessibilityTraits operator|(
Expand Down

0 comments on commit 0a67bd3

Please sign in to comment.