diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt index 7d33c1743..075c474e7 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt @@ -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() val lastUpdateTime = MutableLiveData() @@ -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())) { diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt index 2de78e2ae..f994cb302 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt @@ -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>() + val isGroup = MutableLiveData() + + val subject = MutableLiveData() + val chatRoomFoundEvent = MutableLiveData>() private lateinit var chatRoom: ChatRoom + private val avatarsMap = hashMapOf() + @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() + 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() - 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 } } diff --git a/app/src/main/res/layout/chat_bubble_incoming.xml b/app/src/main/res/layout/chat_bubble_incoming.xml index 7d7bf2e03..0c7f84179 100644 --- a/app/src/main/res/layout/chat_bubble_incoming.xml +++ b/app/src/main/res/layout/chat_bubble_incoming.xml @@ -23,8 +23,8 @@