diff options
| -rw-r--r-- | packages/SystemUI/compose/core/src/com/android/compose/gesture/NestedDraggable.kt | 5 | ||||
| -rw-r--r-- | packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/NestedDraggableTest.kt | 23 |
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 { |