Create PreviewData with sample of UGC used for preview.

Fix preview issue where username was used for room/avatar name.
This commit is contained in:
Benoit Marty 2026-05-06 17:44:37 +02:00
parent 6ef9315468
commit 2a694f6dfd
31 changed files with 214 additions and 110 deletions

View file

@ -9,6 +9,8 @@ package io.element.android.features.call.impl.ui
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.call.impl.notifications.CallNotificationData
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId
@ -34,8 +36,8 @@ internal fun aCallNotificationData(
roomId = RoomId("!1234:matrix.org"),
eventId = EventId("\$asdadadsad:matrix.org"),
senderId = UserId("@bob:matrix.org"),
roomName = "A room",
senderName = "Bob",
roomName = ROOM_NAME,
senderName = USER_NAME_BOB,
avatarUrl = null,
notificationChannelId = "incoming_call",
timestamp = 0L,

View file

@ -11,6 +11,10 @@ package io.element.android.features.home.impl.model
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.LAST_MESSAGE
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId
@ -85,16 +89,16 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender(
userId = UserId("@alice:matrix.org"),
displayName = "Alice",
displayName = USER_NAME_ALICE,
),
canonicalAlias = RoomAlias("#alias:matrix.org"),
),
aRoomListRoomSummary(
name = "Bob",
name = USER_NAME_BOB,
displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender(
userId = UserId("@bob:matrix.org"),
displayName = "Bob",
displayName = USER_NAME_BOB,
),
isDm = true,
),
@ -103,7 +107,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender(
userId = UserId("@bob:matrix.org"),
displayName = "Bob",
displayName = USER_NAME_BOB,
),
),
aRoomListRoomSummary(
@ -111,7 +115,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender(
userId = UserId("@bob:matrix.org"),
displayName = "Bob",
displayName = USER_NAME_BOB,
),
isSpace = true
),
@ -147,7 +151,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
internal fun anInviteSender(
userId: UserId = UserId("@bob:domain"),
displayName: String = "Bob",
displayName: String = USER_NAME_BOB,
avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender),
) = InviteSender(
userId = userId,
@ -158,12 +162,12 @@ internal fun anInviteSender(
internal fun aRoomListRoomSummary(
id: String = "!roomId:domain",
name: String? = "Room name",
name: String? = ROOM_NAME,
numberOfUnreadMessages: Long = 0,
numberOfUnreadMentions: Long = 0,
numberOfUnreadNotifications: Long = 0,
isMarkedUnread: Boolean = false,
latestEvent: LatestEvent = LatestEvent.Synced("Last message"),
latestEvent: LatestEvent = LatestEvent.Synced(LAST_MESSAGE),
timestamp: String? = latestEvent.takeIf { it !is LatestEvent.None }?.let { "88:88" },
notificationMode: RoomNotificationMode? = null,
hasRoomCall: Boolean = false,

View file

@ -15,6 +15,7 @@ import io.element.android.features.invite.api.acceptdecline.ConfirmingDeclineInv
import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInviteState
import io.element.android.features.invite.impl.AcceptInvite
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.matrix.api.core.RoomId
open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDeclineInviteState> {
@ -26,7 +27,7 @@ open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDec
InviteData(
roomId = RoomId("!room:matrix.org"),
isDm = true,
roomName = "Alice"
roomName = ROOM_NAME,
),
blockUser = false,
),
@ -36,7 +37,7 @@ open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDec
InviteData(
roomId = RoomId("!room:matrix.org"),
isDm = true,
roomName = "Alice"
roomName = ROOM_NAME,
),
blockUser = true,
),

View file

@ -12,6 +12,11 @@ import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CAROL
import io.element.android.libraries.designsystem.preview.USER_NAME_EVE
import io.element.android.libraries.designsystem.preview.USER_NAME_JUSTIN
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.components.aMatrixUser
@ -33,15 +38,15 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
canInvite = true,
searchQuery = "some query",
selectedUsers = persistentListOf(
aMatrixUser("@carol:server.org", "Carol")
aMatrixUser(displayName = USER_NAME_CAROL)
),
searchResults = SearchBarResultState.Results(
persistentListOf(
anInvitableUser(aMatrixUser("@alice:server.org")),
anInvitableUser(aMatrixUser("@bob:server.org", "Bob")),
anInvitableUser(aMatrixUser("@carol:server.org", "Carol"), isSelected = true),
anInvitableUser(aMatrixUser("@eve:server.org", "Eve"), isSelected = true, isAlreadyJoined = true),
anInvitableUser(aMatrixUser("@justin:server.org", "Justin"), isSelected = true, isAlreadyInvited = true),
anInvitableUser(aMatrixUser(displayName = USER_NAME_ALICE)),
anInvitableUser(aMatrixUser(displayName = USER_NAME_BOB)),
anInvitableUser(aMatrixUser(displayName = USER_NAME_CAROL), isSelected = true),
anInvitableUser(aMatrixUser(displayName = USER_NAME_EVE), isSelected = true, isAlreadyJoined = true),
anInvitableUser(aMatrixUser(displayName = USER_NAME_JUSTIN), isSelected = true, isAlreadyInvited = true),
)
)
),
@ -50,12 +55,12 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
canInvite = true,
searchQuery = "@alice:server.org",
selectedUsers = persistentListOf(
aMatrixUser("@carol:server.org", "Carol")
aMatrixUser(displayName = USER_NAME_CAROL)
),
searchResults = SearchBarResultState.Results(
persistentListOf(
anInvitableUser(aMatrixUser("@alice:server.org"), isUnresolved = true),
anInvitableUser(aMatrixUser("@bob:server.org", "Bob")),
anInvitableUser(aMatrixUser(displayName = USER_NAME_ALICE), isUnresolved = true),
anInvitableUser(aMatrixUser(displayName = USER_NAME_BOB)),
)
)
),
@ -65,7 +70,7 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
searchQuery = "@alice:server.org",
searchResults = SearchBarResultState.Results(
persistentListOf(
anInvitableUser(aMatrixUser("@alice:server.org"), isUnresolved = true),
anInvitableUser(aMatrixUser(displayName = USER_NAME_ALICE), isUnresolved = true),
)
),
showSearchLoader = true,
@ -77,9 +82,11 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
sendInvitesAction = AsyncAction.Loading,
),
aDefaultInvitePeopleState(
sendInvitesAction = ConfirmingUnknownUserInvitation(persistentListOf(
aMatrixUser("@alice:server.org")
))
sendInvitesAction = ConfirmingUnknownUserInvitation(
persistentListOf(
aMatrixUser(),
)
)
),
aDefaultInvitePeopleState(
sendInvitesAction = ConfirmingUnknownUserInvitation(

View file

@ -15,6 +15,9 @@ import io.element.android.features.invite.api.acceptdecline.anAcceptDeclineInvit
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
@ -134,8 +137,8 @@ open class JoinRoomStateProvider : PreviewParameterProvider<JoinRoomState> {
joinAuthorisationStatus = JoinAuthorisationStatus.IsBanned(
banSender = InviteSender(
userId = UserId("@alice:domain"),
displayName = "Alice",
avatarData = AvatarData("alice", "Alice", size = AvatarSize.InviteSender),
displayName = USER_NAME_ALICE,
avatarData = AvatarData("alice", USER_NAME_ALICE, size = AvatarSize.InviteSender),
membershipChangeReason = "spamming"
),
reason = "spamming",
@ -222,7 +225,7 @@ fun aJoinRoomState(
internal fun anInviteSender(
userId: UserId = UserId("@bob:domain"),
displayName: String = "Bob",
displayName: String = USER_NAME_BOB,
avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender),
membershipChangeReason: String? = null,
) = InviteSender(
@ -234,7 +237,7 @@ internal fun anInviteSender(
internal fun anInviteData(
roomId: RoomId = A_ROOM_ID,
roomName: String = "Room name",
roomName: String = ROOM_NAME,
isDm: Boolean = false,
) = InviteData(
roomId = roomId,

View file

@ -11,6 +11,9 @@ package io.element.android.features.knockrequests.impl.banner
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.knockrequests.impl.data.KnockRequestPresentable
import io.element.android.features.knockrequests.impl.data.aKnockRequestPresentable
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CHARLIE
import kotlinx.collections.immutable.toImmutableList
class KnockRequestsBannerStateProvider : PreviewParameterProvider<KnockRequestsBannerState> {
@ -29,15 +32,15 @@ class KnockRequestsBannerStateProvider : PreviewParameterProvider<KnockRequestsB
aKnockRequestsBannerState(
knockRequests = listOf(
aKnockRequestPresentable(),
aKnockRequestPresentable(displayName = "Alice")
aKnockRequestPresentable(displayName = USER_NAME_ALICE)
)
),
aKnockRequestsBannerState(
knockRequests = listOf(
aKnockRequestPresentable(),
aKnockRequestPresentable(displayName = "Alice"),
aKnockRequestPresentable(displayName = "Bob"),
aKnockRequestPresentable(displayName = "Charlie")
aKnockRequestPresentable(displayName = USER_NAME_ALICE),
aKnockRequestPresentable(displayName = USER_NAME_BOB),
aKnockRequestPresentable(displayName = USER_NAME_CHARLIE)
)
),
aKnockRequestsBannerState(

View file

@ -13,6 +13,7 @@ import io.element.android.features.location.api.Location
import io.element.android.features.location.impl.common.ui.LocationConstraintsDialogState
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.location.AssetType
import kotlinx.collections.immutable.toImmutableList
@ -69,7 +70,7 @@ fun aShowLocationState(
fun aLocationShareItem(
userId: UserId = UserId("@alice:matrix.org"),
displayName: String = "Alice",
displayName: String = USER_NAME_ALICE,
avatarData: AvatarData = AvatarData(
id = userId.value,
name = displayName,

View file

@ -12,13 +12,14 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.login.impl.login.LoginMode
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.UserId
open class LoginWithClassicStateProvider : PreviewParameterProvider<LoginWithClassicState> {
override val values: Sequence<LoginWithClassicState>
get() = sequenceOf(
aLoginWithClassicState(),
aLoginWithClassicState(isElementPro = true, displayName = "Alice"),
aLoginWithClassicState(isElementPro = true, displayName = USER_NAME_ALICE),
)
}

View file

@ -44,6 +44,7 @@ import io.element.android.features.roommembermoderation.api.RoomMemberModeration
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.ThreadId
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
@ -94,8 +95,8 @@ open class MessagesStateProvider : PreviewParameterProvider<MessagesState> {
}
fun aMessagesState(
roomName: String? = "Room name",
roomAvatar: AvatarData = AvatarData("!id:domain", "Room name", size = AvatarSize.TimelineRoom),
roomName: String? = ROOM_NAME,
roomAvatar: AvatarData = AvatarData("!id:domain", ROOM_NAME, size = AvatarSize.TimelineRoom),
userEventPermissions: UserEventPermissions = aUserEventPermissions(),
composerState: MessageComposerState = aMessageComposerState(
textEditorState = aTextEditorStateRich(initialText = "Hello", initialFocus = true),

View file

@ -11,6 +11,7 @@ package io.element.android.features.messages.impl.crypto.identity
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
import io.element.android.libraries.matrix.ui.room.IdentityRoomMember
@ -32,7 +33,7 @@ class IdentityChangeStateProvider : PreviewParameterProvider<IdentityChangeState
anIdentityChangeState(
roomMemberIdentityStateChanges = listOf(
aRoomMemberIdentityStateChange(
identityRoomMember = anIdentityRoomMember(displayNameOrDefault = "Alice"),
identityRoomMember = anIdentityRoomMember(displayNameOrDefault = USER_NAME_ALICE),
identityState = IdentityState.VerificationViolation,
),
),

View file

@ -11,6 +11,7 @@ package io.element.android.features.messages.impl.crypto.sendfailure.resolve
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.messages.impl.crypto.sendfailure.VerifiedUserSendFailure
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
open class ResolveVerifiedUserSendFailureStateProvider : PreviewParameterProvider<ResolveVerifiedUserSendFailureState> {
override val values: Sequence<ResolveVerifiedUserSendFailureState>
@ -37,10 +38,10 @@ fun aResolveVerifiedUserSendFailureState(
eventSink = eventSink
)
fun anUnsignedDeviceSendFailure(userDisplayName: String = "Alice") = VerifiedUserSendFailure.UnsignedDevice.FromOther(
fun anUnsignedDeviceSendFailure(userDisplayName: String = USER_NAME_ALICE) = VerifiedUserSendFailure.UnsignedDevice.FromOther(
userDisplayName = userDisplayName,
)
fun aChangedIdentitySendFailure(userDisplayName: String = "Alice") = VerifiedUserSendFailure.ChangedIdentity(
fun aChangedIdentitySendFailure(userDisplayName: String = USER_NAME_ALICE) = VerifiedUserSendFailure.ChangedIdentity(
userDisplayName = userDisplayName,
)

View file

@ -29,6 +29,8 @@ import io.element.android.features.messages.impl.typing.aTypingNotificationState
import io.element.android.features.roomcall.api.aStandByCallState
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.api.core.UniqueId
@ -143,7 +145,7 @@ internal fun aTimelineItemEvent(
isMine: Boolean = false,
isEditable: Boolean = false,
canBeRepliedTo: Boolean = false,
senderDisplayName: String = "Sender",
senderDisplayName: String = USER_NAME_ALICE,
displayNameAmbiguous: Boolean = false,
content: TimelineItemEventContent = aTimelineItemTextContent(),
groupPosition: TimelineItemGroupPosition = TimelineItemGroupPosition.None,
@ -253,7 +255,7 @@ internal fun aGroupedEvents(
}
internal fun aTimelineRoomInfo(
name: String = "Room name",
name: String = ROOM_NAME,
isDm: Boolean = false,
userHasPermissionToSendMessage: Boolean = true,
pinnedEventIds: List<EventId> = emptyList(),

View file

@ -9,6 +9,11 @@
package io.element.android.features.messages.impl.typing
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CHARLIE
import io.element.android.libraries.designsystem.preview.USER_NAME_DAVID
import io.element.android.libraries.designsystem.preview.USER_NAME_EVE
import kotlinx.collections.immutable.toImmutableList
class TypingNotificationStateProvider : PreviewParameterProvider<TypingNotificationState> {
@ -22,7 +27,7 @@ class TypingNotificationStateProvider : PreviewParameterProvider<TypingNotificat
),
aTypingNotificationState(
typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
),
),
aTypingNotificationState(
@ -32,24 +37,24 @@ class TypingNotificationStateProvider : PreviewParameterProvider<TypingNotificat
),
aTypingNotificationState(
typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"),
aTypingRoomMember(disambiguatedDisplayName = "Bob"),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_BOB),
),
),
aTypingNotificationState(
typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"),
aTypingRoomMember(disambiguatedDisplayName = "Bob"),
aTypingRoomMember(disambiguatedDisplayName = "Charlie"),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_BOB),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_CHARLIE),
),
),
aTypingNotificationState(
typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"),
aTypingRoomMember(disambiguatedDisplayName = "Bob"),
aTypingRoomMember(disambiguatedDisplayName = "Charlie"),
aTypingRoomMember(disambiguatedDisplayName = "Dan"),
aTypingRoomMember(disambiguatedDisplayName = "Eve"),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_BOB),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_CHARLIE),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_DAVID),
aTypingRoomMember(disambiguatedDisplayName = USER_NAME_EVE),
),
),
aTypingNotificationState(

View file

@ -11,6 +11,10 @@ package io.element.android.features.rolesandpermissions.impl.roles
import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CAROL
import io.element.android.libraries.designsystem.preview.USER_NAME_DAVID
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember
@ -103,9 +107,9 @@ internal fun aChangeRolesStateWithSelectedUsers() = aChangeRolesState(
internal fun aChangeRolesStateWithOwners(
role: RoomMember.Role = RoomMember.Role.Admin,
selectedUsers: List<MatrixUser> = listOf(
aMatrixUser(id = "@alice:server.org", displayName = "Alice"),
aMatrixUser(id = "@bob:server.org", displayName = "Bob"),
aMatrixUser(id = "@carol:server.org", displayName = "Carol"),
aMatrixUser(displayName = USER_NAME_ALICE),
aMatrixUser(displayName = USER_NAME_BOB),
aMatrixUser(displayName = USER_NAME_CAROL),
),
) = aChangeRolesState(
role = role,
@ -114,22 +118,22 @@ internal fun aChangeRolesStateWithOwners(
members = persistentListOf(
aRoomMember(
userId = UserId("@alice:server.org"),
displayName = "Alice",
displayName = USER_NAME_ALICE,
role = RoomMember.Role.Owner(isCreator = true),
),
aRoomMember(
userId = UserId("@bob:server.org"),
displayName = "Bob",
displayName = USER_NAME_BOB,
role = RoomMember.Role.Owner(isCreator = false),
),
aRoomMember(
userId = UserId("@carol:server.org"),
displayName = "Carol",
displayName = USER_NAME_CAROL,
role = RoomMember.Role.Admin,
),
aRoomMember(
userId = UserId("@david:server.org"),
displayName = "David",
displayName = USER_NAME_DAVID,
role = RoomMember.Role.User,
),
),

View file

@ -15,6 +15,15 @@ import io.element.android.features.roommembermoderation.api.RoomMemberModeration
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.architecture.map
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CAROL
import io.element.android.libraries.designsystem.preview.USER_NAME_DAVID
import io.element.android.libraries.designsystem.preview.USER_NAME_EVE
import io.element.android.libraries.designsystem.preview.USER_NAME_MALLORY
import io.element.android.libraries.designsystem.preview.USER_NAME_SUSIE
import io.element.android.libraries.designsystem.preview.USER_NAME_VICTOR
import io.element.android.libraries.designsystem.preview.USER_NAME_WALTER
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
import io.element.android.libraries.matrix.api.room.RoomMember
@ -143,21 +152,21 @@ fun aRoomMemberList() = persistentListOf(
aBannedMallory(),
)
fun anEve(): RoomMember = aRoomMember(UserId("@eve:server.org"), "Eve")
fun anEve(): RoomMember = aRoomMember(UserId("@eve:server.org"), USER_NAME_EVE)
fun aDavid(): RoomMember = aRoomMember(UserId("@david:server.org"), "David")
fun aDavid(): RoomMember = aRoomMember(UserId("@david:server.org"), USER_NAME_DAVID)
fun aCarol(): RoomMember = aRoomMember(UserId("@carol:server.org"), "Carol")
fun aCarol(): RoomMember = aRoomMember(UserId("@carol:server.org"), USER_NAME_CAROL)
fun anAlice() = aRoomMember(UserId("@alice:server.org"), "Alice", role = RoomMember.Role.Admin)
fun aBob() = aRoomMember(UserId("@bob:server.org"), "Bob", role = RoomMember.Role.Moderator)
fun anAlice() = aRoomMember(UserId("@alice:server.org"), USER_NAME_ALICE, role = RoomMember.Role.Admin)
fun aBob() = aRoomMember(UserId("@bob:server.org"), USER_NAME_BOB, role = RoomMember.Role.Moderator)
fun anInvitedVictor() = aRoomMember(UserId("@victor:server.org"), "Victor", membership = RoomMembershipState.INVITE)
fun anInvitedVictor() = aRoomMember(UserId("@victor:server.org"), USER_NAME_VICTOR, membership = RoomMembershipState.INVITE)
fun anInvitedWalter() = aRoomMember(UserId("@walter:server.org"), "Walter", membership = RoomMembershipState.INVITE)
fun anInvitedWalter() = aRoomMember(UserId("@walter:server.org"), USER_NAME_WALTER, membership = RoomMembershipState.INVITE)
fun aBannedSusie(): RoomMember = aRoomMember(UserId("@susie:server.org"), "Susie", membership = RoomMembershipState.BAN)
fun aBannedSusie(): RoomMember = aRoomMember(UserId("@susie:server.org"), USER_NAME_SUSIE, membership = RoomMembershipState.BAN)
fun aBannedMallory(): RoomMember = aRoomMember(UserId("@mallory:server.org"), "Mallory", membership = RoomMembershipState.BAN)
fun aBannedMallory(): RoomMember = aRoomMember(UserId("@mallory:server.org"), USER_NAME_MALLORY, membership = RoomMembershipState.BAN)
private fun RoomMember.withIdentity(identityState: IdentityState? = null) = RoomMemberWithIdentityState(this, identityState)

View file

@ -14,6 +14,7 @@ import io.element.android.features.roommembermoderation.api.ModerationActionStat
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
import io.element.android.features.roommembermoderation.api.RoomMemberModerationPermissions
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser
import kotlinx.collections.immutable.toImmutableList
@ -78,8 +79,8 @@ class InternalRoomMemberModerationStateProvider : PreviewParameterProvider<Inter
}
fun anAlice() = MatrixUser(
UserId(value = "@alice:server.org"),
displayName = "Alice",
userId = UserId(value = "@alice:server.org"),
displayName = USER_NAME_ALICE,
avatarUrl = null,
)

View file

@ -11,6 +11,7 @@ package io.element.android.features.space.impl.leave
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.preview.SPACE_NAME
import io.element.android.libraries.matrix.api.room.join.JoinRule
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
import io.element.android.libraries.previewutils.room.aSpaceRoom
@ -117,7 +118,7 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
}
fun aLeaveSpaceState(
spaceName: String? = "Space name",
spaceName: String? = SPACE_NAME,
isLastOwner: Boolean = false,
areCreatorsPrivileged: Boolean = false,
selectableSpaceRooms: AsyncData<ImmutableList<SelectableSpaceRoom>> = AsyncData.Uninitialized,

View file

@ -9,6 +9,7 @@
package io.element.android.features.space.impl.settings
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.SPACE_NAME
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
@ -24,7 +25,7 @@ open class SpaceSettingsStateProvider : PreviewParameterProvider<SpaceSettingsSt
fun aSpaceSettingsState(
roomId: RoomId = RoomId("!aRoomId:element.io"),
name: String = "Space name",
name: String = SPACE_NAME,
alias: RoomAlias? = RoomAlias("#spacename:element.io"),
avatarUrl: String? = null,
memberCount: Long = 100,

View file

@ -12,6 +12,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.verifysession.impl.incoming.IncomingVerificationState.Step
import io.element.android.features.verifysession.impl.ui.aDecimalsSessionVerificationData
import io.element.android.features.verifysession.impl.ui.aEmojisSessionVerificationData
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.DeviceId
import io.element.android.libraries.matrix.api.core.FlowId
import io.element.android.libraries.matrix.api.core.UserId
@ -59,7 +60,7 @@ internal fun anIncomingSessionVerificationRequest() = VerificationRequest.Incomi
details = SessionVerificationRequestDetails(
senderProfile = MatrixUser(
userId = UserId("@alice:example.com"),
displayName = "Alice",
displayName = USER_NAME_ALICE,
avatarUrl = null,
),
flowId = FlowId("1234"),
@ -73,7 +74,7 @@ internal fun anIncomingUserVerificationRequest() = VerificationRequest.Incoming.
details = SessionVerificationRequestDetails(
senderProfile = MatrixUser(
userId = UserId("@alice:example.com"),
displayName = "Alice",
displayName = USER_NAME_ALICE,
avatarUrl = null,
),
flowId = FlowId("1234"),

View file

@ -8,10 +8,12 @@
package io.element.android.libraries.designsystem.components.avatar
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
fun anAvatarData(
// Let's the id not start with a 'a'.
// Let the id not start with a 'a'.
id: String = "@id_of_alice:server.org",
name: String? = "Alice",
name: String? = USER_NAME_ALICE,
url: String? = null,
size: AvatarSize = AvatarSize.RoomListItem,
) = AvatarData(

View file

@ -0,0 +1,26 @@
/*
* Copyright (c) 2026 Element Creations Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.designsystem.preview
const val USER_NAME_ALICE = "Alice"
const val USER_NAME_BOB = "Bob"
const val USER_NAME_CHARLIE = "Charlie"
const val USER_NAME_CAROL = "Carol"
const val USER_NAME_DAVID = "David"
const val USER_NAME_EVE = "Eve"
const val USER_NAME_JOHN_DOE = "John Doe"
const val USER_NAME_JUSTIN = "Justin"
const val USER_NAME_MALLORY = "Mallory"
const val USER_NAME_SUSIE = "Susie"
const val USER_NAME_VICTOR = "Victor"
const val USER_NAME_WALTER = "Walter"
const val ROOM_NAME = "Room name"
const val SPACE_NAME = "Space name"
const val LAST_MESSAGE = "Last message"

View file

@ -9,6 +9,17 @@
package io.element.android.libraries.matrix.ui.components
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CAROL
import io.element.android.libraries.designsystem.preview.USER_NAME_DAVID
import io.element.android.libraries.designsystem.preview.USER_NAME_EVE
import io.element.android.libraries.designsystem.preview.USER_NAME_JOHN_DOE
import io.element.android.libraries.designsystem.preview.USER_NAME_JUSTIN
import io.element.android.libraries.designsystem.preview.USER_NAME_MALLORY
import io.element.android.libraries.designsystem.preview.USER_NAME_SUSIE
import io.element.android.libraries.designsystem.preview.USER_NAME_VICTOR
import io.element.android.libraries.designsystem.preview.USER_NAME_WALTER
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser
@ -23,30 +34,30 @@ open class MatrixUserProvider : PreviewParameterProvider<MatrixUser> {
open class MatrixUserWithAvatarProvider : PreviewParameterProvider<MatrixUser?> {
override val values: Sequence<MatrixUser?>
get() = sequenceOf(
aMatrixUser(displayName = "John Doe"),
aMatrixUser(displayName = "John Doe", avatarUrl = "anUrl"),
aMatrixUser(displayName = USER_NAME_JOHN_DOE),
aMatrixUser(displayName = USER_NAME_JOHN_DOE, avatarUrl = "anUrl"),
)
}
fun aMatrixUser(
id: String = "@id_of_alice:server.org",
displayName: String? = "Alice",
id: String? = null,
displayName: String? = USER_NAME_ALICE,
avatarUrl: String? = null,
) = MatrixUser(
userId = UserId(id),
userId = UserId(id ?: "@${displayName?.lowercase() ?: "id_of_alice"}:server.org"),
displayName = displayName,
avatarUrl = avatarUrl,
)
fun aMatrixUserList() = listOf(
aMatrixUser("@alice:server.org", "Alice"),
aMatrixUser("@bob:server.org", "Bob"),
aMatrixUser("@carol:server.org", "Carol"),
aMatrixUser("@david:server.org", "David"),
aMatrixUser("@eve:server.org", "Eve"),
aMatrixUser("@justin:server.org", "Justin"),
aMatrixUser("@mallory:server.org", "Mallory"),
aMatrixUser("@susie:server.org", "Susie"),
aMatrixUser("@victor:server.org", "Victor"),
aMatrixUser("@walter:server.org", "Walter"),
aMatrixUser(displayName = USER_NAME_ALICE),
aMatrixUser(displayName = USER_NAME_BOB),
aMatrixUser(displayName = USER_NAME_CAROL),
aMatrixUser(displayName = USER_NAME_DAVID),
aMatrixUser(displayName = USER_NAME_EVE),
aMatrixUser(displayName = USER_NAME_JUSTIN),
aMatrixUser(displayName = USER_NAME_MALLORY),
aMatrixUser(displayName = USER_NAME_SUSIE),
aMatrixUser(displayName = USER_NAME_VICTOR),
aMatrixUser(displayName = USER_NAME_WALTER),
)

View file

@ -18,6 +18,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_JOHN_DOE
import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.model.getAvatarData
import io.element.android.libraries.matrix.ui.model.getBestName
@ -58,7 +59,7 @@ internal fun SelectedUserRtlPreview() = CompositionLocalProvider(
) {
ElementPreview {
SelectedUser(
matrixUser = aMatrixUser(displayName = "John Doe"),
matrixUser = aMatrixUser(displayName = USER_NAME_JOHN_DOE),
canRemove = true,
onUserRemove = {},
)

View file

@ -30,6 +30,10 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CHARLIE
import io.element.android.libraries.designsystem.preview.USER_NAME_DAVID
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.spaces.SpaceRoomVisibility
import io.element.android.libraries.matrix.api.user.MatrixUser
@ -120,10 +124,10 @@ internal fun SpaceHeaderViewPreview() = ElementPreview {
topicMaxLines = 2,
visibility = SpaceRoomVisibility.Public,
heroes = persistentListOf(
aMatrixUser(id = "@1:d", displayName = "Alice", avatarUrl = "aUrl"),
aMatrixUser(id = "@2:d", displayName = "Bob"),
aMatrixUser(id = "@3:d", displayName = "Charlie", avatarUrl = "aUrl"),
aMatrixUser(id = "@4:d", displayName = "Dave"),
aMatrixUser(id = "@1:d", displayName = USER_NAME_ALICE, avatarUrl = "aUrl"),
aMatrixUser(id = "@2:d", displayName = USER_NAME_BOB),
aMatrixUser(id = "@3:d", displayName = USER_NAME_CHARLIE, avatarUrl = "aUrl"),
aMatrixUser(id = "@4:d", displayName = USER_NAME_DAVID),
),
numberOfMembers = 999,
)

View file

@ -22,6 +22,10 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.preview.USER_NAME_CHARLIE
import io.element.android.libraries.designsystem.preview.USER_NAME_DAVID
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.user.MatrixUser
@ -98,10 +102,10 @@ internal fun SpaceMembersViewPreview() = ElementPreview(
) {
SpaceMembersView(
heroes = persistentListOf(
aMatrixUser(id = "@1:d", displayName = "Alice", avatarUrl = "aUrl"),
aMatrixUser(id = "@2:d", displayName = "Bob"),
aMatrixUser(id = "@3:d", displayName = "Charlie", avatarUrl = "aUrl"),
aMatrixUser(id = "@4:d", displayName = "Dave"),
aMatrixUser(id = "@1:d", displayName = USER_NAME_ALICE, avatarUrl = "aUrl"),
aMatrixUser(id = "@2:d", displayName = USER_NAME_BOB),
aMatrixUser(id = "@3:d", displayName = USER_NAME_CHARLIE, avatarUrl = "aUrl"),
aMatrixUser(id = "@4:d", displayName = USER_NAME_DAVID),
),
numberOfMembers = 123,
)

View file

@ -9,6 +9,8 @@
package io.element.android.libraries.matrix.ui.components
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.SPACE_NAME
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
import io.element.android.libraries.matrix.api.room.RoomType
@ -28,10 +30,10 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
state = CurrentUserMembership.LEFT,
),
aSpaceRoom(
displayName = "Alice",
displayName = SPACE_NAME,
roomType = RoomType.Room,
isDirect = true,
heroes = listOf(aMatrixUser(displayName = "Alice")),
heroes = listOf(aMatrixUser(displayName = USER_NAME_ALICE)),
state = CurrentUserMembership.JOINED,
numJoinedMembers = 2,
),
@ -69,9 +71,9 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
state = CurrentUserMembership.INVITED,
),
aSpaceRoom(
displayName = "Alice",
displayName = SPACE_NAME,
roomType = RoomType.Space,
heroes = listOf(aMatrixUser(displayName = "Alice")),
heroes = listOf(aMatrixUser(displayName = USER_NAME_ALICE)),
state = CurrentUserMembership.JOINED,
numJoinedMembers = 2,
),

View file

@ -9,6 +9,7 @@
package io.element.android.libraries.matrix.ui.messages.reply
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.media.MediaSource
@ -159,7 +160,7 @@ private fun aInReplyToDetails(
)
fun aProfileDetailsReady(
displayName: String? = "Sender",
displayName: String? = USER_NAME_ALICE,
displayNameAmbiguous: Boolean = false,
avatarUrl: String? = null,
) = ProfileDetails.Ready(

View file

@ -9,6 +9,7 @@
package io.element.android.libraries.mediaviewer.impl.details
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.media.MediaSource
import io.element.android.libraries.mediaviewer.api.MediaInfo
@ -26,7 +27,7 @@ open class MediaBottomSheetStateDeleteConfirmationProvider : PreviewParameterPro
fun aMediaBottomSheetStateDeleteConfirmation(
mediaInfo: MediaInfo = anImageMediaInfo(
senderName = "Alice",
senderName = USER_NAME_ALICE,
),
thumbnailSource: MediaSource? = null,
) = MediaBottomSheetState.DeleteConfirmation(

View file

@ -8,6 +8,7 @@
package io.element.android.libraries.mediaviewer.impl.details
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.mediaviewer.api.MediaInfo
import io.element.android.libraries.mediaviewer.api.anApkMediaInfo
@ -35,7 +36,7 @@ fun aMediaBottomSheetStateDetails(
eventId: EventId? = EventId($$"$eventId"),
canDelete: Boolean = true,
mediaInfo: MediaInfo = anImageMediaInfo(
senderName = "Alice",
senderName = USER_NAME_ALICE,
dateSentFull = "December 6, 2024 at 12:59",
),
) = MediaBottomSheetState.Details(

View file

@ -11,6 +11,7 @@ package io.element.android.libraries.mediaviewer.impl.gallery
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.components.media.WaveFormSamples
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.matrix.api.core.UniqueId
import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState
import io.element.android.libraries.mediaviewer.impl.details.aMediaBottomSheetStateDetails
@ -112,7 +113,7 @@ open class MediaGalleryStateProvider : PreviewParameterProvider<MediaGalleryStat
}
private fun aMediaGalleryState(
roomName: String = "Room name",
roomName: String = ROOM_NAME,
mode: MediaGalleryMode = MediaGalleryMode.Images,
groupedMediaItems: AsyncData<GroupedMediaItems> = AsyncData.Uninitialized,
mediaBottomSheetState: MediaBottomSheetState = MediaBottomSheetState.Hidden,

View file

@ -13,6 +13,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.components.media.WaveFormSamples
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.media.MediaSource
import io.element.android.libraries.matrix.api.timeline.Timeline
@ -179,7 +180,7 @@ open class MediaViewerStateProvider : PreviewParameterProvider<MediaViewerState>
)
),
anImageMediaInfo(
senderName = "Alice",
senderName = USER_NAME_ALICE,
dateSent = "21 NOV, 2024",
caption = LONG_CAPTION,
).let {