From 0927b9177b2f5f9afb9546211068089f7b39c6ec Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 26 May 2026 08:26:09 -0400 Subject: [PATCH] fix(android): extract MiniCover from MiniPlayer body (detekt LongMethod) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MiniPlayer body hit 66 lines after the AsyncImage branch added in f3ee182. Pulled the cover Box into its own MiniCover composable — takes coverUrl + contentDescription, identical surfaceVariant background + Lucide.Music fallback as before. MiniPlayer body drops back to ~45 lines. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../minstrel/player/ui/MiniPlayer.kt | 49 ++++++++++--------- 1 file changed, 27 insertions(+), 22 deletions(-) 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 571cbc54..13e6e4b6 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 @@ -38,6 +38,32 @@ private const val MINI_BAR_HEIGHT_DP = 64 private const val MINI_BAR_TONAL_ELEVATION_DP = 4 private const val COVER_SIZE_DP = 48 +@Composable +private fun MiniCover(coverUrl: String, contentDescription: String) { + Box( + modifier = Modifier + .size(COVER_SIZE_DP.dp) + .clip(RoundedCornerShape(FabledSwordFlatTokens.radiusSm)) + .background(MaterialTheme.colorScheme.surfaceVariant), + contentAlignment = Alignment.Center, + ) { + if (coverUrl.isEmpty()) { + Icon( + imageVector = Lucide.Music, + contentDescription = null, + tint = MaterialTheme.colorScheme.onSurfaceVariant, + ) + } else { + AsyncImage( + model = coverUrl, + contentDescription = contentDescription, + modifier = Modifier.size(COVER_SIZE_DP.dp), + contentScale = ContentScale.Crop, + ) + } + } +} + /** * Collapsed player bar shown above the bottom nav. Returns nothing * when no track is loaded so it doesn't take screen space on a @@ -69,28 +95,7 @@ fun MiniPlayer( modifier = Modifier.padding(horizontal = 12.dp), verticalAlignment = Alignment.CenterVertically, ) { - Box( - modifier = Modifier - .size(COVER_SIZE_DP.dp) - .clip(RoundedCornerShape(FabledSwordFlatTokens.radiusSm)) - .background(MaterialTheme.colorScheme.surfaceVariant), - contentAlignment = Alignment.Center, - ) { - if (track.coverUrl.isEmpty()) { - Icon( - imageVector = Lucide.Music, - contentDescription = null, - tint = MaterialTheme.colorScheme.onSurfaceVariant, - ) - } else { - AsyncImage( - model = track.coverUrl, - contentDescription = track.title, - modifier = Modifier.size(COVER_SIZE_DP.dp), - contentScale = ContentScale.Crop, - ) - } - } + MiniCover(coverUrl = track.coverUrl, contentDescription = track.title) Spacer(Modifier.width(12.dp)) Column(modifier = Modifier.weight(1f)) { Text(