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:
parent
896bc3253e
commit
84c463d648
@ -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 = {
|
||||
|
@ -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,
|
||||
)
|
||||
},
|
||||
|
@ -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()
|
||||
},
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user