From e2dc525bf1a52aeefb2b6485df5abd32b59abdd0 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Thu, 19 Dec 2024 15:01:13 +0100 Subject: [PATCH] implement search in open conversations Signed-off-by: sowjanyakch --- .../openconversations/ListOpenConversationsActivity.kt | 5 ++++- .../data/OpenConversationsRepository.kt | 2 +- .../data/OpenConversationsRepositoryImpl.kt | 5 +++-- .../viewmodels/OpenConversationsViewModel.kt | 10 +++++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt b/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt index 187e7ab4f..002b2d1e6 100644 --- a/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt @@ -25,6 +25,7 @@ import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.openconversations.adapters.OpenConversationsAdapter import com.nextcloud.talk.openconversations.viewmodels.OpenConversationsViewModel import com.nextcloud.talk.utils.bundle.BundleKeys +import com.vanniktech.ui.hideKeyboardAndFocus import com.vanniktech.ui.showKeyboardAndFocus import javax.inject.Inject @@ -69,7 +70,8 @@ class ListOpenConversationsActivity : BaseActivity() { handleSearchUI(searching) } binding.editText.doOnTextChanged { text, _, _, count -> - adapter.filter(text.toString()) + openConversationsViewModel.updateSearchTerm(text.toString()) + openConversationsViewModel.fetchConversations() } initObservers() @@ -83,6 +85,7 @@ class ListOpenConversationsActivity : BaseActivity() { } else { binding.searchOpenConversations.visibility = View.VISIBLE binding.textInputLayout.visibility = View.GONE + binding.editText.hideKeyboardAndFocus() } } diff --git a/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepository.kt b/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepository.kt index 4e9fb7a15..149edbc34 100644 --- a/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepository.kt @@ -11,5 +11,5 @@ import io.reactivex.Observable interface OpenConversationsRepository { - fun fetchConversations(): Observable> + fun fetchConversations(searchTerm:String): Observable> } diff --git a/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepositoryImpl.kt index 3dbaf4dbb..0eff93bf3 100644 --- a/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/openconversations/data/OpenConversationsRepositoryImpl.kt @@ -21,10 +21,11 @@ class OpenConversationsRepositoryImpl(private val ncApi: NcApi, currentUserProvi val apiVersion = ApiUtils.getConversationApiVersion(currentUser, intArrayOf(ApiUtils.API_V4, ApiUtils.API_V3, 1)) - override fun fetchConversations(): Observable> { + override fun fetchConversations(searchTerm:String): Observable> { val roomOverall = ncApi.getOpenConversations( credentials, - ApiUtils.getUrlForOpenConversations(apiVersion, currentUser.baseUrl!!) + ApiUtils.getUrlForOpenConversations(apiVersion, currentUser.baseUrl!!), + searchTerm ) return roomOverall.map { it.ocs?.data!! } } diff --git a/app/src/main/java/com/nextcloud/talk/openconversations/viewmodels/OpenConversationsViewModel.kt b/app/src/main/java/com/nextcloud/talk/openconversations/viewmodels/OpenConversationsViewModel.kt index cfe387a26..8a5fc436e 100644 --- a/app/src/main/java/com/nextcloud/talk/openconversations/viewmodels/OpenConversationsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/openconversations/viewmodels/OpenConversationsViewModel.kt @@ -32,14 +32,22 @@ class OpenConversationsViewModel @Inject constructor(private val repository: Ope val viewState: LiveData get() = _viewState + private val _searchTerm: MutableLiveData = MutableLiveData("") + val searchTerm: LiveData + get() = _searchTerm + fun fetchConversations() { _viewState.value = FetchConversationsStartState - repository.fetchConversations() + repository.fetchConversations(_searchTerm.value?: "") .subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(FetchConversationsObserver()) } + fun updateSearchTerm(newTerm: String) { + _searchTerm.value = newTerm + } + inner class FetchConversationsObserver : Observer> { override fun onSubscribe(d: Disposable) { // unused atm