From e609239b9d7c683c59221b24689a360b55b880f2 Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 13:21:02 +0530 Subject: [PATCH 01/10] Added UIA Event Triggers for accessibilityAnnotation Property Changes --- .../CompositionViewComponentView.cpp | 27 +++++++++++++++++ .../Fabric/Composition/UiaHelpers.cpp | 30 +++++++++++++++++++ .../Fabric/Composition/UiaHelpers.h | 6 ++++ 3 files changed, 63 insertions(+) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp index 2426128f1a3..4aef2cd8b71 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp @@ -831,6 +831,33 @@ void ComponentView::updateAccessibilityProps( oldViewProps.accessibilityValue.text, newViewProps.accessibilityValue.text); + // Handle annotation properties with null checks + if (oldViewProps.accessibilityAnnotation.has_value() && newViewProps.accessibilityAnnotation.has_value()) { + winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( + EnsureUiaProvider(), + UIA_AnnotationAnnotationTypeIdPropertyId, + oldViewProps.accessibilityAnnotation->typeID, + newViewProps.accessibilityAnnotation->typeID); + + winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( + EnsureUiaProvider(), + UIA_AnnotationAnnotationTypeNamePropertyId, + oldViewProps.accessibilityAnnotation->typeName, + newViewProps.accessibilityAnnotation->typeName); + + winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( + EnsureUiaProvider(), + UIA_AnnotationAuthorPropertyId, + oldViewProps.accessibilityAnnotation->author, + newViewProps.accessibilityAnnotation->author); + + winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( + EnsureUiaProvider(), + UIA_AnnotationDateTimePropertyId, + oldViewProps.accessibilityAnnotation->dateTime, + newViewProps.accessibilityAnnotation->dateTime); + } + if ((oldViewProps.accessibilityState.has_value() && oldViewProps.accessibilityState->selected.has_value()) != ((newViewProps.accessibilityState.has_value() && newViewProps.accessibilityState->selected.has_value()))) { auto compProvider = diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp index 20c34577355..f7821843311 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp @@ -199,6 +199,36 @@ void UpdateUiaProperty( UpdateUiaProperty(provider, propId, oldData, newData); } +void UpdateUiaAnnotationProperty( + winrt::IInspectable provider, + PROPERTYID propId, + const std::string &oldValue, + const std::string &newValue) noexcept { + std::string oldData = oldValue.empty() ? "" : oldValue; + std::string newData = newValue.empty() ? "" : newValue; + + auto spProviderSimple = provider.try_as(); + + if (spProviderSimple == nullptr || !WasUiaPropertyAdvised(spProviderSimple, propId)) + return; + + if (oldData == newData) + return; + + // For annotation type ID property, convert string type IDs to annotation type constants + if (propId == UIA_AnnotationAnnotationTypeIdPropertyId) { + long oldAnnotationTypeId = GetAnnotationTypeId(oldData); + long newAnnotationTypeId = GetAnnotationTypeId(newData); + + UiaRaiseAutomationPropertyChangedEvent( + spProviderSimple.get(), propId, CComVariant(oldAnnotationTypeId), CComVariant(newAnnotationTypeId)); + } else { + // For other annotation properties, use string comparison + UiaRaiseAutomationPropertyChangedEvent( + spProviderSimple.get(), propId, CComVariant(oldData.c_str()), CComVariant(newData.c_str())); + } +} + long GetLiveSetting(const std::string &liveRegion) noexcept { if (liveRegion == "polite") { return LiveSetting::Polite; diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h index b1f0e268c00..6f1f7efcc03 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h @@ -47,6 +47,12 @@ void UpdateUiaProperty( const std::optional &oldValue, const std::optional &newValue) noexcept; +void UpdateUiaAnnotationProperty( + winrt::Windows::Foundation::IInspectable provider, + PROPERTYID propId, + const std::string &oldTypeId, + const std::string &newTypeId) noexcept; + long GetLiveSetting(const std::string &liveRegion) noexcept; long GetAnnotationTypeId(const std::string &annotationType) noexcept; From a535c36c8229fecd91ab123af5889cdeea87052a Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 13:21:59 +0530 Subject: [PATCH 02/10] Added UIA Event Triggers for accessibilityAnnotation Property Changes --- ...ative-windows-a648cb52-86ff-47b1-b2be-04d168a7f110.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/react-native-windows-a648cb52-86ff-47b1-b2be-04d168a7f110.json diff --git a/change/react-native-windows-a648cb52-86ff-47b1-b2be-04d168a7f110.json b/change/react-native-windows-a648cb52-86ff-47b1-b2be-04d168a7f110.json new file mode 100644 index 00000000000..b48cab15d27 --- /dev/null +++ b/change/react-native-windows-a648cb52-86ff-47b1-b2be-04d168a7f110.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Added UIA Event Triggers for accessibilityAnnotation Property Changes", + "packageName": "react-native-windows", + "email": "gsaran252000@gmail.com", + "dependentChangeType": "patch" +} From 854f799fa7c0ada156ef0f5fe32d2c3179943b66 Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 14:35:42 +0530 Subject: [PATCH 03/10] wrapped to single call - UpdateUIAPropertiesForAnnotation --- .../CompositionViewComponentView.cpp | 29 ++----------------- .../Fabric/Composition/UiaHelpers.cpp | 28 +++++++++++++++++- .../Fabric/Composition/UiaHelpers.h | 7 ++++- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp index 4aef2cd8b71..681a93c976c 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp @@ -831,32 +831,9 @@ void ComponentView::updateAccessibilityProps( oldViewProps.accessibilityValue.text, newViewProps.accessibilityValue.text); - // Handle annotation properties with null checks - if (oldViewProps.accessibilityAnnotation.has_value() && newViewProps.accessibilityAnnotation.has_value()) { - winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( - EnsureUiaProvider(), - UIA_AnnotationAnnotationTypeIdPropertyId, - oldViewProps.accessibilityAnnotation->typeID, - newViewProps.accessibilityAnnotation->typeID); - - winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( - EnsureUiaProvider(), - UIA_AnnotationAnnotationTypeNamePropertyId, - oldViewProps.accessibilityAnnotation->typeName, - newViewProps.accessibilityAnnotation->typeName); - - winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( - EnsureUiaProvider(), - UIA_AnnotationAuthorPropertyId, - oldViewProps.accessibilityAnnotation->author, - newViewProps.accessibilityAnnotation->author); - - winrt::Microsoft::ReactNative::implementation::UpdateUiaAnnotationProperty( - EnsureUiaProvider(), - UIA_AnnotationDateTimePropertyId, - oldViewProps.accessibilityAnnotation->dateTime, - newViewProps.accessibilityAnnotation->dateTime); - } + // Handle annotation properties with single call + winrt::Microsoft::ReactNative::implementation::UpdateUiaPropertiesForAnnotation( + EnsureUiaProvider(), oldViewProps.accessibilityAnnotation, newViewProps.accessibilityAnnotation); if ((oldViewProps.accessibilityState.has_value() && oldViewProps.accessibilityState->selected.has_value()) != ((newViewProps.accessibilityState.has_value() && newViewProps.accessibilityState->selected.has_value()))) { diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp index f7821843311..64f5e059371 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp @@ -199,7 +199,7 @@ void UpdateUiaProperty( UpdateUiaProperty(provider, propId, oldData, newData); } -void UpdateUiaAnnotationProperty( +void UpdateUiaPropertyForAnnotation( winrt::IInspectable provider, PROPERTYID propId, const std::string &oldValue, @@ -229,6 +229,32 @@ void UpdateUiaAnnotationProperty( } } +void UpdateUiaPropertiesForAnnotation( + winrt::IInspectable provider, + const std::optional &oldAnnotation, + const std::optional &newAnnotation) noexcept { + // Only update if both annotations have values + if (!oldAnnotation.has_value() || !newAnnotation.has_value()) { + return; + } + + const auto &old_annotation = oldAnnotation.value(); + const auto &new_annotation = newAnnotation.value(); + + // Update all annotation properties + UpdateUiaPropertyForAnnotation( + provider, UIA_AnnotationAnnotationTypeIdPropertyId, old_annotation.typeID, new_annotation.typeID); + + UpdateUiaPropertyForAnnotation( + provider, UIA_AnnotationAnnotationTypeNamePropertyId, old_annotation.typeName, new_annotation.typeName); + + UpdateUiaPropertyForAnnotation( + provider, UIA_AnnotationAuthorPropertyId, old_annotation.author, new_annotation.author); + + UpdateUiaPropertyForAnnotation( + provider, UIA_AnnotationDateTimePropertyId, old_annotation.dateTime, new_annotation.dateTime); +} + long GetLiveSetting(const std::string &liveRegion) noexcept { if (liveRegion == "polite") { return LiveSetting::Polite; diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h index 6f1f7efcc03..29bbc358194 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h @@ -47,12 +47,17 @@ void UpdateUiaProperty( const std::optional &oldValue, const std::optional &newValue) noexcept; -void UpdateUiaAnnotationProperty( +void UpdateUiaPropertyForAnnotation( winrt::Windows::Foundation::IInspectable provider, PROPERTYID propId, const std::string &oldTypeId, const std::string &newTypeId) noexcept; +void UpdateUiaPropertiesForAnnotation( + winrt::Windows::Foundation::IInspectable provider, + const std::optional &oldAnnotation, + const std::optional &newAnnotation) noexcept; + long GetLiveSetting(const std::string &liveRegion) noexcept; long GetAnnotationTypeId(const std::string &annotationType) noexcept; From 1871771cf347eed85eefd326e284a3fa070d0c59 Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 14:44:15 +0530 Subject: [PATCH 04/10] Annotation Props UIA Event method call --- ...ative-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json diff --git a/change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json b/change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json new file mode 100644 index 00000000000..7f54ae34857 --- /dev/null +++ b/change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "wrapped to single call - UpdateUIAPropertiesForAnnotation", + "packageName": "react-native-windows", + "email": "gsaran252000@gmail.com", + "dependentChangeType": "patch" +} From 50e7e4cd20cbd87a73342ea652ac79cf9bb4454d Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 14:59:06 +0530 Subject: [PATCH 05/10] removed yarn change file --- ...ative-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json diff --git a/change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json b/change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json deleted file mode 100644 index 7f54ae34857..00000000000 --- a/change/react-native-windows-8aaaff79-a2a7-4bd6-af5f-ecee696abe44.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "prerelease", - "comment": "wrapped to single call - UpdateUIAPropertiesForAnnotation", - "packageName": "react-native-windows", - "email": "gsaran252000@gmail.com", - "dependentChangeType": "patch" -} From f50190d8e1f40c14b7f69b4ac8fb6f070e24ad61 Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 15:17:51 +0530 Subject: [PATCH 06/10] Review Changes done --- .../Fabric/Composition/UiaHelpers.cpp | 24 +++++++++++++------ .../Fabric/Composition/UiaHelpers.h | 6 ----- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp index 64f5e059371..9d36a36b74f 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp @@ -175,6 +175,15 @@ void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, int oldV UiaRaiseAutomationPropertyChangedEvent(spProviderSimple.get(), propId, CComVariant(oldValue), CComVariant(newValue)); } +void UpdateUiaProperty(winrt::IInspectable provider, PROPERTYID propId, long oldValue, long 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, @@ -242,17 +251,18 @@ void UpdateUiaPropertiesForAnnotation( const auto &new_annotation = newAnnotation.value(); // Update all annotation properties - UpdateUiaPropertyForAnnotation( - provider, UIA_AnnotationAnnotationTypeIdPropertyId, old_annotation.typeID, new_annotation.typeID); + UpdateUiaProperty( + provider, + UIA_AnnotationAnnotationTypeIdPropertyId, + GetAnnotationTypeId(old_annotation.typeID), + GetAnnotationTypeId(new_annotation.typeID)); - UpdateUiaPropertyForAnnotation( + UpdateUiaProperty( provider, UIA_AnnotationAnnotationTypeNamePropertyId, old_annotation.typeName, new_annotation.typeName); - UpdateUiaPropertyForAnnotation( - provider, UIA_AnnotationAuthorPropertyId, old_annotation.author, new_annotation.author); + UpdateUiaProperty(provider, UIA_AnnotationAuthorPropertyId, old_annotation.author, new_annotation.author); - UpdateUiaPropertyForAnnotation( - provider, UIA_AnnotationDateTimePropertyId, old_annotation.dateTime, new_annotation.dateTime); + UpdateUiaProperty(provider, UIA_AnnotationDateTimePropertyId, old_annotation.dateTime, new_annotation.dateTime); } long GetLiveSetting(const std::string &liveRegion) noexcept { diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h index 29bbc358194..c2d8a6b2272 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h @@ -47,12 +47,6 @@ void UpdateUiaProperty( const std::optional &oldValue, const std::optional &newValue) noexcept; -void UpdateUiaPropertyForAnnotation( - winrt::Windows::Foundation::IInspectable provider, - PROPERTYID propId, - const std::string &oldTypeId, - const std::string &newTypeId) noexcept; - void UpdateUiaPropertiesForAnnotation( winrt::Windows::Foundation::IInspectable provider, const std::optional &oldAnnotation, From 5b66f1b9d22c9adc18258150023fb013cb26ff8d Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 15:21:22 +0530 Subject: [PATCH 07/10] UpdateUiaPropertyForAnnotation method removed. --- .../Fabric/Composition/UiaHelpers.cpp | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp index 9d36a36b74f..2ce27c4ca9c 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp @@ -208,36 +208,6 @@ void UpdateUiaProperty( UpdateUiaProperty(provider, propId, oldData, newData); } -void UpdateUiaPropertyForAnnotation( - winrt::IInspectable provider, - PROPERTYID propId, - const std::string &oldValue, - const std::string &newValue) noexcept { - std::string oldData = oldValue.empty() ? "" : oldValue; - std::string newData = newValue.empty() ? "" : newValue; - - auto spProviderSimple = provider.try_as(); - - if (spProviderSimple == nullptr || !WasUiaPropertyAdvised(spProviderSimple, propId)) - return; - - if (oldData == newData) - return; - - // For annotation type ID property, convert string type IDs to annotation type constants - if (propId == UIA_AnnotationAnnotationTypeIdPropertyId) { - long oldAnnotationTypeId = GetAnnotationTypeId(oldData); - long newAnnotationTypeId = GetAnnotationTypeId(newData); - - UiaRaiseAutomationPropertyChangedEvent( - spProviderSimple.get(), propId, CComVariant(oldAnnotationTypeId), CComVariant(newAnnotationTypeId)); - } else { - // For other annotation properties, use string comparison - UiaRaiseAutomationPropertyChangedEvent( - spProviderSimple.get(), propId, CComVariant(oldData.c_str()), CComVariant(newData.c_str())); - } -} - void UpdateUiaPropertiesForAnnotation( winrt::IInspectable provider, const std::optional &oldAnnotation, From 280c12372ede1107bc1f55098bb8e16038569964 Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 15:23:29 +0530 Subject: [PATCH 08/10] UpdateUiaProperty long method param added. --- .../Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h index c2d8a6b2272..8ba29d95931 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h @@ -35,6 +35,12 @@ void UpdateUiaProperty( int oldValue, int newValue) noexcept; +void UpdateUiaProperty( + winrt::Windows::Foundation::IInspectable provider, + PROPERTYID propId, + long oldValue, + long newValue) noexcept; + void UpdateUiaProperty( winrt::Windows::Foundation::IInspectable provider, PROPERTYID propId, @@ -47,6 +53,7 @@ void UpdateUiaProperty( const std::optional &oldValue, const std::optional &newValue) noexcept; + void UpdateUiaPropertiesForAnnotation( winrt::Windows::Foundation::IInspectable provider, const std::optional &oldAnnotation, From 7ee8c090a6c102e0cb782c0e2154d59301962bfb Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Fri, 8 Aug 2025 15:49:55 +0530 Subject: [PATCH 09/10] yarn format changes --- vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h | 1 - 1 file changed, 1 deletion(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h index 8ba29d95931..3d63c0c3e2b 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h @@ -53,7 +53,6 @@ void UpdateUiaProperty( const std::optional &oldValue, const std::optional &newValue) noexcept; - void UpdateUiaPropertiesForAnnotation( winrt::Windows::Foundation::IInspectable provider, const std::optional &oldAnnotation, From 59416bea571beb54afc236a73f6796a6938e8896 Mon Sep 17 00:00:00 2001 From: gsaran25 Date: Sat, 9 Aug 2025 11:59:11 +0530 Subject: [PATCH 10/10] AccessibilityAnnotation default valued assigned. --- .../Fabric/Composition/UiaHelpers.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp index 2ce27c4ca9c..f2f12530ed1 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp @@ -212,13 +212,9 @@ void UpdateUiaPropertiesForAnnotation( winrt::IInspectable provider, const std::optional &oldAnnotation, const std::optional &newAnnotation) noexcept { - // Only update if both annotations have values - if (!oldAnnotation.has_value() || !newAnnotation.has_value()) { - return; - } - - const auto &old_annotation = oldAnnotation.value(); - const auto &new_annotation = newAnnotation.value(); + // if no value fall back to a default value. + const auto &old_annotation = oldAnnotation.value_or(facebook::react::AccessibilityAnnotation()); + const auto &new_annotation = newAnnotation.value_or(facebook::react::AccessibilityAnnotation()); // Update all annotation properties UpdateUiaProperty(