diff --git a/README.md b/README.md index b81fc5fad..4e2156060 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Linphone is dual licensed, and is available either : 6.0.0 release is a completely new version, designed with UX/UI experts and marks a turning point in design, features, and user experience. The improvements make this version smoother and simpler for both developers and users. -You can take a look at the [CHANGELOG.md](CHANGELOG.md) file for a non-exhaustive list of changes of this new version and of the newly added features, the most exciting ones being the improved fluidity, a real multi-accounts support and asymetrical video in calls. +You can take a look at the [CHANGELOG.md](CHANGELOG.md) file for a non-exhaustive list of changes of this new version and of the newly added features, the most exciting ones being the improved fluidity, a real multi-accounts support and asymmetrical video in calls. This release only works on Android OS 9.0 and newer. 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 bd8cd8bfc..63288eb0f 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 @@ -107,6 +107,7 @@ class ConversationModel } } + @WorkerThread override fun onConferenceJoined(chatRoom: ChatRoom, eventLog: EventLog) { // This is required as a Created chat room may not have the participants list yet Log.i("$TAG Conversation has been joined") @@ -129,10 +130,12 @@ class ConversationModel computeComposingLabel() } + @WorkerThread override fun onNewEvent(chatRoom: ChatRoom, eventLog: EventLog) { updateLastUpdatedTime() } + @WorkerThread override fun onNewEvents(chatRoom: ChatRoom, eventLogs: Array) { updateLastMessage() updateLastUpdatedTime() @@ -340,14 +343,13 @@ class ConversationModel val message = chatRoom.lastMessageInHistory if (message != null) { + lastMessage = message updateLastMessageStatus(message) if (message.isOutgoing && message.state != ChatMessage.State.Displayed) { message.addListener(chatMessageListener) - lastMessage = message } else if (message.contents.find { it.isFileTransfer == true } != null) { message.addListener(chatMessageListener) - lastMessage = message } val timestamp = message.time diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/EventLogModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/EventLogModel.kt index 08b08dcb9..b0da4ae9d 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/EventLogModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/EventLogModel.kt @@ -20,10 +20,7 @@ package org.linphone.ui.main.chat.model import androidx.annotation.WorkerThread -import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.core.EventLog -import org.linphone.core.tools.Log -import org.linphone.utils.LinphoneUtils class EventLogModel @WorkerThread @@ -54,35 +51,10 @@ class EventLogModel EventModel(eventLog) } else { val chatMessage = eventLog.chatMessage!! - var replyTo = "" - var isReply = chatMessage.isReply - val replyText = if (chatMessage.isReply) { - val replyMessage = chatMessage.replyMessage - if (replyMessage != null) { - val from = replyMessage.fromAddress - val avatarModel = coreContext.contactsManager.getContactAvatarModelForAddress(from) - replyTo = avatarModel.contactName ?: LinphoneUtils.getDisplayName(from) - - LinphoneUtils.getPlainTextDescribingMessage(replyMessage) - } else { - Log.e( - "$TAG Failed to find the reply message from ID [${chatMessage.replyMessageId}]" - ) - isReply = false - "" - } - } else { - "" - } MessageModel( chatMessage, isFromGroup, - isReply, - replyTo, - replyText, - chatMessage.replyMessageId, - chatMessage.isForward, isGroupedWithPreviousOne, isGroupedWithNextOne, currentFilter, diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt index fe6968ac5..8e1880e34 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/MessageModel.kt @@ -70,11 +70,6 @@ class MessageModel constructor( val chatMessage: ChatMessage, val isFromGroup: Boolean, - val isReply: Boolean, - val replyTo: String, - val replyText: String, - val replyToMessageId: String?, - val isForward: Boolean, isGroupedWithPreviousOne: Boolean, isGroupedWithNextOne: Boolean, private val currentFilter: String = "", @@ -116,6 +111,16 @@ class MessageModel )?.params?.instantMessagingEncryptionMandatory == true ) + val isReply = chatMessage.isReply + + val replyToMessageId = chatMessage.replyMessageId + + val isForward = chatMessage.isForward + + val replyTo = MutableLiveData() + + val replyText = MutableLiveData() + val avatarModel = MutableLiveData() val groupedWithNextMessage = MutableLiveData() @@ -314,6 +319,9 @@ class MessageModel updateReactionsList() computeContentsList() + if (isReply) { + computeReplyInfo() + } coreContext.postOnMainThread { firstFileModel.addSource(filesList) { @@ -629,6 +637,19 @@ class MessageModel } } + @WorkerThread + fun computeReplyInfo() { + val replyMessage = chatMessage.replyMessage + if (replyMessage != null) { + val from = replyMessage.fromAddress + val avatarModel = coreContext.contactsManager.getContactAvatarModelForAddress(from) + replyTo.postValue(avatarModel.contactName ?: LinphoneUtils.getDisplayName(from)) + replyText.postValue(LinphoneUtils.getFormattedTextDescribingMessage(replyMessage)) + } else { + Log.e("$TAG Failed to find the reply message from ID [${chatMessage.replyMessageId}]") + } + } + @WorkerThread private fun computeTextContent(content: Content, highlight: String) { val textContent = content.utf8Text.orEmpty().trim() diff --git a/app/src/main/res/layout/chat_bubble_long_press_menu.xml b/app/src/main/res/layout/chat_bubble_long_press_menu.xml index c6eeb2d50..4df2e93b7 100644 --- a/app/src/main/res/layout/chat_bubble_long_press_menu.xml +++ b/app/src/main/res/layout/chat_bubble_long_press_menu.xml @@ -139,7 +139,8 @@ + android:background="?attr/color_separator" + android:visibility="@{viewModel.isChatRoomReadOnly ? View.GONE : View.VISIBLE}" /> + android:background="?attr/color_separator" + android:visibility="@{viewModel.hideForward ? View.GONE : View.VISIBLE}" />