@@ -141,12 +141,21 @@ void FrameworkElementViewManager::TransferProperties(XamlView oldView, XamlView
141
141
}
142
142
}
143
143
144
+ static folly::dynamic GetAccessibilityStateProps () {
145
+ folly::dynamic props = folly::dynamic::object ();
146
+
147
+ props.update (folly::dynamic::object (" selected" , " boolean" )(" disabled" , " boolean" )(" checked" , " string" )(
148
+ " busy" , " boolean" )(" expanded" , " boolean" ));
149
+ return props;
150
+ }
151
+
144
152
folly::dynamic FrameworkElementViewManager::GetNativeProps () const {
145
153
folly::dynamic props = Super::GetNativeProps ();
146
154
props.update (folly::dynamic::object (" accessible" , " boolean" )(" accessibilityRole" , " string" )(
147
- " accessibilityStates" , " array" )(" accessibilityHint" , " string" )(" accessibilityLabel" , " string" )(
148
- " accessibilityPosInSet" , " number" )(" accessibilitySetSize" , " number" )(" testID" , " string" )(" tooltip" , " string" )(
149
- " 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" ));
150
159
return props;
151
160
}
152
161
@@ -410,6 +419,49 @@ bool FrameworkElementViewManager::UpdateProperty(
410
419
}
411
420
}
412
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)]);
436
+ } else if (propertyName == " accessibilityState" ) {
437
+ bool states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::CountStates)] = {};
438
+
439
+ if (propertyValue.isObject ()) {
440
+ for (const auto &pair : propertyValue.items ()) {
441
+ const std::string &innerName = pair.first .getString ();
442
+ const folly::dynamic &innerValue = pair.second ;
443
+
444
+ if (innerName == " selected" )
445
+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Selected)] = innerValue.getBool ();
446
+ else if (innerName == " disabled" )
447
+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Disabled)] = innerValue.getBool ();
448
+ else if (innerName == " checked" ) {
449
+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Checked)] =
450
+ innerValue.isBool () && innerValue.getBool ();
451
+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Unchecked)] =
452
+ innerValue.isBool () && !innerValue.getBool ();
453
+ // If the state is "mixed" we'll just set both Checked and Unchecked to false,
454
+ // then later in the IToggleProvider implementation it will return the Intermediate state
455
+ // due to both being set to false (see DynamicAutomationPeer::ToggleState()).
456
+ } else if (innerName == " busy" )
457
+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Busy)] = innerValue.getBool ();
458
+ else if (innerName == " expanded" ) {
459
+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Expanded)] = innerValue.getBool ();
460
+ states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Collapsed)] = !innerValue.getBool ();
461
+ }
462
+ }
463
+ }
464
+
413
465
DynamicAutomationProperties::SetAccessibilityStateSelected (
414
466
element, states[static_cast <int32_t >(winrt::react::uwp::AccessibilityStates::Selected)]);
415
467
DynamicAutomationProperties::SetAccessibilityStateDisabled (
0 commit comments