Avoid crash on placeholder RoomSummary

This commit is contained in:
ganfra 2023-04-19 18:24:36 +02:00
parent e651d2f9c5
commit 7c8524d3c1
5 changed files with 13 additions and 4 deletions

View file

@ -44,6 +44,7 @@ import io.element.android.libraries.matrix.api.verification.SessionVerificationS
import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus
import io.element.android.libraries.matrix.ui.model.MatrixUser import io.element.android.libraries.matrix.ui.model.MatrixUser
import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.features.networkmonitor.api.NetworkStatus
import io.element.android.libraries.matrix.api.core.RoomId
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@ -177,8 +178,10 @@ class RoomListPresenter @Inject constructor(
name = roomSummary.details.name, name = roomSummary.details.name,
url = roomSummary.details.avatarURLString url = roomSummary.details.avatarURLString
) )
val roomIdentifier = roomSummary.identifier()
RoomListRoomSummary( RoomListRoomSummary(
id = roomSummary.identifier(), id = roomSummary.identifier(),
roomId = RoomId(roomIdentifier),
name = roomSummary.details.name, name = roomSummary.details.name,
hasUnread = roomSummary.details.unreadNotificationCount > 0, hasUnread = roomSummary.details.unreadNotificationCount > 0,
timestamp = lastMessageTimestampFormatter.format(roomSummary.details.lastMessageTimestamp), timestamp = lastMessageTimestampFormatter.format(roomSummary.details.lastMessageTimestamp),

View file

@ -21,6 +21,7 @@ import io.element.android.features.roomlist.impl.model.RoomListRoomSummary
import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryPlaceholders import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryPlaceholders
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.utils.SnackbarMessage import io.element.android.libraries.designsystem.utils.SnackbarMessage
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.ui.model.MatrixUser import io.element.android.libraries.matrix.ui.model.MatrixUser
import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.ImmutableList
@ -57,7 +58,8 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
timestamp = "14:18", timestamp = "14:18",
lastMessage = "A very very very very long message which suites on two lines", lastMessage = "A very very very very long message which suites on two lines",
avatarData = AvatarData("!id", "R"), avatarData = AvatarData("!id", "R"),
id = "!roomId:domain" id = "!roomId:domain",
roomId = RoomId("!roomId:domain")
), ),
RoomListRoomSummary( RoomListRoomSummary(
name = "Room#2", name = "Room#2",
@ -65,7 +67,8 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
timestamp = "14:16", timestamp = "14:16",
lastMessage = "A short message", lastMessage = "A short message",
avatarData = AvatarData("!id", "Z"), avatarData = AvatarData("!id", "Z"),
id = "!roomId2:domain" id = "!roomId2:domain",
roomId = RoomId("!roomId2:domain")
), ),
RoomListRoomSummaryPlaceholders.create("!roomId2:domain") RoomListRoomSummaryPlaceholders.create("!roomId2:domain")
) )

View file

@ -60,6 +60,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorView
import io.element.android.features.roomlist.impl.components.RoomListTopBar import io.element.android.features.roomlist.impl.components.RoomListTopBar
import io.element.android.features.roomlist.impl.components.RoomSummaryRow import io.element.android.features.roomlist.impl.components.RoomSummaryRow
import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummary
@ -76,7 +77,6 @@ import io.element.android.libraries.designsystem.theme.components.TextButton
import io.element.android.libraries.designsystem.theme.roomListUnreadIndicator import io.element.android.libraries.designsystem.theme.roomListUnreadIndicator
import io.element.android.libraries.designsystem.utils.LogCompositions import io.element.android.libraries.designsystem.utils.LogCompositions
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorView
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import io.element.android.libraries.designsystem.R as DrawableR import io.element.android.libraries.designsystem.R as DrawableR
import io.element.android.libraries.ui.strings.R as StringR import io.element.android.libraries.ui.strings.R as StringR
@ -114,6 +114,7 @@ fun RoomListContent(
onInvitesClicked: () -> Unit = {}, onInvitesClicked: () -> Unit = {},
) { ) {
fun onRoomClicked(room: RoomListRoomSummary) { fun onRoomClicked(room: RoomListRoomSummary) {
if (room.roomId == null) return
onRoomClicked(room.roomId) onRoomClicked(room.roomId)
} }

View file

@ -17,13 +17,14 @@
package io.element.android.features.roomlist.impl.model package io.element.android.features.roomlist.impl.model
import androidx.compose.runtime.Immutable import androidx.compose.runtime.Immutable
import io.element.android.libraries.core.data.tryOrNull
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
@Immutable @Immutable
data class RoomListRoomSummary( data class RoomListRoomSummary(
val id: String, val id: String,
val roomId: RoomId = RoomId(id), val roomId: RoomId?,
val name: String = "", val name: String = "",
val hasUnread: Boolean = false, val hasUnread: Boolean = false,
val timestamp: String? = null, val timestamp: String? = null,

View file

@ -23,6 +23,7 @@ object RoomListRoomSummaryPlaceholders {
fun create(id: String): RoomListRoomSummary { fun create(id: String): RoomListRoomSummary {
return RoomListRoomSummary( return RoomListRoomSummary(
id = id, id = id,
roomId = null,
isPlaceholder = true, isPlaceholder = true,
name = "Short name", name = "Short name",
timestamp = "hh:mm", timestamp = "hh:mm",