diff --git a/android/app/src/main/kotlin/com/novasonic/app/ui/screen/PlaylistDetailScreen.kt b/android/app/src/main/kotlin/com/novasonic/app/ui/screen/PlaylistDetailScreen.kt index b778731..bd7c156 100644 --- a/android/app/src/main/kotlin/com/novasonic/app/ui/screen/PlaylistDetailScreen.kt +++ b/android/app/src/main/kotlin/com/novasonic/app/ui/screen/PlaylistDetailScreen.kt @@ -196,7 +196,10 @@ fun PlaylistDetailScreen( } } - // ── Play / Shuffle / Edit-mode row ──────────────────────────────── + // ── Play / Shuffle / Edit / Download ────────────────────────────── + // Four buttons in one row left no room for labels (the Play/Shuffle text was being + // clipped away), so all four are equal-width and icon-only. Play stays filled as the + // primary action; the rest are outlined and tint accent when active/done. Row( Modifier.fillMaxWidth().padding(horizontal = 16.dp, vertical = 12.dp), horizontalArrangement = Arrangement.spacedBy(10.dp), @@ -206,35 +209,33 @@ fun PlaylistDetailScreen( modifier = Modifier.weight(1f).height(46.dp), colors = ButtonDefaults.buttonColors(containerColor = NsAccent, contentColor = Color.White), shape = RoundedCornerShape(14.dp), + contentPadding = PaddingValues(0.dp), ) { - Icon(Icons.Default.PlayArrow, null, modifier = Modifier.size(20.dp)) - Spacer(Modifier.width(6.dp)) - Text("Play", fontFamily = Outfit, fontWeight = FontWeight.Bold, fontSize = 15.sp) + Icon(Icons.Default.PlayArrow, "Abspielen", modifier = Modifier.size(22.dp)) } OutlinedButton( onClick = { if (pl.entry.isNotEmpty()) onPlay(pl.entry.shuffled(), 0) }, modifier = Modifier.weight(1f).height(46.dp), border = ButtonDefaults.outlinedButtonBorder(enabled = true).copy(brush = SolidColor(NsAccent.copy(alpha = 0.55f))), shape = RoundedCornerShape(14.dp), + contentPadding = PaddingValues(0.dp), ) { - Icon(Icons.Default.Shuffle, null, modifier = Modifier.size(20.dp), tint = NsAccent) - Spacer(Modifier.width(6.dp)) - Text("Shuffle", fontFamily = Outfit, fontWeight = FontWeight.Bold, fontSize = 15.sp, color = NsAccent) + Icon(Icons.Default.Shuffle, "Zufällig abspielen", modifier = Modifier.size(20.dp), tint = NsAccent) } // Toggle edit mode for removing songs OutlinedButton( onClick = { editMode = !editMode }, - modifier = Modifier.height(46.dp), + modifier = Modifier.weight(1f).height(46.dp), border = ButtonDefaults.outlinedButtonBorder(enabled = true).copy( brush = SolidColor(if (editMode) NsAccent else NsOnSurface3) ), shape = RoundedCornerShape(14.dp), - contentPadding = PaddingValues(horizontal = 14.dp), + contentPadding = PaddingValues(0.dp), ) { Icon( if (editMode) Icons.Default.Done else Icons.Default.Edit, - null, - modifier = Modifier.size(18.dp), + if (editMode) "Bearbeiten beenden" else "Titel entfernen", + modifier = Modifier.size(20.dp), tint = if (editMode) NsAccent else NsOnSurface2, ) } @@ -242,17 +243,17 @@ fun PlaylistDetailScreen( val dlDone = downloadGroup?.let { it.downloadedTracks >= it.totalTracks && it.totalTracks > 0 } ?: false OutlinedButton( onClick = { if (!dlDone) vm.downloadPlaylist() }, - modifier = Modifier.height(46.dp), + modifier = Modifier.weight(1f).height(46.dp), border = ButtonDefaults.outlinedButtonBorder(enabled = true).copy( brush = SolidColor(if (dlDone) NsAccent else NsOnSurface3) ), shape = RoundedCornerShape(14.dp), - contentPadding = PaddingValues(horizontal = 14.dp), + contentPadding = PaddingValues(0.dp), ) { when { - dlDone -> Icon(Icons.Default.CheckCircle, null, modifier = Modifier.size(18.dp), tint = NsAccent) - isDownloading -> CircularProgressIndicator(modifier = Modifier.size(16.dp), strokeWidth = 2.dp, color = NsAccent) - else -> Icon(Icons.Default.Download, null, modifier = Modifier.size(18.dp), tint = NsOnSurface2) + dlDone -> Icon(Icons.Default.CheckCircle, "Offline verfügbar", modifier = Modifier.size(20.dp), tint = NsAccent) + isDownloading -> CircularProgressIndicator(modifier = Modifier.size(18.dp), strokeWidth = 2.dp, color = NsAccent) + else -> Icon(Icons.Default.Download, "Herunterladen", modifier = Modifier.size(20.dp), tint = NsOnSurface2) } } }