Fix filter search not triggering when clicking genre from Manga details (#8156)

(cherry picked from commit dcd5541e964b94f0dab9bb86fe207ec41b249296)

# Conflicts:
#	app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt
#	app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
#	app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt
This commit is contained in:
Andreas 2022-10-08 15:48:19 +02:00 committed by Jobobby04
parent 896bc3253e
commit 84c463d648
5 changed files with 43 additions and 49 deletions

View File

@ -97,7 +97,7 @@ fun BrowseSourceScreen(
navigateUp = navigateUp,
onWebViewClick = onWebViewClick,
onHelpClick = onHelpClick,
onSearch = { presenter.search() },
onSearch = { presenter.search(it) },
// SY -->
onSettingsClick = onSettingsClick,
// SY <--
@ -112,7 +112,7 @@ fun BrowseSourceScreen(
FilterChip(
selected = presenter.currentFilter == BrowseSourcePresenter.Filter.Popular,
onClick = {
presenter.resetFilter()
presenter.reset()
presenter.search(GetRemoteManga.QUERY_POPULAR)
},
leadingIcon = {
@ -131,7 +131,7 @@ fun BrowseSourceScreen(
FilterChip(
selected = presenter.currentFilter == BrowseSourcePresenter.Filter.Latest,
onClick = {
presenter.resetFilter()
presenter.reset()
presenter.search(GetRemoteManga.QUERY_LATEST)
},
leadingIcon = {

View File

@ -44,7 +44,7 @@ fun SourceSearchScreen(
placeholderText = stringResource(R.string.action_search_hint),
navigateUp = navigateUp,
onResetClick = { presenter.searchQuery = "" },
onSearchClick = { presenter.search() },
onSearchClick = { presenter.search(it) },
scrollBehavior = scrollBehavior,
)
},

View File

@ -43,7 +43,7 @@ fun BrowseSourceToolbar(
navigateUp: () -> Unit,
onWebViewClick: () -> Unit,
onHelpClick: () -> Unit,
onSearch: () -> Unit,
onSearch: (String) -> Unit,
// SY -->
onSettingsClick: () -> Unit,
// SY <--
@ -68,13 +68,17 @@ fun BrowseSourceToolbar(
scrollBehavior = scrollBehavior,
)
} else {
val cancelSearch = { state.searchQuery = null }
BrowseSourceSearchToolbar(
searchQuery = state.searchQuery!!,
onSearchQueryChanged = { state.searchQuery = it },
placeholderText = stringResource(R.string.action_search_hint),
navigateUp = { state.searchQuery = null },
navigateUp = cancelSearch,
onResetClick = { state.searchQuery = "" },
onSearchClick = onSearch,
onSearchClick = {
onSearch(it)
cancelSearch()
},
scrollBehavior = scrollBehavior,
)
}
@ -194,7 +198,7 @@ fun BrowseSourceSearchToolbar(
placeholderText: String?,
navigateUp: () -> Unit,
onResetClick: () -> Unit,
onSearchClick: () -> Unit,
onSearchClick: (String) -> Unit,
scrollBehavior: TopAppBarScrollBehavior?,
) {
val keyboardController = LocalSoftwareKeyboardController.current
@ -207,7 +211,7 @@ fun BrowseSourceSearchToolbar(
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
keyboardActions = KeyboardActions(
onSearch = {
onSearchClick()
onSearchClick(searchQuery)
focusManager.clearFocus()
keyboardController?.hide()
},

View File

@ -15,7 +15,6 @@ import eu.kanade.presentation.components.DuplicateMangaDialog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.CatalogueSource
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.online.HttpSource
import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
import eu.kanade.tachiyomi.ui.base.controller.pushController
@ -192,7 +191,10 @@ open class BrowseSourceController(bundle: Bundle) :
private fun navigateUp() {
when {
presenter.searchQuery != null -> presenter.searchQuery = null
presenter.isUserQuery -> presenter.search()
presenter.isUserQuery -> {
val (_, filters) = presenter.currentFilter as BrowseSourcePresenter.Filter.UserInput
presenter.search(query = "", filters = filters)
}
else -> router.popCurrentController()
}
}
@ -210,10 +212,10 @@ open class BrowseSourceController(bundle: Bundle) :
emptyList(),
// SY <--
onFilterClicked = {
presenter.setSourceFilter(presenter.filters)
presenter.search(filters = presenter.filters)
},
onResetClicked = {
presenter.resetFilter()
presenter.reset()
filterSheet?.setFilters(presenter.filterItems)
},
// EXH -->
@ -258,16 +260,17 @@ open class BrowseSourceController(bundle: Bundle) :
return@launchUI
}
if (search.filterList != null) {
presenter.setFilter(FilterList(search.filterList))
filterSheet?.setFilters(presenter.filterItems)
}
val allDefault = search.filterList != null && presenter.filters == presenter.source!!.getFilterList()
filterSheet?.dismiss()
presenter.searchQuery = search.query.nullIfBlank()
presenter.setSourceFilter(if (allDefault) FilterList() else presenter.filters)
presenter.search()
if (search.filterList != null) {
filterSheet?.setFilters(search.filterList.toItems())
}
presenter.search(
query = search.query,
filters = if (allDefault) null else search.filterList,
)
}
},
onSavedSearchDeleteClicked = { idToDelete, name ->
@ -337,10 +340,9 @@ open class BrowseSourceController(bundle: Bundle) :
}
if (genreExists) {
filterSheet?.setFilters(presenter.filterItems)
filterSheet?.setFilters(defaultFilters.toItems())
presenter.searchQuery = ""
presenter.setFilter(defaultFilters)
presenter.search(filters = defaultFilters)
} else {
searchWithQuery(genreName)
}

View File

@ -210,22 +210,25 @@ open class BrowseSourcePresenter(
}
// SY <--
fun setFilter(filters: FilterList) {
state.filters = filters
}
fun resetFilter() {
fun reset() {
state.filters = source!!.getFilterList()
if (currentFilter !is Filter.UserInput) return
state.currentFilter = (currentFilter as Filter.UserInput).copy(filters = state.filters)
}
fun search(query: String? = null) {
var new = Filter.valueOf(query ?: searchQuery ?: "")
if (new is Filter.UserInput && currentFilter is Filter.UserInput) {
new = new.copy(filters = currentFilter.filters)
fun search(query: String? = null, filters: FilterList? = null) {
Filter.valueOf(query ?: "").let {
if (it !is Filter.UserInput) {
state.currentFilter = it
return
}
state.currentFilter = new
}
val input: Filter.UserInput = if (currentFilter is Filter.UserInput) currentFilter as Filter.UserInput else Filter.UserInput()
state.currentFilter = input.copy(
query = query ?: input.query,
filters = filters ?: input.filters,
)
}
// SY -->
@ -245,16 +248,13 @@ open class BrowseSourcePresenter(
val savedSearch = runBlocking { getExhSavedSearch.awaitOne(savedSearchFilters) { filters } }
if (savedSearch != null) {
state.searchQuery = savedSearch.query.nullIfBlank()
if (savedSearch.filterList != null) {
setSourceFilter(savedSearch.filterList)
}
search()
search(query = savedSearch.query, filters = savedSearch.filterList)
}
} else if (jsonFilters != null) {
runCatching {
val filters = Json.decodeFromString<JsonArray>(jsonFilters)
filterSerializer.deserialize(this.filters, filters)
setSourceFilter(this.filters)
search(filters = this.filters)
}
}
@ -393,18 +393,6 @@ open class BrowseSourcePresenter(
}
}
/**
* Set the filter states for the current source.
*
* @param filters a list of active filters.
*/
fun setSourceFilter(filters: FilterList) {
state.currentFilter = when (val filter = currentFilter) {
Filter.Latest, Filter.Popular -> Filter.UserInput(filters = filters)
is Filter.UserInput -> filter.copy(filters = filters)
}
}
// SY -->
open fun createSourcePagingSource(query: String, filters: FilterList): SourcePagingSourceType {
return getRemoteManga.subscribe(sourceId, currentFilter.query, currentFilter.filters)