mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
Use reverse ordering for FilterEmptyDayPostProcessor (#6927)
It turns out the previous ordering was right: timestamp ordering is ascending, not descending
This commit is contained in:
committed by
GitHub
parent
abb1b2ad50
commit
1df94a563c
+5
-3
@@ -18,10 +18,10 @@ class FilterEmptyDayPostProcessor {
|
|||||||
* Filters out day separators from [items] for days that don't contain any events.
|
* Filters out day separators from [items] for days that don't contain any events.
|
||||||
*/
|
*/
|
||||||
fun process(items: List<MatrixTimelineItem>): List<MatrixTimelineItem> = buildList {
|
fun process(items: List<MatrixTimelineItem>): List<MatrixTimelineItem> = buildList {
|
||||||
// The timeline is ordered by descending timestamp, so events that happened during a day appear before the day separator for that day.
|
// The timeline is ordered by ascending timestamp, so events that happened during a day appear after the day separator for that day.
|
||||||
// We can use this to determine if a day separator should be kept or not.
|
// We can use this to determine if a day separator should be kept or not by traversing the list in reverse.
|
||||||
var hasEvent = false
|
var hasEvent = false
|
||||||
for (item in items) {
|
for (item in items.asReversed()) {
|
||||||
if (item is MatrixTimelineItem.Event) {
|
if (item is MatrixTimelineItem.Event) {
|
||||||
hasEvent = true
|
hasEvent = true
|
||||||
add(item)
|
add(item)
|
||||||
@@ -35,4 +35,6 @@ class FilterEmptyDayPostProcessor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Then reverse the result to restore the original order, minus the empty day separators.
|
||||||
|
.asReversed()
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-14
@@ -32,36 +32,36 @@ class FilterEmptyDayPostProcessorTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `filterEmptyDaySeparators keeps day separator with events after it`() {
|
fun `filterEmptyDaySeparators keeps day separator with events after it`() {
|
||||||
val items = listOf(
|
val items = listOf(
|
||||||
anEvent,
|
|
||||||
aDaySeparator(TODAY),
|
aDaySeparator(TODAY),
|
||||||
|
anEvent,
|
||||||
)
|
)
|
||||||
val result = FilterEmptyDayPostProcessor().process(items)
|
val result = FilterEmptyDayPostProcessor().process(items)
|
||||||
assertThat(result).hasSize(2)
|
assertThat(result).hasSize(2)
|
||||||
assertThat(result[0]).isEqualTo(anEvent)
|
assertThat(result[0]).isEqualTo(aDaySeparator(TODAY))
|
||||||
assertThat(result[1]).isEqualTo(aDaySeparator(TODAY))
|
assertThat(result[1]).isEqualTo(anEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `filterEmptyDaySeparators removes day separator with no events after it`() {
|
fun `filterEmptyDaySeparators removes day separator with no events after it`() {
|
||||||
val items = listOf(
|
val items = listOf(
|
||||||
aDaySeparator(TODAY),
|
|
||||||
aDaySeparator(YESTERDAY),
|
aDaySeparator(YESTERDAY),
|
||||||
|
aDaySeparator(TODAY),
|
||||||
)
|
)
|
||||||
val result = FilterEmptyDayPostProcessor().process(items)
|
val result = FilterEmptyDayPostProcessor().process(items)
|
||||||
assertThat(result).isEmpty()
|
assertThat(result).isEmpty()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `filterEmptyDaySeparators removes first day separator and keeps second when only second has events`() {
|
fun `filterEmptyDaySeparators removes second day separator and keeps first when only first has events`() {
|
||||||
val items = listOf(
|
val items = listOf(
|
||||||
aDaySeparator(TODAY),
|
|
||||||
anEvent,
|
|
||||||
aDaySeparator(YESTERDAY),
|
aDaySeparator(YESTERDAY),
|
||||||
|
anEvent,
|
||||||
|
aDaySeparator(TODAY),
|
||||||
)
|
)
|
||||||
val result = FilterEmptyDayPostProcessor().process(items)
|
val result = FilterEmptyDayPostProcessor().process(items)
|
||||||
assertThat(result).hasSize(2)
|
assertThat(result).hasSize(2)
|
||||||
assertThat(result[0]).isEqualTo(anEvent)
|
assertThat(result[0]).isEqualTo(aDaySeparator(YESTERDAY))
|
||||||
assertThat(result[1]).isEqualTo(aDaySeparator(YESTERDAY))
|
assertThat(result[1]).isEqualTo(anEvent)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -78,15 +78,15 @@ class FilterEmptyDayPostProcessorTest {
|
|||||||
@Test
|
@Test
|
||||||
fun `filterEmptyDaySeparators keeps all items when no day separators`() {
|
fun `filterEmptyDaySeparators keeps all items when no day separators`() {
|
||||||
val items = listOf(
|
val items = listOf(
|
||||||
anEvent,
|
|
||||||
anEvent.copy(uniqueId = UniqueId("event2")),
|
anEvent.copy(uniqueId = UniqueId("event2")),
|
||||||
|
anEvent,
|
||||||
)
|
)
|
||||||
val result = FilterEmptyDayPostProcessor().process(items)
|
val result = FilterEmptyDayPostProcessor().process(items)
|
||||||
assertThat(result).hasSize(2)
|
assertThat(result).hasSize(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `filterEmptyDaySeparators removes day separator followed by non-event virtual item`() {
|
fun `filterEmptyDaySeparators removes day separator preceded by non-event virtual item`() {
|
||||||
val readMarker = MatrixTimelineItem.Virtual(
|
val readMarker = MatrixTimelineItem.Virtual(
|
||||||
uniqueId = UniqueId("readMarker"),
|
uniqueId = UniqueId("readMarker"),
|
||||||
virtual = VirtualTimelineItem.ReadMarker
|
virtual = VirtualTimelineItem.ReadMarker
|
||||||
@@ -107,12 +107,12 @@ class FilterEmptyDayPostProcessorTest {
|
|||||||
virtual = VirtualTimelineItem.ReadMarker
|
virtual = VirtualTimelineItem.ReadMarker
|
||||||
)
|
)
|
||||||
val items = listOf(
|
val items = listOf(
|
||||||
anEvent,
|
|
||||||
readMarker,
|
|
||||||
aDaySeparator(TODAY),
|
aDaySeparator(TODAY),
|
||||||
|
readMarker,
|
||||||
|
anEvent,
|
||||||
)
|
)
|
||||||
val result = FilterEmptyDayPostProcessor().process(items)
|
val result = FilterEmptyDayPostProcessor().process(items)
|
||||||
assertThat(result).hasSize(3)
|
assertThat(result).hasSize(3)
|
||||||
assertThat(result[2]).isEqualTo(aDaySeparator(TODAY))
|
assertThat(result[0]).isEqualTo(aDaySeparator(TODAY))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user