diff --git a/android/app/src/main/java/com/fabledsword/minstrel/player/ui/MiniPlayer.kt b/android/app/src/main/java/com/fabledsword/minstrel/player/ui/MiniPlayer.kt index eba3ddce..3c2cce15 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/player/ui/MiniPlayer.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/player/ui/MiniPlayer.kt @@ -109,8 +109,11 @@ private fun MiniCover(coverUrl: String, contentDescription: String) { * NowPlayingScreen via [onExpandClick]. * * Layout (Column): - * - Slim seek slider at the top (4dp track) - * - Row: cover | title/artist column | like | prev | play/pause | next + * - Slim seek slider pinned at the top (4dp track) + * - Row: cover | title/artist column | like | prev | play/pause | next. + * Weighted so it fills the rest of the fixed-height bar and centres its + * own content; otherwise the row keeps its intrinsic 48dp and the + * leftover height collects at the bottom as dead surface. * * No kebab on the mini bar (operator 2026-06-01): the full kebab * surface lives on NowPlayingScreen, and dropping it from the mini @@ -164,6 +167,12 @@ fun MiniPlayer( durationMs = state.durationMs, ) MiniRow( + // Take whatever the progress fill leaves. Without this the + // Column stacks 4dp + the row's intrinsic 48dp from the top + // and the remaining 28dp of an 80dp bar sits empty + // underneath — the content looked top-aligned rather than + // centred, with a dead strip above the gesture bar. + modifier = Modifier.weight(1f), track = track, isPlaying = state.isPlaying, isUpnpLoading = state.isUpnpLoading, @@ -205,6 +214,7 @@ private fun MiniProgressFill(positionMs: Long, durationMs: Long) { @Composable @Suppress("LongParameterList") private fun MiniRow( + modifier: Modifier, track: TrackRef, isPlaying: Boolean, isUpnpLoading: Boolean, @@ -216,7 +226,7 @@ private fun MiniRow( onToggleLike: () -> Unit, ) { Row( - modifier = Modifier + modifier = modifier .fillMaxWidth() .padding(horizontal = 12.dp), verticalAlignment = Alignment.CenterVertically,