From 2b17a4ed6973367b9d26e7644f08fb39eca9e4b6 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 30 May 2026 14:29:50 -0400 Subject: [PATCH] fix(android): AddToPlaylist routes empty list through UiState.Empty The original AddToPlaylistUiState only had Loading/Success/Error, with the empty-list message branched inside Success. After migrating to shared UiState (which adds Empty), the sheet's when over the state was non-exhaustive. Route empty through UiState.Empty at the VM, drop the inner branch in the sheet, and add the explicit Empty arm in the when block to satisfy the compiler. --- .../trackactions/AddToPlaylistSheet.kt | 19 ++++++++----------- .../trackactions/AddToPlaylistViewModel.kt | 4 +++- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistSheet.kt b/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistSheet.kt index d5ffcae8..288a14a6 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistSheet.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistSheet.kt @@ -60,22 +60,19 @@ fun AddToPlaylistSheet( modifier = Modifier.fillMaxWidth().padding(24.dp), contentAlignment = Alignment.Center, ) { CircularProgressIndicator(color = MaterialTheme.colorScheme.primary) } + UiState.Empty -> Text( + text = "You haven't created any playlists yet.", + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(horizontal = 20.dp, vertical = 12.dp), + ) is UiState.Error -> Text( text = s.message, color = MaterialTheme.colorScheme.error, modifier = Modifier.padding(horizontal = 20.dp, vertical = 12.dp), ) - is UiState.Success -> if (s.data.isEmpty()) { - Text( - text = "You haven't created any playlists yet.", - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = Modifier.padding(horizontal = 20.dp, vertical = 12.dp), - ) - } else { - LazyColumn(modifier = Modifier.fillMaxWidth()) { - items(items = s.data, key = { it.id }) { p -> - PlaylistPickRow(playlist = p, onClick = { onPick(p.id) }) - } + is UiState.Success -> LazyColumn(modifier = Modifier.fillMaxWidth()) { + items(items = s.data, key = { it.id }) { p -> + PlaylistPickRow(playlist = p, onClick = { onPick(p.id) }) } } } diff --git a/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistViewModel.kt b/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistViewModel.kt index f1bd4ff1..f8cffd92 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistViewModel.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/trackactions/AddToPlaylistViewModel.kt @@ -30,7 +30,9 @@ class AddToPlaylistViewModel @Inject constructor( val uiState: StateFlow>> = repository .observeUserPlaylists() - .map { list -> UiState.Success(list) as UiState> } + .map { list -> + if (list.isEmpty()) UiState.Empty else UiState.Success(list) + } .onStart { // Best-effort refresh so the sheet reflects newly-created // playlists from another device. Cached list shows first;