Skip to content

Commit

Permalink
Overrides accessibilityScrollToVisible
Browse files Browse the repository at this point in the history
  • Loading branch information
chunhtai committed May 15, 2023
1 parent bb366be commit ace40ec
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 1 deletion.
16 changes: 16 additions & 0 deletions shell/platform/darwin/ios/framework/Source/SemanticsObject.mm
Original file line number Diff line number Diff line change
Expand Up @@ -569,6 +569,22 @@ - (id)_accessibilityHitTest:(CGPoint)point withEvent:(UIEvent*)event {
return [self search:point];
}

// A private API iOS called when an item is swipe-to-focusd in VoiceOver.
- (BOOL)accessibilityScrollToVisible {
[self bridge]->DispatchSemanticsAction([self uid], flutter::SemanticsAction::kShowOnScreen);
// There is no documentation on the return value. It doesn't appear
// to make a difference whether it returns YES or NO. Use Yes for now.
return YES;
}

// A private API iOS called when an item is swipe-to-focusd VoiceOver.
//
// There isn't a documentation on the input child, and the `child` appears always
// the same object of `self`.
- (BOOL)accessibilityScrollToVisibleWithChild:(id)child {
return [child accessibilityScrollToVisible];
}

- (NSAttributedString*)accessibilityAttributedLabel {
NSString* label = [self accessibilityLabel];
if (label.length == 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ @interface SemanticsObjectTest : XCTestCase
@end

@interface SemanticsObject (Tests)

- (BOOL)accessibilityScrollToVisible;
- (BOOL)accessibilityScrollToVisibleWithChild:(id)child;
- (id)_accessibilityHitTest:(CGPoint)point withEvent:(UIEvent*)event;
@end

Expand Down Expand Up @@ -202,6 +203,42 @@ - (void)testAccessibilityHitTestNoFocusableItem {
XCTAssertNil(hitTestResult);
}

- (void)testAccessibilityScrollToVisible {
fml::WeakPtrFactory<flutter::MockAccessibilityBridge> factory(
new flutter::MockAccessibilityBridge());
fml::WeakPtr<flutter::MockAccessibilityBridge> bridge = factory.GetWeakPtr();
SemanticsObject* object3 = [[SemanticsObject alloc] initWithBridge:bridge uid:3];

flutter::SemanticsNode node3;
node3.id = 3;
node3.rect = SkRect::MakeXYWH(0, 0, 200, 200);
[object3 setSemanticsNode:&node3];

[object3 accessibilityScrollToVisible];

XCTAssertTrue(bridge->observations.size() == 1);
XCTAssertTrue(bridge->observations[0].id == 3);
XCTAssertTrue(bridge->observations[0].action == flutter::SemanticsAction::kShowOnScreen);
}

- (void)testAccessibilityScrollToVisibleWithChild {
fml::WeakPtrFactory<flutter::MockAccessibilityBridge> factory(
new flutter::MockAccessibilityBridge());
fml::WeakPtr<flutter::MockAccessibilityBridge> bridge = factory.GetWeakPtr();
SemanticsObject* object3 = [[SemanticsObject alloc] initWithBridge:bridge uid:3];

flutter::SemanticsNode node3;
node3.id = 3;
node3.rect = SkRect::MakeXYWH(0, 0, 200, 200);
[object3 setSemanticsNode:&node3];

[object3 accessibilityScrollToVisibleWithChild:object3];

XCTAssertTrue(bridge->observations.size() == 1);
XCTAssertTrue(bridge->observations[0].id == 3);
XCTAssertTrue(bridge->observations[0].action == flutter::SemanticsAction::kShowOnScreen);
}

- (void)testAccessibilityHitTestOutOfRect {
fml::WeakPtrFactory<flutter::AccessibilityBridgeIos> factory(
new flutter::MockAccessibilityBridge());
Expand Down

0 comments on commit ace40ec

Please sign in to comment.