Add static text trait to plain semantics object with label in iOS (flutter/engine#22811)

* Add static text trait to plain semantics object with label in iOS

* update

* format
This commit is contained in:
chunhtai 2020-12-02 09:32:35 -08:00 committed by GitHub
parent fab16364f9
commit 7c9c91cf02
2 changed files with 53 additions and 0 deletions

View File

@ -530,6 +530,11 @@ flutter::SemanticsAction GetSemanticsActionForScrollDirection(
if ([self node].HasFlag(flutter::SemanticsFlags::kIsLink)) {
traits |= UIAccessibilityTraitLink;
}
if (traits == UIAccessibilityTraitNone && ![self hasChildren] &&
[[self accessibilityLabel] length] != 0 &&
![self node].HasFlag(flutter::SemanticsFlags::kIsTextField)) {
traits = UIAccessibilityTraitStaticText;
}
return traits;
}

View File

@ -89,6 +89,54 @@ class MockAccessibilityBridge : public AccessibilityBridgeIos {
XCTAssertEqualObjects(parent.children, @[ child2 ]);
}
- (void)testPlainSemanticsObjectWithLabelHasStaticTextTrait {
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
new flutter::MockAccessibilityBridge());
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
flutter::SemanticsNode node;
node.label = "foo";
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
[object setSemanticsNode:&node];
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitStaticText);
}
- (void)testIntresetingSemanticsObjectWithLabelHasStaticTextTrait {
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
new flutter::MockAccessibilityBridge());
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
flutter::SemanticsNode node;
node.label = "foo";
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
SemanticsObject* child1 = [[SemanticsObject alloc] initWithBridge:bridge uid:1];
object.children = @[ child1 ];
[object setSemanticsNode:&node];
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitNone);
}
- (void)testIntresetingSemanticsObjectWithLabelHasStaticTextTrait1 {
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
new flutter::MockAccessibilityBridge());
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
flutter::SemanticsNode node;
node.label = "foo";
node.flags = static_cast<int32_t>(flutter::SemanticsFlags::kIsTextField);
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
[object setSemanticsNode:&node];
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitNone);
}
- (void)testIntresetingSemanticsObjectWithLabelHasStaticTextTrait2 {
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
new flutter::MockAccessibilityBridge());
fml::WeakPtr<flutter::AccessibilityBridgeIos> bridge = factory.GetWeakPtr();
flutter::SemanticsNode node;
node.label = "foo";
node.flags = static_cast<int32_t>(flutter::SemanticsFlags::kIsButton);
FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0];
[object setSemanticsNode:&node];
XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitButton);
}
- (void)testShouldTriggerAnnouncement {
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
new flutter::MockAccessibilityBridge());