diff --git a/app/src/main/java/dev/kaizen/app/chat/Background.kt b/app/src/main/java/dev/kaizen/app/chat/Background.kt index dbaeb26..ccd038f 100644 --- a/app/src/main/java/dev/kaizen/app/chat/Background.kt +++ b/app/src/main/java/dev/kaizen/app/chat/Background.kt @@ -41,20 +41,25 @@ import dev.kaizen.app.ui.theme.rememberDitherBrush /** Mesh/blob background: large, heavily blurred color circles that drift slowly. */ @Composable -fun MeshBackground(content: @Composable BoxScope.() -> Unit) { +fun MeshBackground(animateBlobs: Boolean = true, content: @Composable BoxScope.() -> Unit) { val dark = isSystemInDarkTheme() val accent = LocalKaizenAccent.current val base = MaterialTheme.colorScheme.background - // Blobs are subtler in light mode. val factor = if (dark) 1f else 0.65f - val transition = rememberInfiniteTransition(label = "blobs") - val drift by transition.animateFloat( - initialValue = 0f, - targetValue = 1f, - animationSpec = infiniteRepeatable(tween(22000, easing = LinearEasing), RepeatMode.Reverse), - label = "drift", - ) - // Dither overlay (drawn last, over everything) — kills 8-bit gradient banding. + + val drift = if (animateBlobs) { + val transition = rememberInfiniteTransition(label = "blobs") + val d by transition.animateFloat( + initialValue = 0f, + targetValue = 1f, + animationSpec = infiniteRepeatable(tween(22000, easing = LinearEasing), RepeatMode.Reverse), + label = "drift", + ) + d + } else { + 0.5f + } + val ditherBrush = rememberDitherBrush() Box( Modifier diff --git a/app/src/main/java/dev/kaizen/app/chat/ChatScreen.kt b/app/src/main/java/dev/kaizen/app/chat/ChatScreen.kt index a154ab3..3eabaaa 100644 --- a/app/src/main/java/dev/kaizen/app/chat/ChatScreen.kt +++ b/app/src/main/java/dev/kaizen/app/chat/ChatScreen.kt @@ -603,7 +603,7 @@ fun ChatScreen( }, gesturesEnabled = true // Allows swiping from the screen's left edge to open the drawer ) { - MeshBackground { + MeshBackground(animateBlobs = messages.isEmpty()) { Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { // 1. Scrollable Chat Content // Stretches to the full screen, allowing bubbles to scroll cleanly behind the floating bottom dock. diff --git a/app/src/main/java/dev/kaizen/app/ui/sensor/TiltState.kt b/app/src/main/java/dev/kaizen/app/ui/sensor/TiltState.kt index 9791d8e..77b49ca 100644 --- a/app/src/main/java/dev/kaizen/app/ui/sensor/TiltState.kt +++ b/app/src/main/java/dev/kaizen/app/ui/sensor/TiltState.kt @@ -115,7 +115,7 @@ fun rememberTiltState(): State { Lifecycle.Event.ON_START -> { if (!registered) { sensorManager.registerListener( - listener, sensor, SensorManager.SENSOR_DELAY_GAME + listener, sensor, SensorManager.SENSOR_DELAY_UI ) registered = true } @@ -131,7 +131,7 @@ fun rememberTiltState(): State { lifecycle.addObserver(lifecycleObserver) if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { - sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME) + sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_UI) registered = true }