Fix read marker visibility/position when filtering some events
This commit is contained in:
parent
fb0205e903
commit
581847e5c1
|
@ -24,6 +24,7 @@ Bugfix 🐛:
|
||||||
- Fix read marker not updating automatically (#3267)
|
- Fix read marker not updating automatically (#3267)
|
||||||
- Sent video does not contains duration (#3272)
|
- Sent video does not contains duration (#3272)
|
||||||
- Properly clean the back stack if the user cancel registration when waiting for email validation
|
- 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 🗣:
|
Translations 🗣:
|
||||||
-
|
-
|
||||||
|
|
|
@ -62,6 +62,7 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut
|
||||||
val firstUnreadEventId = (unreadState as? UnreadState.HasUnread)?.firstUnreadEventId
|
val firstUnreadEventId = (unreadState as? UnreadState.HasUnread)?.firstUnreadEventId
|
||||||
var atLeastOneVisibleItemSinceLastDaySeparator = false
|
var atLeastOneVisibleItemSinceLastDaySeparator = false
|
||||||
var atLeastOneVisibleItemsBeforeReadMarker = false
|
var atLeastOneVisibleItemsBeforeReadMarker = false
|
||||||
|
var appendReadMarker = false
|
||||||
|
|
||||||
// Then iterate on models so we have the exact positions in the adapter
|
// Then iterate on models so we have the exact positions in the adapter
|
||||||
modelsIterator.forEach { epoxyModel ->
|
modelsIterator.forEach { epoxyModel ->
|
||||||
|
@ -72,11 +73,7 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut
|
||||||
}
|
}
|
||||||
epoxyModel.getEventIds().forEach { eventId ->
|
epoxyModel.getEventIds().forEach { eventId ->
|
||||||
adapterPositionMapping[eventId] = index
|
adapterPositionMapping[eventId] = index
|
||||||
if (epoxyModel.canAppendReadMarker() && eventId == firstUnreadEventId && atLeastOneVisibleItemsBeforeReadMarker) {
|
appendReadMarker = epoxyModel.canAppendReadMarker() && eventId == firstUnreadEventId && atLeastOneVisibleItemsBeforeReadMarker
|
||||||
modelsIterator.addReadMarkerItem(callback)
|
|
||||||
index++
|
|
||||||
positionOfReadMarker.set(index)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (epoxyModel is DaySeparatorItem) {
|
if (epoxyModel is DaySeparatorItem) {
|
||||||
|
@ -91,6 +88,12 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut
|
||||||
atLeastOneVisibleItemSinceLastDaySeparator = true
|
atLeastOneVisibleItemSinceLastDaySeparator = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (appendReadMarker) {
|
||||||
|
modelsIterator.addReadMarkerItem(callback)
|
||||||
|
index++
|
||||||
|
positionOfReadMarker.set(index)
|
||||||
|
appendReadMarker = false
|
||||||
|
}
|
||||||
index++
|
index++
|
||||||
}
|
}
|
||||||
previousModelsSize = models.size
|
previousModelsSize = models.size
|
||||||
|
@ -103,8 +106,6 @@ class TimelineControllerInterceptorHelper(private val positionOfReadMarker: KMut
|
||||||
it.setOnVisibilityStateChanged(ReadMarkerVisibilityStateChangedListener(callback))
|
it.setOnVisibilityStateChanged(ReadMarkerVisibilityStateChangedListener(callback))
|
||||||
}
|
}
|
||||||
add(readMarker)
|
add(readMarker)
|
||||||
// Use next as we still have some process to do before the next iterator loop
|
|
||||||
next()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MutableListIterator<EpoxyModel<*>>.removeCallItemIfNeeded(
|
private fun MutableListIterator<EpoxyModel<*>>.removeCallItemIfNeeded(
|
||||||
|
|
Loading…
Reference in New Issue