diff --git a/CHANGES.md b/CHANGES.md index b3f9615c70..3ce4f3ef35 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -24,6 +24,7 @@ Bugfix 🐛: - Fix read marker not updating automatically (#3267) - Sent video does not contains duration (#3272) - Properly clean the back stack if the user cancel registration when waiting for email validation + - Fix read marker visibility/position when filtering some events Translations 🗣: - diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineControllerInterceptorHelper.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineControllerInterceptorHelper.kt index 72fdef9f7d..389dd15413 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineControllerInterceptorHelper.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineControllerInterceptorHelper.kt @@ -62,6 +62,7 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut val firstUnreadEventId = (unreadState as? UnreadState.HasUnread)?.firstUnreadEventId var atLeastOneVisibleItemSinceLastDaySeparator = false var atLeastOneVisibleItemsBeforeReadMarker = false + var appendReadMarker = false // Then iterate on models so we have the exact positions in the adapter modelsIterator.forEach { epoxyModel -> @@ -72,11 +73,7 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut } epoxyModel.getEventIds().forEach { eventId -> adapterPositionMapping[eventId] = index - if (epoxyModel.canAppendReadMarker() && eventId == firstUnreadEventId && atLeastOneVisibleItemsBeforeReadMarker) { - modelsIterator.addReadMarkerItem(callback) - index++ - positionOfReadMarker.set(index) - } + appendReadMarker = epoxyModel.canAppendReadMarker() && eventId == firstUnreadEventId && atLeastOneVisibleItemsBeforeReadMarker } } if (epoxyModel is DaySeparatorItem) { @@ -91,6 +88,12 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut atLeastOneVisibleItemSinceLastDaySeparator = true } } + if (appendReadMarker) { + modelsIterator.addReadMarkerItem(callback) + index++ + positionOfReadMarker.set(index) + appendReadMarker = false + } index++ } previousModelsSize = models.size @@ -103,8 +106,6 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut it.setOnVisibilityStateChanged(ReadMarkerVisibilityStateChangedListener(callback)) } add(readMarker) - // Use next as we still have some process to do before the next iterator loop - next() } private fun MutableListIterator>.removeCallItemIfNeeded(