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 fd56d628f6beaf423e868bcd20deb3278bf63d8d..1be5794c8a9b489834eb241d7a6e2fde31a43b74 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 e1e12325e4e43007f7c8fb1f3dd3e22aac1bcfc0..04f7e02d9dcf91dce0ab071212d54ae896317426 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(