From 81a709bbba170f7062b3613a1f5ceace007c56a5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Jun 2025 17:34:55 +0000 Subject: [PATCH 1/4] Initial plan for issue From ace1209d8b5d0d8a6433a14fb18252e513bae673 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Jun 2025 17:41:39 +0000 Subject: [PATCH 2/4] Defer UIA provider initialization to GetPatternProvider Co-authored-by: chrisglein <26607885+chrisglein@users.noreply.github.com> --- .../CompositionDynamicAutomationProvider.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp index b40c83eabe7..9c648414b9a 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp @@ -2,6 +2,7 @@ #include "CompositionDynamicAutomationProvider.h" #include #include +#include #include #include #include @@ -31,18 +32,7 @@ CompositionDynamicAutomationProvider::CompositionDynamicAutomationProvider( AddSelectionItemsToContainer(this); } - if (strongView.try_as() || - strongView.try_as()) { - m_textProvider = winrt::make( - strongView.as(), this) - .try_as(); - } - if (strongView.try_as()) { - m_annotationProvider = winrt::make( - strongView.as(), this) - .try_as(); - } } CompositionDynamicAutomationProvider::CompositionDynamicAutomationProvider( @@ -282,16 +272,31 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPatternProvider(PATTE if (patternId == UIA_TextPatternId && (strongView.try_as() || strongView.try_as())) { + if (!m_textProvider) { + m_textProvider = winrt::make( + strongView.as(), this) + .try_as(); + } m_textProvider.as().copy_to(pRetVal); } if (patternId == UIA_TextPattern2Id && strongView.try_as()) { + if (!m_textProvider) { + m_textProvider = winrt::make( + strongView.as(), this) + .try_as(); + } m_textProvider.as().copy_to(pRetVal); } if (patternId == UIA_AnnotationPatternId && strongView.try_as() && accessibilityAnnotationHasValue(props->accessibilityAnnotation)) { + if (!m_annotationProvider) { + m_annotationProvider = winrt::make( + strongView.as(), this) + .try_as(); + } m_annotationProvider.as().copy_to(pRetVal); } From d927cd023eee2083af7c7f168e6eff05ae8a5fba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:41:04 +0000 Subject: [PATCH 3/4] Add change file for UIA provider initialization optimization Co-authored-by: dannyvv <11037542+dannyvv@users.noreply.github.com> --- ...ative-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/react-native-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json diff --git a/change/react-native-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json b/change/react-native-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json new file mode 100644 index 00000000000..bfa96624efb --- /dev/null +++ b/change/react-native-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Defer UIA accessibility provider initialization until requested", + "packageName": "react-native-windows", + "email": "198982749+Copilot@users.noreply.github.com", + "dependentChangeType": "patch" +} \ No newline at end of file From 74cbd54d16886cc2d95c2a3447947d6475f11f0a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Jun 2025 21:33:25 +0000 Subject: [PATCH 4/4] Format code with clang-format to fix spacing Co-authored-by: acoates-ms <30809111+acoates-ms@users.noreply.github.com> --- .../Fabric/Composition/CompositionDynamicAutomationProvider.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp index 9c648414b9a..9f0deabc480 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp @@ -31,8 +31,6 @@ CompositionDynamicAutomationProvider::CompositionDynamicAutomationProvider( if (props->accessibilityState.has_value() && props->accessibilityState->selected.has_value()) { AddSelectionItemsToContainer(this); } - - } CompositionDynamicAutomationProvider::CompositionDynamicAutomationProvider(