Fix library search query being lost when returning (closes #3473)

This commit is contained in:
arkon 2020-07-31 12:18:47 -04:00
parent ec56c27071
commit f762598c5c
3 changed files with 16 additions and 20 deletions

View File

@ -38,10 +38,7 @@ class LibraryCategoryAdapter(view: LibraryCategoryView) :
} }
fun performFilter() { fun performFilter() {
var s = getFilter(String::class.java) val s = getFilter(String::class.java) ?: ""
if (s == null) {
s = ""
}
updateDataSet(mangas.filter { it.filter(s) }) updateDataSet(mangas.filter { it.filter(s) })
} }
} }

View File

@ -168,7 +168,7 @@ class LibraryCategoryView @JvmOverloads constructor(context: Context, attrs: Att
* *
* @param event the event received. * @param event the event received.
*/ */
fun onNextLibraryManga(event: LibraryMangaEvent) { private fun onNextLibraryManga(event: LibraryMangaEvent) {
// Get the manga list for this category. // Get the manga list for this category.
val mangaForCategory = event.getMangaForCategory(category).orEmpty() val mangaForCategory = event.getMangaForCategory(category).orEmpty()

View File

@ -38,8 +38,9 @@ import eu.kanade.tachiyomi.ui.manga.MangaController
import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.system.getResourceColor
import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.system.toast
import kotlinx.android.synthetic.main.main_activity.tabs import kotlinx.android.synthetic.main.main_activity.tabs
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.dropWhile
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks import reactivecircus.flowbinding.android.view.clicks
@ -72,7 +73,7 @@ class LibraryController(
/** /**
* Library search query. * Library search query.
*/ */
private var query: String? = "" private var query: String = ""
/** /**
* Currently selected mangas. * Currently selected mangas.
@ -367,19 +368,20 @@ class LibraryController(
searchView.maxWidth = Int.MAX_VALUE searchView.maxWidth = Int.MAX_VALUE
searchItem.fixExpand(onExpand = { invalidateMenuOnExpand() }) searchItem.fixExpand(onExpand = { invalidateMenuOnExpand() })
if (!query.isNullOrEmpty()) { if (query.isNotEmpty()) {
searchItem.expandActionView() searchItem.expandActionView()
searchView.setQuery(query, true) searchView.setQuery(query, true)
searchView.clearFocus() searchView.clearFocus()
// If we re-enter the controller with a prior search still active
view?.post {
performSearch() performSearch()
} }
}
searchView.queryTextChanges() searchView.queryTextChanges()
.distinctUntilChanged() // Ignore events if this controller isn't at the top to avoid query being reset
.filter { router.backstack.lastOrNull()?.controller() == this }
// If we re-enter the controller with a prior search still active, but searchview
// content sometimes appears empty.
.dropWhile { query.isNotEmpty() && query != it.toString() }
.onEach { .onEach {
query = it.toString() query = it.toString()
performSearch() performSearch()
@ -390,17 +392,14 @@ class LibraryController(
menu.findItem(R.id.action_filter).icon.mutate() menu.findItem(R.id.action_filter).icon.mutate()
} }
fun search(query: String?) { fun search(query: String) {
// Delay to let contents load first for searches from manga info
view?.post {
this.query = query this.query = query
performSearch() performSearch()
} }
}
private fun performSearch() { private fun performSearch() {
searchRelay.call(query) searchRelay.call(query)
if (!query.isNullOrEmpty()) { if (query.isNotEmpty()) {
binding.btnGlobalSearch.isVisible = true binding.btnGlobalSearch.isVisible = true
binding.btnGlobalSearch.text = binding.btnGlobalSearch.text =
resources?.getString(R.string.action_global_search_query, query) resources?.getString(R.string.action_global_search_query, query)