diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/SearchQuerySaver.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/SearchQuerySaver.kt index f5a46cf..57df500 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/SearchQuerySaver.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/savers/SearchQuerySaver.kt @@ -15,5 +15,3 @@ object SearchQuerySaver : Saver> { query = value[1] as String ) } - -val SearchQueryListSaver = listSaver(SearchQuerySaver) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongsList.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongs.kt similarity index 99% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongsList.kt rename to app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongs.kt index 0c83068..db2ae28 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongsList.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistLocalSongs.kt @@ -37,7 +37,7 @@ import kotlinx.coroutines.flow.flowOn @ExperimentalAnimationApi @Composable -fun ArtistLocalSongsList( +fun ArtistLocalSongs( browseId: String, headerContent: @Composable (textButton: (@Composable () -> Unit)?) -> Unit, thumbnailContent: @Composable ColumnScope.() -> Unit, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistOverview.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistOverview.kt index 78e5ea9..03b2902 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistOverview.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistOverview.kt @@ -9,15 +9,12 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.text.BasicText import androidx.compose.foundation.verticalScroll import androidx.compose.material.ripple.rememberRipple @@ -25,14 +22,10 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder import it.vfsfitvnm.vimusic.R -import it.vfsfitvnm.vimusic.models.Artist -import it.vfsfitvnm.vimusic.ui.components.themed.Header -import it.vfsfitvnm.vimusic.ui.components.themed.HeaderPlaceholder import it.vfsfitvnm.vimusic.ui.components.themed.PrimaryButton import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton import it.vfsfitvnm.vimusic.ui.components.themed.ShimmerHost @@ -40,13 +33,11 @@ import it.vfsfitvnm.vimusic.ui.components.themed.TextPlaceholder import it.vfsfitvnm.vimusic.ui.styling.Dimensions import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance import it.vfsfitvnm.vimusic.ui.styling.px -import it.vfsfitvnm.vimusic.ui.styling.shimmer import it.vfsfitvnm.vimusic.ui.views.AlbumItem import it.vfsfitvnm.vimusic.ui.views.AlbumItemPlaceholder import it.vfsfitvnm.vimusic.ui.views.SongItem import it.vfsfitvnm.vimusic.ui.views.SongItemPlaceholder import it.vfsfitvnm.vimusic.utils.asMediaItem -import it.vfsfitvnm.vimusic.utils.center import it.vfsfitvnm.vimusic.utils.forcePlay import it.vfsfitvnm.vimusic.utils.secondary import it.vfsfitvnm.vimusic.utils.semiBold diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistScreen.kt index 74e1dde..6422200 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/artist/ArtistScreen.kt @@ -399,7 +399,7 @@ fun ArtistScreen(browseId: String) { ) } - 4 -> ArtistLocalSongsList( + 4 -> ArtistLocalSongs( browseId = browseId, headerContent = headerContent, thumbnailContent = thumbnailContent, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt index 2a69d59..42424ad 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistScreen.kt @@ -1,6 +1,7 @@ package it.vfsfitvnm.vimusic.ui.screens.builtinplaylist import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable @@ -11,6 +12,7 @@ import it.vfsfitvnm.vimusic.enums.BuiltInPlaylist import it.vfsfitvnm.vimusic.ui.components.themed.Scaffold import it.vfsfitvnm.vimusic.ui.screens.globalRoutes +@ExperimentalFoundationApi @ExperimentalAnimationApi @Composable fun BuiltInPlaylistScreen(builtInPlaylist: BuiltInPlaylist) { @@ -39,8 +41,8 @@ fun BuiltInPlaylistScreen(builtInPlaylist: BuiltInPlaylist) { ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { when (currentTabIndex) { - 0 -> BuiltInPlaylistSongList(builtInPlaylist = BuiltInPlaylist.Favorites) - 1 -> BuiltInPlaylistSongList(builtInPlaylist = BuiltInPlaylist.Offline) + 0 -> BuiltInPlaylistSongs(builtInPlaylist = BuiltInPlaylist.Favorites) + 1 -> BuiltInPlaylistSongs(builtInPlaylist = BuiltInPlaylist.Offline) } } } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/LocalPlaylistSongList.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt similarity index 94% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/LocalPlaylistSongList.kt rename to app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt index fc0cd19..e413cc7 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/LocalPlaylistSongList.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/builtinplaylist/BuiltInPlaylistSongs.kt @@ -1,6 +1,7 @@ package it.vfsfitvnm.vimusic.ui.screens.builtinplaylist import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Spacer @@ -10,6 +11,7 @@ import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import it.vfsfitvnm.reordering.animateItemPlacement import it.vfsfitvnm.vimusic.Database import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues import it.vfsfitvnm.vimusic.LocalPlayerServiceBinder @@ -35,9 +37,10 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map +@ExperimentalFoundationApi @ExperimentalAnimationApi @Composable -fun BuiltInPlaylistSongList(builtInPlaylist: BuiltInPlaylist) { +fun BuiltInPlaylistSongs(builtInPlaylist: BuiltInPlaylist) { val (colorPalette) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current @@ -116,7 +119,9 @@ fun BuiltInPlaylistSongList(builtInPlaylist: BuiltInPlaylist) { BuiltInPlaylist.Favorites -> InFavoritesMediaItemMenu(song = song) BuiltInPlaylist.Offline -> InHistoryMediaItemMenu(song = song) } - } + }, + modifier = Modifier + .animateItemPlacement() ) } } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbumList.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbums.kt similarity index 99% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbumList.kt rename to app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbums.kt index 8903be3..a5d6b97 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbumList.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeAlbums.kt @@ -61,7 +61,7 @@ import kotlinx.coroutines.flow.flowOn @ExperimentalFoundationApi @ExperimentalAnimationApi @Composable -fun HomeAlbumList( +fun HomeAlbums( onAlbumClick: (Album) -> Unit ) { val (colorPalette, typography, thumbnailShape) = LocalAppearance.current diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeArtistList.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeArtists.kt similarity index 100% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeArtistList.kt rename to app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeArtists.kt diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylistList.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylists.kt similarity index 99% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylistList.kt rename to app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylists.kt index 3f391af..cb2fb04 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylistList.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomePlaylists.kt @@ -57,7 +57,7 @@ import kotlinx.coroutines.flow.flowOn @ExperimentalFoundationApi @Composable -fun HomePlaylistList( +fun HomePlaylists( onBuiltInPlaylist: (BuiltInPlaylist) -> Unit, onPlaylistClick: (Playlist) -> Unit, ) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeScreen.kt index 396b00a..2263c30 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeScreen.kt @@ -99,7 +99,7 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { host { val (tabIndex, onTabChanged) = rememberPreference( homeScreenTabIndexKey, - defaultValue = 1 + defaultValue = 0 ) Scaffold( @@ -124,13 +124,13 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { onArtistClick = { artistRoute(it) }, onPlaylistClick = { playlistRoute(it) }, ) - 1 -> HomeSongList() - 2 -> HomePlaylistList( + 1 -> HomeSongs() + 2 -> HomePlaylists( onBuiltInPlaylist = { builtInPlaylistRoute(it) }, onPlaylistClick = { localPlaylistRoute(it.id) } ) 3 -> HomeArtistList(onArtistClick = { artistRoute(it.id) }) - 4 -> HomeAlbumList(onAlbumClick = { albumRoute(it.id) }) + 4 -> HomeAlbums(onAlbumClick = { albumRoute(it.id) }) } } } diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongList.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongs.kt similarity index 99% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongList.kt rename to app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongs.kt index bd23931..49c22bc 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongList.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/HomeSongs.kt @@ -66,7 +66,7 @@ import kotlinx.coroutines.flow.flowOn @ExperimentalFoundationApi @ExperimentalAnimationApi @Composable -fun HomeSongList() { +fun HomeSongs() { val (colorPalette, typography, thumbnailShape) = LocalAppearance.current val binder = LocalPlayerServiceBinder.current diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/QuickPicks.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/QuickPicks.kt index c8fe42d..26145c8 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/QuickPicks.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/home/QuickPicks.kt @@ -97,9 +97,7 @@ fun QuickPicks( stateSaver = resultSaver(nullableSaver(InnertubeRelatedPageSaver)), trending?.id ) { - trending?.id?.let { trendingVideoId -> - value = Innertube.relatedPage(NextBody(videoId = trendingVideoId)) - } + value = Innertube.relatedPage(NextBody(videoId = (trending?.id ?: "J7p4bzqLvCw"))) } val songThumbnailSizeDp = Dimensions.thumbnails.song diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistScreen.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistScreen.kt index a1c4581..7594526 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistScreen.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistScreen.kt @@ -29,7 +29,7 @@ fun LocalPlaylistScreen(playlistId: Long) { } ) { currentTabIndex -> saveableStateHolder.SaveableStateProvider(key = currentTabIndex) { - LocalPlaylistSongList( + LocalPlaylistSongs( playlistId = playlistId, onDelete = pop ) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongList.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongs.kt similarity index 99% rename from app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongList.kt rename to app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongs.kt index 56c6343..a6a8862 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongList.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/localplaylist/LocalPlaylistSongs.kt @@ -63,7 +63,7 @@ import kotlinx.coroutines.withContext @ExperimentalAnimationApi @ExperimentalFoundationApi @Composable -fun LocalPlaylistSongList( +fun LocalPlaylistSongs( playlistId: Long, onDelete: () -> Unit, ) { diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt index a886ed7..0f3e1fd 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/search/OnlineSearch.kt @@ -41,7 +41,8 @@ import it.vfsfitvnm.vimusic.LocalPlayerAwarePaddingValues import it.vfsfitvnm.vimusic.R import it.vfsfitvnm.vimusic.models.SearchQuery import it.vfsfitvnm.vimusic.query -import it.vfsfitvnm.vimusic.savers.SearchQueryListSaver +import it.vfsfitvnm.vimusic.savers.SearchQuerySaver +import it.vfsfitvnm.vimusic.savers.listSaver import it.vfsfitvnm.vimusic.savers.resultSaver import it.vfsfitvnm.vimusic.ui.components.themed.Header import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton @@ -72,7 +73,7 @@ fun OnlineSearch( val history by produceSaveableState( initialValue = emptyList(), - stateSaver = SearchQueryListSaver, + stateSaver = listSaver(SearchQuerySaver), key1 = textFieldValue.text ) { Database.queries("%${textFieldValue.text}%") @@ -84,7 +85,7 @@ fun OnlineSearch( val suggestionsResult by produceSaveableOneShotState( initialValue = null, stateSaver = resultSaver(autoSaver?>()), - key1 = textFieldValue.text + textFieldValue.text ) { if (textFieldValue.text.isNotEmpty()) { value = Innertube.searchSuggestions(SearchSuggestionsBody(input = textFieldValue.text)) diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/ProduceSaveableState.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/ProduceSaveableState.kt index 8e858dc..cf5ac25 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/ProduceSaveableState.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/utils/ProduceSaveableState.kt @@ -51,30 +51,6 @@ fun produceSaveableState( return state } -@Composable -fun produceSaveableOneShotState( - initialValue: T, - stateSaver: Saver, - @BuilderInference producer: suspend ProduceStateScope.() -> Unit -): State { - val state = rememberSaveable(stateSaver = stateSaver) { - mutableStateOf(initialValue) - } - - var produced by rememberSaveable { - mutableStateOf(false) - } - - LaunchedEffect(Unit) { - if (!produced) { - ProduceSaveableStateScope(state, coroutineContext).producer() - produced = true - } - } - - return state -} - @Composable fun produceSaveableOneShotState( initialValue: T,