From 4cefbc8b3763fa5a97a5239d130fe7355e75ce30 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Sat, 1 Feb 2020 23:34:03 +0100 Subject: [PATCH] Further improvements to contacts Signed-off-by: Mario Danic --- app/src/main/AndroidManifest.xml | 2 +- .../talk/controllers/base/BaseController.kt | 4 +++ .../domain/usecases/base/BaseUseCase.kt | 1 - .../contactsflow/contacts/ContactsView.kt | 6 ++++ .../contacts/ContactsViewModel.kt | 25 +++++++++-------- .../ConversationsListView.kt | 12 -------- app/src/main/res/layout/search_layout.xml | 28 +++++++++---------- 7 files changed, 37 insertions(+), 41 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 07521c029..0ba43e821 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -85,7 +85,7 @@ android:name=".activities.MainActivity" android:label="@string/nc_app_label" android:launchMode="singleTask" - android:windowSoftInputMode="adjustResize"> + android:windowSoftInputMode="adjustResize|stateUnchanged"> diff --git a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt index 18e991a58..cc0aae44e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.kt @@ -65,6 +65,8 @@ abstract class BaseController : ButterKnifeController(), ComponentCallbacks { val context: Context by inject() val eventBus: EventBus by inject() + var transitionInProgress = false + protected val actionBar: ActionBar? get() { var actionBarProvider: ActionBarProvider? = null @@ -137,6 +139,7 @@ abstract class BaseController : ButterKnifeController(), ComponentCallbacks { override fun onChangeStarted(changeHandler: ControllerChangeHandler, changeType: ControllerChangeType) { actionBar?.setIcon(null) + transitionInProgress = true setOptionsMenuHidden(true) if (changeType == ControllerChangeType.POP_EXIT || changeType == ControllerChangeType.PUSH_EXIT) { toolbarProgressBar?.isVisible = false @@ -149,6 +152,7 @@ abstract class BaseController : ButterKnifeController(), ComponentCallbacks { override fun onChangeEnded(changeHandler: ControllerChangeHandler, changeType: ControllerChangeType) { setOptionsMenuHidden(false) + transitionInProgress = false super.onChangeEnded(changeHandler, changeType) } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt index c961b7931..de287469c 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/domain/usecases/base/BaseUseCase.kt @@ -44,7 +44,6 @@ abstract class UseCase(private val apiErrorHandler: ApiErrorHan onResult.onSuccess(it) } } catch (e: Exception) { - onResult.onError(apiErrorHandler?.traceErrorException(e)) } } diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsView.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsView.kt index 00cdcd9dc..4c44c2727 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsView.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsView.kt @@ -143,6 +143,12 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() { }) viewModel.apply { + searchQueryLiveData.observe(this@ContactsView) { query -> + if (!transitionInProgress) { + activity?.clearButton?.isVisible = !query.isNullOrEmpty() + } + } + selectedParticipantsLiveData.observe(this@ContactsView) { participants -> view.selectedParticipantsRecyclerView.isVisible = participants.isNotEmpty() view.divider.isVisible = participants.isNotEmpty() diff --git a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsViewModel.kt b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsViewModel.kt index 3af39b941..2266bba3d 100644 --- a/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/newarch/features/contactsflow/contacts/ContactsViewModel.kt @@ -23,10 +23,7 @@ package com.nextcloud.talk.newarch.features.contactsflow.contacts import android.app.Application -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.distinctUntilChanged -import androidx.lifecycle.viewModelScope +import androidx.lifecycle.* import com.nextcloud.talk.R import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.models.json.conversations.ConversationOverall @@ -43,6 +40,7 @@ import com.nextcloud.talk.newarch.features.contactsflow.ContactsViewOperationSta import com.nextcloud.talk.newarch.features.contactsflow.ParticipantElement import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView import com.nextcloud.talk.newarch.services.GlobalService +import kotlinx.coroutines.isActive import kotlinx.coroutines.runBlocking import org.koin.core.parameter.parametersOf @@ -60,7 +58,13 @@ class ContactsViewModel constructor( private val _operationState = MutableLiveData(ContactsViewOperationStateWrapper(ContactsViewOperationState.WAITING, null, null)) val operationState: LiveData = _operationState.distinctUntilChanged() - private var searchQuery: String? = null + private var searchQuery: MutableLiveData = MutableLiveData() + var searchQueryLiveData: LiveData = Transformations.switchMap(searchQuery) { searchQuery -> + if (initialized) { + loadContacts() + } + liveData { searchQuery } + } private var conversationToken: String? = null private var groupConversation: Boolean = false private var initialized = false @@ -69,15 +73,12 @@ class ContactsViewModel constructor( if (!initialized || conversationToken != this.conversationToken || groupConversation != this.groupConversation) { this.conversationToken = conversationToken this.groupConversation = groupConversation - loadContacts() + initialized = true } } fun setSearchQuery(query: String?) { - if (query != searchQuery) { - searchQuery = query - loadContacts() - } + searchQuery.postValue(query) } fun selectParticipant(participant: Participant) { @@ -137,7 +138,7 @@ class ContactsViewModel constructor( } private fun loadContacts() { - getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, groupConversation, searchQuery, conversationToken), object : + getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, groupConversation, searchQuery.value, conversationToken), object : UseCaseResponse> { override suspend fun onSuccess(result: List) { val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 0) @@ -160,7 +161,7 @@ class ContactsViewModel constructor( } as MutableList - if (conversationToken.isNullOrEmpty() && searchQuery.isNullOrEmpty()) { + if (conversationToken.isNullOrEmpty() && searchQuery.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) participantElementsList.add(0, newGroupElement) } 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 0abc664d7..33e2ffcae 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 @@ -73,8 +73,6 @@ class ConversationsListView : BaseView() { private lateinit var viewModel: ConversationsListViewModel val factory: ConversationListViewModelFactory by inject() - private var transitionInProgress = false - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup @@ -225,16 +223,6 @@ class ConversationsListView : BaseView() { } } - override fun onChangeStarted(changeHandler: ControllerChangeHandler, changeType: ControllerChangeType) { - super.onChangeStarted(changeHandler, changeType) - transitionInProgress = true - } - - override fun onChangeEnded(changeHandler: ControllerChangeHandler, changeType: ControllerChangeType) { - super.onChangeEnded(changeHandler, changeType) - transitionInProgress = false - } - override fun getLayoutId(): Int { return R.layout.conversations_list_view } diff --git a/app/src/main/res/layout/search_layout.xml b/app/src/main/res/layout/search_layout.xml index d94d6775a..92ce147c6 100644 --- a/app/src/main/res/layout/search_layout.xml +++ b/app/src/main/res/layout/search_layout.xml @@ -52,9 +52,9 @@ + app:hintEnabled="false">