diff --git a/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java index 8bfea3ce89..0f28573023 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -802,6 +802,15 @@ public class AccessibilityBridge extends AccessibilityNodeProvider { result.addAction(AccessibilityNodeInfo.ACTION_CLICK); result.setClickable(true); } + } else { + // Prevent Slider to receive a regular tap which will change the value. + // + // This is needed because it causes slider to select to middle if it + // doesn't have a semantics tap. + if (semanticsNode.hasFlag(Flag.IS_SLIDER)) { + result.addAction(AccessibilityNodeInfo.ACTION_CLICK); + result.setClickable(true); + } } if (semanticsNode.hasAction(Action.LONG_PRESS)) { if (semanticsNode.onLongPressOverride != null) { diff --git a/engine/src/flutter/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java b/engine/src/flutter/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java index f86ea7a3b8..0116167245 100644 --- a/engine/src/flutter/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java +++ b/engine/src/flutter/shell/platform/android/test/io/flutter/view/AccessibilityBridgeTest.java @@ -2165,6 +2165,21 @@ public class AccessibilityBridgeTest { verify(mockEvent).setSource(eq(mockRootView), eq(123)); } + @Test + public void itAddsClickActionToSliderNodeInfo() { + AccessibilityBridge accessibilityBridge = setUpBridge(); + + TestSemanticsNode testSemanticsNode = new TestSemanticsNode(); + testSemanticsNode.addFlag(AccessibilityBridge.Flag.IS_SLIDER); + TestSemanticsUpdate testSemanticsUpdate = testSemanticsNode.toUpdate(); + testSemanticsUpdate.sendUpdateToBridge(accessibilityBridge); + AccessibilityNodeInfo nodeInfo = accessibilityBridge.createAccessibilityNodeInfo(0); + + assertEquals(nodeInfo.isClickable(), true); + List actions = nodeInfo.getActionList(); + assertTrue(actions.contains(AccessibilityNodeInfo.AccessibilityAction.ACTION_CLICK)); + } + AccessibilityBridge setUpBridge() { return setUpBridge(null, null, null, null, null, null); }