This commit is contained in:
Michael Schneider
2019-06-13 07:40:03 -07:00
parent 2de8eec67e
commit fed2bb9a72
2 changed files with 56 additions and 1 deletions
+5 -1
View File
@@ -237,11 +237,15 @@ static void CollectAccessibilityElements(ASDisplayNode *node, NSMutableArray *el
// Accessiblity element is not layer backed just add the view as accessibility element
[elements addObject:subnode.view];
}
// TODO(maicki): Do we have to handle a subnode accessibility container
} else if (subnode.isAccessibilityContainer) {
// Handle subnodes that are accessibility containers
CollectAccessibilityElementsForContainer(subnode, view, elements);
} else if (subnode.isLayerBacked) {
// Go down the hierarchy of the layer backed subnode and collect all of the UIAccessibilityElement
CollectUIAccessibilityElementsForNode(subnode, node, view, elements);
} else if (subnode.accessibilityElementCount > 0) {
// UIView is itself a UIAccessibilityContainer just add it
// UIView is itself a UIAccessibilityContainer just add it to the elements
[elements addObject:subnode.view];
}
}
+51
View File
@@ -107,4 +107,55 @@
XCTAssertFalse(accessibleTextNode.isAccessibilityElement);
}
- (void)testAccessibilityLayerBackedSubContainerWithinContainer
{
ASDisplayNode *container = [[ASDisplayNode alloc] init];
container.frame = CGRectMake(50, 50, 200, 600);
ASDisplayNode *subContainer = [[ASDisplayNode alloc] init];
subContainer.frame = CGRectMake(50, 50, 200, 600);
// SubContainer is explicitly layerBacked
subContainer.layerBacked = YES;
subContainer.isAccessibilityContainer = YES;
[container addSubnode:subContainer];
ASTextNode *text1 = [[ASTextNode alloc] init];
text1.attributedText = [[NSAttributedString alloc] initWithString:@"hello"];
text1.frame = CGRectMake(50, 100, 200, 200);
text1.layerBacked = YES;
[subContainer addSubnode:text1];
// This is a text that acts like a button
ASTextNode *text2 = [[ASTextNode alloc] init];
text2.accessibilityTraits = UIAccessibilityTraitButton;
text2.attributedText = [[NSAttributedString alloc] initWithString:@"world"];
text2.frame = CGRectMake(50, 300, 200, 200);
text2.layerBacked = YES;
[subContainer addSubnode:text2];
// Setting the container explicitly as no accessibility container
container.isAccessibilityContainer = NO;
// TODO(maicki): I this the right output??
// TODO(maicki): Should this return an accessibility custom actions somewhere?
// TODO(maicki): This needs to be newly handled: a container that is not layer backed and not an accessiblity container and a subcontainer that is layer backed and a accessibiilty container
NSArray<UIAccessibilityElement *> *accessibilityElements = container.view.accessibilityElements;
XCTAssertEqual(accessibilityElements.count, 2);
XCTAssertEqualObjects(accessibilityElements[0].accessibilityLabel, @"hello");
XCTAssertEqualObjects(accessibilityElements[1].accessibilityLabel, @"world");
// container.isAccessibilityContainer = YES;
// container.view.accessibilityElements = nil;
// accessibilityElements = container.view.accessibilityElements;
//
// // TODO(maicki): I this the right output??
// XCTAssertEqual(accessibilityElements.count, 2);
//
// NSArray<UIAccessibilityCustomAction *> *firstAccessibilityElementCustomActions = accessibilityElements[1].accessibilityCustomActions;
// XCTAssertEqual(firstAccessibilityElementCustomActions.count, 1);
// XCTAssertEqualObjects(firstAccessibilityElementCustomActions[0].name, @"world");
// XCTAssertEqualObjects(accessibilityElements[1].accessibilityLabel, @"hello");
}
@end