From 5586cbeb161715eb893bedef18fc03b484570fa6 Mon Sep 17 00:00:00 2001 From: stevenyomi <95685115+stevenyomi@users.noreply.github.com> Date: Thu, 22 Dec 2022 11:14:04 +0800 Subject: [PATCH] Fix browse search query display and keyboard focus (#8781) (cherry picked from commit a8230ad574fb5c5dfa22a571862890e414649215) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt --- .../kanade/presentation/components/AppBar.kt | 1 + .../source/browse/BrowseSourceScreenModel.kt | 94 +++++++++---------- 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt index db26ca0a4..48c6cff85 100644 --- a/app/src/main/java/eu/kanade/presentation/components/AppBar.kt +++ b/app/src/main/java/eu/kanade/presentation/components/AppBar.kt @@ -319,6 +319,7 @@ fun SearchToolbar( ) LaunchedEffect(searchClickCount) { if (searchQuery == null) return@LaunchedEffect + if (searchClickCount == 0 && searchQuery.isNotEmpty()) return@LaunchedEffect try { focusRequester.requestFocus() } catch (_: Throwable) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt index 7db775c27..66c55636c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreenModel.kt @@ -143,6 +143,51 @@ open class BrowseSourceScreenModel( val source = sourceManager.get(sourceId) as CatalogueSource + init { + mutableState.update { + var query: String? = null + var listing = it.listing + + if (listing is Listing.Search) { + query = listing.query + listing = Listing.Search(query, source.getFilterList()) + } + + it.copy( + listing = listing, + filters = source.getFilterList(), + toolbarQuery = query, + ) + } + + // SY --> + val savedSearchFilters = savedSearch + val jsonFilters = filtersJson + val filters = state.value.filters + if (savedSearchFilters != null) { + val savedSearch = runBlocking { getExhSavedSearch.awaitOne(savedSearchFilters) { filters } } + if (savedSearch != null) { + search(query = savedSearch.query.nullIfBlank(), filters = savedSearch.filterList) + } + } else if (jsonFilters != null) { + runCatching { + val filtersJson = Json.decodeFromString(jsonFilters) + filterSerializer.deserialize(filters, filtersJson) + search(filters = filters) + } + } + + getExhSavedSearch.subscribe(source.id, source::getFilterList) + .onEach { savedSearches -> + mutableState.update { it.copy(savedSearches = savedSearches) } + withUIContext { + filterSheet?.setSavedSearches(savedSearches) + } + } + .launchIn(coroutineScope) + // SY <-- + } + /** * Sheet containing filter items. */ @@ -177,55 +222,6 @@ open class BrowseSourceScreenModel( } .stateIn(coroutineScope, SharingStarted.Lazily, emptyFlow()) - // SY --> - val ehentaiBrowseDisplayMode by unsortedPreferences.enhancedEHentaiView().asState(coroutineScope) - - private val filterSerializer = FilterSerializer() - // SY <-- - - init { - mutableState.update { - val initialListing = it.listing - val listing = if (initialListing is Listing.Search) { - initialListing.copy(filters = source.getFilterList()) - } else { - initialListing - } - - it.copy( - listing = listing, - filters = source.getFilterList(), - ) - } - - // SY --> - val savedSearchFilters = savedSearch - val jsonFilters = filtersJson - val filters = state.value.filters - if (savedSearchFilters != null) { - val savedSearch = runBlocking { getExhSavedSearch.awaitOne(savedSearchFilters) { filters } } - if (savedSearch != null) { - search(query = savedSearch.query.nullIfBlank(), filters = savedSearch.filterList) - } - } else if (jsonFilters != null) { - runCatching { - val filtersJson = Json.decodeFromString(jsonFilters) - filterSerializer.deserialize(filters, filtersJson) - search(filters = filters) - } - } - - getExhSavedSearch.subscribe(source.id, source::getFilterList) - .onEach { savedSearches -> - mutableState.update { it.copy(savedSearches = savedSearches) } - withUIContext { - filterSheet?.setSavedSearches(savedSearches) - } - } - .launchIn(coroutineScope) - // SY <-- - } - fun getColumnsPreference(orientation: Int): GridCells { val isLandscape = orientation == Configuration.ORIENTATION_LANDSCAPE val columns = if (isLandscape) {