Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f945a4cc authored by Mike Schneider's avatar Mike Schneider
Browse files

Refactor MotionValueDebugger to use CompositionLocal

Bug: 391553479
Test: Unit tests
Test: Unit tests
Flag: EXEMPT No production use / debug code only
Change-Id: I88af1a57fae3441619e6927e48d066ae20189192
parent 1125f7d1
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -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
@@ -140,6 +140,10 @@ private class OverscrollToDismissNode(
            spec = spec::value,
        )

    init {
        delegate(DebugMotionValueNode(motionValue))
    }

    private var delegateNode =
        delegate(NestedDraggableRootNode(this, orientation, null, enabled, true))

@@ -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 {
+31 −30
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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 }
@@ -158,7 +159,7 @@ class OverscrollToDismissTest {
    }

    private var isDismissed = false
    private val debugger = MotionValueDebuggerState()
    private val debugger = MotionValueDebugController()
    private lateinit var pagerState: PagerState

    @Composable
@@ -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(
@@ -199,6 +199,7 @@ class OverscrollToDismissTest {
                }
            }
        }
    }

    companion object {
        val xPositionInRoot =