Skip to content

Commit f756797

Browse files
authored
[Fabric] Add Support for accessibilityActions and onAccessibilityAction (#13674)
* Add Implementation for accessibilityActions * Add activate action * Format * Change files
1 parent 0ec2b30 commit f756797

File tree

4 files changed

+36
-0
lines changed

4 files changed

+36
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "Add Implementation for accessibilityActions",
4+
"packageName": "react-native-windows",
5+
"email": "34109996+chiaramooney@users.noreply.github.com",
6+
"dependentChangeType": "patch"
7+
}

vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,8 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::Invoke() {
381381
if (spProviderSimple != nullptr) {
382382
UiaRaiseAutomationEvent(spProviderSimple.get(), UIA_Invoke_InvokedEventId);
383383
}
384+
DispatchAccessibilityAction(m_view, "invoke");
385+
DispatchAccessibilityAction(m_view, "activate");
384386

385387
return S_OK;
386388
}
@@ -394,6 +396,7 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::ScrollIntoView() {
394396
winrt::Microsoft::ReactNative::implementation::BringIntoViewOptions scrollOptions;
395397
winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(strongView)
396398
->StartBringIntoView(std::move(scrollOptions));
399+
DispatchAccessibilityAction(m_view, "scrollIntoView");
397400

398401
return S_OK;
399402
}
@@ -422,6 +425,7 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::SetValue(LPCWSTR val) {
422425

423426
winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(strongView)
424427
->setAcccessiblityValue(winrt::to_string(val));
428+
DispatchAccessibilityAction(m_view, "setValue");
425429
return S_OK;
426430
}
427431

@@ -488,6 +492,7 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::Toggle() {
488492
return UIA_E_ELEMENTNOTAVAILABLE;
489493

490494
winrt::get_self<winrt::Microsoft::ReactNative::implementation::ComponentView>(strongView)->Toggle();
495+
DispatchAccessibilityAction(m_view, "toggle");
491496
return S_OK;
492497
}
493498

vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,4 +182,26 @@ std::string extractAccessibilityValue(const facebook::react::AccessibilityValue
182182
}
183183
}
184184

185+
void DispatchAccessibilityAction(::Microsoft::ReactNative::ReactTaggedView &view, const std::string &action) noexcept {
186+
auto strongView = view.view();
187+
188+
if (!strongView)
189+
return;
190+
191+
auto baseView = strongView.try_as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>();
192+
if (baseView == nullptr)
193+
return;
194+
195+
auto props = std::static_pointer_cast<const facebook::react::ViewProps>(baseView->props());
196+
if (props == nullptr)
197+
return;
198+
199+
auto accessibilityActions = props->accessibilityActions;
200+
for (size_t i = 0; i < accessibilityActions.size(); i++) {
201+
if (accessibilityActions[i].name == action) {
202+
baseView->GetEventEmitter()->onAccessibilityAction(action);
203+
}
204+
}
205+
}
206+
185207
} // namespace winrt::Microsoft::ReactNative::implementation

vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ long GetLiveSetting(const std::string &liveRegion) noexcept;
3333

3434
std::string extractAccessibilityValue(const facebook::react::AccessibilityValue &value) noexcept;
3535

36+
void DispatchAccessibilityAction(::Microsoft::ReactNative::ReactTaggedView &view, const std::string &action) noexcept;
37+
3638
} // namespace winrt::Microsoft::ReactNative::implementation

0 commit comments

Comments
 (0)