From 627909faeb3f8a83075d5c1d20a5bb5d2da3b471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Mon, 14 Aug 2023 23:16:05 -0400 Subject: [PATCH] home: avoid disposing search early Change-Id: Icc0dde66beec7badbd40ba8502550b6ad2eaeb38 --- .../java/cx/ring/fragments/HomeFragment.kt | 31 ++++++++++++------- .../net/jami/services/ConversationFacade.kt | 3 +- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/jami-android/app/src/main/java/cx/ring/fragments/HomeFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/HomeFragment.kt index fd56d628f..1be5794c8 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/HomeFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/HomeFragment.kt @@ -73,6 +73,7 @@ import javax.inject.Inject import com.google.android.material.search.SearchView.TransitionState import com.google.android.material.shape.MaterialShapeDrawable import cx.ring.databinding.FragHomeBinding +import io.reactivex.rxjava3.disposables.Disposable @AndroidEntryPoint class HomeFragment : BaseSupportFragment<HomePresenter, HomeView>(), @@ -84,7 +85,7 @@ class HomeFragment : BaseSupportFragment<HomePresenter, HomeView>(), private var mHasPendingBadge = false private val mDisposable = CompositeDisposable() private var mSearchView: SearchView? = null - private val searchDisposable = CompositeDisposable() + private var searchDisposable: Disposable? = null private var searchAdapter: SmartListAdapter? = null private var pendingAdapter: SmartListAdapter? = null private val querySubject = BehaviorSubject.createDefault("") @@ -242,18 +243,13 @@ class HomeFragment : BaseSupportFragment<HomePresenter, HomeView>(), // Hide floating button to avoid weird animation binding.newSwarmFab.isVisible = true - searchDisposable.clear() + searchDisposable?.dispose() + querySubject.onNext("") + searchAdapter?.update(ConversationFacade.ConversationList()) + searchDisposable = null } else if (previousState === TransitionState.HIDDEN) { // Showing - // Make floating button visible again binding.newSwarmFab.isVisible = false - - searchDisposable.add( - mConversationFacade.getSearchResults( - mConversationFacade.currentAccountSubject, debouncedQuery - ) - .observeOn(DeviceUtils.uiScheduler) - .subscribe { searchAdapter?.update(it) } - ) + startSearch() } } @@ -293,6 +289,15 @@ class HomeFragment : BaseSupportFragment<HomePresenter, HomeView>(), binding.root } + private fun startSearch() { + searchDisposable?.dispose() + val disposable = mConversationFacade.getSearchResults(debouncedQuery) + .observeOn(DeviceUtils.uiScheduler) + .subscribe { searchAdapter?.update(it) } + searchDisposable = disposable + mDisposable.add(disposable) + } + /** * Expand the appBarLayoutBottom to give fixed space between it and fragmentList. */ @@ -443,7 +448,6 @@ class HomeFragment : BaseSupportFragment<HomePresenter, HomeView>(), override fun onStart() { super.onStart() - mDisposable.add(searchDisposable) activity?.intent?.let { handleIntent(it) } // Subscribe on invitation pending list to show a badge counter @@ -491,6 +495,9 @@ class HomeFragment : BaseSupportFragment<HomePresenter, HomeView>(), ) } ) + + if (mBinding!!.searchView.isShowing) + startSearch() } override fun onStop() { diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/ConversationFacade.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/ConversationFacade.kt index e1e12325e..04f7e02d9 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/ConversationFacade.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/ConversationFacade.kt @@ -433,8 +433,7 @@ class ConversationFacade( }*/ fun getSearchResults( - currentAccount: Observable<Account>, - query: Observable<String>, + query: Observable<String>, currentAccount: Observable<Account> = currentAccountSubject, ): Observable<ConversationList> = currentAccount.switchMap { account -> Observable.combineLatest( -- GitLab