fix(android) detekt: extract AlbumDetailStateContent helper
Crossfade wrapper pushed AlbumDetailScreen over the 60-line cap (62). Extracted the inner state-machine + Crossfade + success-body composition into AlbumDetailStateContent so the main composable keeps only Scaffold/TopAppBar/PullToRefreshScaffold wiring. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+48
-33
@@ -95,39 +95,12 @@ fun AlbumDetailScreen(
|
||||
onRefresh = { viewModel.refresh().join() },
|
||||
modifier = Modifier.fillMaxSize().padding(inner),
|
||||
) {
|
||||
Crossfade(targetState = state, label = "album-detail") { s ->
|
||||
when (s) {
|
||||
is AlbumDetailUiState.Loading -> SkeletonTrackList()
|
||||
is AlbumDetailUiState.Error -> EmptyState(
|
||||
title = "Couldn't load album",
|
||||
body = s.message,
|
||||
)
|
||||
is AlbumDetailUiState.Success -> {
|
||||
val albumLiked by viewModel.albumLiked.collectAsStateWithLifecycle()
|
||||
val likedTrackIds by viewModel.likedTrackIds
|
||||
.collectAsStateWithLifecycle()
|
||||
val playerState by playerViewModel.uiState
|
||||
.collectAsStateWithLifecycle()
|
||||
AlbumBody(
|
||||
detail = s.detail,
|
||||
albumLiked = albumLiked,
|
||||
likedTrackIds = likedTrackIds,
|
||||
playingTrackId = playerState.currentTrack?.id,
|
||||
onPlayAll = { viewModel.play(startTrackId = null) },
|
||||
onShuffleAll = viewModel::shuffle,
|
||||
onTrackClick = { id -> viewModel.play(startTrackId = id) },
|
||||
onToggleAlbumLike = viewModel::toggleLikeAlbum,
|
||||
onToggleTrackLike = viewModel::toggleLikeTrack,
|
||||
onNavigateToAlbum = { id ->
|
||||
navController.navigate(AlbumDetail(id))
|
||||
},
|
||||
onNavigateToArtist = { id ->
|
||||
navController.navigate(ArtistDetail(id))
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
AlbumDetailStateContent(
|
||||
state = state,
|
||||
viewModel = viewModel,
|
||||
playerViewModel = playerViewModel,
|
||||
navController = navController,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,6 +111,48 @@ private fun titleFor(state: AlbumDetailUiState): String = when (state) {
|
||||
is AlbumDetailUiState.Error -> "Album"
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun AlbumDetailStateContent(
|
||||
state: AlbumDetailUiState,
|
||||
viewModel: AlbumDetailViewModel,
|
||||
playerViewModel: com.fabledsword.minstrel.player.ui.PlayerViewModel,
|
||||
navController: NavHostController,
|
||||
) {
|
||||
Crossfade(targetState = state, label = "album-detail") { s ->
|
||||
when (s) {
|
||||
is AlbumDetailUiState.Loading -> SkeletonTrackList()
|
||||
is AlbumDetailUiState.Error -> EmptyState(
|
||||
title = "Couldn't load album",
|
||||
body = s.message,
|
||||
)
|
||||
is AlbumDetailUiState.Success -> {
|
||||
val albumLiked by viewModel.albumLiked.collectAsStateWithLifecycle()
|
||||
val likedTrackIds by viewModel.likedTrackIds
|
||||
.collectAsStateWithLifecycle()
|
||||
val playerState by playerViewModel.uiState
|
||||
.collectAsStateWithLifecycle()
|
||||
AlbumBody(
|
||||
detail = s.detail,
|
||||
albumLiked = albumLiked,
|
||||
likedTrackIds = likedTrackIds,
|
||||
playingTrackId = playerState.currentTrack?.id,
|
||||
onPlayAll = { viewModel.play(startTrackId = null) },
|
||||
onShuffleAll = viewModel::shuffle,
|
||||
onTrackClick = { id -> viewModel.play(startTrackId = id) },
|
||||
onToggleAlbumLike = viewModel::toggleLikeAlbum,
|
||||
onToggleTrackLike = viewModel::toggleLikeTrack,
|
||||
onNavigateToAlbum = { id ->
|
||||
navController.navigate(AlbumDetail(id))
|
||||
},
|
||||
onNavigateToArtist = { id ->
|
||||
navController.navigate(ArtistDetail(id))
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun AlbumBody(
|
||||
detail: AlbumDetailRef,
|
||||
|
||||
Reference in New Issue
Block a user