mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Fixed issue in conversations list & conversation related to group
This commit is contained in:
parent
3873028209
commit
395dc379ed
5 changed files with 57 additions and 17 deletions
|
|
@ -44,7 +44,11 @@ class ConversationModel @WorkerThread constructor(private val chatRoom: ChatRoom
|
|||
|
||||
val remoteSipUri = chatRoom.peerAddress.asStringUriOnly()
|
||||
|
||||
val isGroup = !chatRoom.hasCapability(Capabilities.OneToOne.toInt())
|
||||
val isGroup = !chatRoom.hasCapability(Capabilities.OneToOne.toInt()) && chatRoom.hasCapability(
|
||||
Capabilities.Conference.toInt()
|
||||
)
|
||||
|
||||
val subject = MutableLiveData<String>()
|
||||
|
||||
val lastUpdateTime = MutableLiveData<Long>()
|
||||
|
||||
|
|
@ -69,6 +73,7 @@ class ConversationModel @WorkerThread constructor(private val chatRoom: ChatRoom
|
|||
val avatarModel: ContactAvatarModel
|
||||
|
||||
init {
|
||||
subject.postValue(chatRoom.subject)
|
||||
lastUpdateTime.postValue(chatRoom.lastUpdateTime)
|
||||
|
||||
val address = if (chatRoom.hasCapability(Capabilities.Basic.toInt())) {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import androidx.annotation.WorkerThread
|
|||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||
import org.linphone.core.Address
|
||||
import org.linphone.core.ChatRoom
|
||||
import org.linphone.core.Factory
|
||||
import org.linphone.core.tools.Log
|
||||
|
|
@ -42,10 +43,16 @@ class ConversationViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
val events = MutableLiveData<ArrayList<EventLogModel>>()
|
||||
|
||||
val isGroup = MutableLiveData<Boolean>()
|
||||
|
||||
val subject = MutableLiveData<String>()
|
||||
|
||||
val chatRoomFoundEvent = MutableLiveData<Event<Boolean>>()
|
||||
|
||||
private lateinit var chatRoom: ChatRoom
|
||||
|
||||
private val avatarsMap = hashMapOf<String, ContactAvatarModel>()
|
||||
|
||||
@UiThread
|
||||
fun findChatRoom(localSipUri: String, remoteSipUri: String) {
|
||||
coreContext.postOnCoreThread { core ->
|
||||
|
|
@ -81,6 +88,13 @@ class ConversationViewModel @UiThread constructor() : ViewModel() {
|
|||
|
||||
@WorkerThread
|
||||
private fun configureChatRoom() {
|
||||
isGroup.postValue(
|
||||
!chatRoom.hasCapability(ChatRoom.Capabilities.OneToOne.toInt()) && chatRoom.hasCapability(
|
||||
ChatRoom.Capabilities.Conference.toInt()
|
||||
)
|
||||
)
|
||||
subject.postValue(chatRoom.subject)
|
||||
|
||||
val address = if (chatRoom.hasCapability(ChatRoom.Capabilities.Basic.toInt())) {
|
||||
chatRoom.peerAddress
|
||||
} else {
|
||||
|
|
@ -88,6 +102,31 @@ class ConversationViewModel @UiThread constructor() : ViewModel() {
|
|||
firstParticipant?.address ?: chatRoom.peerAddress
|
||||
}
|
||||
|
||||
avatarModel.postValue(getAvatarModelForAddress(address))
|
||||
|
||||
val eventsList = arrayListOf<EventLogModel>()
|
||||
val history = chatRoom.getHistoryEvents(0)
|
||||
for (event in history) {
|
||||
val avatar = getAvatarModelForAddress(event.chatMessage?.fromAddress)
|
||||
val model = EventLogModel(event, avatar)
|
||||
eventsList.add(model)
|
||||
}
|
||||
events.postValue(eventsList)
|
||||
chatRoom.markAsRead()
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private fun getAvatarModelForAddress(address: Address?): ContactAvatarModel {
|
||||
Log.i("Looking for avatar model with address [${address?.asStringUriOnly()}]")
|
||||
if (address == null) {
|
||||
val fakeFriend = coreContext.core.createFriend()
|
||||
return ContactAvatarModel(fakeFriend)
|
||||
}
|
||||
|
||||
val key = address.asStringUriOnly()
|
||||
val foundInMap = if (avatarsMap.keys.contains(key)) avatarsMap[key] else null
|
||||
if (foundInMap != null) return foundInMap
|
||||
|
||||
val friend = coreContext.contactsManager.findContactByAddress(address)
|
||||
val avatar = if (friend != null) {
|
||||
ContactAvatarModel(friend)
|
||||
|
|
@ -96,14 +135,8 @@ class ConversationViewModel @UiThread constructor() : ViewModel() {
|
|||
fakeFriend.address = address
|
||||
ContactAvatarModel(fakeFriend)
|
||||
}
|
||||
avatarModel.postValue(avatar)
|
||||
|
||||
val eventsList = arrayListOf<EventLogModel>()
|
||||
val history = chatRoom.getHistoryEvents(0)
|
||||
for (event in history) {
|
||||
val model = EventLogModel(event, avatar)
|
||||
eventsList.add(model)
|
||||
}
|
||||
events.postValue(eventsList)
|
||||
avatarsMap[address.asStringUriOnly()] = avatar
|
||||
return avatar
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@
|
|||
|
||||
<io.getstream.avatarview.AvatarView
|
||||
android:id="@+id/avatar"
|
||||
android:layout_width="@dimen/avatar_bubble_size"
|
||||
android:layout_height="@dimen/avatar_bubble_size"
|
||||
android:layout_width="@dimen/avatar_list_cell_size"
|
||||
android:layout_height="@dimen/avatar_list_cell_size"
|
||||
android:adjustViewBounds="true"
|
||||
android:background="@drawable/shape_circle_light_blue_background"
|
||||
contactAvatar="@{model.avatarModel}"
|
||||
|
|
@ -40,8 +40,8 @@
|
|||
|
||||
<ImageView
|
||||
android:id="@+id/presence_badge"
|
||||
android:layout_width="@dimen/avatar_bubble_presence_badge_size"
|
||||
android:layout_height="@dimen/avatar_bubble_presence_badge_size"
|
||||
android:layout_width="@dimen/avatar_presence_badge_size"
|
||||
android:layout_height="@dimen/avatar_presence_badge_size"
|
||||
android:layout_marginEnd="@dimen/avatar_presence_badge_end_margin"
|
||||
android:background="@drawable/led_background"
|
||||
android:padding="@dimen/avatar_presence_badge_padding"
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@
|
|||
android:layout_marginEnd="10dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:text="@{viewModel.avatarModel.name, default=`John Doe`}"
|
||||
android:text="@{viewModel.isGroup ? viewModel.subject : viewModel.avatarModel.name, default=`John Doe`}"
|
||||
android:textSize="16sp"
|
||||
android:textColor="@color/gray_main2_600"
|
||||
android:gravity="center_vertical"
|
||||
|
|
|
|||
|
|
@ -24,14 +24,16 @@
|
|||
android:onLongClickListener="@{onLongClickListener}"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:background="@drawable/primary_cell_background">
|
||||
|
||||
<io.getstream.avatarview.AvatarView
|
||||
android:id="@+id/avatar"
|
||||
android:layout_width="@dimen/avatar_list_cell_size"
|
||||
android:layout_height="@dimen/avatar_list_cell_size"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:layout_marginStart="5dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:background="@drawable/shape_circle_light_blue_background"
|
||||
|
|
@ -85,7 +87,7 @@
|
|||
android:layout_marginEnd="5dp"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
android:text="@{model.avatarModel.name, default=`John Doe`}"
|
||||
android:text="@{model.isGroup ? model.subject : model.avatarModel.name, default=`John Doe`}"
|
||||
android:textSize="14sp"
|
||||
android:textColor="@color/gray_main2_800"
|
||||
android:textStyle="@{model.unreadMessageCount > 0 ? Typeface.BOLD : Typeface.NORMAL}"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue