From a9b3c936f16af38bc90444543da02489d24bcd71 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 26 May 2026 14:53:55 -0400 Subject: [PATCH] fix(android): detekt LongMethod on NowPlayingScreen (61/60) Adding the four shuffle/repeat parameters to the BottomActionsRow call pushed the function 1 line over the 60-line cap. Extracted the Column body into a private NowPlayingBody helper composable. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../minstrel/player/ui/NowPlayingScreen.kt | 89 +++++++++++-------- 1 file changed, 51 insertions(+), 38 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt b/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt index 8e95eb0f..4c3b6a1a 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/player/ui/NowPlayingScreen.kt @@ -96,44 +96,57 @@ fun NowPlayingScreen( snackbarHost = { SnackbarHost(snackbarHostState) }, containerColor = MaterialTheme.colorScheme.background, ) { inner -> - Column( - modifier = Modifier - .fillMaxSize() - .padding(inner) - .padding(horizontal = 24.dp), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - NowPlayingCover(coverUrl = track.coverUrl, contentDescription = track.title) - Spacer(Modifier.height(24.dp)) - TrackHeader( - title = track.title, - artist = track.artistName, - album = track.albumTitle, - ) - Spacer(Modifier.height(24.dp)) - ScrubberRow( - positionMs = state.positionMs, - durationMs = state.durationMs, - onSeek = viewModel::seekTo, - ) - Spacer(Modifier.height(8.dp)) - TransportRow( - isPlaying = state.isPlaying, - onPrev = viewModel::skipToPrevious, - onPlayPause = { if (state.isPlaying) viewModel.pause() else viewModel.play() }, - onNext = viewModel::skipToNext, - ) - Spacer(Modifier.height(16.dp)) - BottomActionsRow( - navController = navController, - track = track, - shuffleEnabled = state.shuffleEnabled, - repeatMode = state.repeatMode, - onToggleShuffle = viewModel::toggleShuffle, - onCycleRepeat = viewModel::cycleRepeat, - ) - } + NowPlayingBody( + inner = inner, + state = state, + track = track, + navController = navController, + viewModel = viewModel, + ) + } +} + +@Composable +private fun NowPlayingBody( + inner: androidx.compose.foundation.layout.PaddingValues, + state: com.fabledsword.minstrel.player.PlayerUiState, + track: com.fabledsword.minstrel.models.TrackRef, + navController: NavHostController, + viewModel: PlayerViewModel, +) { + Column( + modifier = Modifier + .fillMaxSize() + .padding(inner) + .padding(horizontal = 24.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + NowPlayingCover(coverUrl = track.coverUrl, contentDescription = track.title) + Spacer(Modifier.height(24.dp)) + TrackHeader(title = track.title, artist = track.artistName, album = track.albumTitle) + Spacer(Modifier.height(24.dp)) + ScrubberRow( + positionMs = state.positionMs, + durationMs = state.durationMs, + onSeek = viewModel::seekTo, + ) + Spacer(Modifier.height(8.dp)) + TransportRow( + isPlaying = state.isPlaying, + onPrev = viewModel::skipToPrevious, + onPlayPause = { if (state.isPlaying) viewModel.pause() else viewModel.play() }, + onNext = viewModel::skipToNext, + ) + Spacer(Modifier.height(16.dp)) + BottomActionsRow( + navController = navController, + track = track, + shuffleEnabled = state.shuffleEnabled, + repeatMode = state.repeatMode, + onToggleShuffle = viewModel::toggleShuffle, + onCycleRepeat = viewModel::cycleRepeat, + ) } }