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 be408ec22..babb6d7e9 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 @@ -176,10 +176,9 @@ class MessageModel @WorkerThread constructor( downloadingFileModel = null } computeContentsList() - } else if (messageState == ChatMessage.State.Displayed) { - Log.i("$TAG Message was marked as read") - isRead = true } + + isRead = chatMessage.isRead } @WorkerThread 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 116adb988..d44712b93 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 @@ -120,6 +120,18 @@ class ConversationViewModel @UiThread constructor() : ViewModel() { @WorkerThread override fun onChatRoomRead(chatRoom: ChatRoom) { unreadMessagesCount.postValue(0) + + // Make sure message models are aware that they were read, + // required for scroll to bottom or first unread message behaves as expected + for (eventLog in events.value.orEmpty().reversed()) { + if (eventLog.model is MessageModel) { + if (!eventLog.model.isRead) { + eventLog.model.isRead = true + } else { + break + } + } + } Log.i("$TAG Conversation was marked as read") }