From 4f616a4cf5064505a612c8f2926d8a213f7dbc2a Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Thu, 23 Mar 2023 18:07:47 -0700 Subject: [PATCH 01/16] Update FlutterEngine.mm --- .../macos/framework/Source/FlutterEngine.mm | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 64af3772290ad..1dbae9c7b42e2 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -150,6 +150,11 @@ - (void)loadAOTData:(NSString*)assetsDir; */ - (void)setUpPlatformViewChannel; +/** + * Creates an accessibility channel and sets up the message handler. + */ +- (void)setUpAccessibilityChannel; + /** * Handles messages received from the Flutter engine on the _*Channel channels. */ @@ -366,6 +371,9 @@ @implementation FlutterEngine { // A message channel for sending user settings to the flutter engine. FlutterBasicMessageChannel* _settingsChannel; + // A message channel for accessibility. + FlutterBasicMessageChannel* _accessibilityChannel; + // A method channel for miscellaneous platform functionality. FlutterMethodChannel* _platformChannel; @@ -409,6 +417,7 @@ - (instancetype)initWithName:(NSString*)labelPrefix _platformViewController = [[FlutterPlatformViewController alloc] init]; [self setUpPlatformViewChannel]; + [self setUpAccessibilityChannel]; [self setUpNotificationCenterListeners]; return self; @@ -923,6 +932,16 @@ - (void)setUpPlatformViewChannel { }]; } +- (void)setUpAccessibilityChannel { + _accessibilityChannel = + [FlutterBasicMessageChannel messageChannelWithName:@"flutter/accessibility" + binaryMessenger:self.binaryMessenger + codec:[FlutterStandardMessageCodec sharedInstance]]; + __weak FlutterEngine* weakSelf = self; + [_accessibilityChannel setMessageHandler:^(id message, FlutterReply reply) { + [weakSelf handleAccessibilityEvent: message]; + }]; +} - (void)setUpNotificationCenterListeners { NSNotificationCenter* center = [NSNotificationCenter defaultCenter]; // macOS fires this private message when VoiceOver turns on or off. @@ -967,7 +986,29 @@ - (void)onAccessibilityStatusChanged:(NSNotification*)notification { self.semanticsEnabled = enabled; } - +- (void)handleAccessibilityEvent: (NSDictionary*) annotatedEvent { + + NSString* type = annotatedEvent[@"type"]; + if ([type isEqualToString:@"announce"]) { + NSString* message = annotatedEvent[@"data"][@"message"]; + NSNumber* assertiveness = annotatedEvent[@"data"][@"assertiveness"]; + + NSAccessibilityPriorityLevel priority = + [assertiveness isEqualToNumber:@1] + ? NSAccessibilityPriorityHigh + : NSAccessibilityPriorityMedium + ; + + NSAccessibilityPostNotificationWithUserInfo( + [self viewControllerForId:kFlutterDefaultViewId].flutterView, + NSAccessibilityAnnouncementRequestedNotification, + @{ + NSAccessibilityAnnouncementKey : message + , NSAccessibilityPriorityKey : @(priority) + } + ); + } +} - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { if ([call.method isEqualToString:@"SystemNavigator.pop"]) { [NSApp terminate:self]; From 5f821a50371f5cc5e2e033556fb3cbee1bc63956 Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Thu, 23 Mar 2023 18:08:43 -0700 Subject: [PATCH 02/16] Update FlutterEngine.mm --- .../macos/framework/Source/FlutterEngine.mm | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 1dbae9c7b42e2..eb2406e088aa8 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -933,13 +933,13 @@ - (void)setUpPlatformViewChannel { } - (void)setUpAccessibilityChannel { - _accessibilityChannel = - [FlutterBasicMessageChannel messageChannelWithName:@"flutter/accessibility" - binaryMessenger:self.binaryMessenger - codec:[FlutterStandardMessageCodec sharedInstance]]; + _accessibilityChannel = [FlutterBasicMessageChannel + messageChannelWithName:@"flutter/accessibility" + binaryMessenger:self.binaryMessenger + codec:[FlutterStandardMessageCodec sharedInstance]]; __weak FlutterEngine* weakSelf = self; [_accessibilityChannel setMessageHandler:^(id message, FlutterReply reply) { - [weakSelf handleAccessibilityEvent: message]; + [weakSelf handleAccessibilityEvent:message]; }]; } - (void)setUpNotificationCenterListeners { @@ -986,27 +986,20 @@ - (void)onAccessibilityStatusChanged:(NSNotification*)notification { self.semanticsEnabled = enabled; } -- (void)handleAccessibilityEvent: (NSDictionary*) annotatedEvent { - +- (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent { NSString* type = annotatedEvent[@"type"]; if ([type isEqualToString:@"announce"]) { NSString* message = annotatedEvent[@"data"][@"message"]; NSNumber* assertiveness = annotatedEvent[@"data"][@"assertiveness"]; - NSAccessibilityPriorityLevel priority = - [assertiveness isEqualToNumber:@1] - ? NSAccessibilityPriorityHigh - : NSAccessibilityPriorityMedium - ; + NSAccessibilityPriorityLevel priority = [assertiveness isEqualToNumber:@1] + ? NSAccessibilityPriorityHigh + : NSAccessibilityPriorityMedium; NSAccessibilityPostNotificationWithUserInfo( - [self viewControllerForId:kFlutterDefaultViewId].flutterView, - NSAccessibilityAnnouncementRequestedNotification, - @{ - NSAccessibilityAnnouncementKey : message - , NSAccessibilityPriorityKey : @(priority) - } - ); + [self viewControllerForId:kFlutterDefaultViewId].flutterView, + NSAccessibilityAnnouncementRequestedNotification, + @{NSAccessibilityAnnouncementKey : message, NSAccessibilityPriorityKey : @(priority)}); } } - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { From b4cd5f6c048a08051d3ddff2e06cc08d5fbe4c57 Mon Sep 17 00:00:00 2001 From: hangyu Date: Tue, 28 Mar 2023 16:35:48 -0700 Subject: [PATCH 03/16] Update shell/platform/darwin/macos/framework/Source/FlutterEngine.mm Co-authored-by: Chris Bracken --- shell/platform/darwin/macos/framework/Source/FlutterEngine.mm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index eb2406e088aa8..a9ebbd8659fc9 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -991,6 +991,9 @@ - (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent { if ([type isEqualToString:@"announce"]) { NSString* message = annotatedEvent[@"data"][@"message"]; NSNumber* assertiveness = annotatedEvent[@"data"][@"assertiveness"]; + if (message == nil) { + return; + } NSAccessibilityPriorityLevel priority = [assertiveness isEqualToNumber:@1] ? NSAccessibilityPriorityHigh From 51e4da356d8eb116363bc43f77a64fe6146437ca Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:05:54 -0700 Subject: [PATCH 04/16] test --- .../macos/framework/Source/FlutterEngine.mm | 12 ++++++++---- .../macos/framework/Source/FlutterEngineTest.mm | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index a9ebbd8659fc9..b3a44b3fe8b31 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -999,12 +999,16 @@ - (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent { ? NSAccessibilityPriorityHigh : NSAccessibilityPriorityMedium; - NSAccessibilityPostNotificationWithUserInfo( - [self viewControllerForId:kFlutterDefaultViewId].flutterView, - NSAccessibilityAnnouncementRequestedNotification, - @{NSAccessibilityAnnouncementKey : message, NSAccessibilityPriorityKey : @(priority)}); + [self announceAccessibilityMessage: message withPriority: priority]; } } + +- (void)announceAccessibilityMessage:(NSString*)withPriority:(NSAccessibilityPrioirityKey){ + NSAccessibilityPostNotificationWithUserInfo( + [self viewControllerForId:kFlutterDefaultViewId].flutterView, + NSAccessibilityAnnouncementRequestedNotification, + @{NSAccessibilityAnnouncementKey : message, NSAccessibilityPriorityKey : @(priority)}); +} - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { if ([call.method isEqualToString:@"SystemNavigator.pop"]) { [NSApp terminate:self]; diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index c69679955f4f8..975f3d0c22f26 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -766,6 +766,23 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable EXPECT_TRUE(triedToTerminate); } +TEST_F(FlutterEngineTest, HandleAccessibilityEvent) { + bool announced = false; + id engineMock = CreateMockFlutterEngine(nil); + + OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] + withPriority:[OCMArg any]]) + .andDo((^(NSInvocation* invocation) { + announced =true; + })); + + NSData* test_message = [@"a message" dataUsingEncoding:FlutterStandardMessageCodec]; + + [engine.binaryMessenger sendOnChannel:@"flutter/accessibility" message:test_message]; + + EXPECT_TRUE(announced); +} + } // namespace flutter::testing // NOLINTEND(clang-analyzer-core.StackAddressEscape) From 066d78672201e67800ec798968d0fe910cd0d280 Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:07:50 -0700 Subject: [PATCH 05/16] Update FlutterEngineTest.mm --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 975f3d0c22f26..23d896a131048 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -770,16 +770,15 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable bool announced = false; id engineMock = CreateMockFlutterEngine(nil); - OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] - withPriority:[OCMArg any]]) + OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] withPriority:[OCMArg any]]) .andDo((^(NSInvocation* invocation) { - announced =true; + announced = true; })); NSData* test_message = [@"a message" dataUsingEncoding:FlutterStandardMessageCodec]; [engine.binaryMessenger sendOnChannel:@"flutter/accessibility" message:test_message]; - + EXPECT_TRUE(announced); } From 6e0363858880e85ee9218caf0878bf3d47d43abc Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:08:26 -0700 Subject: [PATCH 06/16] Update FlutterEngine.mm --- .../darwin/macos/framework/Source/FlutterEngine.mm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index b3a44b3fe8b31..342a6fa31864b 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -999,15 +999,15 @@ - (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent { ? NSAccessibilityPriorityHigh : NSAccessibilityPriorityMedium; - [self announceAccessibilityMessage: message withPriority: priority]; + [self announceAccessibilityMessage:message withPriority:priority]; } } -- (void)announceAccessibilityMessage:(NSString*)withPriority:(NSAccessibilityPrioirityKey){ +- (void)announceAccessibilityMessage:(NSString*)withPriority:(NSAccessibilityPrioirityKey) { NSAccessibilityPostNotificationWithUserInfo( - [self viewControllerForId:kFlutterDefaultViewId].flutterView, - NSAccessibilityAnnouncementRequestedNotification, - @{NSAccessibilityAnnouncementKey : message, NSAccessibilityPriorityKey : @(priority)}); + [self viewControllerForId:kFlutterDefaultViewId].flutterView, + NSAccessibilityAnnouncementRequestedNotification, + @{NSAccessibilityAnnouncementKey : message, NSAccessibilityPriorityKey : @(priority)}); } - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { if ([call.method isEqualToString:@"SystemNavigator.pop"]) { From 4a083509966ae84c8634b8a00a7ee93e7e740c4b Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:52:28 -0700 Subject: [PATCH 07/16] Update FlutterEngineTest.mm --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 23d896a131048..50c0cb0d91e3a 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -775,7 +775,15 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable announced = true; })); - NSData* test_message = [@"a message" dataUsingEncoding:FlutterStandardMessageCodec]; + NSDictionary *annotatedEvent = @{ + @"type": @"announce", + @"data": @{ + @"message": @"error message" + } + }; + + FlutterStandardMessageCodec *codec = [FlutterStandardMessageCodec sharedInstance]; + NSData *test_message = [codec encode:annotatedEvent]; [engine.binaryMessenger sendOnChannel:@"flutter/accessibility" message:test_message]; From cf191c8e2e944f4535d6918f7889cb180cd71592 Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Tue, 28 Mar 2023 17:54:02 -0700 Subject: [PATCH 08/16] Update FlutterEngineTest.mm --- .../macos/framework/Source/FlutterEngineTest.mm | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 50c0cb0d91e3a..bd8c2a03646ce 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -775,15 +775,12 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable announced = true; })); - NSDictionary *annotatedEvent = @{ - @"type": @"announce", - @"data": @{ - @"message": @"error message" - } - }; + NSDictionary* annotatedEvent = + @{@"type" : @"announce", + @"data" : @{@"message" : @"error message"}}; - FlutterStandardMessageCodec *codec = [FlutterStandardMessageCodec sharedInstance]; - NSData *test_message = [codec encode:annotatedEvent]; + FlutterStandardMessageCodec* codec = [FlutterStandardMessageCodec sharedInstance]; + NSData* test_message = [codec encode:annotatedEvent]; [engine.binaryMessenger sendOnChannel:@"flutter/accessibility" message:test_message]; From 1b4f3dd26e2d503a59545e3dea22dc468c9ab530 Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Tue, 28 Mar 2023 18:01:43 -0700 Subject: [PATCH 09/16] Update FlutterEngine.mm --- shell/platform/darwin/macos/framework/Source/FlutterEngine.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 342a6fa31864b..9ba5e88b2bb34 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -1003,7 +1003,7 @@ - (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent { } } -- (void)announceAccessibilityMessage:(NSString*)withPriority:(NSAccessibilityPrioirityKey) { +- (void)announceAccessibilityMessage:(NSString*)message withPriority:(NSAccessibilityPrioirityKey) priority { NSAccessibilityPostNotificationWithUserInfo( [self viewControllerForId:kFlutterDefaultViewId].flutterView, NSAccessibilityAnnouncementRequestedNotification, From f1b9b135852fd49d702a3ae45599f06215d48e7e Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Tue, 28 Mar 2023 18:03:04 -0700 Subject: [PATCH 10/16] Update FlutterEngine.mm --- shell/platform/darwin/macos/framework/Source/FlutterEngine.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 9ba5e88b2bb34..3cf7c6bf58875 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -1003,7 +1003,8 @@ - (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent { } } -- (void)announceAccessibilityMessage:(NSString*)message withPriority:(NSAccessibilityPrioirityKey) priority { +- (void)announceAccessibilityMessage:(NSString*)message + withPriority:(NSAccessibilityPrioirityKey)priority { NSAccessibilityPostNotificationWithUserInfo( [self viewControllerForId:kFlutterDefaultViewId].flutterView, NSAccessibilityAnnouncementRequestedNotification, From fb8fe4b7e596e72abb58192ef1f0afb386aa06d1 Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Wed, 29 Mar 2023 13:25:09 -0700 Subject: [PATCH 11/16] update --- .../platform/darwin/macos/framework/Source/FlutterEngine.mm | 2 +- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm index 3cf7c6bf58875..864049ff90452 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine.mm @@ -1004,7 +1004,7 @@ - (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent { } - (void)announceAccessibilityMessage:(NSString*)message - withPriority:(NSAccessibilityPrioirityKey)priority { + withPriority:(NSAccessibilityPriorityLevel)priority { NSAccessibilityPostNotificationWithUserInfo( [self viewControllerForId:kFlutterDefaultViewId].flutterView, NSAccessibilityAnnouncementRequestedNotification, diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index bd8c2a03646ce..f0546240f1c23 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -767,12 +767,12 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable } TEST_F(FlutterEngineTest, HandleAccessibilityEvent) { - bool announced = false; + __block BOOL announced = FALSE; id engineMock = CreateMockFlutterEngine(nil); OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] withPriority:[OCMArg any]]) .andDo((^(NSInvocation* invocation) { - announced = true; + announced = TRUE; })); NSDictionary* annotatedEvent = @@ -782,7 +782,7 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable FlutterStandardMessageCodec* codec = [FlutterStandardMessageCodec sharedInstance]; NSData* test_message = [codec encode:annotatedEvent]; - [engine.binaryMessenger sendOnChannel:@"flutter/accessibility" message:test_message]; + [engineMock sendOnChannel:@"flutter/accessibility" message:test_message]; EXPECT_TRUE(announced); } From c94863d6fe72f5c8dd667e9dbb61af53560a94fd Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Wed, 29 Mar 2023 13:55:02 -0700 Subject: [PATCH 12/16] update tests --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 2 +- .../darwin/macos/framework/Source/FlutterEngine_Internal.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index f0546240f1c23..0dfea7887ce85 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -770,7 +770,7 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable __block BOOL announced = FALSE; id engineMock = CreateMockFlutterEngine(nil); - OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] withPriority:[OCMArg any]]) + OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] withPriority:NSAccessibilityPriorityMedium]) .andDo((^(NSInvocation* invocation) { announced = TRUE; })); diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h index bbc4527543c9a..ddf6905f75f84 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h @@ -178,6 +178,11 @@ typedef NS_ENUM(NSInteger, FlutterAppExitResponse) { - (void)dispatchSemanticsAction:(FlutterSemanticsAction)action toTarget:(uint16_t)target withData:(fml::MallocMapping)data; +/** + * Announces accessibility messages. + */ +- (void)announceAccessibilityMessage:(NSString*)message + withPriority:(NSAccessibilityPriorityLevel)priority; @end From 6cc1494417e29a37bdefaef15e3919f178dfef7d Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Wed, 29 Mar 2023 13:55:57 -0700 Subject: [PATCH 13/16] Update FlutterEngineTest.mm --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 0dfea7887ce85..290d8b520d9c4 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -770,7 +770,8 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable __block BOOL announced = FALSE; id engineMock = CreateMockFlutterEngine(nil); - OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] withPriority:NSAccessibilityPriorityMedium]) + OCMStub([engineMock announceAccessibilityMessage:[OCMArg any] + withPriority:NSAccessibilityPriorityMedium]) .andDo((^(NSInvocation* invocation) { announced = TRUE; })); From 3ff6ee53fb956233c06d54082f1a8fdfaf28379f Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Wed, 29 Mar 2023 14:34:24 -0700 Subject: [PATCH 14/16] test --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 5 +---- .../darwin/macos/framework/Source/FlutterEngine_Internal.h | 6 ++++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 290d8b520d9c4..e1dc2b6140cf2 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -780,10 +780,7 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable @{@"type" : @"announce", @"data" : @{@"message" : @"error message"}}; - FlutterStandardMessageCodec* codec = [FlutterStandardMessageCodec sharedInstance]; - NSData* test_message = [codec encode:annotatedEvent]; - - [engineMock sendOnChannel:@"flutter/accessibility" message:test_message]; + [engineMock handleAccessibilityEvent: annotatedEvent]; EXPECT_TRUE(announced); } diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h index ddf6905f75f84..90d320eb74b7e 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h @@ -178,6 +178,12 @@ typedef NS_ENUM(NSInteger, FlutterAppExitResponse) { - (void)dispatchSemanticsAction:(FlutterSemanticsAction)action toTarget:(uint16_t)target withData:(fml::MallocMapping)data; + +/** + * Handles accessibility events. + */ +- (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent; + /** * Announces accessibility messages. */ From 4d6ed397e8be4ddd3fc9b297085670b1797e806b Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Wed, 29 Mar 2023 14:37:21 -0700 Subject: [PATCH 15/16] lint --- .../platform/darwin/macos/framework/Source/FlutterEngineTest.mm | 2 +- .../darwin/macos/framework/Source/FlutterEngine_Internal.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index e1dc2b6140cf2..87edc2a61be04 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -780,7 +780,7 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable @{@"type" : @"announce", @"data" : @{@"message" : @"error message"}}; - [engineMock handleAccessibilityEvent: annotatedEvent]; + [engineMock handleAccessibilityEvent:annotatedEvent]; EXPECT_TRUE(announced); } diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h index 90d320eb74b7e..9b705a030690b 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngine_Internal.h @@ -181,7 +181,7 @@ typedef NS_ENUM(NSInteger, FlutterAppExitResponse) { /** * Handles accessibility events. - */ + */ - (void)handleAccessibilityEvent:(NSDictionary*)annotatedEvent; /** From 7a114d82618f497716eea4852e72e1154dc499f1 Mon Sep 17 00:00:00 2001 From: hangyu <108393416+hangyujin@users.noreply.github.com> Date: Wed, 29 Mar 2023 16:13:04 -0700 Subject: [PATCH 16/16] Update FlutterEngineTest.mm --- .../darwin/macos/framework/Source/FlutterEngineTest.mm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm index 87edc2a61be04..36c7d745cdf41 100644 --- a/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm +++ b/shell/platform/darwin/macos/framework/Source/FlutterEngineTest.mm @@ -774,6 +774,10 @@ - (nonnull NSView*)createWithViewIdentifier:(int64_t)viewId arguments:(nullable withPriority:NSAccessibilityPriorityMedium]) .andDo((^(NSInvocation* invocation) { announced = TRUE; + [invocation retainArguments]; + NSString* message; + [invocation getArgument:&message atIndex:2]; + EXPECT_EQ(message, @"error message"); })); NSDictionary* annotatedEvent =