diff --git a/changelog.d/8268.bugfix b/changelog.d/8268.bugfix new file mode 100644 index 0000000000..06183fe39b --- /dev/null +++ b/changelog.d/8268.bugfix @@ -0,0 +1 @@ +The read marker is stuck in the past diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt index 9fe296e1f9..478ed4a58d 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt @@ -39,7 +39,7 @@ sealed class RoomDetailAction : VectorViewModelAction { data class UndoReaction(val targetEventId: String, val reaction: String, val reason: String? = "") : RoomDetailAction() data class RedactAction(val targetEventId: String, val reason: String? = "") : RoomDetailAction() data class UpdateQuickReactAction(val targetEventId: String, val selectedReaction: String, val add: Boolean) : RoomDetailAction() - data class NavigateToEvent(val eventId: String, val highlight: Boolean) : RoomDetailAction() + data class NavigateToEvent(val eventId: String, val highlight: Boolean, val isFirstUnreadEvent: Boolean = false) : RoomDetailAction() object MarkAllAsRead : RoomDetailAction() data class DownloadOrOpen(val eventId: String, val senderId: String?, val messageFileContent: MessageWithAttachmentContent) : RoomDetailAction() object JoinAndOpenReplacementRoom : RoomDetailAction() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt index 77dd826cfe..1183951b45 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt @@ -41,7 +41,7 @@ sealed class RoomDetailViewEvents : VectorViewEvents { data class OpenRoom(val roomId: String, val closeCurrentRoom: Boolean = false) : RoomDetailViewEvents() - data class NavigateToEvent(val eventId: String) : RoomDetailViewEvents() + data class NavigateToEvent(val eventId: String, val isFirstUnreadEvent: Boolean) : RoomDetailViewEvents() data class JoinJitsiConference(val widget: Widget, val withVideo: Boolean) : RoomDetailViewEvents() object LeaveJitsiConference : RoomDetailViewEvents() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt index 06444e9816..20e283f2c5 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt @@ -748,7 +748,9 @@ class TimelineFragment : } private fun navigateToEvent(action: RoomDetailViewEvents.NavigateToEvent) { - val scrollPosition = timelineEventController.searchPositionOfEvent(action.eventId) + val scrollPosition = timelineEventController.getPositionOfReadMarker().takeIf { action.isFirstUnreadEvent } + ?: timelineEventController.searchPositionOfEvent(action.eventId) + if (scrollPosition == null) { scrollOnHighlightedEventCallback.scheduleScrollTo(action.eventId) } else { @@ -1995,10 +1997,10 @@ class TimelineFragment : private fun onJumpToReadMarkerClicked() = withState(timelineViewModel) { if (it.unreadState is UnreadState.HasUnread) { - timelineViewModel.handle(RoomDetailAction.NavigateToEvent(it.unreadState.firstUnreadEventId, false)) + timelineViewModel.handle(RoomDetailAction.NavigateToEvent(it.unreadState.firstUnreadEventId, highlight = false, isFirstUnreadEvent = true)) } if (it.unreadState is UnreadState.ReadMarkerNotLoaded) { - timelineViewModel.handle(RoomDetailAction.NavigateToEvent(it.unreadState.readMarkerId, false)) + timelineViewModel.handle(RoomDetailAction.NavigateToEvent(it.unreadState.readMarkerId, highlight = false)) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt index 5d5aae66bb..b889c808b3 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt @@ -1033,7 +1033,7 @@ class TimelineViewModel @AssistedInject constructor( if (action.highlight) { setState { copy(highlightedEventId = targetEventId) } } - _viewEvents.post(RoomDetailViewEvents.NavigateToEvent(targetEventId)) + _viewEvents.post(RoomDetailViewEvents.NavigateToEvent(targetEventId, action.isFirstUnreadEvent)) } private fun handleResendEvent(action: RoomDetailAction.ResendMessage) {