summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedDraggable.kt5
-rw-r--r--packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedDraggableTest.kt23
2 files changed, 26 insertions, 2 deletions
diff --git a/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedDraggable.kt b/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedDraggable.kt
index 96401ce6e1c7..76dda8099e07 100644
--- a/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedDraggable.kt
+++ b/packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedDraggable.kt
@@ -549,9 +549,10 @@ private class NestedDraggableNode(
nestedScrollController == null &&
// TODO(b/388231324): Remove this.
!lastEventWasScrollWheel &&
- draggable.shouldConsumeNestedScroll(sign)
+ draggable.shouldConsumeNestedScroll(sign) &&
+ lastFirstDown != null
) {
- val startedPosition = checkNotNull(lastFirstDown) { "lastFirstDown is not set" }
+ val startedPosition = checkNotNull(lastFirstDown)
// TODO(b/382665591): Ensure that there is at least one pointer down.
val pointersDownCount = pointersDown.size.coerceAtLeast(1)
diff --git a/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedDraggableTest.kt b/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedDraggableTest.kt
index 5de0f1221f0f..8fa8e825b9ab 100644
--- a/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedDraggableTest.kt
+++ b/packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedDraggableTest.kt
@@ -773,6 +773,29 @@ class NestedDraggableTest(override val orientation: Orientation) : OrientationAw
rule.onNodeWithTag(buttonTag).assertTextEquals("Count: 3")
}
+ @Test
+ fun nestedDragNotStartedWhenEnabledAfterDragStarted() {
+ val draggable = TestDraggable()
+ var enabled by mutableStateOf(false)
+ val touchSlop =
+ rule.setContentWithTouchSlop {
+ Box(
+ Modifier.fillMaxSize()
+ .nestedDraggable(draggable, orientation, enabled = enabled)
+ .scrollable(rememberScrollableState { 0f }, orientation)
+ )
+ }
+
+ rule.onRoot().performTouchInput { down(center) }
+
+ enabled = true
+ rule.waitForIdle()
+
+ rule.onRoot().performTouchInput { moveBy((touchSlop + 1f).toOffset()) }
+
+ assertThat(draggable.onDragStartedCalled).isFalse()
+ }
+
private fun ComposeContentTestRule.setContentWithTouchSlop(
content: @Composable () -> Unit
): Float {