Fix catalogue search focus automatically being removed (#2396)

Fix catalogue search focus automatically being removed
This commit is contained in:
MCAxiaz 2020-01-12 12:02:21 -08:00 committed by arkon
parent 57595988f5
commit 6b5742c1ff
2 changed files with 9 additions and 12 deletions

View File

@ -89,15 +89,16 @@ abstract class BaseController(bundle: Bundle? = null) : RestoreViewOnCreateContr
* This method should be removed when fixed upstream. * This method should be removed when fixed upstream.
* Issue link: https://issuetracker.google.com/issues/37657375 * Issue link: https://issuetracker.google.com/issues/37657375
*/ */
fun MenuItem.fixExpand() { fun MenuItem.fixExpand(onExpand: ((MenuItem) -> Boolean)? = null, onCollapse: ((MenuItem) -> Boolean)? = null) {
setOnActionExpandListener(object : MenuItem.OnActionExpandListener { setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
override fun onMenuItemActionExpand(item: MenuItem): Boolean { override fun onMenuItemActionExpand(item: MenuItem): Boolean {
return true return onExpand?.invoke(item) ?: true
} }
override fun onMenuItemActionCollapse(item: MenuItem): Boolean { override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()
return true
return onCollapse?.invoke(item) ?: true
} }
}) })
} }

View File

@ -36,7 +36,6 @@ import kotlinx.android.synthetic.main.main_activity.*
import rx.Observable import rx.Observable
import rx.Subscription import rx.Subscription
import rx.android.schedulers.AndroidSchedulers import rx.android.schedulers.AndroidSchedulers
import rx.subscriptions.Subscriptions
import timber.log.Timber import timber.log.Timber
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -228,6 +227,7 @@ open class BrowseCatalogueController(bundle: Bundle) :
val searchEventsObservable = searchView.queryTextChangeEvents() val searchEventsObservable = searchView.queryTextChangeEvents()
.skip(1) .skip(1)
.filter { router.backstack.lastOrNull()?.controller() == this@BrowseCatalogueController }
.share() .share()
val writingObservable = searchEventsObservable val writingObservable = searchEventsObservable
.filter { !it.isSubmitted } .filter { !it.isSubmitted }
@ -238,11 +238,12 @@ open class BrowseCatalogueController(bundle: Bundle) :
searchViewSubscription?.unsubscribe() searchViewSubscription?.unsubscribe()
searchViewSubscription = Observable.merge(writingObservable, submitObservable) searchViewSubscription = Observable.merge(writingObservable, submitObservable)
.map { it.queryText().toString() } .map { it.queryText().toString() }
.distinctUntilChanged()
.subscribeUntilDestroy { searchWithQuery(it) } .subscribeUntilDestroy { searchWithQuery(it) }
untilDestroySubscriptions.add( fixExpand(onCollapse = {
Subscriptions.create { if (isActionViewExpanded) collapseActionView() }) searchWithQuery("")
true
})
} }
// Setup filters button // Setup filters button
@ -310,11 +311,6 @@ open class BrowseCatalogueController(bundle: Bundle) :
if (presenter.query == newQuery) if (presenter.query == newQuery)
return return
// FIXME dirty fix to restore the toolbar buttons after closing search mode.
if (newQuery == "") {
activity?.invalidateOptionsMenu()
}
showProgressBar() showProgressBar()
adapter?.clear() adapter?.clear()