diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.cc b/shell/platform/fuchsia/flutter/accessibility_bridge.cc index c1f14df13ceac..c317a17b5497b 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.cc @@ -340,6 +340,14 @@ fuchsia::accessibility::semantics::States AccessibilityBridge::GetNodeStates( : fuchsia::accessibility::semantics::CheckedState::UNCHECKED); } + // Set enabled state. + if (node.HasFlag(flutter::SemanticsFlags::kHasEnabledState)) { + states.set_enabled_state( + node.HasFlag(flutter::SemanticsFlags::kIsEnabled) + ? fuchsia::accessibility::semantics::EnabledState::ENABLED + : fuchsia::accessibility::semantics::EnabledState::DISABLED); + } + // Set selected state. states.set_selected(node.HasFlag(flutter::SemanticsFlags::kIsSelected)); diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index 5ac2dd4da548c..fc4d0809e7633 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -483,6 +483,36 @@ TEST_F(AccessibilityBridgeTest, PopulatesToggledState) { EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); } +TEST_F(AccessibilityBridgeTest, PopulatesEnabledState) { + flutter::SemanticsNode node0; + node0.id = 0; + // HasEnabledState = true + // IsEnabled = true + node0.flags |= static_cast(flutter::SemanticsFlags::kHasEnabledState); + node0.flags |= static_cast(flutter::SemanticsFlags::kIsEnabled); + node0.value = "value"; + + accessibility_bridge_->AddSemanticsNodeUpdate({{0, node0}}, 1.f); + RunLoopUntilIdle(); + + EXPECT_EQ(0, semantics_manager_.DeleteCount()); + EXPECT_EQ(1, semantics_manager_.UpdateCount()); + EXPECT_EQ(1, semantics_manager_.CommitCount()); + EXPECT_EQ(1U, semantics_manager_.LastUpdatedNodes().size()); + const auto& fuchsia_node = semantics_manager_.LastUpdatedNodes().at(0u); + EXPECT_EQ(fuchsia_node.node_id(), static_cast(node0.id)); + EXPECT_TRUE(fuchsia_node.has_states()); + const auto& states = fuchsia_node.states(); + EXPECT_TRUE(states.has_enabled_state()); + EXPECT_EQ(states.enabled_state(), + fuchsia::accessibility::semantics::EnabledState::ENABLED); + EXPECT_TRUE(states.has_value()); + EXPECT_EQ(states.value(), node0.value); + + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); +} + TEST_F(AccessibilityBridgeTest, ApplyViewPixelRatioToRoot) { flutter::SemanticsNode node0; node0.id = 0;