[macOS] Use the new update semantics embedder API (flutter/engine#40584)

[macOS] Use the new update semantics embedder API
This commit is contained in:
Loïc Sharma 2023-03-28 13:18:50 -07:00 committed by GitHub
parent ca081b4928
commit 2686501928
4 changed files with 26 additions and 24 deletions

View File

@ -455,8 +455,8 @@ static void OnPlatformMessage(const FlutterPlatformMessage* message, FlutterEngi
flutterArguments.command_line_argc = static_cast<int>(argv.size());
flutterArguments.command_line_argv = argv.empty() ? nullptr : argv.data();
flutterArguments.platform_message_callback = (FlutterPlatformMessageCallback)OnPlatformMessage;
flutterArguments.update_semantics_callback = [](const FlutterSemanticsUpdate* update,
void* user_data) {
flutterArguments.update_semantics_callback2 = [](const FlutterSemanticsUpdate2* update,
void* user_data) {
// TODO(dkwingsmt): This callback only supports single-view, therefore it
// only operates on the default view. To support multi-view, we need a
// way to pass in the ID (probably through FlutterSemanticsUpdate).

View File

@ -198,12 +198,12 @@ TEST_F(FlutterEngineTest, CanToggleAccessibility) {
FlutterEngine* engine = GetFlutterEngine();
// Capture the update callbacks before the embedder API initializes.
auto original_init = engine.embedderAPI.Initialize;
std::function<void(const FlutterSemanticsUpdate*, void*)> update_semantics_callback;
std::function<void(const FlutterSemanticsUpdate2*, void*)> update_semantics_callback;
engine.embedderAPI.Initialize = MOCK_ENGINE_PROC(
Initialize, ([&update_semantics_callback, &original_init](
size_t version, const FlutterRendererConfig* config,
const FlutterProjectArgs* args, void* user_data, auto engine_out) {
update_semantics_callback = args->update_semantics_callback;
update_semantics_callback = args->update_semantics_callback2;
return original_init(version, config, args, user_data, engine_out);
}));
EXPECT_TRUE([engine runWithEntrypoint:@"main"]);
@ -222,7 +222,7 @@ TEST_F(FlutterEngineTest, CanToggleAccessibility) {
engine.semanticsEnabled = YES;
EXPECT_TRUE(enabled_called);
// Send flutter semantics updates.
FlutterSemanticsNode root;
FlutterSemanticsNode2 root;
root.id = 0;
root.flags = static_cast<FlutterSemanticsFlag>(0);
root.actions = static_cast<FlutterSemanticsAction>(0);
@ -239,7 +239,7 @@ TEST_F(FlutterEngineTest, CanToggleAccessibility) {
root.children_in_traversal_order = children;
root.custom_accessibility_actions_count = 0;
FlutterSemanticsNode child1;
FlutterSemanticsNode2 child1;
child1.id = 1;
child1.flags = static_cast<FlutterSemanticsFlag>(0);
child1.actions = static_cast<FlutterSemanticsAction>(0);
@ -254,11 +254,11 @@ TEST_F(FlutterEngineTest, CanToggleAccessibility) {
child1.child_count = 0;
child1.custom_accessibility_actions_count = 0;
FlutterSemanticsUpdate update;
update.nodes_count = 2;
FlutterSemanticsNode nodes[] = {root, child1};
FlutterSemanticsUpdate2 update;
update.node_count = 2;
FlutterSemanticsNode2* nodes[] = {&root, &child1};
update.nodes = nodes;
update.custom_actions_count = 0;
update.custom_action_count = 0;
update_semantics_callback(&update, (__bridge void*)engine);
// Verify the accessibility tree is attached to the flutter view.
@ -292,12 +292,12 @@ TEST_F(FlutterEngineTest, CanToggleAccessibilityWhenHeadless) {
FlutterEngine* engine = GetFlutterEngine();
// Capture the update callbacks before the embedder API initializes.
auto original_init = engine.embedderAPI.Initialize;
std::function<void(const FlutterSemanticsUpdate*, void*)> update_semantics_callback;
std::function<void(const FlutterSemanticsUpdate2*, void*)> update_semantics_callback;
engine.embedderAPI.Initialize = MOCK_ENGINE_PROC(
Initialize, ([&update_semantics_callback, &original_init](
size_t version, const FlutterRendererConfig* config,
const FlutterProjectArgs* args, void* user_data, auto engine_out) {
update_semantics_callback = args->update_semantics_callback;
update_semantics_callback = args->update_semantics_callback2;
return original_init(version, config, args, user_data, engine_out);
}));
EXPECT_TRUE([engine runWithEntrypoint:@"main"]);
@ -312,7 +312,7 @@ TEST_F(FlutterEngineTest, CanToggleAccessibilityWhenHeadless) {
engine.semanticsEnabled = YES;
EXPECT_TRUE(enabled_called);
// Send flutter semantics updates.
FlutterSemanticsNode root;
FlutterSemanticsNode2 root;
root.id = 0;
root.flags = static_cast<FlutterSemanticsFlag>(0);
root.actions = static_cast<FlutterSemanticsAction>(0);
@ -329,7 +329,7 @@ TEST_F(FlutterEngineTest, CanToggleAccessibilityWhenHeadless) {
root.children_in_traversal_order = children;
root.custom_accessibility_actions_count = 0;
FlutterSemanticsNode child1;
FlutterSemanticsNode2 child1;
child1.id = 1;
child1.flags = static_cast<FlutterSemanticsFlag>(0);
child1.actions = static_cast<FlutterSemanticsAction>(0);
@ -344,11 +344,11 @@ TEST_F(FlutterEngineTest, CanToggleAccessibilityWhenHeadless) {
child1.child_count = 0;
child1.custom_accessibility_actions_count = 0;
FlutterSemanticsUpdate update;
update.nodes_count = 2;
FlutterSemanticsNode nodes[] = {root, child1};
FlutterSemanticsUpdate2 update;
update.node_count = 2;
FlutterSemanticsNode2* nodes[] = {&root, &child1};
update.nodes = nodes;
update.custom_actions_count = 0;
update.custom_action_count = 0;
// This call updates semantics for the default view, which does not exist,
// and therefore this call is invalid. But the engine should not crash.
update_semantics_callback(&update, (__bridge void*)engine);

View File

@ -498,17 +498,19 @@ static void CommonInit(FlutterViewController* controller, FlutterEngine* engine)
return _engine != nil;
}
- (void)updateSemantics:(const FlutterSemanticsUpdate*)update {
- (void)updateSemantics:(const FlutterSemanticsUpdate2*)update {
NSAssert(_engine.semanticsEnabled, @"Semantics must be enabled.");
if (!_engine.semanticsEnabled) {
return;
}
for (size_t i = 0; i < update->nodes_count; i++) {
_bridge->AddFlutterSemanticsNodeUpdate(update->nodes[i]);
for (size_t i = 0; i < update->node_count; i++) {
const FlutterSemanticsNode2* node = update->nodes[i];
_bridge->AddFlutterSemanticsNodeUpdate(*node);
}
for (size_t i = 0; i < update->custom_actions_count; i++) {
_bridge->AddFlutterSemanticsCustomActionUpdate(update->custom_actions[i]);
for (size_t i = 0; i < update->custom_action_count; i++) {
const FlutterSemanticsCustomAction2* action = update->custom_actions[i];
_bridge->AddFlutterSemanticsCustomActionUpdate(*action);
}
_bridge->CommitUpdates();

View File

@ -52,7 +52,7 @@
* Notify from the framework that the semantics for this view needs to be
* updated.
*/
- (void)updateSemantics:(nonnull const FlutterSemanticsUpdate*)update;
- (void)updateSemantics:(nonnull const FlutterSemanticsUpdate2*)update;
@end