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
This commit is contained in:
stevenyomi 2022-12-22 11:14:04 +08:00 committed by Jobobby04
parent 562b264048
commit 5586cbeb16
2 changed files with 46 additions and 49 deletions

View File

@ -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) {

View File

@ -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<JsonArray>(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<JsonArray>(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) {