Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <winrt/Microsoft.UI.Content.h>
#include "RootComponentView.h"
#include "UiaHelpers.h"
#include <react/renderer/components/view/HostPlatformViewProps.h>

namespace winrt::Microsoft::ReactNative::implementation {

Expand Down Expand Up @@ -484,6 +485,9 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT
if (props == nullptr)
return UIA_E_ELEMENTNOTAVAILABLE;

// Cast to HostPlatformViewProps to access Windows-specific properties like accessibilityLevel
auto hostProps = std::static_pointer_cast<const facebook::react::HostPlatformViewProps>(baseView->props());

auto compositionView = strongView.try_as<winrt::Microsoft::ReactNative::Composition::implementation::ComponentView>();
if (compositionView == nullptr)
return UIA_E_ELEMENTNOTAVAILABLE;
Expand Down Expand Up @@ -597,17 +601,17 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT
}
case UIA_PositionInSetPropertyId: {
pRetVal->vt = VT_I4;
pRetVal->lVal = props->accessibilityPosInSet;
pRetVal->lVal = hostProps ? hostProps->accessibilityPosInSet : 0;
break;
}
case UIA_SizeOfSetPropertyId: {
pRetVal->vt = VT_I4;
pRetVal->lVal = props->accessibilitySetSize;
pRetVal->lVal = hostProps ? hostProps->accessibilitySetSize : 0;
break;
}
case UIA_LiveSettingPropertyId: {
pRetVal->vt = VT_I4;
pRetVal->lVal = GetLiveSetting(props->accessibilityLiveRegion);
pRetVal->lVal = GetLiveSetting(hostProps ? hostProps->accessibilityLiveRegion : "none");
break;
}
case UIA_ItemStatusPropertyId: {
Expand All @@ -619,18 +623,20 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT
}
case UIA_LevelPropertyId: {
pRetVal->vt = VT_I4;
pRetVal->lVal = props->accessibilityLevel;
pRetVal->lVal = hostProps ? hostProps->accessibilityLevel : 0;
break;
}
case UIA_AccessKeyPropertyId: {
pRetVal->vt = VT_BSTR;
auto accessKey = ::Microsoft::Common::Unicode::Utf8ToUtf16(props->accessibilityAccessKey.value_or(""));
auto accessKey = ::Microsoft::Common::Unicode::Utf8ToUtf16(
hostProps ? hostProps->accessibilityAccessKey.value_or("") : "");
pRetVal->bstrVal = SysAllocString(accessKey.c_str());
break;
}
case UIA_ItemTypePropertyId: {
pRetVal->vt = VT_BSTR;
auto itemtype = ::Microsoft::Common::Unicode::Utf8ToUtf16(props->accessibilityItemType.value_or(""));
auto itemtype = ::Microsoft::Common::Unicode::Utf8ToUtf16(
hostProps ? hostProps->accessibilityItemType.value_or("") : "");
pRetVal->bstrVal = SysAllocString(itemtype.c_str());
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <Fabric/AbiViewProps.h>
#include <Fabric/Composition/ReactNativeIsland.h>
#include <Fabric/FabricUIManagerModule.h>
#include <react/renderer/components/view/HostPlatformViewProps.h>
#include <UI.Xaml.Controls.h>
#include <Utils/KeyboardUtils.h>
#include <Utils/ValueUtils.h>
Expand Down Expand Up @@ -747,6 +748,10 @@ void ComponentView::updateAccessibilityProps(
if (!UiaClientsAreListening())
return;

// Cast to HostPlatformViewProps to access Windows-specific properties
auto oldHostProps = static_cast<const facebook::react::HostPlatformViewProps*>(&oldViewProps);
auto newHostProps = static_cast<const facebook::react::HostPlatformViewProps*>(&newViewProps);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(), UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable);

Expand Down Expand Up @@ -789,41 +794,41 @@ void ComponentView::updateAccessibilityProps(
winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(),
UIA_PositionInSetPropertyId,
oldViewProps.accessibilityPosInSet,
newViewProps.accessibilityPosInSet);
oldHostProps->accessibilityPosInSet,
newHostProps->accessibilityPosInSet);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(),
UIA_SizeOfSetPropertyId,
oldViewProps.accessibilitySetSize,
newViewProps.accessibilitySetSize);
oldHostProps->accessibilitySetSize,
newHostProps->accessibilitySetSize);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(),
UIA_LiveSettingPropertyId,
oldViewProps.accessibilityLiveRegion,
newViewProps.accessibilityLiveRegion);
oldHostProps->accessibilityLiveRegion,
newHostProps->accessibilityLiveRegion);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(), UIA_LevelPropertyId, oldViewProps.accessibilityLevel, newViewProps.accessibilityLevel);
EnsureUiaProvider(), UIA_LevelPropertyId, oldHostProps->accessibilityLevel, newHostProps->accessibilityLevel);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(),
UIA_AccessKeyPropertyId,
oldViewProps.accessibilityAccessKey,
newViewProps.accessibilityAccessKey);
oldHostProps->accessibilityAccessKey,
newHostProps->accessibilityAccessKey);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(),
UIA_ItemTypePropertyId,
oldViewProps.accessibilityItemType,
newViewProps.accessibilityItemType);
oldHostProps->accessibilityItemType,
newHostProps->accessibilityItemType);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(),
UIA_FullDescriptionPropertyId,
oldViewProps.accessibilityDescription,
newViewProps.accessibilityDescription);
oldHostProps->accessibilityDescription,
newHostProps->accessibilityDescription);

winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
EnsureUiaProvider(),
Expand All @@ -833,7 +838,7 @@ void ComponentView::updateAccessibilityProps(

// Handle annotation properties with single call
winrt::Microsoft::ReactNative::implementation::UpdateUiaPropertiesForAnnotation(
EnsureUiaProvider(), oldViewProps.accessibilityAnnotation, newViewProps.accessibilityAnnotation);
EnsureUiaProvider(), oldHostProps->accessibilityAnnotation, newHostProps->accessibilityAnnotation);

// Handle expand/collapse state changes
if (oldViewProps.accessibilityState.has_value() != newViewProps.accessibilityState.has_value() ||
Expand Down
Loading