diff --git a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt index 19fcd310c..dacce567f 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt @@ -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 = { diff --git a/app/src/main/java/eu/kanade/presentation/browse/SourceSearchScreen.kt b/app/src/main/java/eu/kanade/presentation/browse/SourceSearchScreen.kt index 23b359170..e2dfc3800 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/SourceSearchScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/SourceSearchScreen.kt @@ -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, ) }, diff --git a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt index 7f3607212..e9f737556 100644 --- a/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt +++ b/app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt @@ -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() }, diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt index 0c74e3c95..384504332 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt @@ -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) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt index a3291d193..b24c28881 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourcePresenter.kt @@ -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(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)