Loading packages/SystemUI/compose/core/src/com/android/compose/gesture/OverscrollToDismiss.kt +9 −10 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.dp import com.android.mechanics.DistanceGestureContext import com.android.mechanics.MotionValue import com.android.mechanics.debug.findMotionValueDebugger import com.android.mechanics.debug.DebugMotionValueNode import com.android.mechanics.effects.MagneticDetach import com.android.mechanics.effects.MagneticDetach.Defaults.AttachDetachState import com.android.mechanics.spec.InputDirection Loading Loading @@ -140,6 +140,10 @@ private class OverscrollToDismissNode( spec = spec::value, ) init { delegate(DebugMotionValueNode(motionValue)) } private var delegateNode = delegate(NestedDraggableRootNode(this, orientation, null, enabled, true)) Loading Loading @@ -220,16 +224,11 @@ private class OverscrollToDismissNode( } private suspend fun keepRunningUntilDismissed() { val debuggerHandle = findMotionValueDebugger()?.register(motionValue) try { motionValue.keepRunningWhile { val isDismissed = get(isDismissedState) ?: false !(isDismissed && isStable) } onDismissed() } finally { debuggerHandle?.dispose() } } companion object { Loading packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/OverscrollToDismissTest.kt +31 −30 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color Loading @@ -41,8 +42,8 @@ import androidx.compose.ui.test.swipeRight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.mechanics.debug.MotionValueDebuggerState import com.android.mechanics.debug.motionValueDebugger import com.android.mechanics.debug.LocalMotionValueDebugController import com.android.mechanics.debug.MotionValueDebugController import com.android.mechanics.spec.builder.rememberMotionBuilderContext import com.google.common.truth.Truth.assertThat import kotlin.math.sin Loading Loading @@ -148,7 +149,7 @@ class OverscrollToDismissTest { } private fun performGesture(gestureControl: TouchInjectionScope.() -> Unit) = MotionControl { val debugInspector = debugger.observedMotionValues.single().debugInspector() val debugInspector = debugger.observed.single().debugInspector() try { performTouchInputAsync(onNodeWithTag("DismissContainer")) { gestureControl() } awaitCondition { !debugInspector.isAnimating && !pagerState.isScrollInProgress } Loading @@ -158,7 +159,7 @@ class OverscrollToDismissTest { } private var isDismissed = false private val debugger = MotionValueDebuggerState() private val debugger = MotionValueDebugController() private lateinit var pagerState: PagerState @Composable Loading @@ -169,11 +170,10 @@ class OverscrollToDismissTest { isSwipingEnabled: Boolean = true, ) { pagerState = rememberPagerState(initialPage) { pageCount } CompositionLocalProvider(LocalMotionValueDebugController provides debugger) { Box( modifier = Modifier.motionValueDebugger(debugger) .size(150.dp, 100.dp) Modifier.size(150.dp, 100.dp) .background(Color.Blue) .testTag("DismissContainer") .overscrollToDismiss( Loading @@ -199,6 +199,7 @@ class OverscrollToDismissTest { } } } } companion object { val xPositionInRoot = Loading Loading
packages/SystemUI/compose/core/src/com/android/compose/gesture/OverscrollToDismiss.kt +9 −10 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ import androidx.compose.ui.unit.Constraints import androidx.compose.ui.unit.dp import com.android.mechanics.DistanceGestureContext import com.android.mechanics.MotionValue import com.android.mechanics.debug.findMotionValueDebugger import com.android.mechanics.debug.DebugMotionValueNode import com.android.mechanics.effects.MagneticDetach import com.android.mechanics.effects.MagneticDetach.Defaults.AttachDetachState import com.android.mechanics.spec.InputDirection Loading Loading @@ -140,6 +140,10 @@ private class OverscrollToDismissNode( spec = spec::value, ) init { delegate(DebugMotionValueNode(motionValue)) } private var delegateNode = delegate(NestedDraggableRootNode(this, orientation, null, enabled, true)) Loading Loading @@ -220,16 +224,11 @@ private class OverscrollToDismissNode( } private suspend fun keepRunningUntilDismissed() { val debuggerHandle = findMotionValueDebugger()?.register(motionValue) try { motionValue.keepRunningWhile { val isDismissed = get(isDismissedState) ?: false !(isDismissed && isStable) } onDismissed() } finally { debuggerHandle?.dispose() } } companion object { Loading
packages/SystemUI/compose/core/tests/src/com/android/compose/gesture/OverscrollToDismissTest.kt +31 −30 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color Loading @@ -41,8 +42,8 @@ import androidx.compose.ui.test.swipeRight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.mechanics.debug.MotionValueDebuggerState import com.android.mechanics.debug.motionValueDebugger import com.android.mechanics.debug.LocalMotionValueDebugController import com.android.mechanics.debug.MotionValueDebugController import com.android.mechanics.spec.builder.rememberMotionBuilderContext import com.google.common.truth.Truth.assertThat import kotlin.math.sin Loading Loading @@ -148,7 +149,7 @@ class OverscrollToDismissTest { } private fun performGesture(gestureControl: TouchInjectionScope.() -> Unit) = MotionControl { val debugInspector = debugger.observedMotionValues.single().debugInspector() val debugInspector = debugger.observed.single().debugInspector() try { performTouchInputAsync(onNodeWithTag("DismissContainer")) { gestureControl() } awaitCondition { !debugInspector.isAnimating && !pagerState.isScrollInProgress } Loading @@ -158,7 +159,7 @@ class OverscrollToDismissTest { } private var isDismissed = false private val debugger = MotionValueDebuggerState() private val debugger = MotionValueDebugController() private lateinit var pagerState: PagerState @Composable Loading @@ -169,11 +170,10 @@ class OverscrollToDismissTest { isSwipingEnabled: Boolean = true, ) { pagerState = rememberPagerState(initialPage) { pageCount } CompositionLocalProvider(LocalMotionValueDebugController provides debugger) { Box( modifier = Modifier.motionValueDebugger(debugger) .size(150.dp, 100.dp) Modifier.size(150.dp, 100.dp) .background(Color.Blue) .testTag("DismissContainer") .overscrollToDismiss( Loading @@ -199,6 +199,7 @@ class OverscrollToDismissTest { } } } } companion object { val xPositionInRoot = Loading