diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt index df3816bc1939..5c1a52d9ff87 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourceController.kt @@ -397,9 +397,10 @@ open class BrowseSourceController(bundle: Bundle) : matches = false break } + if (!matches) break } if (!matches) { - val allDefault = presenter.sourceFilters == presenter.source.getFilterList() + val allDefault = presenter.filtersMatchDefault() showProgressBar() adapter?.clear() presenter.setSourceFilter(if (allDefault) FilterList() else presenter.sourceFilters) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourcePresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourcePresenter.kt index 391eee79ce6e..4ea98490d309 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourcePresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/BrowseSourcePresenter.kt @@ -96,17 +96,50 @@ open class BrowseSourcePresenter( var query = searchQuery ?: "" + private val oldFilters = mutableListOf() + override fun onCreate() { super.onCreate() if (!::pager.isInitialized) { source = sourceManager.get(sourceId) as? CatalogueSource ?: return sourceFilters = source.getFilterList() + + if (oldFilters.isEmpty()) { + for (i in sourceFilters) { + if (i is Filter.Group<*>) { + val subFilters = mutableListOf() + for (j in i.state) { + subFilters.add((j as Filter<*>).state) + } + oldFilters.add(subFilters) + } else { + oldFilters.add(i.state) + } + } + } filtersChanged = false restartPager() } } + fun filtersMatchDefault(): Boolean { + for (i in sourceFilters.indices) { + val filter = oldFilters.getOrNull(i) + if (filter is List<*>) { + for (j in filter.indices) { + val state = ((sourceFilters[i] as Filter.Group<*>).state[j] as Filter<*>).state + if (filter[j] != state) { + return false + } + } + } else if (filter != sourceFilters[i].state) { + return false + } + } + return true + } + /** * Restarts the pager for the active source with the provided query and filters. *