Skip to content

Commit 3dea19c

Browse files
[Fabric] Implementation of accessibilityDescription (#14818)
* Initial Commit for accessibilityDescription * Change files * Format Changes * Updating Snapshot
1 parent ecbaf42 commit 3dea19c

File tree

13 files changed

+59
-0
lines changed

13 files changed

+59
-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": "[Fabric] Implementation of accessibilityDescription",
4+
"packageName": "react-native-windows",
5+
"email": "kvineeth@microsoft.com",
6+
"dependentChangeType": "patch"
7+
}

packages/@react-native-windows/tester/src/js/examples-win/Accessibility/AccessibilityExampleWindows.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class AccessibilityBaseExample extends React.Component {
2828
accessibilityLevel={1}
2929
accessibilityItemType="comment"
3030
accessibilityAccessKey="accessKey"
31+
accessibilityDescription="Sample Description"
3132
accessibilityAnnotation={{
3233
typeID: 'Comment',
3334
typeName: 'Check Comment',

packages/e2e-test-app-fabric/test/__snapshots__/AccessibilityTest.test.ts.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ exports[`Accessibility Tests Accessibility data for Label,Level and Hint 1`] = `
3939
"AnnotationPattern.TypeName": "Check Comment",
4040
"AutomationId": "accessibility-base-view-1",
4141
"ControlType": 50026,
42+
"Description": "Sample Description",
4243
"HelpText": "A hint for the blue box.",
4344
"ItemType": "comment",
4445
"Level": 1,

packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ exports[`snapshotAllPages Accessibility Windows 1`] = `
1717
"typeName": "Check Comment",
1818
}
1919
}
20+
accessibilityDescription="Sample Description"
2021
accessibilityHint="A hint for the blue box."
2122
accessibilityItemType="comment"
2223
accessibilityLabel="A blue box"

packages/e2e-test-app-fabric/windows/RNTesterApp-Fabric/RNTesterApp-Fabric.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ winrt::Windows::Data::Json::JsonObject DumpUIATreeRecurse(
525525
BSTR itemStatus;
526526
BSTR itemType;
527527
BSTR accessKey;
528+
BSTR description = nullptr;
528529

529530
pTarget->get_CurrentAutomationId(&automationId);
530531
pTarget->get_CurrentControlType(&controlType);
@@ -545,6 +546,11 @@ winrt::Windows::Data::Json::JsonObject DumpUIATreeRecurse(
545546
pTarget4->get_CurrentLevel(&level);
546547
pTarget4->Release();
547548
}
549+
IUIAutomationElement6 *pTarget6;
550+
hr = pTarget->QueryInterface(__uuidof(IUIAutomationElement6), reinterpret_cast<void **>(&pTarget6));
551+
if (SUCCEEDED(hr) && pTarget6) {
552+
pTarget6->get_CurrentFullDescription(&description);
553+
}
548554
result.Insert(L"AutomationId", winrt::Windows::Data::Json::JsonValue::CreateStringValue(automationId));
549555
result.Insert(L"ControlType", winrt::Windows::Data::Json::JsonValue::CreateNumberValue(controlType));
550556
InsertStringValueIfNotEmpty(result, L"HelpText", helpText);
@@ -560,6 +566,7 @@ winrt::Windows::Data::Json::JsonObject DumpUIATreeRecurse(
560566
InsertStringValueIfNotEmpty(result, L"ItemStatus", itemStatus);
561567
InsertStringValueIfNotEmpty(result, L"ItemType", itemType);
562568
InsertStringValueIfNotEmpty(result, L"AccessKey", accessKey);
569+
InsertStringValueIfNotEmpty(result, L"Description", description);
563570
DumpUIAPatternInfo(pTarget, result);
564571

565572
IUIAutomationElement *pChild;
@@ -580,6 +587,9 @@ winrt::Windows::Data::Json::JsonObject DumpUIATreeRecurse(
580587
::SysFreeString(localizedControlType);
581588
::SysFreeString(name);
582589
::SysFreeString(itemStatus);
590+
::SysFreeString(itemType);
591+
::SysFreeString(accessKey);
592+
::SysFreeString(description);
583593
return result;
584594
}
585595

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,12 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT
588588
pRetVal->bstrVal = SysAllocString(itemtype.c_str());
589589
break;
590590
}
591+
case UIA_FullDescriptionPropertyId: {
592+
pRetVal->vt = VT_BSTR;
593+
auto desc = ::Microsoft::Common::Unicode::Utf8ToUtf16(props->accessibilityDescription.value_or(""));
594+
pRetVal->bstrVal = SysAllocString(desc.c_str());
595+
break;
596+
}
591597
}
592598
return hr;
593599
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,12 @@ void ComponentView::updateAccessibilityProps(
819819
oldViewProps.accessibilityItemType,
820820
newViewProps.accessibilityItemType);
821821

822+
winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
823+
EnsureUiaProvider(),
824+
UIA_FullDescriptionPropertyId,
825+
oldViewProps.accessibilityDescription,
826+
newViewProps.accessibilityDescription);
827+
822828
if ((oldViewProps.accessibilityState.has_value() && oldViewProps.accessibilityState->selected.has_value()) !=
823829
((newViewProps.accessibilityState.has_value() && newViewProps.accessibilityState->selected.has_value()))) {
824830
auto compProvider =

vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ HostPlatformViewProps::HostPlatformViewProps(
5656
ReactNativeFeatureFlags::enableCppPropsIteratorSetter()
5757
? sourceProps.accessibilityAccessKey
5858
: convertRawProp(context, rawProps, "accessibilityAccessKey", sourceProps.accessibilityAccessKey, {})),
59+
accessibilityDescription(
60+
ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.accessibilityDescription
61+
: convertRawProp(
62+
context,
63+
rawProps,
64+
"accessibilityDescription",
65+
sourceProps.accessibilityDescription,
66+
{})),
5967
accessibilityLiveRegion(
6068
ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.accessibilityLiveRegion
6169
: convertRawProp(
@@ -104,6 +112,7 @@ void HostPlatformViewProps::setProp(
104112
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityLevel);
105113
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityItemType);
106114
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityAccessKey);
115+
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityDescription);
107116
RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityLiveRegion);
108117
RAW_SET_PROP_SWITCH_CASE_BASIC(keyDownEvents);
109118
RAW_SET_PROP_SWITCH_CASE_BASIC(keyUpEvents);

vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class HostPlatformViewProps : public BaseViewProps {
3232
std::optional<AccessibilityAnnotation> accessibilityAnnotation{};
3333
std::optional<std::string> accessibilityItemType{};
3434
std::optional<std::string> accessibilityAccessKey{};
35+
std::optional<std::string> accessibilityDescription{};
3536

3637
// std::optional<std::string> overflowAnchor{};
3738
std::optional<std::string> tooltip{};

vnext/src-win/Libraries/Components/View/View.windows.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ const View: component(
6767
accessibilityLabel,
6868
accessibilityLabelledBy,
6969
accessibilityLevel, // Windows
70+
accessibilityDescription, //Windows
7071
accessibilityLiveRegion,
7172
accessibilityPosInSet, // Windows
7273
accessibilitySetSize, // Windows
@@ -78,6 +79,7 @@ const View: component(
7879
'aria-expanded': ariaExpanded,
7980
'aria-multiselectable': ariaMultiselectable, // Windows
8081
'aria-required': ariaRequired, // Windows
82+
'aria-description': ariaDescription, //Windows
8183
'aria-hidden': ariaHidden,
8284
'aria-label': ariaLabel,
8385
'aria-labelledby': ariaLabelledBy,
@@ -250,6 +252,7 @@ const View: component(
250252
}
251253
accessibilityLabel={ariaLabel ?? accessibilityLabel}
252254
accessibilityLevel={ariaLevel ?? accessibilityLevel}
255+
accessibilityDescription={ariaDescription ?? accessibilityDescription}
253256
accessibilityPosInSet={ariaPosinset ?? accessibilityPosInSet}
254257
accessibilitySetSize={ariaSetsize ?? accessibilitySetSize}
255258
focusable={_focusable}
@@ -303,6 +306,9 @@ const View: component(
303306
}
304307
accessibilityLabel={ariaLabel ?? accessibilityLabel}
305308
accessibilityLevel={ariaLevel ?? accessibilityLevel}
309+
accessibilityDescription={
310+
ariaDescription ?? accessibilityDescription
311+
}
306312
accessibilityPosInSet={ariaPosinset ?? accessibilityPosInSet}
307313
accessibilitySetSize={ariaSetsize ?? accessibilitySetSize}
308314
focusable={_focusable}

0 commit comments

Comments
 (0)