mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[macOS] Use the new update semantics embedder API (flutter/engine#40584)
[macOS] Use the new update semantics embedder API
This commit is contained in:
parent
ca081b4928
commit
2686501928
@ -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).
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user