@@ -152,9 +152,10 @@ static folly::dynamic GetAccessibilityStateProps() {
152152folly::dynamic FrameworkElementViewManager::GetNativeProps () const {
153153 folly::dynamic props = Super::GetNativeProps ();
154154 props.update (folly::dynamic::object (" accessible" , " boolean" )(" accessibilityRole" , " string" )(
155- " accessibilityState" , GetAccessibilityStateProps ())(" accessibilityHint" , " string" )(
156- " accessibilityLabel" , " string" )(" accessibilityPosInSet" , " number" )(" accessibilitySetSize" , " number" )(
157- " testID" , " string" )(" tooltip" , " string" )(" accessibilityActions" , " array" )(" accessibilityLiveRegion" , " string" ));
155+ " accessibilityStates" , " array" )(" accessibilityState" , GetAccessibilityStateProps ())(
156+ " accessibilityHint" , " string" )(" accessibilityLabel" , " string" )(" accessibilityPosInSet" , " number" )(
157+ " accessibilitySetSize" , " number" )(" testID" , " string" )(" tooltip" , " string" )(" accessibilityActions" , " array" )(
158+ " accessibilityLiveRegion" , " string" ));
158159 return props;
159160}
160161
@@ -393,6 +394,45 @@ bool FrameworkElementViewManager::UpdateProperty(
393394 } else if (propertyValue.isNull ()) {
394395 element.ClearValue (DynamicAutomationProperties::AccessibilityRoleProperty ());
395396 }
397+ } else if (propertyName == " accessibilityStates" ) {
398+ bool states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::CountStates)] = {};
399+
400+ if (propertyValue.isArray ()) {
401+ for (const auto &state : propertyValue) {
402+ if (!state.isString ())
403+ continue ;
404+
405+ if (state.getString () == " selected" )
406+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Selected)] = true ;
407+ else if (state.getString () == " disabled" )
408+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Disabled)] = true ;
409+ else if (state.getString () == " checked" )
410+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Checked)] = true ;
411+ else if (state.getString () == " unchecked" )
412+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Unchecked)] = true ;
413+ else if (state.getString () == " busy" )
414+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Busy)] = true ;
415+ else if (state.getString () == " expanded" )
416+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Expanded)] = true ;
417+ else if (state.getString () == " collapsed" )
418+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Collapsed)] = true ;
419+ }
420+ }
421+
422+ DynamicAutomationProperties::SetAccessibilityStateSelected (
423+ element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Selected)]);
424+ DynamicAutomationProperties::SetAccessibilityStateDisabled (
425+ element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Disabled)]);
426+ DynamicAutomationProperties::SetAccessibilityStateChecked (
427+ element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Checked)]);
428+ DynamicAutomationProperties::SetAccessibilityStateUnchecked (
429+ element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Unchecked)]);
430+ DynamicAutomationProperties::SetAccessibilityStateBusy (
431+ element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Busy)]);
432+ DynamicAutomationProperties::SetAccessibilityStateExpanded (
433+ element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Expanded)]);
434+ DynamicAutomationProperties::SetAccessibilityStateCollapsed (
435+ element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Collapsed)]);
396436 } else if (propertyName == " accessibilityState" ) {
397437 bool states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::CountStates)] = {};
398438
0 commit comments