diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 40bbf2752dea9b..b2ce42ef11f24b 100644 --- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -516,6 +516,30 @@ - (NSString *)accessibilityLabel return RCTRecursiveAccessibilityLabel(self); } +- (NSString *)accessibilityValue +{ + auto const &props = *std::static_pointer_cast(_props); + + // Handle states which haven't already been handled. + if (props.accessibilityState.checked == AccessibilityState::Checked) { + return @"checked"; + } + if (props.accessibilityState.checked == AccessibilityState::Unchecked) { + return @"unchecked"; + } + if (props.accessibilityState.checked == AccessibilityState::Mixed) { + return @"mixed"; + } + if (props.accessibilityState.expanded) { + return @"expanded"; + } + if (props.accessibilityState.busy) { + return @"busy"; + } + + return nil; +} + #pragma mark - Accessibility Events - (NSArray *)accessibilityCustomActions diff --git a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h index 96aa8b2e48156a..bef803a8f7191a 100644 --- a/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +++ b/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h @@ -47,7 +47,7 @@ constexpr enum AccessibilityTraits operator&( struct AccessibilityState { bool disabled{false}; bool selected{false}; - enum { Unchecked, Checked, Mixed } checked{Unchecked}; + enum { Unchecked, Checked, Mixed, None } checked{None}; bool busy{false}; bool expanded{false}; }; diff --git a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h index e112ec34e20a52..dd15a685224f57 100644 --- a/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +++ b/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h @@ -125,6 +125,8 @@ inline void fromRawValue(const RawValue &value, AccessibilityState &result) { if (checked->second.hasType()) { if ((std::string)checked->second == "mixed") { result.checked = AccessibilityState::Mixed; + } else { + result.checked = AccessibilityState::None; } } else if (checked->second.hasType()) { if ((bool)checked->second == true) { @@ -132,6 +134,8 @@ inline void fromRawValue(const RawValue &value, AccessibilityState &result) { } else { result.checked = AccessibilityState::Unchecked; } + } else { + result.checked = AccessibilityState::None; } } auto busy = map.find("busy");