diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsViewModel.kt index 78b8798b8..86225d7e9 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/ContactsViewModel.kt @@ -71,15 +71,11 @@ class ContactsViewModel constructor( selectedParticipantsLiveData.postValue(selectedParticipants) } - fun loadContacts() { + private fun loadContacts() { getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, groupConversation, searchQuery, conversationToken), object : UseCaseResponse> { override suspend fun onSuccess(result: List) { val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 0) - val typeComparator = Comparator { o1, o2 -> - sortPriority[o2.source]?.let { sortPriority[o1.source]?.compareTo(it) } - 0 - } val sortedList = result.sortedWith(compareBy({ sortPriority[it.source] diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt index 80f20ffb9..2bbd990b2 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/conversationsList/ConversationsListView.kt @@ -147,7 +147,7 @@ class ConversationsListView : BaseView() { } private fun setSearchQuery(query: CharSequence?) { - viewModel.filterLiveData.value = query + viewModel.filterLiveData.postValue(query) } private fun onElementClick(page: Page, holder: Presenter.Holder, element: Element) { diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingTextWatcher.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingTextWatcher.kt index 267593089..543124ce1 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingTextWatcher.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/search/DebouncingTextWatcher.kt @@ -24,6 +24,8 @@ package com.nextcloud.talk.newarch.features.search import android.text.Editable import android.text.TextWatcher +import android.widget.SearchView +import androidx.databinding.adapters.SearchViewBindingAdapter import androidx.lifecycle.Lifecycle import androidx.lifecycle.coroutineScope import kotlinx.coroutines.Job @@ -33,7 +35,7 @@ import kotlinx.coroutines.launch class DebouncingTextWatcher( lifecycle: Lifecycle, private val onDebouncingTextWatcherChange: (CharSequence?) -> Unit -) : TextWatcher { +) : TextWatcher, SearchView.OnQueryTextListener() { private var debouncePeriod: Long = 500 private val coroutineScope = lifecycle.coroutineScope @@ -48,11 +50,25 @@ class DebouncingTextWatcher( } override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + textChanged(s) + } + + override fun onQueryTextSubmit(query: String?): Boolean { + // do nothing, we already handle it in onQueryTextChange + return true + } + + override fun onQueryTextChange(newText: String?): Boolean { + textChanged(newText) + return true + } + + private fun textChanged(charSequence: CharSequence?) { searchJob?.cancel() searchJob = coroutineScope.launch { - s.let { + charSequence.let { delay(debouncePeriod) - onDebouncingTextWatcherChange(s) + onDebouncingTextWatcherChange(charSequence) } } } diff --git a/app/src/main/res/menu/menu_contacts.xml b/app/src/main/res/menu/menu_contacts.xml index b61e63a9a..905899341 100644 --- a/app/src/main/res/menu/menu_contacts.xml +++ b/app/src/main/res/menu/menu_contacts.xml @@ -26,6 +26,7 @@ android:animateLayoutChanges="true" android:icon="@drawable/ic_search_white_24dp" android:title="@string/nc_search" + android:visible="false" app:actionViewClass="androidx.appcompat.widget.SearchView" app:showAsAction="collapseActionView|ifRoom" />