diff options
| author | 2025-01-09 12:04:10 +0100 | |
|---|---|---|
| committer | 2025-01-09 12:06:10 +0100 | |
| commit | c1e7c48dac2ebe0c717f51a9e85f91816d0afc20 (patch) | |
| tree | 041d26d2eb362b340c3b9461a7468b9f6b87f4c0 | |
| parent | be9d1529f344ce7bd764e83e1cc8b4ea7cca6ef3 (diff) | |
Avoid NPE when nested drag starts before enabling nestedDraggable()
This CL fixes an NPE that was happening when a nested drag was started
right before enabling a nestedDraggable(), leading to a null
lastFirstDown.
Bug: 378470603
Test: atest NestedDraggableTest
Flag: EXEMPT NestedDraggable is not used yet
Change-Id: Ib7a4122b2815b1d1e1a664f04bcc5d6bd76bf2d8
| -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 { |