summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jordan Demeulenaere <jdemeulenaere@google.com> 2025-01-09 12:04:10 +0100
committer Jordan Demeulenaere <jdemeulenaere@google.com> 2025-01-09 12:06:10 +0100
commitc1e7c48dac2ebe0c717f51a9e85f91816d0afc20 (patch)
tree041d26d2eb362b340c3b9461a7468b9f6b87f4c0
parentbe9d1529f344ce7bd764e83e1cc8b4ea7cca6ef3 (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.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 {