From 7c9c91cf025b7d3f514c960aabeccda056caa180 Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Wed, 2 Dec 2020 09:32:35 -0800 Subject: [PATCH] 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 --- .../ios/framework/Source/SemanticsObject.mm | 5 ++ .../framework/Source/SemanticsObjectTest.mm | 48 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm index e8e54c6cd3f..ddebb029c99 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm @@ -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; } diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm index 283a8fbbd50..b03144a5f3a 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm @@ -89,6 +89,54 @@ class MockAccessibilityBridge : public AccessibilityBridgeIos { XCTAssertEqualObjects(parent.children, @[ child2 ]); } +- (void)testPlainSemanticsObjectWithLabelHasStaticTextTrait { + fml::WeakPtrFactory factory( + new flutter::MockAccessibilityBridge()); + fml::WeakPtr 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 factory( + new flutter::MockAccessibilityBridge()); + fml::WeakPtr 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 factory( + new flutter::MockAccessibilityBridge()); + fml::WeakPtr bridge = factory.GetWeakPtr(); + flutter::SemanticsNode node; + node.label = "foo"; + node.flags = static_cast(flutter::SemanticsFlags::kIsTextField); + FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0]; + [object setSemanticsNode:&node]; + XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitNone); +} + +- (void)testIntresetingSemanticsObjectWithLabelHasStaticTextTrait2 { + fml::WeakPtrFactory factory( + new flutter::MockAccessibilityBridge()); + fml::WeakPtr bridge = factory.GetWeakPtr(); + flutter::SemanticsNode node; + node.label = "foo"; + node.flags = static_cast(flutter::SemanticsFlags::kIsButton); + FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0]; + [object setSemanticsNode:&node]; + XCTAssertEqual([object accessibilityTraits], UIAccessibilityTraitButton); +} + - (void)testShouldTriggerAnnouncement { fml::WeakPtrFactory factory( new flutter::MockAccessibilityBridge());