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 dc08831..8d59233 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 @@ -31,14 +31,15 @@ import it.vfsfitvnm.vimusic.ui.screens.searchRoute import it.vfsfitvnm.vimusic.ui.screens.searchresult.SearchResultScreen import it.vfsfitvnm.vimusic.ui.screens.settings.SettingsScreen import it.vfsfitvnm.vimusic.ui.screens.settingsRoute -import it.vfsfitvnm.vimusic.utils.* +import it.vfsfitvnm.vimusic.utils.homeScreenTabIndexKey +import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey +import it.vfsfitvnm.vimusic.utils.preferences +import it.vfsfitvnm.vimusic.utils.rememberPreference @ExperimentalFoundationApi @ExperimentalAnimationApi @Composable fun HomeScreen(onPlaylistUrl: (String) -> Unit) { - val context = LocalContext.current - val saveableStateHolder = rememberSaveableStateHolder() RouteHandler( @@ -52,6 +53,7 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { initialState.route == searchResultRoute && targetState.route == searchRoute -> defaultUnstacking else -> defaultStill } + else -> defaultStill } } @@ -84,14 +86,18 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { } searchRoute { initialTextInput -> + val context = LocalContext.current + SearchScreen( initialTextInput = initialTextInput, onSearch = { query -> pop() searchResultRoute(query) - if (!context.preferences.getBoolean(pauseSearchHistoryKey, false)) query { - Database.insert(SearchQuery(query = query)) + if (!context.preferences.getBoolean(pauseSearchHistoryKey, false)) { + query { + Database.insert(SearchQuery(query = query)) + } } }, onViewPlaylist = onPlaylistUrl @@ -125,18 +131,22 @@ fun HomeScreen(onPlaylistUrl: (String) -> Unit) { onPlaylistClick = { playlistRoute(it) }, onSearchClick = { searchRoute("") } ) + 1 -> HomeSongs( onSearchClick = { searchRoute("") } ) + 2 -> HomePlaylists( onBuiltInPlaylist = { builtInPlaylistRoute(it) }, onPlaylistClick = { localPlaylistRoute(it.id) }, onSearchClick = { searchRoute("") } ) + 3 -> HomeArtistList( onArtistClick = { artistRoute(it.id) }, onSearchClick = { searchRoute("") } ) + 4 -> HomeAlbums( onAlbumClick = { albumRoute(it.id) }, onSearchClick = { searchRoute("") } 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 b9c285c..d9b9f0e 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 @@ -58,7 +58,6 @@ import it.vfsfitvnm.vimusic.ui.components.themed.FloatingActionsContainerWithScr import it.vfsfitvnm.vimusic.ui.components.themed.Header import it.vfsfitvnm.vimusic.ui.components.themed.SecondaryTextButton import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.* import it.vfsfitvnm.vimusic.utils.align import it.vfsfitvnm.vimusic.utils.center import it.vfsfitvnm.vimusic.utils.medium @@ -67,6 +66,8 @@ import it.vfsfitvnm.vimusic.utils.secondary import it.vfsfitvnm.innertube.Innertube import it.vfsfitvnm.innertube.models.bodies.SearchSuggestionsBody import it.vfsfitvnm.innertube.requests.searchSuggestions +import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey +import it.vfsfitvnm.vimusic.utils.preferences import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.flow.distinctUntilChanged @@ -90,10 +91,12 @@ fun OnlineSearch( stateSaver = listSaver(SearchQuerySaver), key1 = textFieldValue.text ) { - Database.queries("%${textFieldValue.text}%") - .flowOn(Dispatchers.IO) - .distinctUntilChanged { old, new -> old.size == new.size } - .collect { value = it } + if (!context.preferences.getBoolean(pauseSearchHistoryKey, false)) { + Database.queries("%${textFieldValue.text}%") + .flowOn(Dispatchers.IO) + .distinctUntilChanged { old, new -> old.size == new.size } + .collect { value = it } + } } var suggestionsResult by rememberSaveable(stateSaver = resultSaver(autoSaver?>())) { @@ -188,7 +191,7 @@ fun OnlineSearch( ) } - if (!context.preferences.getBoolean(pauseSearchHistoryKey, false)) items( + items( items = history, key = SearchQuery::id ) { searchQuery -> diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/OtherSettings.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/OtherSettings.kt index 431bf9d..24ca8de 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/OtherSettings.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/screens/settings/OtherSettings.kt @@ -35,7 +35,11 @@ import it.vfsfitvnm.vimusic.query import it.vfsfitvnm.vimusic.service.PlayerMediaBrowserService import it.vfsfitvnm.vimusic.ui.components.themed.Header import it.vfsfitvnm.vimusic.ui.styling.LocalAppearance -import it.vfsfitvnm.vimusic.utils.* +import it.vfsfitvnm.vimusic.utils.isIgnoringBatteryOptimizations +import it.vfsfitvnm.vimusic.utils.isInvincibilityEnabledKey +import it.vfsfitvnm.vimusic.utils.pauseSearchHistoryKey +import it.vfsfitvnm.vimusic.utils.produceSaveableState +import it.vfsfitvnm.vimusic.utils.rememberPreference import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flowOn @@ -77,10 +81,7 @@ fun OtherSettings() { isIgnoringBatteryOptimizations = context.isIgnoringBatteryOptimizations } - var pauseSearchHistory by rememberPreference( - pauseSearchHistoryKey, - false - ) + var pauseSearchHistory by rememberPreference(pauseSearchHistoryKey, false) val queriesCount by produceSaveableState(initialValue = 0, stateSaver = autoSaver()) { Database.queriesCount() @@ -113,6 +114,28 @@ fun OtherSettings() { SettingsGroupSpacer() + SettingsEntryGroupText(title = "SEARCH HISTORY") + + SwitchSettingEntry( + title = "Pause search history", + text = "Neither save new searched queries nor show history", + isChecked = pauseSearchHistory, + onCheckedChange = { pauseSearchHistory = it } + ) + + SettingsEntry( + title = "Clear search history", + text = if (queriesCount > 0) { + "Delete $queriesCount search queries" + } else { + "History is empty" + }, + isEnabled = queriesCount > 0, + onClick = { query(Database::clearQueries) } + ) + + SettingsGroupSpacer() + SettingsEntryGroupText(title = "SERVICE LIFETIME") ImportantSettingsDescription(text = "If battery optimizations are applied, the playback notification can suddenly disappear when paused.") @@ -163,25 +186,5 @@ fun OtherSettings() { isChecked = isInvincibilityEnabled, onCheckedChange = { isInvincibilityEnabled = it } ) - - SettingsEntryGroupText(title = "SEARCH HISTORY") - - SwitchSettingEntry( - title = "Pause search history", - text = "Neither save new searched queries nor show already existing items in the history", - isChecked = pauseSearchHistory, - onCheckedChange = { pauseSearchHistory = it } - ) - - SettingsEntry( - title = "Clear search history", - text = if (queriesCount > 0) { - "Delete $queriesCount search queries" - } else { - "History is empty" - }, - isEnabled = queriesCount > 0, - onClick = { query(Database::clearQueries) } - ) } }