mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-22 13:09:46 +01:00
Add footer to contacts view
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
91f40d0b7f
commit
df1e65e238
@ -177,7 +177,7 @@ class MainActivity : BaseActivity(), ActionBarProvider {
|
||||
|
||||
private fun openNewConversationScreen() {
|
||||
router?.pushController(
|
||||
RouterTransaction.with(ContactsView())
|
||||
RouterTransaction.with(ContactsView<Any>())
|
||||
.pushChangeHandler(HorizontalChangeHandler())
|
||||
.popChangeHandler(HorizontalChangeHandler())
|
||||
)
|
||||
|
@ -21,9 +21,6 @@
|
||||
package com.nextcloud.talk.adapters.items
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.graphics.drawable.LayerDrawable
|
||||
import android.text.TextUtils
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
|
@ -44,7 +44,6 @@ import com.nextcloud.talk.utils.DisplayUtils
|
||||
import com.nextcloud.talk.utils.TextMatchers
|
||||
import com.nextcloud.talk.utils.preferences.AppPreferences
|
||||
import com.stfalcon.chatkit.messages.MessageHolders
|
||||
import com.stfalcon.chatkit.utils.DateFormatter
|
||||
import org.koin.core.KoinComponent
|
||||
import org.koin.core.inject
|
||||
|
||||
|
@ -41,7 +41,6 @@ import com.nextcloud.talk.utils.DisplayUtils.getMessageSelector
|
||||
import com.nextcloud.talk.utils.DisplayUtils.searchAndReplaceWithMentionSpan
|
||||
import com.nextcloud.talk.utils.TextMatchers
|
||||
import com.stfalcon.chatkit.messages.MessageHolders.OutcomingTextMessageViewHolder
|
||||
import com.stfalcon.chatkit.utils.DateFormatter
|
||||
import org.koin.core.KoinComponent
|
||||
import org.koin.core.inject
|
||||
import java.util.*
|
||||
|
@ -43,7 +43,10 @@ import com.nextcloud.talk.models.database.UserEntity
|
||||
import com.nextcloud.talk.models.json.capabilities.Capabilities
|
||||
import com.nextcloud.talk.models.json.push.PushConfiguration
|
||||
import com.nextcloud.talk.models.json.signaling.settings.SignalingSettings
|
||||
import com.nextcloud.talk.newarch.di.module.*
|
||||
import com.nextcloud.talk.newarch.di.module.CommunicationModule
|
||||
import com.nextcloud.talk.newarch.di.module.NetworkModule
|
||||
import com.nextcloud.talk.newarch.di.module.ServiceModule
|
||||
import com.nextcloud.talk.newarch.di.module.StorageModule
|
||||
import com.nextcloud.talk.newarch.domain.di.module.UseCasesModule
|
||||
import com.nextcloud.talk.newarch.features.account.di.module.AccountModule
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.di.module.ContactsFlowModule
|
||||
|
@ -27,7 +27,6 @@ import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Handler
|
||||
import android.text.InputType
|
||||
import android.util.Log
|
||||
import android.view.*
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import android.widget.ProgressBar
|
||||
@ -45,7 +44,6 @@ import butterknife.OnClick
|
||||
import butterknife.Optional
|
||||
import com.bluelinelabs.conductor.RouterTransaction
|
||||
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler
|
||||
import com.bluelinelabs.logansquare.LoganSquare
|
||||
import com.kennyc.bottomsheet.BottomSheet
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.activities.MagicCallActivity
|
||||
@ -57,8 +55,6 @@ import com.nextcloud.talk.controllers.bottomsheet.EntryMenuController
|
||||
import com.nextcloud.talk.controllers.bottomsheet.OperationsMenuController
|
||||
import com.nextcloud.talk.events.BottomSheetLockEvent
|
||||
import com.nextcloud.talk.jobs.AddParticipantsToConversation
|
||||
import com.nextcloud.talk.models.RetrofitBucket
|
||||
import com.nextcloud.talk.models.json.autocomplete.AutocompleteOverall
|
||||
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.models.json.conversations.RoomOverall
|
||||
@ -82,15 +78,11 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import okhttp3.ResponseBody
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.parceler.Parcels
|
||||
import java.util.ArrayList
|
||||
import java.util.HashMap
|
||||
import java.util.HashSet
|
||||
import kotlin.Comparator
|
||||
import java.util.*
|
||||
import kotlin.String
|
||||
|
||||
class ContactsController : BaseController,
|
||||
|
@ -32,8 +32,6 @@ import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
import butterknife.BindView
|
||||
import com.bluelinelabs.conductor.RouterTransaction
|
||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.adapters.items.AdvancedUserItem
|
||||
import com.nextcloud.talk.controllers.base.BaseController
|
||||
|
@ -33,23 +33,19 @@ import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.EditText
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.appcompat.app.ActionBar
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import androidx.core.view.isVisible
|
||||
import com.bluelinelabs.conductor.ControllerChangeHandler
|
||||
import com.bluelinelabs.conductor.ControllerChangeType
|
||||
import com.bluelinelabs.conductor.autodispose.ControllerScopeProvider
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.activities.MainActivity
|
||||
import com.nextcloud.talk.controllers.SwitchAccountController
|
||||
import com.nextcloud.talk.controllers.base.providers.ActionBarProvider
|
||||
import com.nextcloud.talk.utils.animations.FABAwareScrollingViewBehavior
|
||||
import com.nextcloud.talk.utils.preferences.AppPreferences
|
||||
import com.uber.autodispose.lifecycle.LifecycleScopeProvider
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import kotlinx.android.synthetic.main.search_layout.*
|
||||
import kotlinx.android.synthetic.main.search_layout.view.*
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.koin.android.ext.android.inject
|
||||
import java.util.*
|
||||
|
@ -29,8 +29,8 @@ import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.newarch.local.models.getCredentials
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_TOKEN
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import io.reactivex.Observer
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
|
@ -29,8 +29,8 @@ import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.newarch.local.models.getCredentials
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_TOKEN
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import io.reactivex.Observer
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
|
@ -84,6 +84,7 @@ import com.nextcloud.talk.utils.NotificationUtils.cancelExistingNotificationWith
|
||||
import com.nextcloud.talk.utils.NotificationUtils.createNotificationChannel
|
||||
import com.nextcloud.talk.utils.NotificationUtils.findNotificationForRoom
|
||||
import com.nextcloud.talk.utils.PushUtils
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_TOKEN
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FROM_NOTIFICATION_START_CALL
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_NOTIFICATION_ID
|
||||
@ -91,7 +92,6 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_NOTIFICATION_SIGNATURE
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_NOTIFICATION_SUBJECT
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_TOKEN
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USER_ENTITY
|
||||
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils
|
||||
import com.nextcloud.talk.utils.preferences.AppPreferences
|
||||
|
@ -27,9 +27,9 @@ import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.newarch.local.models.getCredentials
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_TOKEN
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FILE_PATHS
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_TOKEN
|
||||
import io.reactivex.Observer
|
||||
import io.reactivex.disposables.Disposable
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
|
@ -25,7 +25,6 @@ import androidx.work.Worker
|
||||
import androidx.work.WorkerParameters
|
||||
import com.nextcloud.talk.newarch.domain.repository.offline.UsersRepository
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.webrtc.WebSocketConnectionHelper
|
||||
import org.koin.core.KoinComponent
|
||||
import org.koin.core.inject
|
||||
|
||||
|
@ -28,9 +28,6 @@ import com.nextcloud.talk.models.json.converters.EnumParticipantTypeConverter;
|
||||
|
||||
import org.parceler.Parcel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import lombok.Data;
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
package com.nextcloud.talk.newarch.data.repository.online
|
||||
|
||||
import com.nextcloud.talk.models.json.autocomplete.AutocompleteOverall
|
||||
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.models.json.conversations.RoomOverall
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
package com.nextcloud.talk.newarch.domain.repository.online
|
||||
|
||||
import com.nextcloud.talk.models.json.autocomplete.AutocompleteOverall
|
||||
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.models.json.conversations.RoomOverall
|
||||
|
@ -22,7 +22,6 @@
|
||||
|
||||
package com.nextcloud.talk.newarch.domain.usecases
|
||||
|
||||
import com.nextcloud.talk.models.json.push.PushRegistrationOverall
|
||||
import com.nextcloud.talk.newarch.data.source.remote.ApiErrorHandler
|
||||
import com.nextcloud.talk.newarch.domain.repository.online.NextcloudTalkRepository
|
||||
import com.nextcloud.talk.newarch.domain.usecases.base.UseCase
|
||||
|
@ -98,7 +98,6 @@ class LoginEntryView(val bundle: Bundle) : BaseView() {
|
||||
})
|
||||
|
||||
|
||||
|
||||
val baseUrl = bundle.get(BundleKeys.KEY_BASE_URL)
|
||||
val headers: MutableMap<String, String> = hashMapOf()
|
||||
headers["OCS-APIRequest"] = "true"
|
||||
|
@ -2,7 +2,6 @@ package com.nextcloud.talk.newarch.features.account.loginentry
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.nextcloud.talk.models.LoginData
|
||||
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall
|
||||
import com.nextcloud.talk.models.json.push.PushConfiguration
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.nextcloud.talk.newarch.features.contactsflow
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import coil.api.load
|
||||
@ -15,8 +14,10 @@ import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.otaliastudios.elements.Element
|
||||
import com.otaliastudios.elements.Page
|
||||
import com.otaliastudios.elements.Presenter
|
||||
import com.otaliastudios.elements.extensions.FooterSource
|
||||
import com.otaliastudios.elements.extensions.HeaderSource
|
||||
import kotlinx.android.synthetic.main.rv_item_contact.view.*
|
||||
import kotlinx.android.synthetic.main.rv_item_participant_rv_footer.view.*
|
||||
import kotlinx.android.synthetic.main.rv_item_title_header.view.*
|
||||
import org.koin.core.KoinComponent
|
||||
import org.koin.core.inject
|
||||
@ -25,14 +26,20 @@ open class ContactPresenter<T : Any>(context: Context, onElementClick: ((Page, H
|
||||
private val globalService: GlobalService by inject()
|
||||
|
||||
override val elementTypes: Collection<Int>
|
||||
get() = listOf(ParticipantElementType.PARTICIPANT.ordinal, ParticipantElementType.PARTICIPANT_HEADER.ordinal)
|
||||
get() = listOf(ParticipantElementType.PARTICIPANT.ordinal, ParticipantElementType.PARTICIPANT_HEADER.ordinal, ParticipantElementType.PARTICIPANT_FOOTER.ordinal)
|
||||
|
||||
override fun onCreate(parent: ViewGroup, elementType: Int): Holder {
|
||||
return if (elementType == ParticipantElementType.PARTICIPANT.ordinal) {
|
||||
return when (elementType) {
|
||||
ParticipantElementType.PARTICIPANT.ordinal -> {
|
||||
Holder(getLayoutInflater().inflate(R.layout.rv_item_contact, parent, false))
|
||||
} else {
|
||||
}
|
||||
ParticipantElementType.PARTICIPANT_HEADER.ordinal -> {
|
||||
Holder(getLayoutInflater().inflate(R.layout.rv_item_title_header, parent, false))
|
||||
}
|
||||
else -> {
|
||||
Holder(getLayoutInflater().inflate(R.layout.rv_item_participant_rv_footer, parent, false))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBind(page: Page, holder: Holder, element: Element<T>, payloads: List<Any>) {
|
||||
@ -76,8 +83,10 @@ open class ContactPresenter<T : Any>(context: Context, onElementClick: ((Page, H
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else if (element.type == ParticipantElementType.PARTICIPANT_HEADER.ordinal) {
|
||||
holder.itemView.titleTextView.text = (element.data as HeaderSource.Data<*, *>).header.toString()
|
||||
} else {
|
||||
holder.itemView.messageTextView.text = (element.data as FooterSource.Data<*, *>).footer.toString()
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.nextcloud.talk.newarch.features.contactsflow
|
||||
|
||||
import android.content.Context
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.models.json.participants.Participant
|
||||
import com.otaliastudios.elements.Page
|
||||
import com.otaliastudios.elements.Source
|
||||
import com.otaliastudios.elements.extensions.FooterSource
|
||||
|
||||
class ContactsFooterSource(private val context: Context, private val elementType: Int) : FooterSource<Participant, String>() {
|
||||
private var lastAnchor: Participant? = null
|
||||
|
||||
override fun dependsOn(source: Source<*>): Boolean {
|
||||
return source is ContactsViewSource
|
||||
}
|
||||
|
||||
override fun areItemsTheSame(first: Data<Participant, String>, second: Data<Participant, String>): Boolean {
|
||||
return first == second
|
||||
}
|
||||
|
||||
override fun getElementType(data: Data<Participant, String>) = elementType
|
||||
|
||||
override fun computeFooters(page: Page, list: List<Participant>): List<Data<Participant, String>> {
|
||||
val results = arrayListOf<Data<Participant, String>>()
|
||||
lastAnchor = if (list.isNotEmpty()) {
|
||||
val participant = list.takeLast(1)[0]
|
||||
|
||||
if (lastAnchor == null || lastAnchor != participant) {
|
||||
results.add(Data(participant, context.getString(R.string.nc_search_for_more)))
|
||||
}
|
||||
|
||||
participant
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
}
|
@ -2,5 +2,6 @@ package com.nextcloud.talk.newarch.features.contactsflow
|
||||
|
||||
enum class ParticipantElementType {
|
||||
PARTICIPANT,
|
||||
PARTICIPANT_HEADER
|
||||
PARTICIPANT_HEADER,
|
||||
PARTICIPANT_FOOTER
|
||||
}
|
@ -22,7 +22,7 @@ import kotlinx.android.synthetic.main.conversations_list_view.view.*
|
||||
import kotlinx.android.synthetic.main.message_state.view.*
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
class ContactsView(private val bundle: Bundle? = null) : BaseView() {
|
||||
class ContactsView<T : Any>(private val bundle: Bundle? = null) : BaseView() {
|
||||
override val scopeProvider: LifecycleScopeProvider<*> = ControllerScopeProvider.from(this)
|
||||
|
||||
private lateinit var viewModel: ContactsViewModel
|
||||
@ -47,6 +47,7 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() {
|
||||
adapter = Adapter.builder(this)
|
||||
.addSource(ContactsViewSource(viewModel.contactsLiveData, ParticipantElementType.PARTICIPANT.ordinal))
|
||||
.addSource(ContactsHeaderSource(activity as Context, ParticipantElementType.PARTICIPANT_HEADER.ordinal))
|
||||
.addSource(ContactsFooterSource(activity as Context, ParticipantElementType.PARTICIPANT_FOOTER.ordinal))
|
||||
.addPresenter(ContactPresenter(activity as Context, ::onElementClick))
|
||||
.addPresenter(Presenter.forLoadingIndicator(activity as Context, R.layout.loading_state))
|
||||
.addPresenter(Presenter.forEmptyIndicator(activity as Context, R.layout.message_state))
|
||||
@ -66,11 +67,14 @@ class ContactsView(private val bundle: Bundle? = null) : BaseView() {
|
||||
return view
|
||||
}
|
||||
|
||||
private fun onElementClick(page: Page, holder: Presenter.Holder, element: Element<Participant>) {
|
||||
val isElementSelected = element.data?.selected == true
|
||||
element.data?.selected = !isElementSelected
|
||||
private fun onElementClick(page: Page, holder: Presenter.Holder, element: Element<T>) {
|
||||
if (element.data is Participant?) {
|
||||
val participant = element.data as Participant?
|
||||
val isElementSelected = participant?.selected == true
|
||||
participant?.selected = !isElementSelected
|
||||
adapter.notifyItemChanged(holder.adapterPosition, ElementPayload.SELECTION_TOGGLE)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getTitle(): String? {
|
||||
return resources?.getString(R.string.nc_select_contacts)
|
||||
|
@ -1,8 +1,6 @@
|
||||
package com.nextcloud.talk.newarch.features.contactsflow
|
||||
|
||||
import android.app.Application
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.nextcloud.talk.models.json.participants.Participant
|
||||
@ -13,8 +11,6 @@ import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
|
||||
import com.nextcloud.talk.newarch.features.conversationslist.ConversationsListView
|
||||
import com.nextcloud.talk.newarch.services.GlobalService
|
||||
import org.koin.core.parameter.parametersOf
|
||||
import java.util.*
|
||||
import kotlin.Comparator
|
||||
|
||||
class ContactsViewModel constructor(
|
||||
application: Application,
|
||||
@ -22,14 +18,19 @@ class ContactsViewModel constructor(
|
||||
val globalService: GlobalService
|
||||
) : BaseViewModel<ConversationsListView>(application) {
|
||||
val contactsLiveData = MutableLiveData<List<Participant>>()
|
||||
val searchQuery = MutableLiveData<String?>(null)
|
||||
private var searchQuery: String? = null
|
||||
var conversationToken: String? = null
|
||||
|
||||
fun setSearchQuery(query: String?) {
|
||||
searchQuery = query
|
||||
loadContacts()
|
||||
}
|
||||
|
||||
fun loadContacts() {
|
||||
getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, searchQuery.value, conversationToken), object :
|
||||
getContactsUseCase.invoke(viewModelScope, parametersOf(globalService.currentUserLiveData.value, searchQuery, 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 3)
|
||||
val sortPriority = mapOf("users" to 0, "groups" to 1, "emails" to 2, "circles" to 0)
|
||||
val typeComparator = Comparator<Participant> { o1, o2 ->
|
||||
sortPriority[o2.source]?.let { sortPriority[o1.source]?.compareTo(it) }
|
||||
0
|
||||
@ -38,7 +39,7 @@ class ContactsViewModel constructor(
|
||||
val sortedList = result.sortedWith(compareBy({
|
||||
sortPriority[it.source]
|
||||
}, {
|
||||
it.displayName.toLowerCase(Locale.getDefault())
|
||||
it.displayName.toLowerCase()
|
||||
}))
|
||||
|
||||
contactsLiveData.postValue(sortedList)
|
||||
|
@ -23,7 +23,6 @@
|
||||
package com.nextcloud.talk.newarch.features.contactsflow
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.models.json.participants.Participant
|
||||
import com.otaliastudios.elements.Element
|
||||
import com.otaliastudios.elements.Page
|
||||
|
@ -22,11 +22,13 @@ package com.nextcloud.talk.newarch.features.conversationslist
|
||||
|
||||
import android.app.Application
|
||||
import android.graphics.drawable.Drawable
|
||||
import androidx.lifecycle.*
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.Transformations
|
||||
import androidx.lifecycle.liveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import coil.Coil
|
||||
import coil.api.get
|
||||
import coil.transform.CircleCropTransformation
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.models.json.conversations.Conversation
|
||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||
import com.nextcloud.talk.newarch.conversationsList.mvp.BaseViewModel
|
||||
@ -40,7 +42,6 @@ import com.nextcloud.talk.newarch.domain.usecases.base.UseCaseResponse
|
||||
import com.nextcloud.talk.newarch.local.models.getCredentials
|
||||
import com.nextcloud.talk.newarch.services.GlobalService
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.DisplayUtils
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.core.parameter.parametersOf
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
|
@ -21,7 +21,6 @@
|
||||
package com.nextcloud.talk.newarch.local.converters
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import com.bluelinelabs.logansquare.LoganSquare
|
||||
import com.nextcloud.talk.models.json.push.PushConfiguration
|
||||
import com.nextcloud.talk.newarch.utils.MagicJson
|
||||
import kotlinx.serialization.json.Json
|
||||
|
@ -40,7 +40,6 @@ import java.security.*
|
||||
import java.security.spec.InvalidKeySpecException
|
||||
import java.security.spec.PKCS8EncodedKeySpec
|
||||
import java.security.spec.X509EncodedKeySpec
|
||||
import java.util.HashMap
|
||||
|
||||
class PushUtils(val usersRepository: UsersRepository) : KoinComponent {
|
||||
val appPreferences: AppPreferences by inject()
|
||||
|
@ -20,7 +20,6 @@ import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.cardview.widget.CardView;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.core.view.ViewCompat;
|
||||
|
||||
|
@ -34,8 +34,8 @@ import com.nextcloud.talk.models.json.websocket.*
|
||||
import com.nextcloud.talk.newarch.local.models.UserNgEntity
|
||||
import com.nextcloud.talk.utils.LoggingUtils.writeLogEntryToFile
|
||||
import com.nextcloud.talk.utils.MagicMap
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_CONVERSATION_TOKEN
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request.Builder
|
||||
import okhttp3.Response
|
||||
|
38
app/src/main/res/layout/rv_item_participant_rv_footer.xml
Normal file
38
app/src/main/res/layout/rv_item_participant_rv_footer.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ Nextcloud Talk application
|
||||
~
|
||||
~ @author Mario Danic
|
||||
~ @author Andy Scherzinger
|
||||
~ Copyright (C) 2017-2020 Mario Danic
|
||||
~
|
||||
~ This program is free software: you can redistribute it and/or modify
|
||||
~ it under the terms of the GNU General Public License as published by
|
||||
~ the Free Software Foundation, either version 3 of the License, or
|
||||
~ at your option) any later version.
|
||||
~
|
||||
~ This program is distributed in the hope that it will be useful,
|
||||
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
~ GNU General Public License for more details.
|
||||
~
|
||||
~ You should have received a copy of the GNU General Public License
|
||||
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/rv_item_view_height"
|
||||
android:layout_margin="@dimen/margin_between_elements"
|
||||
android:orientation="vertical">
|
||||
|
||||
<androidx.emoji.widget.EmojiTextView
|
||||
android:id="@+id/messageTextView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_centerInParent="true"
|
||||
android:gravity="center"
|
||||
android:ellipsize="end"
|
||||
tools:text="Contact item text" />
|
||||
|
||||
</RelativeLayout>
|
@ -338,4 +338,5 @@
|
||||
|
||||
<string name="path_password_strike_through" translatable="false"
|
||||
tools:override="true">M3.27,4.27L19.74,20.74</string>
|
||||
<string name="nc_search_for_more">Search for more participants</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user