mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-21 12:39:58 +01:00
Further improvements to contacts
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
6c73b6f70c
commit
4cefbc8b37
@ -85,7 +85,7 @@
|
||||
android:name=".activities.MainActivity"
|
||||
android:label="@string/nc_app_label"
|
||||
android:launchMode="singleTask"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
android:windowSoftInputMode="adjustResize|stateUnchanged">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,6 @@ abstract class UseCase<Type, in Params>(private val apiErrorHandler: ApiErrorHan
|
||||
onResult.onSuccess(it)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
||||
onResult.onError(apiErrorHandler?.traceErrorException(e))
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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<ContactsViewOperationStateWrapper> = _operationState.distinctUntilChanged()
|
||||
|
||||
private var searchQuery: String? = null
|
||||
private var searchQuery: MutableLiveData<String?> = MutableLiveData()
|
||||
var searchQueryLiveData: LiveData<String?> = Transformations.switchMap(searchQuery) { searchQuery ->
|
||||
if (initialized) {
|
||||
loadContacts()
|
||||
}
|
||||
liveData<String?> { 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<List<Participant>> {
|
||||
override suspend fun onSuccess(result: List<Participant>) {
|
||||
val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 0)
|
||||
@ -160,7 +161,7 @@ class ContactsViewModel constructor(
|
||||
} as MutableList<ParticipantElement>
|
||||
|
||||
|
||||
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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -52,9 +52,9 @@
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/leftButton"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:padding="3dp"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:padding="4dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:scaleType="fitCenter"
|
||||
@ -73,7 +73,6 @@
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_toEndOf="@id/leftContainer"
|
||||
android:layout_toStartOf="@id/rightContainer"
|
||||
android:focusedByDefault="false"
|
||||
android:layout_marginStart="4dp"
|
||||
android:imeOptions="actionSearch|flagNoExtractUi"
|
||||
android:inputType="textNoSuggestions"
|
||||
@ -83,8 +82,7 @@
|
||||
app:boxStrokeColor="@color/transparent"
|
||||
app:errorEnabled="true"
|
||||
app:helperTextEnabled="false"
|
||||
app:hintEnabled="false"
|
||||
tools:ignore="UnusedAttribute">
|
||||
app:hintEnabled="false">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/inputEditText"
|
||||
@ -110,9 +108,9 @@
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/clearButton"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:padding="3dp"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:padding="4dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:scaleType="fitCenter"
|
||||
@ -124,9 +122,9 @@
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/settingsButton"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:padding="3dp"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:padding="4dp"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:scaleType="fitCenter"
|
||||
@ -138,9 +136,9 @@
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/searchProgressBar"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="36dp"
|
||||
android:padding="3dp"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:padding="4dp"
|
||||
android:layout_gravity="center"
|
||||
android:indeterminate="true"
|
||||
android:indeterminateTint="@color/colorPrimary"
|
||||
|
Loading…
Reference in New Issue
Block a user