Fixed issue in conversations list & conversation related to group

This commit is contained in:
Sylvain Berfini 2023-10-09 16:01:11 +02:00
parent 3873028209
commit 395dc379ed
5 changed files with 57 additions and 17 deletions

View file

@ -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())) {

View file

@ -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
}
}

View file

@ -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"

View file

@ -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"

View file

@ -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}"