From ddb31b6e46f7e4e93f3fcb72613a553095d2c8c0 Mon Sep 17 00:00:00 2001 From: Bartek Pacia Date: Sat, 9 Dec 2023 02:02:18 +0100 Subject: [PATCH 1/3] SemanticsObject: override UIAccessibilityIdentification.accessibilityIdentifier --- .../darwin/ios/framework/Source/SemanticsObject.mm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm index 8f278fe31a721..7eb0c2384fe5b 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObject.mm @@ -524,6 +524,17 @@ - (BOOL)onCustomAccessibilityAction:(FlutterCustomAccessibilityAction*)action { return YES; } +- (NSString*)accessibilityIdentifier { + if (![self isAccessibilityBridgeAlive]) { + return nil; + } + + if ([self node].identifier.empty()) { + return nil; + } + return @([self node].identifier.data()); +} + - (NSString*)accessibilityLabel { if (![self isAccessibilityBridgeAlive]) { return nil; From 32a34a17bb5792d5bcab74bf3dc446550c15a770 Mon Sep 17 00:00:00 2001 From: Bartek Pacia Date: Sat, 9 Dec 2023 03:16:54 +0100 Subject: [PATCH 2/3] SemanticsObjectTest: add tests for accessibilityIdentifier --- .../framework/Source/SemanticsObjectTest.mm | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm index e064e9168c9d3..68e01e97f09ce 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm @@ -508,7 +508,22 @@ - (void)testFlutterScrollableSemanticsObjectIsHiddenWhenVoiceOverIsRunning { XCTAssertFalse(scrollView.isAccessibilityElement); } -- (void)testFlutterScrollableSemanticsObjectWithLabelValueHintIsNotHiddenWhenVoiceOverIsRunning { +- (void)testFlutterSemanticsObjectHasIdentifier { + flutter::testing::MockAccessibilityBridge* mock = new flutter::testing::MockAccessibilityBridge(); + mock->isVoiceOverRunningValue = true; + fml::WeakPtrFactory factory(mock); + fml::WeakPtr bridge = factory.GetWeakPtr(); + + flutter::SemanticsNode node; + node.identifier = "identifier"; + + FlutterSemanticsObject* object = [[FlutterSemanticsObject alloc] initWithBridge:bridge uid:0]; + [object setSemanticsNode:&node]; + XCTAssertTrue([object.accessibilityIdentifier isEqualToString:@"identifier"]); +} + +- (void) + testFlutterScrollableSemanticsObjectWithIdentifierLabelValueHintIsNotHiddenWhenVoiceOverIsRunning { flutter::testing::MockAccessibilityBridge* mock = new flutter::testing::MockAccessibilityBridge(); mock->isVoiceOverRunningValue = true; fml::WeakPtrFactory factory(mock); @@ -518,6 +533,7 @@ - (void)testFlutterScrollableSemanticsObjectWithLabelValueHintIsNotHiddenWhenVoi node.flags = static_cast(flutter::SemanticsFlags::kHasImplicitScrolling); node.actions = flutter::kHorizontalScrollSemanticsActions; node.rect = SkRect::MakeXYWH(0, 0, 100, 200); + node.identifier = "identifier"; node.label = "label"; node.value = "value"; node.hint = "hint"; @@ -530,6 +546,8 @@ - (void)testFlutterScrollableSemanticsObjectWithLabelValueHintIsNotHiddenWhenVoi [scrollable accessibilityBridgeDidFinishUpdate]; UIScrollView* scrollView = [scrollable nativeAccessibility]; XCTAssertTrue(scrollView.isAccessibilityElement); + FML_LOG(INFO) << "scrollView.accessibilityIdentifier" << scrollView.accessibilityIdentifier; + XCTAssertTrue([scrollView.accessibilityIdentifier isEqualToString:@"identifier"]); XCTAssertTrue( [scrollView.accessibilityLabel isEqualToString:NSLocalizedString(@"label", @"test")]); XCTAssertTrue( From 1e02f83af6e534234d7af007529f77ecdb560f50 Mon Sep 17 00:00:00 2001 From: Bartek Pacia Date: Mon, 11 Dec 2023 12:53:16 +0100 Subject: [PATCH 3/3] revert change that causes failing test --- .../darwin/ios/framework/Source/SemanticsObjectTest.mm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm index 68e01e97f09ce..02430aad16b4b 100644 --- a/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm +++ b/shell/platform/darwin/ios/framework/Source/SemanticsObjectTest.mm @@ -522,8 +522,7 @@ - (void)testFlutterSemanticsObjectHasIdentifier { XCTAssertTrue([object.accessibilityIdentifier isEqualToString:@"identifier"]); } -- (void) - testFlutterScrollableSemanticsObjectWithIdentifierLabelValueHintIsNotHiddenWhenVoiceOverIsRunning { +- (void)testFlutterScrollableSemanticsObjectWithLabelValueHintIsNotHiddenWhenVoiceOverIsRunning { flutter::testing::MockAccessibilityBridge* mock = new flutter::testing::MockAccessibilityBridge(); mock->isVoiceOverRunningValue = true; fml::WeakPtrFactory factory(mock); @@ -533,7 +532,6 @@ - (void)testFlutterSemanticsObjectHasIdentifier { node.flags = static_cast(flutter::SemanticsFlags::kHasImplicitScrolling); node.actions = flutter::kHorizontalScrollSemanticsActions; node.rect = SkRect::MakeXYWH(0, 0, 100, 200); - node.identifier = "identifier"; node.label = "label"; node.value = "value"; node.hint = "hint"; @@ -546,8 +544,6 @@ - (void)testFlutterSemanticsObjectHasIdentifier { [scrollable accessibilityBridgeDidFinishUpdate]; UIScrollView* scrollView = [scrollable nativeAccessibility]; XCTAssertTrue(scrollView.isAccessibilityElement); - FML_LOG(INFO) << "scrollView.accessibilityIdentifier" << scrollView.accessibilityIdentifier; - XCTAssertTrue([scrollView.accessibilityIdentifier isEqualToString:@"identifier"]); XCTAssertTrue( [scrollView.accessibilityLabel isEqualToString:NSLocalizedString(@"label", @"test")]); XCTAssertTrue(