Add clear to search in contacts

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2020-02-01 23:39:24 +01:00
parent 4cefbc8b37
commit 795bd6449e
No known key found for this signature in database
GPG Key ID: CDE0BBD2738C4CC0
2 changed files with 10 additions and 14 deletions

View File

@ -143,7 +143,7 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() {
}) })
viewModel.apply { viewModel.apply {
searchQueryLiveData.observe(this@ContactsView) { query -> filterLiveData.observe(this@ContactsView) { query ->
if (!transitionInProgress) { if (!transitionInProgress) {
activity?.clearButton?.isVisible = !query.isNullOrEmpty() activity?.clearButton?.isVisible = !query.isNullOrEmpty()
} }
@ -235,7 +235,7 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() {
} }
private fun setSearchQuery(query: CharSequence?) { private fun setSearchQuery(query: CharSequence?) {
viewModel.setSearchQuery(query.toString()) viewModel.setSearchQuery(query)
} }
override fun onFloatingActionButtonClick() { override fun onFloatingActionButtonClick() {

View File

@ -40,7 +40,6 @@ import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationSta
import com.nextcloud.talk.newarch.features.contactsflow.ParticipantElement import com.nextcloud.talk.newarch.features.contactsflow.ParticipantElement
import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView
import com.nextcloud.talk.newarch.services.GlobalService import com.nextcloud.talk.newarch.services.GlobalService
import kotlinx.coroutines.isActive
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.koin.core.parameter.parametersOf import org.koin.core.parameter.parametersOf
@ -58,13 +57,9 @@ class ContactsViewModel constructor(
private val _operationState = MutableLiveData(ContactsViewOperationStateWrapper(ContactsViewOperationState.WAITING, null, null)) private val _operationState = MutableLiveData(ContactsViewOperationStateWrapper(ContactsViewOperationState.WAITING, null, null))
val operationState: LiveData<ContactsViewOperationStateWrapper> = _operationState.distinctUntilChanged() val operationState: LiveData<ContactsViewOperationStateWrapper> = _operationState.distinctUntilChanged()
private var searchQuery: MutableLiveData<String?> = MutableLiveData() private val filterMutableLiveData: MutableLiveData<CharSequence?> = MutableLiveData(null)
var searchQueryLiveData: LiveData<String?> = Transformations.switchMap(searchQuery) { searchQuery -> val filterLiveData: LiveData<CharSequence?> = filterMutableLiveData
if (initialized) {
loadContacts()
}
liveData<String?> { searchQuery }
}
private var conversationToken: String? = null private var conversationToken: String? = null
private var groupConversation: Boolean = false private var groupConversation: Boolean = false
private var initialized = false private var initialized = false
@ -77,8 +72,9 @@ class ContactsViewModel constructor(
} }
} }
fun setSearchQuery(query: String?) { fun setSearchQuery(query: CharSequence?) {
searchQuery.postValue(query) filterMutableLiveData.postValue(query)
loadContacts()
} }
fun selectParticipant(participant: Participant) { fun selectParticipant(participant: Participant) {
@ -138,7 +134,7 @@ class ContactsViewModel constructor(
} }
private fun loadContacts() { private fun loadContacts() {
getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, groupConversation, searchQuery.value, conversationToken), object : getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, groupConversation, filterLiveData.value, conversationToken), object :
UseCaseResponse<List<Participant>> { UseCaseResponse<List<Participant>> {
override suspend fun onSuccess(result: List<Participant>) { override suspend fun onSuccess(result: List<Participant>) {
val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 0) val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 0)
@ -161,7 +157,7 @@ class ContactsViewModel constructor(
} as MutableList<ParticipantElement> } as MutableList<ParticipantElement>
if (conversationToken.isNullOrEmpty() && searchQuery.value.isNullOrEmpty()) { if (conversationToken.isNullOrEmpty() && filterLiveData.value.isNullOrEmpty()) {
val newGroupElement = ParticipantElement(Pair(context.getString(R.string.nc_new_group), R.drawable.ic_people_group_white_24px), ParticipantElementType.PARTICIPANT_NEW_GROUP.ordinal) val newGroupElement = ParticipantElement(Pair(context.getString(R.string.nc_new_group), R.drawable.ic_people_group_white_24px), ParticipantElementType.PARTICIPANT_NEW_GROUP.ordinal)
participantElementsList.add(0, newGroupElement) participantElementsList.add(0, newGroupElement)
} }