diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index 83e6c00ad..eaa811dcb 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -971,6 +971,10 @@ open class ConversationFragment : SlidingPaneChildFragment() { viewModel.isUserScrollingUp.value = !bottomReached if (bottomReached) { viewModel.markAsRead() + } else { + val firstUnread = adapter.currentList[firstUnreadMessagePosition] + (firstUnread.model as MessageModel).isRead = true + viewModel.markFirstUnreadMessageAsRead() } } 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 bfeab83cb..9020f87a8 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 @@ -178,9 +178,8 @@ class ConversationViewModel @UiThread constructor() : AbstractConversationViewMo Log.i("$TAG Received [${eventLogs.size}] new message(s)") computeComposingLabel() - addEvents(eventLogs) - unreadMessagesCount.postValue(chatRoom.unreadMessagesCount) + addEvents(eventLogs) } @WorkerThread @@ -410,6 +409,16 @@ class ConversationViewModel @UiThread constructor() : AbstractConversationViewMo } } + @UiThread + fun markFirstUnreadMessageAsRead() { + // As we can't mark a single message as read in our SDK, small workaround + // TODO FIXME: when SDK will support chatMessage.markAsRead(), use it + val unreadCount = unreadMessagesCount.value ?: 0 + if (unreadCount > 1) { + unreadMessagesCount.value = unreadCount - 1 + } + } + @UiThread fun applyFilter() { coreContext.postOnCoreThread {