Skip to content

Commit a58cc6d

Browse files
committed
Components can provide a default accessible name
Text component falls back to the content if accessibleLabel isn't set
1 parent 1ae6b0c commit a58cc6d

File tree

5 files changed

+19
-4
lines changed

5 files changed

+19
-4
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,8 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT
247247
}
248248
case UIA_NamePropertyId: {
249249
pRetVal->vt = VT_BSTR;
250-
auto wideName = ::Microsoft::Common::Unicode::Utf8ToUtf16(props->accessibilityLabel);
250+
auto wideName = ::Microsoft::Common::Unicode::Utf8ToUtf16(
251+
props->accessibilityLabel.empty() ? baseView->DefaultAccessibleName() : props->accessibilityLabel);
251252
pRetVal->bstrVal = SysAllocString(wideName.c_str());
252253
hr = pRetVal->bstrVal != nullptr ? S_OK : E_OUTOFMEMORY;
253254
break;

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1072,7 +1072,10 @@ void CompositionBaseComponentView::updateAccessibilityProps(
10721072
provider, UIA_IsKeyboardFocusablePropertyId, oldViewProps.focusable, newViewProps.focusable);
10731073

10741074
winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
1075-
provider, UIA_NamePropertyId, oldViewProps.accessibilityLabel, newViewProps.accessibilityLabel);
1075+
provider,
1076+
UIA_NamePropertyId,
1077+
oldViewProps.accessibilityLabel,
1078+
newViewProps.accessibilityLabel.empty() ? DefaultAccessibleName() : newViewProps.accessibilityLabel);
10761079

10771080
winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty(
10781081
provider,
@@ -1219,6 +1222,10 @@ std::string CompositionBaseComponentView::DefaultControlType() const noexcept {
12191222
return "group";
12201223
}
12211224

1225+
std::string CompositionBaseComponentView::DefaultAccessibleName() const noexcept {
1226+
return "";
1227+
}
1228+
12221229
CompositionViewComponentView::CompositionViewComponentView(
12231230
const winrt::Microsoft::ReactNative::Composition::ICompositionContext &compContext,
12241231
facebook::react::Tag tag)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ struct CompositionBaseComponentView : public IComponentView,
6767
winrt::IInspectable EnsureUiaProvider() noexcept override;
6868

6969
virtual std::string DefaultControlType() const noexcept;
70+
virtual std::string DefaultAccessibleName() const noexcept;
7071

7172
protected:
7273
std::array<winrt::Microsoft::ReactNative::Composition::SpriteVisual, SpecialBorderLayerCount>

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,15 @@ void ParagraphComponentView::updateProps(
4646
if (oldViewProps.textAttributes.foregroundColor != newViewProps.textAttributes.foregroundColor) {
4747
m_requireRedraw = true;
4848
}
49-
if (oldViewProps.textAttributes.opacity != newViewProps.textAttributes.opacity) {
49+
if (oldViewProps.textAttributes.opacity != newViewProps.textAttributes.opacity) {
5050
m_requireRedraw = true;
5151
}
5252

5353
if (oldViewProps.textAttributes.alignment != newViewProps.textAttributes.alignment) {
5454
updateTextAlignment(newViewProps.textAttributes.alignment);
5555
}
5656

57+
updateAccessibilityProps(oldViewProps, newViewProps);
5758
updateBorderProps(oldViewProps, newViewProps);
5859

5960
m_props = std::static_pointer_cast<facebook::react::ParagraphProps const>(props);
@@ -479,6 +480,10 @@ std::string ParagraphComponentView::DefaultControlType() const noexcept {
479480
return "text";
480481
}
481482

483+
std::string ParagraphComponentView::DefaultAccessibleName() const noexcept {
484+
return m_attributedStringBox.getValue().getString();
485+
}
486+
482487
winrt::Microsoft::ReactNative::Composition::IVisual ParagraphComponentView::Visual() const noexcept {
483488
return m_visual;
484489
}

vnext/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ struct ParagraphComponentView : CompositionBaseComponentView {
4242
facebook::react::SharedTouchEventEmitter touchEventEmitterAtPoint(facebook::react::Point pt) noexcept override;
4343

4444
winrt::Microsoft::ReactNative::Composition::IVisual Visual() const noexcept override;
45-
virtual std::string DefaultControlType() const noexcept;
45+
virtual std::string DefaultControlType() const noexcept override;
46+
virtual std::string DefaultAccessibleName() const noexcept override;
4647

4748
private:
4849
ParagraphComponentView(

0 commit comments

Comments
 (0)