From b5fafb0eea4bb68298673e4c71be0eb13cd5f60c Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Tue, 1 Dec 2020 15:52:09 -0800 Subject: [PATCH 1/3] Add static text trait to plain semantics object with label in iOS --- .../darwin/ios/framework/Source/SemanticsObject.mm | 5 +++++ .../ios/framework/Source/SemanticsObjectTest.mm | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm index e8e54c6cd3f8d..0310dad93184b 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm @@ -530,6 +530,11 @@ - (UIAccessibilityTraits)accessibilityTraits { if ([self node].HasFlag(flutter::SemanticsFlags::kIsLink)) { traits |= UIAccessibilityTraitLink; } + if (traits == UIAccessibilityTraitNone && + [[self accessibilityLabel] length] != 0 && + ![self node].HasFlag(flutter::SemanticsFlags::kIsTextField)) { + traits = UIAccessibilityTraitStaticText; + } return traits; } diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm index 283a8fbbd508c..7edf61d37d7ac 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm @@ -89,6 +89,17 @@ - (void)testReplaceChildAtIndex { 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)testShouldTriggerAnnouncement { fml::WeakPtrFactory factory( new flutter::MockAccessibilityBridge()); From 1d8f7b06e9dcf97f9c8d6ec8eb6fe42f16fd2b83 Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Tue, 1 Dec 2020 16:09:14 -0800 Subject: [PATCH 2/3] update --- .../ios/framework/Source/SemanticsObject.mm | 1 + .../framework/Source/SemanticsObjectTest.mm | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm index 0310dad93184b..cb79d5a77ebbe 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm @@ -531,6 +531,7 @@ - (UIAccessibilityTraits)accessibilityTraits { traits |= UIAccessibilityTraitLink; } if (traits == UIAccessibilityTraitNone && + ![self hasChildren] && [[self accessibilityLabel] length] != 0 && ![self node].HasFlag(flutter::SemanticsFlags::kIsTextField)) { traits = UIAccessibilityTraitStaticText; diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm index 7edf61d37d7ac..b03144a5f3a40 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm @@ -100,6 +100,43 @@ - (void)testPlainSemanticsObjectWithLabelHasStaticTextTrait { 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()); From 286ee6e816c57a4e880b17ff8874ebb9c6a184d7 Mon Sep 17 00:00:00 2001 From: Chun-Heng Tai Date: Tue, 1 Dec 2020 16:36:37 -0800 Subject: [PATCH 3/3] format --- shell/platform/darwin/ios/framework/Source/SemanticsObject.mm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm index cb79d5a77ebbe..ddebb029c9958 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm @@ -530,8 +530,7 @@ - (UIAccessibilityTraits)accessibilityTraits { if ([self node].HasFlag(flutter::SemanticsFlags::kIsLink)) { traits |= UIAccessibilityTraitLink; } - if (traits == UIAccessibilityTraitNone && - ![self hasChildren] && + if (traits == UIAccessibilityTraitNone && ![self hasChildren] && [[self accessibilityLabel] length] != 0 && ![self node].HasFlag(flutter::SemanticsFlags::kIsTextField)) { traits = UIAccessibilityTraitStaticText;