Prettier visualization for motion mechanics debug.

Bug: 390325138
Test: Manual / demo code only
Change-Id: I1915777d578479c238cd759c9873c47fdf6e16b3
diff --git a/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MagneticOverviewDismiss.kt b/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MagneticOverviewDismiss.kt
index eedf373..fdfdf10 100644
--- a/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MagneticOverviewDismiss.kt
+++ b/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MagneticOverviewDismiss.kt
@@ -25,7 +25,6 @@
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
@@ -35,8 +34,10 @@
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.MotionScheme
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.LocalDensity
@@ -145,6 +146,8 @@
         }
     }
 
+    override var visualizationInputRange by mutableStateOf(0f..1000f)
+
     // Stuff below is only demo helpers - configuration, stuff that should go to libraries etc.
 
     @Composable
diff --git a/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MaterialFadeThrough.kt b/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MaterialFadeThrough.kt
index f474646..549bf95 100644
--- a/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MaterialFadeThrough.kt
+++ b/samples/MotionMechanics/src/com/android/mechanics/demo/demos/MaterialFadeThrough.kt
@@ -40,8 +40,12 @@
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import com.android.compose.animation.scene.ElementKey
 import com.android.compose.modifiers.thenIf
@@ -116,6 +120,9 @@
         return remember(fadeRevealSpec) { Config(fadeRevealSpec, showItemBackground = false) }
     }
 
+    override var visualizationInputRange by mutableStateOf(0f..1000f)
+    override val collapsedGraphHeight: Dp = 20.dp
+
     @Composable
     override fun ColumnScope.ConfigUi(config: Config, onConfigChanged: (Config) -> Unit) {
         LabelledCheckbox(
diff --git a/samples/MotionMechanics/src/com/android/mechanics/demo/staging/debug/DebugUi.kt b/samples/MotionMechanics/src/com/android/mechanics/demo/staging/debug/DebugUi.kt
index 4d70918..d16994b 100644
--- a/samples/MotionMechanics/src/com/android/mechanics/demo/staging/debug/DebugUi.kt
+++ b/samples/MotionMechanics/src/com/android/mechanics/demo/staging/debug/DebugUi.kt
@@ -48,6 +48,7 @@
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.drawWithContent
 import androidx.compose.ui.graphics.drawscope.rotate
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import com.android.compose.modifiers.height
 import com.android.mechanics.debug.DebugMotionValueVisualization
@@ -56,7 +57,13 @@
 
 /**  */
 @Composable
-fun DebugUi(modifier: Modifier = Modifier, content: @Composable (modifier: Modifier) -> Unit) {
+fun DebugUi(
+    visualizationInputRange: ClosedFloatingPointRange<Float>,
+    expandedGraphHeight: Dp,
+    collapsedGraphHeight: Dp,
+    modifier: Modifier = Modifier,
+    content: @Composable (modifier: Modifier) -> Unit,
+) {
     val debuggerState = remember { MotionValueDebuggerState() }
 
     Box(modifier = modifier.fillMaxHeight()) {
@@ -69,10 +76,10 @@
 
         var isExpanded by remember { mutableStateOf(true) }
         Card(modifier = Modifier.fillMaxWidth().padding(16.dp).align(Alignment.BottomStart)) {
-            Column(modifier = Modifier.padding(16.dp)) {
+            Column(modifier = Modifier.fillMaxWidth().padding(16.dp)) {
                 Row(
                     horizontalArrangement = Arrangement.SpaceBetween,
-                    modifier = Modifier.clickable { isExpanded = !isExpanded },
+                    modifier = Modifier.fillMaxWidth().clickable { isExpanded = !isExpanded },
                 ) {
                     Text(text = "Motion Value Visualization", style = typography.titleMedium)
                     val rotation by animateFloatAsState(if (isExpanded) 180f else 0f)
@@ -96,11 +103,15 @@
                         debuggerState.observedMotionValues.forEach {
                             key(it) {
                                 var rowExpanded by remember { mutableStateOf(false) }
-                                val height by animateDpAsState(if (rowExpanded) 60.dp else 20.dp)
+                                val height by
+                                    animateDpAsState(
+                                        if (rowExpanded) expandedGraphHeight
+                                        else collapsedGraphHeight
+                                    )
 
                                 DebugMotionValueVisualization(
                                     it,
-                                    0f..1000f,
+                                    visualizationInputRange,
                                     modifier =
                                         Modifier.height { height.toPx().toInt() }
                                             .fillMaxWidth()
diff --git a/samples/MotionMechanics/src/com/android/mechanics/demo/tuneable/Demo.kt b/samples/MotionMechanics/src/com/android/mechanics/demo/tuneable/Demo.kt
index 4001000..207fa4c 100644
--- a/samples/MotionMechanics/src/com/android/mechanics/demo/tuneable/Demo.kt
+++ b/samples/MotionMechanics/src/com/android/mechanics/demo/tuneable/Demo.kt
@@ -34,6 +34,7 @@
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import com.android.mechanics.demo.staging.debug.DebugUi
 
@@ -45,6 +46,14 @@
     @Composable fun ColumnScope.ConfigUi(config: T, onConfigChanged: (T) -> Unit)
 
     @Composable fun DemoUi(config: T, modifier: Modifier)
+
+    val visualizationInputRange: ClosedFloatingPointRange<Float>
+
+    val expandedGraphHeight: Dp
+        get() = 96.dp
+
+    val collapsedGraphHeight: Dp
+        get() = 48.dp
 }
 
 @Composable
@@ -74,7 +83,12 @@
             }
         }
 
-        DebugUi(modifier = modifier.fillMaxWidth().weight(1f, fill = true)) { contentModifier ->
+        DebugUi(
+            visualizationInputRange,
+            expandedGraphHeight,
+            collapsedGraphHeight,
+            modifier = modifier.fillMaxWidth().weight(1f, fill = true),
+        ) { contentModifier ->
             DemoUi(config, contentModifier)
         }
     }