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() {
var s = getFilter(String::class.java)
if (s == null) {
s = ""
}
val s = getFilter(String::class.java) ?: ""
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.
*/
fun onNextLibraryManga(event: LibraryMangaEvent) {
private fun onNextLibraryManga(event: LibraryMangaEvent) {
// Get the manga list for this category.
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.toast
import kotlinx.android.synthetic.main.main_activity.tabs
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.dropWhile
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import reactivecircus.flowbinding.android.view.clicks
@ -72,7 +73,7 @@ class LibraryController(
/**
* Library search query.
*/
private var query: String? = ""
private var query: String = ""
/**
* Currently selected mangas.
@ -367,19 +368,20 @@ class LibraryController(
searchView.maxWidth = Int.MAX_VALUE
searchItem.fixExpand(onExpand = { invalidateMenuOnExpand() })
if (!query.isNullOrEmpty()) {
if (query.isNotEmpty()) {
searchItem.expandActionView()
searchView.setQuery(query, true)
searchView.clearFocus()
// If we re-enter the controller with a prior search still active
view?.post {
performSearch()
}
}
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 {
query = it.toString()
performSearch()
@ -390,17 +392,14 @@ class LibraryController(
menu.findItem(R.id.action_filter).icon.mutate()
}
fun search(query: String?) {
// Delay to let contents load first for searches from manga info
view?.post {
fun search(query: String) {
this.query = query
performSearch()
}
}
private fun performSearch() {
searchRelay.call(query)
if (!query.isNullOrEmpty()) {
if (query.isNotEmpty()) {
binding.btnGlobalSearch.isVisible = true
binding.btnGlobalSearch.text =
resources?.getString(R.string.action_global_search_query, query)