Merge pull request #343 from vector-im/feature/fga/fix_room_id_placeholder

Avoid crash on placeholder RoomSummary
This commit is contained in:
ganfra 2023-04-19 20:16:07 +02:00 committed by GitHub
commit ab0b1c59a7
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.ui.model.MatrixUser
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.persistentListOf
import kotlinx.collections.immutable.toImmutableList
@ -177,8 +178,10 @@ class RoomListPresenter @Inject constructor(
name = roomSummary.details.name,
url = roomSummary.details.avatarURLString
)
val roomIdentifier = roomSummary.identifier()
RoomListRoomSummary(
id = roomSummary.identifier(),
roomId = RoomId(roomIdentifier),
name = roomSummary.details.name,
hasUnread = roomSummary.details.unreadNotificationCount > 0,
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.libraries.designsystem.components.avatar.AvatarData
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.ui.model.MatrixUser
import kotlinx.collections.immutable.ImmutableList
@ -57,7 +58,8 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
timestamp = "14:18",
lastMessage = "A very very very very long message which suites on two lines",
avatarData = AvatarData("!id", "R"),
id = "!roomId:domain"
id = "!roomId:domain",
roomId = RoomId("!roomId:domain")
),
RoomListRoomSummary(
name = "Room#2",
@ -65,7 +67,8 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
timestamp = "14:16",
lastMessage = "A short message",
avatarData = AvatarData("!id", "Z"),
id = "!roomId2:domain"
id = "!roomId2:domain",
roomId = RoomId("!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.unit.Velocity
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.RoomSummaryRow
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.utils.LogCompositions
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.features.networkmonitor.api.ui.ConnectivityIndicatorView
import kotlinx.coroutines.launch
import io.element.android.libraries.designsystem.R as DrawableR
import io.element.android.libraries.ui.strings.R as StringR
@ -114,6 +114,7 @@ fun RoomListContent(
onInvitesClicked: () -> Unit = {},
) {
fun onRoomClicked(room: RoomListRoomSummary) {
if (room.roomId == null) return
onRoomClicked(room.roomId)
}

View file

@ -17,13 +17,14 @@
package io.element.android.features.roomlist.impl.model
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.matrix.api.core.RoomId
@Immutable
data class RoomListRoomSummary(
val id: String,
val roomId: RoomId = RoomId(id),
val roomId: RoomId?,
val name: String = "",
val hasUnread: Boolean = false,
val timestamp: String? = null,

View file

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