diff --git a/change/react-native-windows-bcf77be5-d1cd-4b1a-9756-3de4607890e5.json b/change/react-native-windows-bcf77be5-d1cd-4b1a-9756-3de4607890e5.json new file mode 100644 index 00000000000..6ebe164b659 --- /dev/null +++ b/change/react-native-windows-bcf77be5-d1cd-4b1a-9756-3de4607890e5.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "[Fabric] Raising UIA Event if Toggle State Changes in Switch Component", + "packageName": "react-native-windows", + "email": "kvineeth@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp index 129211ebf05..7a79a2a7e88 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp @@ -9,6 +9,7 @@ #include #include "CompositionDynamicAutomationProvider.h" #include "RootComponentView.h" +#include "UiaHelpers.h" namespace winrt::Microsoft::ReactNative::Composition::implementation { @@ -80,6 +81,16 @@ void SwitchComponentView::updateProps( m_visualUpdateRequired = true; } + if (oldViewProps.value != newViewProps.value) { + if (UiaClientsAreListening()) { + winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( + EnsureUiaProvider(), + UIA_ToggleToggleStatePropertyId, + oldViewProps.value ? ToggleState_On : ToggleState_Off, + newViewProps.value ? ToggleState_On : ToggleState_Off); + } + } + Super::updateProps(props, oldProps); } diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp index 4d2ff6ae8a0..20c34577355 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp @@ -166,6 +166,15 @@ void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, bool old UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue)); } +void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, int oldValue, int newValue) noexcept { + auto spProviderSimple = provider.try_as(); + + if (spProviderSimple == nullptr || oldValue == newValue || !WasUiaPropertyAdvised(spProviderSimple, propId)) + return; + + UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue)); +} + void UpdateUiaProperty( winrt::IInspectable provider, PROPERTYID propId, diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h index 5f4494a607c..b1f0e268c00 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h @@ -29,6 +29,12 @@ void UpdateUiaProperty( bool oldValue, bool newValue) noexcept; +void UpdateUiaProperty( + winrt::Windows::Foundation::IInspectable provider, + PROPERTYID propId, + int oldValue, + int newValue) noexcept; + void UpdateUiaProperty( winrt::Windows::Foundation::IInspectable provider, PROPERTYID propId,