Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 7d7a260

Browse files
authored
Add static text trait to plain semantics object with label in iOS (#22811)
* Add static text trait to plain semantics object with label in iOS * update * format
1 parent 64d9add commit 7d7a260

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

shell/platform/darwin/ios/framework/Source/SemanticsObject.mm

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -530,6 +530,11 @@ - (UIAccessibilityTraits)accessibilityTraits {
530530
if ([self node].HasFlag(flutter::SemanticsFlags::kIsLink)) {
531531
traits |= UIAccessibilityTraitLink;
532532
}
533+
if (traits == UIAccessibilityTraitNone && ![self hasChildren] &&
534+
[[self accessibilityLabel] length] != 0 &&
535+
![self node].HasFlag(flutter::SemanticsFlags::kIsTextField)) {
536+
traits = UIAccessibilityTraitStaticText;
537+
}
533538
return traits;
534539
}
535540

shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,54 @@ - (void)testReplaceChildAtIndex {
8989
XCTAssertEqualObjects(parent.children, @[ child2 ]);
9090
}
9191

92+
- (void)testPlainSemanticsObjectWithLabelHasStaticTextTrait {
93+
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
94+
new flutter::MockAccessibilityBridge());
95+
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
96+
flutter::SemanticsNode node;
97+
node.label = "foo";
98+
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
99+
[object setSemanticsNode:&node];
100+
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitStaticText);
101+
}
102+
103+
- (void)testIntresetingSemanticsObjectWithLabelHasStaticTextTrait {
104+
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
105+
new flutter::MockAccessibilityBridge());
106+
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
107+
flutter::SemanticsNode node;
108+
node.label = "foo";
109+
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
110+
SemanticsObject* child1 = [[SemanticsObject alloc] initWithBridge:bridge uid:1];
111+
object.children = @[ child1 ];
112+
[object setSemanticsNode:&node];
113+
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitNone);
114+
}
115+
116+
- (void)testIntresetingSemanticsObjectWithLabelHasStaticTextTrait1 {
117+
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
118+
new flutter::MockAccessibilityBridge());
119+
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
120+
flutter::SemanticsNode node;
121+
node.label = "foo";
122+
node.flags = static_cast<int32_t>(flutter::SemanticsFlags::kIsTextField);
123+
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
124+
[object setSemanticsNode:&node];
125+
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitNone);
126+
}
127+
128+
- (void)testIntresetingSemanticsObjectWithLabelHasStaticTextTrait2 {
129+
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
130+
new flutter::MockAccessibilityBridge());
131+
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
132+
flutter::SemanticsNode node;
133+
node.label = "foo";
134+
node.flags = static_cast<int32_t>(flutter::SemanticsFlags::kIsButton);
135+
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
136+
[object setSemanticsNode:&node];
137+
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitButton);
138+
}
139+
92140
- (void)testShouldTriggerAnnouncement {
93141
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
94142
new flutter::MockAccessibilityBridge());

0 commit comments

Comments
 (0)