|
@@ -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()
|
|
|
- }
|
|
|
+ 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 {
|
|
|
- this.query = query
|
|
|
- performSearch()
|
|
|
- }
|
|
|
+ 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)
|