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,
|
navigateUp = navigateUp,
|
||||||
onWebViewClick = onWebViewClick,
|
onWebViewClick = onWebViewClick,
|
||||||
onHelpClick = onHelpClick,
|
onHelpClick = onHelpClick,
|
||||||
onSearch = { presenter.search() },
|
onSearch = { presenter.search(it) },
|
||||||
// SY -->
|
// SY -->
|
||||||
onSettingsClick = onSettingsClick,
|
onSettingsClick = onSettingsClick,
|
||||||
// SY <--
|
// SY <--
|
||||||
@ -112,7 +112,7 @@ fun BrowseSourceScreen(
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = presenter.currentFilter == BrowseSourcePresenter.Filter.Popular,
|
selected = presenter.currentFilter == BrowseSourcePresenter.Filter.Popular,
|
||||||
onClick = {
|
onClick = {
|
||||||
presenter.resetFilter()
|
presenter.reset()
|
||||||
presenter.search(GetRemoteManga.QUERY_POPULAR)
|
presenter.search(GetRemoteManga.QUERY_POPULAR)
|
||||||
},
|
},
|
||||||
leadingIcon = {
|
leadingIcon = {
|
||||||
@ -131,7 +131,7 @@ fun BrowseSourceScreen(
|
|||||||
FilterChip(
|
FilterChip(
|
||||||
selected = presenter.currentFilter == BrowseSourcePresenter.Filter.Latest,
|
selected = presenter.currentFilter == BrowseSourcePresenter.Filter.Latest,
|
||||||
onClick = {
|
onClick = {
|
||||||
presenter.resetFilter()
|
presenter.reset()
|
||||||
presenter.search(GetRemoteManga.QUERY_LATEST)
|
presenter.search(GetRemoteManga.QUERY_LATEST)
|
||||||
},
|
},
|
||||||
leadingIcon = {
|
leadingIcon = {
|
||||||
|
@ -44,7 +44,7 @@ fun SourceSearchScreen(
|
|||||||
placeholderText = stringResource(R.string.action_search_hint),
|
placeholderText = stringResource(R.string.action_search_hint),
|
||||||
navigateUp = navigateUp,
|
navigateUp = navigateUp,
|
||||||
onResetClick = { presenter.searchQuery = "" },
|
onResetClick = { presenter.searchQuery = "" },
|
||||||
onSearchClick = { presenter.search() },
|
onSearchClick = { presenter.search(it) },
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
@ -43,7 +43,7 @@ fun BrowseSourceToolbar(
|
|||||||
navigateUp: () -> Unit,
|
navigateUp: () -> Unit,
|
||||||
onWebViewClick: () -> Unit,
|
onWebViewClick: () -> Unit,
|
||||||
onHelpClick: () -> Unit,
|
onHelpClick: () -> Unit,
|
||||||
onSearch: () -> Unit,
|
onSearch: (String) -> Unit,
|
||||||
// SY -->
|
// SY -->
|
||||||
onSettingsClick: () -> Unit,
|
onSettingsClick: () -> Unit,
|
||||||
// SY <--
|
// SY <--
|
||||||
@ -68,13 +68,17 @@ fun BrowseSourceToolbar(
|
|||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
val cancelSearch = { state.searchQuery = null }
|
||||||
BrowseSourceSearchToolbar(
|
BrowseSourceSearchToolbar(
|
||||||
searchQuery = state.searchQuery!!,
|
searchQuery = state.searchQuery!!,
|
||||||
onSearchQueryChanged = { state.searchQuery = it },
|
onSearchQueryChanged = { state.searchQuery = it },
|
||||||
placeholderText = stringResource(R.string.action_search_hint),
|
placeholderText = stringResource(R.string.action_search_hint),
|
||||||
navigateUp = { state.searchQuery = null },
|
navigateUp = cancelSearch,
|
||||||
onResetClick = { state.searchQuery = "" },
|
onResetClick = { state.searchQuery = "" },
|
||||||
onSearchClick = onSearch,
|
onSearchClick = {
|
||||||
|
onSearch(it)
|
||||||
|
cancelSearch()
|
||||||
|
},
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -194,7 +198,7 @@ fun BrowseSourceSearchToolbar(
|
|||||||
placeholderText: String?,
|
placeholderText: String?,
|
||||||
navigateUp: () -> Unit,
|
navigateUp: () -> Unit,
|
||||||
onResetClick: () -> Unit,
|
onResetClick: () -> Unit,
|
||||||
onSearchClick: () -> Unit,
|
onSearchClick: (String) -> Unit,
|
||||||
scrollBehavior: TopAppBarScrollBehavior?,
|
scrollBehavior: TopAppBarScrollBehavior?,
|
||||||
) {
|
) {
|
||||||
val keyboardController = LocalSoftwareKeyboardController.current
|
val keyboardController = LocalSoftwareKeyboardController.current
|
||||||
@ -207,7 +211,7 @@ fun BrowseSourceSearchToolbar(
|
|||||||
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
|
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
|
||||||
keyboardActions = KeyboardActions(
|
keyboardActions = KeyboardActions(
|
||||||
onSearch = {
|
onSearch = {
|
||||||
onSearchClick()
|
onSearchClick(searchQuery)
|
||||||
focusManager.clearFocus()
|
focusManager.clearFocus()
|
||||||
keyboardController?.hide()
|
keyboardController?.hide()
|
||||||
},
|
},
|
||||||
|
@ -15,7 +15,6 @@ import eu.kanade.presentation.components.DuplicateMangaDialog
|
|||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.source.model.Filter
|
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.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
|
import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.pushController
|
import eu.kanade.tachiyomi.ui.base.controller.pushController
|
||||||
@ -192,7 +191,10 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
private fun navigateUp() {
|
private fun navigateUp() {
|
||||||
when {
|
when {
|
||||||
presenter.searchQuery != null -> presenter.searchQuery = null
|
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()
|
else -> router.popCurrentController()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -210,10 +212,10 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
emptyList(),
|
emptyList(),
|
||||||
// SY <--
|
// SY <--
|
||||||
onFilterClicked = {
|
onFilterClicked = {
|
||||||
presenter.setSourceFilter(presenter.filters)
|
presenter.search(filters = presenter.filters)
|
||||||
},
|
},
|
||||||
onResetClicked = {
|
onResetClicked = {
|
||||||
presenter.resetFilter()
|
presenter.reset()
|
||||||
filterSheet?.setFilters(presenter.filterItems)
|
filterSheet?.setFilters(presenter.filterItems)
|
||||||
},
|
},
|
||||||
// EXH -->
|
// EXH -->
|
||||||
@ -258,16 +260,17 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
return@launchUI
|
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()
|
val allDefault = search.filterList != null && presenter.filters == presenter.source!!.getFilterList()
|
||||||
filterSheet?.dismiss()
|
filterSheet?.dismiss()
|
||||||
|
|
||||||
presenter.searchQuery = search.query.nullIfBlank()
|
presenter.searchQuery = search.query.nullIfBlank()
|
||||||
presenter.setSourceFilter(if (allDefault) FilterList() else presenter.filters)
|
if (search.filterList != null) {
|
||||||
presenter.search()
|
filterSheet?.setFilters(search.filterList.toItems())
|
||||||
|
}
|
||||||
|
presenter.search(
|
||||||
|
query = search.query,
|
||||||
|
filters = if (allDefault) null else search.filterList,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSavedSearchDeleteClicked = { idToDelete, name ->
|
onSavedSearchDeleteClicked = { idToDelete, name ->
|
||||||
@ -337,10 +340,9 @@ open class BrowseSourceController(bundle: Bundle) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (genreExists) {
|
if (genreExists) {
|
||||||
filterSheet?.setFilters(presenter.filterItems)
|
filterSheet?.setFilters(defaultFilters.toItems())
|
||||||
|
|
||||||
presenter.searchQuery = ""
|
presenter.search(filters = defaultFilters)
|
||||||
presenter.setFilter(defaultFilters)
|
|
||||||
} else {
|
} else {
|
||||||
searchWithQuery(genreName)
|
searchWithQuery(genreName)
|
||||||
}
|
}
|
||||||
|
@ -210,22 +210,25 @@ open class BrowseSourcePresenter(
|
|||||||
}
|
}
|
||||||
// SY <--
|
// SY <--
|
||||||
|
|
||||||
fun setFilter(filters: FilterList) {
|
fun reset() {
|
||||||
state.filters = filters
|
|
||||||
}
|
|
||||||
|
|
||||||
fun resetFilter() {
|
|
||||||
state.filters = source!!.getFilterList()
|
state.filters = source!!.getFilterList()
|
||||||
if (currentFilter !is Filter.UserInput) return
|
if (currentFilter !is Filter.UserInput) return
|
||||||
state.currentFilter = (currentFilter as Filter.UserInput).copy(filters = state.filters)
|
state.currentFilter = (currentFilter as Filter.UserInput).copy(filters = state.filters)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun search(query: String? = null) {
|
fun search(query: String? = null, filters: FilterList? = null) {
|
||||||
var new = Filter.valueOf(query ?: searchQuery ?: "")
|
Filter.valueOf(query ?: "").let {
|
||||||
if (new is Filter.UserInput && currentFilter is Filter.UserInput) {
|
if (it !is Filter.UserInput) {
|
||||||
new = new.copy(filters = currentFilter.filters)
|
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 -->
|
// SY -->
|
||||||
@ -245,16 +248,13 @@ open class BrowseSourcePresenter(
|
|||||||
val savedSearch = runBlocking { getExhSavedSearch.awaitOne(savedSearchFilters) { filters } }
|
val savedSearch = runBlocking { getExhSavedSearch.awaitOne(savedSearchFilters) { filters } }
|
||||||
if (savedSearch != null) {
|
if (savedSearch != null) {
|
||||||
state.searchQuery = savedSearch.query.nullIfBlank()
|
state.searchQuery = savedSearch.query.nullIfBlank()
|
||||||
if (savedSearch.filterList != null) {
|
search(query = savedSearch.query, filters = savedSearch.filterList)
|
||||||
setSourceFilter(savedSearch.filterList)
|
|
||||||
}
|
|
||||||
search()
|
|
||||||
}
|
}
|
||||||
} else if (jsonFilters != null) {
|
} else if (jsonFilters != null) {
|
||||||
runCatching {
|
runCatching {
|
||||||
val filters = Json.decodeFromString<JsonArray>(jsonFilters)
|
val filters = Json.decodeFromString<JsonArray>(jsonFilters)
|
||||||
filterSerializer.deserialize(this.filters, filters)
|
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 -->
|
// SY -->
|
||||||
open fun createSourcePagingSource(query: String, filters: FilterList): SourcePagingSourceType {
|
open fun createSourcePagingSource(query: String, filters: FilterList): SourcePagingSourceType {
|
||||||
return getRemoteManga.subscribe(sourceId, currentFilter.query, currentFilter.filters)
|
return getRemoteManga.subscribe(sourceId, currentFilter.query, currentFilter.filters)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user