Skip to content

Commit 11aa534

Browse files
committed
fix (room upgrade) : room predecessor banner should be displayed for DM too
1 parent 7bde9bc commit 11aa534

File tree

4 files changed

+45
-43
lines changed

4 files changed

+45
-43
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/TimelineItemVirtualRow.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ fun TimelineItemVirtualRow(
4545
TimelineItemRoomBeginningView(
4646
predecessorRoom = timelineRoomInfo.predecessorRoom,
4747
roomName = timelineRoomInfo.name,
48+
isDm = timelineRoomInfo.isDm,
4849
onPredecessorRoomClick = { roomId ->
4950
eventSink(TimelineEvents.NavigateToRoom(roomId))
5051
},

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/virtual/TimelineItemRoomBeginningView.kt

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import io.element.android.libraries.designsystem.preview.ElementPreview
2525
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
2626
import io.element.android.libraries.designsystem.text.toAnnotatedString
2727
import io.element.android.libraries.designsystem.theme.components.Text
28+
import io.element.android.libraries.designsystem.utils.allBooleans
2829
import io.element.android.libraries.matrix.api.core.EventId
2930
import io.element.android.libraries.matrix.api.core.RoomId
3031
import io.element.android.libraries.matrix.api.room.tombstone.PredecessorRoom
@@ -33,6 +34,7 @@ import io.element.android.libraries.matrix.api.room.tombstone.PredecessorRoom
3334
fun TimelineItemRoomBeginningView(
3435
roomName: String?,
3536
predecessorRoom: PredecessorRoom?,
37+
isDm: Boolean,
3638
onPredecessorRoomClick: (RoomId) -> Unit,
3739
modifier: Modifier = Modifier
3840
) {
@@ -48,24 +50,26 @@ fun TimelineItemRoomBeginningView(
4850
submitText = stringResource(R.string.screen_room_timeline_upgraded_room_action)
4951
)
5052
}
51-
52-
Box(
53-
modifier = Modifier
53+
// Only display for non-DM room
54+
if (!isDm) {
55+
Box(
56+
modifier = Modifier
5457
.fillMaxWidth()
5558
.padding(horizontal = 16.dp, vertical = 8.dp),
56-
contentAlignment = Alignment.Center,
57-
) {
58-
val text = if (roomName == null) {
59-
stringResource(id = R.string.screen_room_timeline_beginning_of_room_no_name)
60-
} else {
61-
stringResource(id = R.string.screen_room_timeline_beginning_of_room, roomName)
59+
contentAlignment = Alignment.Center,
60+
) {
61+
val text = if (roomName == null) {
62+
stringResource(id = R.string.screen_room_timeline_beginning_of_room_no_name)
63+
} else {
64+
stringResource(id = R.string.screen_room_timeline_beginning_of_room, roomName)
65+
}
66+
Text(
67+
color = ElementTheme.colors.textSecondary,
68+
style = ElementTheme.typography.fontBodyMdRegular,
69+
text = text,
70+
textAlign = TextAlign.Center,
71+
)
6272
}
63-
Text(
64-
color = ElementTheme.colors.textSecondary,
65-
style = ElementTheme.typography.fontBodyMdRegular,
66-
text = text,
67-
textAlign = TextAlign.Center,
68-
)
6973
}
7074
}
7175
}
@@ -74,20 +78,25 @@ fun TimelineItemRoomBeginningView(
7478
@Composable
7579
internal fun TimelineItemRoomBeginningViewPreview() = ElementPreview {
7680
Column(verticalArrangement = spacedBy(16.dp)) {
77-
TimelineItemRoomBeginningView(
78-
predecessorRoom = null,
79-
roomName = null,
80-
onPredecessorRoomClick = {},
81-
)
82-
TimelineItemRoomBeginningView(
83-
predecessorRoom = null,
84-
roomName = "Room Name",
85-
onPredecessorRoomClick = {},
86-
)
87-
TimelineItemRoomBeginningView(
88-
predecessorRoom = PredecessorRoom(RoomId("!roomId:matrix.org"), EventId("\$eventId:matrix.org")),
89-
roomName = "Room Name",
90-
onPredecessorRoomClick = {},
91-
)
81+
allBooleans.forEach { isDm ->
82+
TimelineItemRoomBeginningView(
83+
predecessorRoom = null,
84+
roomName = null,
85+
isDm = isDm,
86+
onPredecessorRoomClick = {},
87+
)
88+
TimelineItemRoomBeginningView(
89+
predecessorRoom = null,
90+
roomName = "Room Name",
91+
isDm = isDm,
92+
onPredecessorRoomClick = {},
93+
)
94+
TimelineItemRoomBeginningView(
95+
predecessorRoom = PredecessorRoom(RoomId("!roomId:matrix.org"), EventId("\$eventId:matrix.org")),
96+
roomName = "Room Name",
97+
isDm = isDm,
98+
onPredecessorRoomClick = {},
99+
)
100+
}
92101
}
93102
}

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessor.kt

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MembershipCha
1414
import io.element.android.libraries.matrix.api.timeline.item.event.OtherState
1515
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
1616
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
17-
import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem
1817

1918
/**
2019
* This timeline post-processor removes the room creation event and the self-join event from the timeline for DMs
21-
* or add the RoomBeginning item for non DM room.
20+
* or add the RoomBeginning item.
2221
*/
2322
class RoomBeginningPostProcessor(private val mode: Timeline.Mode) {
2423
fun process(
@@ -30,7 +29,7 @@ class RoomBeginningPostProcessor(private val mode: Timeline.Mode) {
3029
return when {
3130
items.isEmpty() -> items
3231
mode == Timeline.Mode.PINNED_EVENTS -> items
33-
isDm -> processForDM(items, roomCreator, hasMoreToLoadBackwards)
32+
isDm -> processForDM(items, roomCreator)
3433
hasMoreToLoadBackwards -> items
3534
else -> processForRoom(items)
3635
}
@@ -41,13 +40,7 @@ class RoomBeginningPostProcessor(private val mode: Timeline.Mode) {
4140
return items
4241
}
4342

44-
private fun processForDM(items: List<MatrixTimelineItem>, roomCreator: UserId?, hasMoreToLoadBackwards: Boolean): List<MatrixTimelineItem> {
45-
val roomBeginningItemIndex = if (!hasMoreToLoadBackwards) {
46-
items.indexOfFirst { it is MatrixTimelineItem.Virtual && it.virtual is VirtualTimelineItem.RoomBeginning }.takeIf { it >= 0 }
47-
} else {
48-
null
49-
}
50-
43+
private fun processForDM(items: List<MatrixTimelineItem>, roomCreator: UserId?): List<MatrixTimelineItem> {
5144
// Find room creation event.
5245
// This is usually the first MatrixTimelineItem.Event (so index 1, index 0 is a date)
5346
val roomCreationEventIndex = items.indexOfFirst {
@@ -69,7 +62,6 @@ class RoomBeginningPostProcessor(private val mode: Timeline.Mode) {
6962
}
7063

7164
val indicesToRemove = listOfNotNull(
72-
roomBeginningItemIndex,
7365
roomCreationEventIndex,
7466
selfUserJoinedEventIndex,
7567
)

libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/timeline/postprocessor/RoomBeginningPostProcessorTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class RoomBeginningPostProcessorTest {
5050
}
5151

5252
@Test
53-
fun `processor removes timeline start, room creation event and self-join event from DM timeline`() {
53+
fun `processor removes room creation event and self-join event from DM timeline`() {
5454
val timelineItems = listOf(
5555
timelineStartEvent,
5656
roomCreateEvent,
@@ -63,7 +63,7 @@ class RoomBeginningPostProcessorTest {
6363
roomCreator = A_USER_ID,
6464
hasMoreToLoadBackwards = false,
6565
)
66-
assertThat(processedItems).isEmpty()
66+
assertThat(processedItems).containsExactly(timelineStartEvent)
6767
}
6868

6969
@Test

0 commit comments

Comments
 (0)