Merge pull request #6740 from element-hq/feature/bma/uiSample

Introduce UI sample
This commit is contained in:
Benoit Marty
2026-05-07 12:28:08 +02:00
committed by GitHub
108 changed files with 412 additions and 274 deletions
@@ -9,6 +9,8 @@ package io.element.android.features.call.impl.ui
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.call.impl.notifications.CallNotificationData 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.EventId
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
@@ -34,8 +36,8 @@ internal fun aCallNotificationData(
roomId = RoomId("!1234:matrix.org"), roomId = RoomId("!1234:matrix.org"),
eventId = EventId("\$asdadadsad:matrix.org"), eventId = EventId("\$asdadadsad:matrix.org"),
senderId = UserId("@bob:matrix.org"), senderId = UserId("@bob:matrix.org"),
roomName = "A room", roomName = ROOM_NAME,
senderName = "Bob", senderName = USER_NAME_BOB,
avatarUrl = null, avatarUrl = null,
notificationChannelId = "incoming_call", notificationChannelId = "incoming_call",
timestamp = 0L, timestamp = 0L,
@@ -57,6 +57,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.modifiers.backgroundVerticalGradient import io.element.android.libraries.designsystem.modifiers.backgroundVerticalGradient
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.theme.aliasScreenTitle import io.element.android.libraries.designsystem.theme.aliasScreenTitle
import io.element.android.libraries.designsystem.theme.components.DropdownMenu import io.element.android.libraries.designsystem.theme.components.DropdownMenu
import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem import io.element.android.libraries.designsystem.theme.components.DropdownMenuItem
@@ -65,8 +66,8 @@ import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.components.aMatrixUser
import io.element.android.libraries.matrix.ui.components.aMatrixUserList import io.element.android.libraries.matrix.ui.components.aMatrixUserList
import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getAvatarData
import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
@@ -346,7 +347,7 @@ private fun AccountIcon(
internal fun HomeTopBarPreview() = ElementPreview { internal fun HomeTopBarPreview() = ElementPreview {
HomeTopBar( HomeTopBar(
selectedNavigationItem = HomeNavigationBarItem.Chats, selectedNavigationItem = HomeNavigationBarItem.Chats,
currentUserAndNeighbors = persistentListOf(MatrixUser(UserId("@id:domain"), "Alice")), currentUserAndNeighbors = persistentListOf(aMatrixUser(id = "@id:domain", displayName = USER_NAME_ALICE)),
showAvatarIndicator = false, showAvatarIndicator = false,
areSearchResultsDisplayed = false, areSearchResultsDisplayed = false,
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()), scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()),
@@ -367,7 +368,7 @@ internal fun HomeTopBarPreview() = ElementPreview {
internal fun HomeTopBarSpaceFiltersSelectedPreview() = ElementPreview { internal fun HomeTopBarSpaceFiltersSelectedPreview() = ElementPreview {
HomeTopBar( HomeTopBar(
selectedNavigationItem = HomeNavigationBarItem.Chats, selectedNavigationItem = HomeNavigationBarItem.Chats,
currentUserAndNeighbors = persistentListOf(MatrixUser(UserId("@id:domain"), "Alice")), currentUserAndNeighbors = persistentListOf(aMatrixUser(id = "@id:domain", displayName = USER_NAME_ALICE)),
showAvatarIndicator = false, showAvatarIndicator = false,
areSearchResultsDisplayed = false, areSearchResultsDisplayed = false,
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()), scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()),
@@ -388,7 +389,7 @@ internal fun HomeTopBarSpaceFiltersSelectedPreview() = ElementPreview {
internal fun HomeTopBarSpacesPreview() = ElementPreview { internal fun HomeTopBarSpacesPreview() = ElementPreview {
HomeTopBar( HomeTopBar(
selectedNavigationItem = HomeNavigationBarItem.Spaces, selectedNavigationItem = HomeNavigationBarItem.Spaces,
currentUserAndNeighbors = persistentListOf(MatrixUser(UserId("@id:domain"), "Alice")), currentUserAndNeighbors = persistentListOf(aMatrixUser(id = "@id:domain", displayName = USER_NAME_ALICE)),
showAvatarIndicator = false, showAvatarIndicator = false,
areSearchResultsDisplayed = false, areSearchResultsDisplayed = false,
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()), scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()),
@@ -409,7 +410,7 @@ internal fun HomeTopBarSpacesPreview() = ElementPreview {
internal fun HomeTopBarWithIndicatorPreview() = ElementPreview { internal fun HomeTopBarWithIndicatorPreview() = ElementPreview {
HomeTopBar( HomeTopBar(
selectedNavigationItem = HomeNavigationBarItem.Chats, selectedNavigationItem = HomeNavigationBarItem.Chats,
currentUserAndNeighbors = persistentListOf(MatrixUser(UserId("@id:domain"), "Alice")), currentUserAndNeighbors = persistentListOf(aMatrixUser(id = "@id:domain", displayName = USER_NAME_ALICE)),
showAvatarIndicator = true, showAvatarIndicator = true,
areSearchResultsDisplayed = false, areSearchResultsDisplayed = false,
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()), scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()),
@@ -11,6 +11,10 @@ package io.element.android.features.home.impl.model
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId 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
@@ -85,16 +89,16 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
displayType = RoomSummaryDisplayType.INVITE, displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender( inviteSender = anInviteSender(
userId = UserId("@alice:matrix.org"), userId = UserId("@alice:matrix.org"),
displayName = "Alice", displayName = USER_NAME_ALICE,
), ),
canonicalAlias = RoomAlias("#alias:matrix.org"), canonicalAlias = RoomAlias("#alias:matrix.org"),
), ),
aRoomListRoomSummary( aRoomListRoomSummary(
name = "Bob", name = USER_NAME_BOB,
displayType = RoomSummaryDisplayType.INVITE, displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender( inviteSender = anInviteSender(
userId = UserId("@bob:matrix.org"), userId = UserId("@bob:matrix.org"),
displayName = "Bob", displayName = USER_NAME_BOB,
), ),
isDm = true, isDm = true,
), ),
@@ -103,7 +107,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
displayType = RoomSummaryDisplayType.INVITE, displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender( inviteSender = anInviteSender(
userId = UserId("@bob:matrix.org"), userId = UserId("@bob:matrix.org"),
displayName = "Bob", displayName = USER_NAME_BOB,
), ),
), ),
aRoomListRoomSummary( aRoomListRoomSummary(
@@ -111,7 +115,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
displayType = RoomSummaryDisplayType.INVITE, displayType = RoomSummaryDisplayType.INVITE,
inviteSender = anInviteSender( inviteSender = anInviteSender(
userId = UserId("@bob:matrix.org"), userId = UserId("@bob:matrix.org"),
displayName = "Bob", displayName = USER_NAME_BOB,
), ),
isSpace = true isSpace = true
), ),
@@ -147,7 +151,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
internal fun anInviteSender( internal fun anInviteSender(
userId: UserId = UserId("@bob:domain"), userId: UserId = UserId("@bob:domain"),
displayName: String = "Bob", displayName: String = USER_NAME_BOB,
avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender), avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender),
) = InviteSender( ) = InviteSender(
userId = userId, userId = userId,
@@ -158,12 +162,12 @@ internal fun anInviteSender(
internal fun aRoomListRoomSummary( internal fun aRoomListRoomSummary(
id: String = "!roomId:domain", id: String = "!roomId:domain",
name: String? = "Room name", name: String? = ROOM_NAME,
numberOfUnreadMessages: Long = 0, numberOfUnreadMessages: Long = 0,
numberOfUnreadMentions: Long = 0, numberOfUnreadMentions: Long = 0,
numberOfUnreadNotifications: Long = 0, numberOfUnreadNotifications: Long = 0,
isMarkedUnread: Boolean = false, 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" }, timestamp: String? = latestEvent.takeIf { it !is LatestEvent.None }?.let { "88:88" },
notificationMode: RoomNotificationMode? = null, notificationMode: RoomNotificationMode? = null,
hasRoomCall: Boolean = false, hasRoomCall: Boolean = false,
@@ -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.api.acceptdecline.anAcceptDeclineInviteState
import io.element.android.features.invite.impl.AcceptInvite import io.element.android.features.invite.impl.AcceptInvite
import io.element.android.libraries.architecture.AsyncAction 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 import io.element.android.libraries.matrix.api.core.RoomId
open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDeclineInviteState> { open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDeclineInviteState> {
@@ -26,7 +27,7 @@ open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDec
InviteData( InviteData(
roomId = RoomId("!room:matrix.org"), roomId = RoomId("!room:matrix.org"),
isDm = true, isDm = true,
roomName = "Alice" roomName = ROOM_NAME,
), ),
blockUser = false, blockUser = false,
), ),
@@ -36,7 +37,7 @@ open class AcceptDeclineInviteStateProvider : PreviewParameterProvider<AcceptDec
InviteData( InviteData(
roomId = RoomId("!room:matrix.org"), roomId = RoomId("!room:matrix.org"),
isDm = true, isDm = true,
roomName = "Alice" roomName = ROOM_NAME,
), ),
blockUser = true, blockUser = true,
), ),
@@ -12,6 +12,11 @@ import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData 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.designsystem.theme.components.SearchBarResultState
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.components.aMatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUser
@@ -33,15 +38,15 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
canInvite = true, canInvite = true,
searchQuery = "some query", searchQuery = "some query",
selectedUsers = persistentListOf( selectedUsers = persistentListOf(
aMatrixUser("@carol:server.org", "Carol") aMatrixUser(displayName = USER_NAME_CAROL)
), ),
searchResults = SearchBarResultState.Results( searchResults = SearchBarResultState.Results(
persistentListOf( persistentListOf(
anInvitableUser(aMatrixUser("@alice:server.org")), anInvitableUser(aMatrixUser(displayName = USER_NAME_ALICE)),
anInvitableUser(aMatrixUser("@bob:server.org", "Bob")), anInvitableUser(aMatrixUser(displayName = USER_NAME_BOB)),
anInvitableUser(aMatrixUser("@carol:server.org", "Carol"), isSelected = true), anInvitableUser(aMatrixUser(displayName = USER_NAME_CAROL), isSelected = true),
anInvitableUser(aMatrixUser("@eve:server.org", "Eve"), isSelected = true, isAlreadyJoined = true), anInvitableUser(aMatrixUser(displayName = USER_NAME_EVE), isSelected = true, isAlreadyJoined = true),
anInvitableUser(aMatrixUser("@justin:server.org", "Justin"), isSelected = true, isAlreadyInvited = true), anInvitableUser(aMatrixUser(displayName = USER_NAME_JUSTIN), isSelected = true, isAlreadyInvited = true),
) )
) )
), ),
@@ -50,12 +55,12 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
canInvite = true, canInvite = true,
searchQuery = "@alice:server.org", searchQuery = "@alice:server.org",
selectedUsers = persistentListOf( selectedUsers = persistentListOf(
aMatrixUser("@carol:server.org", "Carol") aMatrixUser(displayName = USER_NAME_CAROL)
), ),
searchResults = SearchBarResultState.Results( searchResults = SearchBarResultState.Results(
persistentListOf( persistentListOf(
anInvitableUser(aMatrixUser("@alice:server.org"), isUnresolved = true), anInvitableUser(aMatrixUser(displayName = USER_NAME_ALICE), isUnresolved = true),
anInvitableUser(aMatrixUser("@bob:server.org", "Bob")), anInvitableUser(aMatrixUser(displayName = USER_NAME_BOB)),
) )
) )
), ),
@@ -65,7 +70,7 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
searchQuery = "@alice:server.org", searchQuery = "@alice:server.org",
searchResults = SearchBarResultState.Results( searchResults = SearchBarResultState.Results(
persistentListOf( persistentListOf(
anInvitableUser(aMatrixUser("@alice:server.org"), isUnresolved = true), anInvitableUser(aMatrixUser(displayName = USER_NAME_ALICE), isUnresolved = true),
) )
), ),
showSearchLoader = true, showSearchLoader = true,
@@ -77,9 +82,11 @@ internal class DefaultInvitePeopleStateProvider : PreviewParameterProvider<Defau
sendInvitesAction = AsyncAction.Loading, sendInvitesAction = AsyncAction.Loading,
), ),
aDefaultInvitePeopleState( aDefaultInvitePeopleState(
sendInvitesAction = ConfirmingUnknownUserInvitation(persistentListOf( sendInvitesAction = ConfirmingUnknownUserInvitation(
aMatrixUser("@alice:server.org") persistentListOf(
)) aMatrixUser(),
)
)
), ),
aDefaultInvitePeopleState( aDefaultInvitePeopleState(
sendInvitesAction = ConfirmingUnknownUserInvitation( sendInvitesAction = ConfirmingUnknownUserInvitation(
@@ -320,7 +320,7 @@ internal class DefaultInvitePeoplePresenterTest {
val initialState = awaitItemAsDefault() val initialState = awaitItemAsDefault()
skipItems(1) skipItems(1)
val selectedUser = aMatrixUser() val selectedUser = aMatrixUser(displayName = "John Doe")
initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(selectedUser)) initialState.eventSink(DefaultInvitePeopleEvents.ToggleUser(selectedUser))
@@ -358,7 +358,7 @@ internal class DefaultInvitePeoplePresenterTest {
val initialState = awaitItemAsDefault() val initialState = awaitItemAsDefault()
skipItems(1) skipItems(1)
val selectedUser = aMatrixUser() val selectedUser = aMatrixUser(displayName = "John Doe")
// Given a query is made // Given a query is made
initialState.searchQuery.setTextAndPlaceCursorAtEnd("some query") initialState.searchQuery.setTextAndPlaceCursorAtEnd("some query")
@@ -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.architecture.AsyncAction
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
@@ -134,8 +137,8 @@ open class JoinRoomStateProvider : PreviewParameterProvider<JoinRoomState> {
joinAuthorisationStatus = JoinAuthorisationStatus.IsBanned( joinAuthorisationStatus = JoinAuthorisationStatus.IsBanned(
banSender = InviteSender( banSender = InviteSender(
userId = UserId("@alice:domain"), userId = UserId("@alice:domain"),
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarData = AvatarData("alice", "Alice", size = AvatarSize.InviteSender), avatarData = AvatarData("alice", USER_NAME_ALICE, size = AvatarSize.InviteSender),
membershipChangeReason = "spamming" membershipChangeReason = "spamming"
), ),
reason = "spamming", reason = "spamming",
@@ -222,7 +225,7 @@ fun aJoinRoomState(
internal fun anInviteSender( internal fun anInviteSender(
userId: UserId = UserId("@bob:domain"), userId: UserId = UserId("@bob:domain"),
displayName: String = "Bob", displayName: String = USER_NAME_BOB,
avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender), avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender),
membershipChangeReason: String? = null, membershipChangeReason: String? = null,
) = InviteSender( ) = InviteSender(
@@ -234,7 +237,7 @@ internal fun anInviteSender(
internal fun anInviteData( internal fun anInviteData(
roomId: RoomId = A_ROOM_ID, roomId: RoomId = A_ROOM_ID,
roomName: String = "Room name", roomName: String = ROOM_NAME,
isDm: Boolean = false, isDm: Boolean = false,
) = InviteData( ) = InviteData(
roomId = roomId, roomId = roomId,
@@ -11,6 +11,9 @@ package io.element.android.features.knockrequests.impl.banner
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.knockrequests.impl.data.KnockRequestPresentable import io.element.android.features.knockrequests.impl.data.KnockRequestPresentable
import io.element.android.features.knockrequests.impl.data.aKnockRequestPresentable 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 import kotlinx.collections.immutable.toImmutableList
class KnockRequestsBannerStateProvider : PreviewParameterProvider<KnockRequestsBannerState> { class KnockRequestsBannerStateProvider : PreviewParameterProvider<KnockRequestsBannerState> {
@@ -29,15 +32,15 @@ class KnockRequestsBannerStateProvider : PreviewParameterProvider<KnockRequestsB
aKnockRequestsBannerState( aKnockRequestsBannerState(
knockRequests = listOf( knockRequests = listOf(
aKnockRequestPresentable(), aKnockRequestPresentable(),
aKnockRequestPresentable(displayName = "Alice") aKnockRequestPresentable(displayName = USER_NAME_ALICE)
) )
), ),
aKnockRequestsBannerState( aKnockRequestsBannerState(
knockRequests = listOf( knockRequests = listOf(
aKnockRequestPresentable(), aKnockRequestPresentable(),
aKnockRequestPresentable(displayName = "Alice"), aKnockRequestPresentable(displayName = USER_NAME_ALICE),
aKnockRequestPresentable(displayName = "Bob"), aKnockRequestPresentable(displayName = USER_NAME_BOB),
aKnockRequestPresentable(displayName = "Charlie") aKnockRequestPresentable(displayName = USER_NAME_CHARLIE)
) )
), ),
aKnockRequestsBannerState( aKnockRequestsBannerState(
@@ -31,6 +31,8 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.avatar.AvatarType import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight 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.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
@@ -116,10 +118,10 @@ internal fun LocationShareRowPreview() = ElementPreview {
LocationShareRow( LocationShareRow(
item = LocationShareItem( item = LocationShareItem(
userId = UserId("@alice:matrix.org"), userId = UserId("@alice:matrix.org"),
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarData = AvatarData( avatarData = AvatarData(
id = "@alice:matrix.org", id = "@alice:matrix.org",
name = "Alice", name = USER_NAME_ALICE,
url = null, url = null,
size = AvatarSize.UserListItem, size = AvatarSize.UserListItem,
), ),
@@ -133,10 +135,10 @@ internal fun LocationShareRowPreview() = ElementPreview {
LocationShareRow( LocationShareRow(
item = LocationShareItem( item = LocationShareItem(
userId = UserId("@bob:matrix.org"), userId = UserId("@bob:matrix.org"),
displayName = "Bob", displayName = USER_NAME_BOB,
avatarData = AvatarData( avatarData = AvatarData(
id = "@bob:matrix.org", id = "@bob:matrix.org",
name = "Bob", name = USER_NAME_BOB,
url = null, url = null,
size = AvatarSize.UserListItem, size = AvatarSize.UserListItem,
), ),
@@ -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.features.location.impl.common.ui.LocationConstraintsDialogState
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.core.UserId
import io.element.android.libraries.matrix.api.room.location.AssetType import io.element.android.libraries.matrix.api.room.location.AssetType
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@@ -69,7 +70,7 @@ fun aShowLocationState(
fun aLocationShareItem( fun aLocationShareItem(
userId: UserId = UserId("@alice:matrix.org"), userId: UserId = UserId("@alice:matrix.org"),
displayName: String = "Alice", displayName: String = USER_NAME_ALICE,
avatarData: AvatarData = AvatarData( avatarData: AvatarData = AvatarData(
id = userId.value, id = userId.value,
name = displayName, name = displayName,
@@ -12,13 +12,14 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.login.impl.login.LoginMode import io.element.android.features.login.impl.login.LoginMode
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData 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 import io.element.android.libraries.matrix.api.core.UserId
open class LoginWithClassicStateProvider : PreviewParameterProvider<LoginWithClassicState> { open class LoginWithClassicStateProvider : PreviewParameterProvider<LoginWithClassicState> {
override val values: Sequence<LoginWithClassicState> override val values: Sequence<LoginWithClassicState>
get() = sequenceOf( get() = sequenceOf(
aLoginWithClassicState(), aLoginWithClassicState(),
aLoginWithClassicState(isElementPro = true, displayName = "Alice"), aLoginWithClassicState(isElementPro = true, displayName = USER_NAME_ALICE),
) )
} }
@@ -44,6 +44,7 @@ import io.element.android.features.roommembermoderation.api.RoomMemberModeration
import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.RoomId
import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.core.ThreadId
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
@@ -94,8 +95,8 @@ open class MessagesStateProvider : PreviewParameterProvider<MessagesState> {
} }
fun aMessagesState( fun aMessagesState(
roomName: String? = "Room name", roomName: String? = ROOM_NAME,
roomAvatar: AvatarData = AvatarData("!id:domain", "Room name", size = AvatarSize.TimelineRoom), roomAvatar: AvatarData = AvatarData("!id:domain", ROOM_NAME, size = AvatarSize.TimelineRoom),
userEventPermissions: UserEventPermissions = aUserEventPermissions(), userEventPermissions: UserEventPermissions = aUserEventPermissions(),
composerState: MessageComposerState = aMessageComposerState( composerState: MessageComposerState = aMessageComposerState(
textEditorState = aTextEditorStateRich(initialText = "Hello", initialFocus = true), textEditorState = aTextEditorStateRich(initialText = "Hello", initialFocus = true),
@@ -11,6 +11,7 @@ package io.element.android.features.messages.impl.crypto.identity
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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.core.UserId
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
import io.element.android.libraries.matrix.ui.room.IdentityRoomMember import io.element.android.libraries.matrix.ui.room.IdentityRoomMember
@@ -32,7 +33,7 @@ class IdentityChangeStateProvider : PreviewParameterProvider<IdentityChangeState
anIdentityChangeState( anIdentityChangeState(
roomMemberIdentityStateChanges = listOf( roomMemberIdentityStateChanges = listOf(
aRoomMemberIdentityStateChange( aRoomMemberIdentityStateChange(
identityRoomMember = anIdentityRoomMember(displayNameOrDefault = "Alice"), identityRoomMember = anIdentityRoomMember(displayNameOrDefault = USER_NAME_ALICE),
identityState = IdentityState.VerificationViolation, identityState = IdentityState.VerificationViolation,
), ),
), ),
@@ -11,6 +11,7 @@ package io.element.android.features.messages.impl.crypto.sendfailure.resolve
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.messages.impl.crypto.sendfailure.VerifiedUserSendFailure import io.element.android.features.messages.impl.crypto.sendfailure.VerifiedUserSendFailure
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
open class ResolveVerifiedUserSendFailureStateProvider : PreviewParameterProvider<ResolveVerifiedUserSendFailureState> { open class ResolveVerifiedUserSendFailureStateProvider : PreviewParameterProvider<ResolveVerifiedUserSendFailureState> {
override val values: Sequence<ResolveVerifiedUserSendFailureState> override val values: Sequence<ResolveVerifiedUserSendFailureState>
@@ -37,10 +38,10 @@ fun aResolveVerifiedUserSendFailureState(
eventSink = eventSink eventSink = eventSink
) )
fun anUnsignedDeviceSendFailure(userDisplayName: String = "Alice") = VerifiedUserSendFailure.UnsignedDevice.FromOther( fun anUnsignedDeviceSendFailure(userDisplayName: String = USER_NAME_ALICE) = VerifiedUserSendFailure.UnsignedDevice.FromOther(
userDisplayName = userDisplayName, userDisplayName = userDisplayName,
) )
fun aChangedIdentitySendFailure(userDisplayName: String = "Alice") = VerifiedUserSendFailure.ChangedIdentity( fun aChangedIdentitySendFailure(userDisplayName: String = USER_NAME_ALICE) = VerifiedUserSendFailure.ChangedIdentity(
userDisplayName = userDisplayName, userDisplayName = userDisplayName,
) )
@@ -33,6 +33,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType.Ro
import io.element.android.libraries.designsystem.components.avatar.anAvatarData import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomAlias
@@ -198,7 +199,7 @@ internal fun SuggestionsPickerViewPreview() {
suggestions = persistentListOf( suggestions = persistentListOf(
ResolvedSuggestion.AtRoom, ResolvedSuggestion.AtRoom,
ResolvedSuggestion.Member(roomMember), ResolvedSuggestion.Member(roomMember),
ResolvedSuggestion.Member(roomMember.copy(userId = UserId("@bob:server.org"), displayName = "Bob")), ResolvedSuggestion.Member(roomMember.copy(userId = UserId("@bob:server.org"), displayName = USER_NAME_BOB)),
ResolvedSuggestion.Alias( ResolvedSuggestion.Alias(
roomAlias = anAlias, roomAlias = anAlias,
roomId = RoomId("!room:matrix.org"), roomId = RoomId("!room:matrix.org"),
@@ -43,6 +43,8 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
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.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.theme.components.Scaffold
@@ -303,7 +305,7 @@ internal fun ThreadsListViewPreview() {
ThreadsListView( ThreadsListView(
state = ThreadsListState( state = ThreadsListState(
roomId = RoomId("!room-id:server"), roomId = RoomId("!room-id:server"),
roomName = "Room name", roomName = ROOM_NAME,
roomAvatarUrl = null, roomAvatarUrl = null,
threads = List(10) { aThreadListRowItem(threadId = ThreadId("\$thread-$it")) }.toImmutableList(), threads = List(10) { aThreadListRowItem(threadId = ThreadId("\$thread-$it")) }.toImmutableList(),
isRoomTombstoned = false, isRoomTombstoned = false,
@@ -360,7 +362,7 @@ fun aThreadListItem(
fun aThreadListItemEvent( fun aThreadListItemEvent(
threadId: ThreadId = ThreadId("\$a-thread-id"), threadId: ThreadId = ThreadId("\$a-thread-id"),
senderId: UserId = UserId("@a-user-id:server"), senderId: UserId = UserId("@a-user-id:server"),
senderProfile: ProfileDetails = ProfileDetails.Ready(displayName = "Alice", displayNameAmbiguous = false, avatarUrl = null), senderProfile: ProfileDetails = ProfileDetails.Ready(displayName = USER_NAME_ALICE, displayNameAmbiguous = false, avatarUrl = null),
isOwn: Boolean = false, isOwn: Boolean = false,
content: EventContent = MessageContent( content: EventContent = MessageContent(
body = "Hello world!", body = "Hello world!",
@@ -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.features.roomcall.api.aStandByCallState
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize 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_SENDER
import io.element.android.libraries.matrix.api.core.EventId 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.TransactionId
import io.element.android.libraries.matrix.api.core.UniqueId import io.element.android.libraries.matrix.api.core.UniqueId
@@ -143,7 +145,7 @@ internal fun aTimelineItemEvent(
isMine: Boolean = false, isMine: Boolean = false,
isEditable: Boolean = false, isEditable: Boolean = false,
canBeRepliedTo: Boolean = false, canBeRepliedTo: Boolean = false,
senderDisplayName: String = "Sender", senderDisplayName: String = USER_NAME_SENDER,
displayNameAmbiguous: Boolean = false, displayNameAmbiguous: Boolean = false,
content: TimelineItemEventContent = aTimelineItemTextContent(), content: TimelineItemEventContent = aTimelineItemTextContent(),
groupPosition: TimelineItemGroupPosition = TimelineItemGroupPosition.None, groupPosition: TimelineItemGroupPosition = TimelineItemGroupPosition.None,
@@ -160,7 +162,7 @@ internal fun aTimelineItemEvent(
eventId = eventId, eventId = eventId,
transactionId = transactionId, transactionId = transactionId,
senderId = UserId("@senderId:domain"), senderId = UserId("@senderId:domain"),
senderAvatar = AvatarData("@senderId:domain", "sender", size = AvatarSize.TimelineSender), senderAvatar = AvatarData("@senderId:domain", USER_NAME_SENDER, size = AvatarSize.TimelineSender),
content = content, content = content,
reactionsState = timelineItemReactions, reactionsState = timelineItemReactions,
readReceiptState = readReceiptState, readReceiptState = readReceiptState,
@@ -253,7 +255,7 @@ internal fun aGroupedEvents(
} }
internal fun aTimelineRoomInfo( internal fun aTimelineRoomInfo(
name: String = "Room name", name: String = ROOM_NAME,
isDm: Boolean = false, isDm: Boolean = false,
userHasPermissionToSendMessage: Boolean = true, userHasPermissionToSendMessage: Boolean = true,
pinnedEventIds: List<EventId> = emptyList(), pinnedEventIds: List<EventId> = emptyList(),
@@ -26,6 +26,7 @@ import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.messages.impl.R import io.element.android.features.messages.impl.R
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
@@ -162,7 +163,7 @@ internal fun MessageShieldViewPreview() {
MessageShield.AuthenticityNotGuaranteed(false), MessageShield.AuthenticityNotGuaranteed(false),
forwarder = UserId("@alice:example.com"), forwarder = UserId("@alice:example.com"),
forwarderProfile = ProfileDetails.Ready( forwarderProfile = ProfileDetails.Ready(
displayName = "Alice", displayName = USER_NAME_ALICE,
displayNameAmbiguous = false, displayNameAmbiguous = false,
avatarUrl = null, avatarUrl = null,
), ),
@@ -92,6 +92,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.modifiers.niceClickable import io.element.android.libraries.designsystem.modifiers.niceClickable
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.swipe.SwipeableActionsState import io.element.android.libraries.designsystem.swipe.SwipeableActionsState
import io.element.android.libraries.designsystem.swipe.rememberSwipeableActionsState import io.element.android.libraries.designsystem.swipe.rememberSwipeableActionsState
import io.element.android.libraries.designsystem.text.toPx import io.element.android.libraries.designsystem.text.toPx
@@ -863,7 +864,7 @@ internal fun TimelineItemEventRowWithThreadSummaryPreview() = ElementPreview {
), ),
senderId = UserId("@user:id"), senderId = UserId("@user:id"),
senderProfile = ProfileDetails.Ready( senderProfile = ProfileDetails.Ready(
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarUrl = null, avatarUrl = null,
displayNameAmbiguous = false, displayNameAmbiguous = false,
), ),
@@ -898,7 +899,7 @@ internal fun ThreadSummaryViewPreview() {
), ),
senderId = UserId("@user:id"), senderId = UserId("@user:id"),
senderProfile = ProfileDetails.Ready( senderProfile = ProfileDetails.Ready(
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarUrl = null, avatarUrl = null,
displayNameAmbiguous = true, displayNameAmbiguous = true,
), ),
@@ -16,6 +16,8 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItemGrou
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight 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.matrix.api.timeline.item.event.UnableToDecryptContent import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
import io.element.android.libraries.matrix.api.timeline.item.event.UtdCause import io.element.android.libraries.matrix.api.timeline.item.event.UtdCause
@@ -25,7 +27,7 @@ internal fun TimelineItemEventRowUtdPreview() = ElementPreview {
Column { Column {
ATimelineItemEventRow( ATimelineItemEventRow(
event = aTimelineItemEvent( event = aTimelineItemEvent(
senderDisplayName = "Alice", senderDisplayName = USER_NAME_ALICE,
isMine = false, isMine = false,
content = TimelineItemEncryptedContent( content = TimelineItemEncryptedContent(
data = UnableToDecryptContent.Data.MegolmV1AesSha2( data = UnableToDecryptContent.Data.MegolmV1AesSha2(
@@ -39,7 +41,7 @@ internal fun TimelineItemEventRowUtdPreview() = ElementPreview {
) )
ATimelineItemEventRow( ATimelineItemEventRow(
event = aTimelineItemEvent( event = aTimelineItemEvent(
senderDisplayName = "Bob", senderDisplayName = USER_NAME_BOB,
isMine = false, isMine = false,
content = TimelineItemEncryptedContent( content = TimelineItemEncryptedContent(
data = UnableToDecryptContent.Data.MegolmV1AesSha2( data = UnableToDecryptContent.Data.MegolmV1AesSha2(
@@ -54,7 +56,7 @@ internal fun TimelineItemEventRowUtdPreview() = ElementPreview {
ATimelineItemEventRow( ATimelineItemEventRow(
event = aTimelineItemEvent( event = aTimelineItemEvent(
senderDisplayName = "Bob", senderDisplayName = USER_NAME_BOB,
isMine = false, isMine = false,
content = TimelineItemEncryptedContent( content = TimelineItemEncryptedContent(
data = UnableToDecryptContent.Data.MegolmV1AesSha2( data = UnableToDecryptContent.Data.MegolmV1AesSha2(
@@ -24,6 +24,7 @@ import io.element.android.features.messages.impl.R
import io.element.android.libraries.designsystem.atomic.molecules.ComposerAlertMolecule import io.element.android.libraries.designsystem.atomic.molecules.ComposerAlertMolecule
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.designsystem.text.toAnnotatedString import io.element.android.libraries.designsystem.text.toAnnotatedString
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.allBooleans import io.element.android.libraries.designsystem.utils.allBooleans
@@ -86,13 +87,13 @@ internal fun TimelineItemRoomBeginningViewPreview() = ElementPreview {
) )
TimelineItemRoomBeginningView( TimelineItemRoomBeginningView(
predecessorRoom = null, predecessorRoom = null,
roomName = "Room Name", roomName = ROOM_NAME,
isDm = isDm, isDm = isDm,
onPredecessorRoomClick = {}, onPredecessorRoomClick = {},
) )
TimelineItemRoomBeginningView( TimelineItemRoomBeginningView(
predecessorRoom = PredecessorRoom(RoomId("!roomId:matrix.org")), predecessorRoom = PredecessorRoom(RoomId("!roomId:matrix.org")),
roomName = "Room Name", roomName = ROOM_NAME,
isDm = isDm, isDm = isDm,
onPredecessorRoomClick = {}, onPredecessorRoomClick = {},
) )
@@ -43,6 +43,7 @@ import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
@@ -175,9 +176,9 @@ private fun RoomAvatarAndNameRow(
internal fun MessagesViewTopBarPreview() = ElementPreview { internal fun MessagesViewTopBarPreview() = ElementPreview {
@Composable @Composable
fun AMessagesViewTopBar( fun AMessagesViewTopBar(
roomName: String? = "Room name", roomName: String? = ROOM_NAME,
roomAvatar: AvatarData = anAvatarData( roomAvatar: AvatarData = anAvatarData(
name = "Room name", name = ROOM_NAME,
size = AvatarSize.TimelineRoom, size = AvatarSize.TimelineRoom,
), ),
isTombstoned: Boolean = false, isTombstoned: Boolean = false,
@@ -31,6 +31,7 @@ import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.designsystem.components.button.BackButton import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.ROOM_NAME
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.designsystem.theme.components.TopAppBar
@@ -96,9 +97,9 @@ internal fun ThreadTopBar(
internal fun ThreadTopBarPreview() = ElementPreview { internal fun ThreadTopBarPreview() = ElementPreview {
@Composable @Composable
fun AThreadTopBar( fun AThreadTopBar(
roomName: String? = "Room name", roomName: String? = ROOM_NAME,
roomAvatarData: AvatarData = anAvatarData( roomAvatarData: AvatarData = anAvatarData(
name = "Room name", name = ROOM_NAME,
size = AvatarSize.TimelineRoom, size = AvatarSize.TimelineRoom,
), ),
isTombstoned: Boolean = false, isTombstoned: Boolean = false,
@@ -123,7 +124,7 @@ internal fun ThreadTopBarPreview() = ElementPreview {
HorizontalDivider() HorizontalDivider()
AThreadTopBar( AThreadTopBar(
roomAvatarData = anAvatarData( roomAvatarData = anAvatarData(
name = "Room name", name = ROOM_NAME,
url = "https://some-avatar.jpg", url = "https://some-avatar.jpg",
size = AvatarSize.TimelineRoom, size = AvatarSize.TimelineRoom,
), ),
@@ -9,6 +9,11 @@
package io.element.android.features.messages.impl.typing package io.element.android.features.messages.impl.typing
import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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 import kotlinx.collections.immutable.toImmutableList
class TypingNotificationStateProvider : PreviewParameterProvider<TypingNotificationState> { class TypingNotificationStateProvider : PreviewParameterProvider<TypingNotificationState> {
@@ -22,7 +27,7 @@ class TypingNotificationStateProvider : PreviewParameterProvider<TypingNotificat
), ),
aTypingNotificationState( aTypingNotificationState(
typingMembers = listOf( typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
), ),
), ),
aTypingNotificationState( aTypingNotificationState(
@@ -32,24 +37,24 @@ class TypingNotificationStateProvider : PreviewParameterProvider<TypingNotificat
), ),
aTypingNotificationState( aTypingNotificationState(
typingMembers = listOf( typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
aTypingRoomMember(disambiguatedDisplayName = "Bob"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_BOB),
), ),
), ),
aTypingNotificationState( aTypingNotificationState(
typingMembers = listOf( typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
aTypingRoomMember(disambiguatedDisplayName = "Bob"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_BOB),
aTypingRoomMember(disambiguatedDisplayName = "Charlie"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_CHARLIE),
), ),
), ),
aTypingNotificationState( aTypingNotificationState(
typingMembers = listOf( typingMembers = listOf(
aTypingRoomMember(disambiguatedDisplayName = "Alice"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_ALICE),
aTypingRoomMember(disambiguatedDisplayName = "Bob"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_BOB),
aTypingRoomMember(disambiguatedDisplayName = "Charlie"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_CHARLIE),
aTypingRoomMember(disambiguatedDisplayName = "Dan"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_DAVID),
aTypingRoomMember(disambiguatedDisplayName = "Eve"), aTypingRoomMember(disambiguatedDisplayName = USER_NAME_EVE),
), ),
), ),
aTypingNotificationState( aTypingNotificationState(
@@ -10,6 +10,7 @@ package io.element.android.features.preferences.impl.user.editprofile
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.preview.USER_NAME_JOHN_DOE
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.media.AvatarAction import io.element.android.libraries.matrix.ui.media.AvatarAction
import io.element.android.libraries.permissions.api.PermissionsState import io.element.android.libraries.permissions.api.PermissionsState
@@ -28,7 +29,7 @@ open class EditUserProfileStateProvider : PreviewParameterProvider<EditUserProfi
fun aEditUserProfileState( fun aEditUserProfileState(
userId: UserId = UserId("@john.doe:matrix.org"), userId: UserId = UserId("@john.doe:matrix.org"),
displayName: String = "John Doe", displayName: String = USER_NAME_JOHN_DOE,
userAvatarUrl: String? = null, userAvatarUrl: String? = null,
avatarActions: List<AvatarAction> = emptyList(), avatarActions: List<AvatarAction> = emptyList(),
saveButtonEnabled: Boolean = true, saveButtonEnabled: Boolean = true,
@@ -11,6 +11,10 @@ package io.element.android.features.rolesandpermissions.impl.roles
import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncAction 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.designsystem.theme.components.SearchBarResultState
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMember
@@ -103,9 +107,9 @@ internal fun aChangeRolesStateWithSelectedUsers() = aChangeRolesState(
internal fun aChangeRolesStateWithOwners( internal fun aChangeRolesStateWithOwners(
role: RoomMember.Role = RoomMember.Role.Admin, role: RoomMember.Role = RoomMember.Role.Admin,
selectedUsers: List<MatrixUser> = listOf( selectedUsers: List<MatrixUser> = listOf(
aMatrixUser(id = "@alice:server.org", displayName = "Alice"), aMatrixUser(displayName = USER_NAME_ALICE),
aMatrixUser(id = "@bob:server.org", displayName = "Bob"), aMatrixUser(displayName = USER_NAME_BOB),
aMatrixUser(id = "@carol:server.org", displayName = "Carol"), aMatrixUser(displayName = USER_NAME_CAROL),
), ),
) = aChangeRolesState( ) = aChangeRolesState(
role = role, role = role,
@@ -114,22 +118,22 @@ internal fun aChangeRolesStateWithOwners(
members = persistentListOf( members = persistentListOf(
aRoomMember( aRoomMember(
userId = UserId("@alice:server.org"), userId = UserId("@alice:server.org"),
displayName = "Alice", displayName = USER_NAME_ALICE,
role = RoomMember.Role.Owner(isCreator = true), role = RoomMember.Role.Owner(isCreator = true),
), ),
aRoomMember( aRoomMember(
userId = UserId("@bob:server.org"), userId = UserId("@bob:server.org"),
displayName = "Bob", displayName = USER_NAME_BOB,
role = RoomMember.Role.Owner(isCreator = false), role = RoomMember.Role.Owner(isCreator = false),
), ),
aRoomMember( aRoomMember(
userId = UserId("@carol:server.org"), userId = UserId("@carol:server.org"),
displayName = "Carol", displayName = USER_NAME_CAROL,
role = RoomMember.Role.Admin, role = RoomMember.Role.Admin,
), ),
aRoomMember( aRoomMember(
userId = UserId("@david:server.org"), userId = UserId("@david:server.org"),
displayName = "David", displayName = USER_NAME_DAVID,
role = RoomMember.Role.User, role = RoomMember.Role.User,
), ),
), ),
@@ -15,6 +15,15 @@ import io.element.android.features.roommembermoderation.api.RoomMemberModeration
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.architecture.map 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.core.UserId
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMember
@@ -143,21 +152,21 @@ fun aRoomMemberList() = persistentListOf(
aBannedMallory(), 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 anAlice() = aRoomMember(UserId("@alice:server.org"), USER_NAME_ALICE, role = RoomMember.Role.Admin)
fun aBob() = aRoomMember(UserId("@bob:server.org"), "Bob", role = RoomMember.Role.Moderator) 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) private fun RoomMember.withIdentity(identityState: IdentityState? = null) = RoomMemberWithIdentityState(this, identityState)
@@ -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.RoomMemberModerationEvents
import io.element.android.features.roommembermoderation.api.RoomMemberModerationPermissions import io.element.android.features.roommembermoderation.api.RoomMemberModerationPermissions
import io.element.android.libraries.architecture.AsyncAction 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.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@@ -78,8 +79,8 @@ class InternalRoomMemberModerationStateProvider : PreviewParameterProvider<Inter
} }
fun anAlice() = MatrixUser( fun anAlice() = MatrixUser(
UserId(value = "@alice:server.org"), userId = UserId(value = "@alice:server.org"),
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarUrl = null, avatarUrl = null,
) )
@@ -11,6 +11,7 @@ package io.element.android.features.space.impl.leave
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData 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.room.join.JoinRule
import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.api.spaces.SpaceRoom
import io.element.android.libraries.previewutils.room.aSpaceRoom import io.element.android.libraries.previewutils.room.aSpaceRoom
@@ -117,7 +118,7 @@ class LeaveSpaceStateProvider : PreviewParameterProvider<LeaveSpaceState> {
} }
fun aLeaveSpaceState( fun aLeaveSpaceState(
spaceName: String? = "Space name", spaceName: String? = SPACE_NAME,
isLastOwner: Boolean = false, isLastOwner: Boolean = false,
areCreatorsPrivileged: Boolean = false, areCreatorsPrivileged: Boolean = false,
selectableSpaceRooms: AsyncData<ImmutableList<SelectableSpaceRoom>> = AsyncData.Uninitialized, selectableSpaceRooms: AsyncData<ImmutableList<SelectableSpaceRoom>> = AsyncData.Uninitialized,
@@ -9,6 +9,7 @@
package io.element.android.features.space.impl.settings package io.element.android.features.space.impl.settings
import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
@@ -24,7 +25,7 @@ open class SpaceSettingsStateProvider : PreviewParameterProvider<SpaceSettingsSt
fun aSpaceSettingsState( fun aSpaceSettingsState(
roomId: RoomId = RoomId("!aRoomId:element.io"), roomId: RoomId = RoomId("!aRoomId:element.io"),
name: String = "Space name", name: String = SPACE_NAME,
alias: RoomAlias? = RoomAlias("#spacename:element.io"), alias: RoomAlias? = RoomAlias("#spacename:element.io"),
avatarUrl: String? = null, avatarUrl: String? = null,
memberCount: Long = 100, memberCount: Long = 100,
@@ -37,6 +37,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.modifiers.niceClickable import io.element.android.libraries.designsystem.modifiers.niceClickable
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.theme.components.ButtonSize import io.element.android.libraries.designsystem.theme.components.ButtonSize
import io.element.android.libraries.designsystem.theme.components.OutlinedButton import io.element.android.libraries.designsystem.theme.components.OutlinedButton
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
@@ -140,7 +141,7 @@ internal fun UserProfileHeaderSectionPreview() = ElementPreview {
UserProfileHeaderSection( UserProfileHeaderSection(
avatarUrl = null, avatarUrl = null,
userId = UserId("@alice:example.com"), userId = UserId("@alice:example.com"),
userName = "Alice", userName = USER_NAME_ALICE,
verificationState = UserProfileVerificationState.VERIFIED, verificationState = UserProfileVerificationState.VERIFIED,
openAvatarPreview = {}, openAvatarPreview = {},
onUserIdClick = {}, onUserIdClick = {},
@@ -154,7 +155,7 @@ internal fun UserProfileHeaderSectionWithVerificationViolationPreview() = Elemen
UserProfileHeaderSection( UserProfileHeaderSection(
avatarUrl = null, avatarUrl = null,
userId = UserId("@alice:example.com"), userId = UserId("@alice:example.com"),
userName = "Alice", userName = USER_NAME_ALICE,
verificationState = UserProfileVerificationState.VERIFICATION_VIOLATION, verificationState = UserProfileVerificationState.VERIFICATION_VIOLATION,
openAvatarPreview = {}, openAvatarPreview = {},
onUserIdClick = {}, onUserIdClick = {},
@@ -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.incoming.IncomingVerificationState.Step
import io.element.android.features.verifysession.impl.ui.aDecimalsSessionVerificationData import io.element.android.features.verifysession.impl.ui.aDecimalsSessionVerificationData
import io.element.android.features.verifysession.impl.ui.aEmojisSessionVerificationData 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.DeviceId
import io.element.android.libraries.matrix.api.core.FlowId import io.element.android.libraries.matrix.api.core.FlowId
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
@@ -59,7 +60,7 @@ internal fun anIncomingSessionVerificationRequest() = VerificationRequest.Incomi
details = SessionVerificationRequestDetails( details = SessionVerificationRequestDetails(
senderProfile = MatrixUser( senderProfile = MatrixUser(
userId = UserId("@alice:example.com"), userId = UserId("@alice:example.com"),
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarUrl = null, avatarUrl = null,
), ),
flowId = FlowId("1234"), flowId = FlowId("1234"),
@@ -73,7 +74,7 @@ internal fun anIncomingUserVerificationRequest() = VerificationRequest.Incoming.
details = SessionVerificationRequestDetails( details = SessionVerificationRequestDetails(
senderProfile = MatrixUser( senderProfile = MatrixUser(
userId = UserId("@alice:example.com"), userId = UserId("@alice:example.com"),
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarUrl = null, avatarUrl = null,
), ),
flowId = FlowId("1234"), flowId = FlowId("1234"),
@@ -29,6 +29,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.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
@@ -86,7 +87,7 @@ internal fun VerificationUserProfileContentPreview() = ElementPreview(
VerificationUserProfileContent( VerificationUserProfileContent(
user = MatrixUser( user = MatrixUser(
userId = UserId("@alice:example.com"), userId = UserId("@alice:example.com"),
displayName = "Alice", displayName = USER_NAME_ALICE,
avatarUrl = "https://example.com/avatar.png", avatarUrl = "https://example.com/avatar.png",
) )
) )
@@ -54,6 +54,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
import io.element.android.libraries.designsystem.utils.CommonDrawables import io.element.android.libraries.designsystem.utils.CommonDrawables
private val PIN_WIDTH = 42.dp private val PIN_WIDTH = 42.dp
@@ -395,7 +396,7 @@ private object LocationPinRenderer {
internal fun LocationPinPreview() = ElementPreview { internal fun LocationPinPreview() = ElementPreview {
val sampleAvatarData = AvatarData( val sampleAvatarData = AvatarData(
id = "@alice:matrix.org", id = "@alice:matrix.org",
name = "Alice", name = USER_NAME_ALICE,
url = null, url = null,
size = AvatarSize.SelectedUser size = AvatarSize.SelectedUser
) )
@@ -8,10 +8,12 @@
package io.element.android.libraries.designsystem.components.avatar package io.element.android.libraries.designsystem.components.avatar
import io.element.android.libraries.designsystem.preview.USER_NAME_ALICE
fun anAvatarData( 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", id: String = "@id_of_alice:server.org",
name: String? = "Alice", name: String? = USER_NAME_ALICE,
url: String? = null, url: String? = null,
size: AvatarSize = AvatarSize.RoomListItem, size: AvatarSize = AvatarSize.RoomListItem,
) = AvatarData( ) = AvatarData(
@@ -29,6 +29,8 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.LayoutDirection
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
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.text.toPx import io.element.android.libraries.designsystem.text.toPx
import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.TestTags
import io.element.android.libraries.testtags.testTag import io.element.android.libraries.testtags.testTag
@@ -116,12 +118,12 @@ internal fun DmAvatarsPreview() = ElementThemedPreview {
DmAvatars( DmAvatars(
userAvatarData = anAvatarData( userAvatarData = anAvatarData(
id = "Alice", id = "Alice",
name = "Alice", name = USER_NAME_ALICE,
size = size, size = size,
), ),
otherUserAvatarData = anAvatarData( otherUserAvatarData = anAvatarData(
id = "Bob", id = "Bob",
name = "Bob", name = USER_NAME_BOB,
size = size, size = size,
), ),
openAvatarPreview = {}, openAvatarPreview = {},
@@ -0,0 +1,27 @@
/*
* 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_SENDER = "Sender"
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"
@@ -22,6 +22,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.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.USER_NAME_BOB
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
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.InviteSender import io.element.android.libraries.matrix.ui.model.InviteSender
@@ -57,10 +58,10 @@ internal fun InviteSenderViewPreview() = ElementPreview {
InviteSenderView( InviteSenderView(
inviteSender = InviteSender( inviteSender = InviteSender(
userId = UserId("@bob:example.com"), userId = UserId("@bob:example.com"),
displayName = "Bob", displayName = USER_NAME_BOB,
avatarData = AvatarData( avatarData = AvatarData(
id = "@bob:example.com", id = "@bob:example.com",
name = "Bob", name = USER_NAME_BOB,
url = null, url = null,
size = AvatarSize.InviteSender, size = AvatarSize.InviteSender,
), ),
@@ -9,6 +9,17 @@
package io.element.android.libraries.matrix.ui.components package io.element.android.libraries.matrix.ui.components
import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.core.UserId
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
@@ -23,30 +34,30 @@ open class MatrixUserProvider : PreviewParameterProvider<MatrixUser> {
open class MatrixUserWithAvatarProvider : PreviewParameterProvider<MatrixUser?> { open class MatrixUserWithAvatarProvider : PreviewParameterProvider<MatrixUser?> {
override val values: Sequence<MatrixUser?> override val values: Sequence<MatrixUser?>
get() = sequenceOf( get() = sequenceOf(
aMatrixUser(displayName = "John Doe"), aMatrixUser(displayName = USER_NAME_JOHN_DOE),
aMatrixUser(displayName = "John Doe", avatarUrl = "anUrl"), aMatrixUser(displayName = USER_NAME_JOHN_DOE, avatarUrl = "anUrl"),
) )
} }
fun aMatrixUser( fun aMatrixUser(
id: String = "@id_of_alice:server.org", id: String? = null,
displayName: String? = "Alice", displayName: String? = USER_NAME_ALICE,
avatarUrl: String? = null, avatarUrl: String? = null,
) = MatrixUser( ) = MatrixUser(
userId = UserId(id), userId = UserId(id ?: "@${displayName?.lowercase()?.replace(" ", "_") ?: "id"}:server.org"),
displayName = displayName, displayName = displayName,
avatarUrl = avatarUrl, avatarUrl = avatarUrl,
) )
fun aMatrixUserList() = listOf( fun aMatrixUserList() = listOf(
aMatrixUser("@alice:server.org", "Alice"), aMatrixUser(displayName = USER_NAME_ALICE),
aMatrixUser("@bob:server.org", "Bob"), aMatrixUser(displayName = USER_NAME_BOB),
aMatrixUser("@carol:server.org", "Carol"), aMatrixUser(displayName = USER_NAME_CAROL),
aMatrixUser("@david:server.org", "David"), aMatrixUser(displayName = USER_NAME_DAVID),
aMatrixUser("@eve:server.org", "Eve"), aMatrixUser(displayName = USER_NAME_EVE),
aMatrixUser("@justin:server.org", "Justin"), aMatrixUser(displayName = USER_NAME_JUSTIN),
aMatrixUser("@mallory:server.org", "Mallory"), aMatrixUser(displayName = USER_NAME_MALLORY),
aMatrixUser("@susie:server.org", "Susie"), aMatrixUser(displayName = USER_NAME_SUSIE),
aMatrixUser("@victor:server.org", "Victor"), aMatrixUser(displayName = USER_NAME_VICTOR),
aMatrixUser("@walter:server.org", "Walter"), aMatrixUser(displayName = USER_NAME_WALTER),
) )
@@ -27,6 +27,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.components.avatar.anAvatarData import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.SPACE_NAME
/** /**
* Ref: https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=3643-2048&m=dev * Ref: https://www.figma.com/design/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?node-id=3643-2048&m=dev
@@ -72,7 +73,7 @@ internal fun OrganizationHeaderPreview() = ElementPreview {
url = "anUrl", url = "anUrl",
size = AvatarSize.OrganizationHeader, size = AvatarSize.OrganizationHeader,
), ),
name = "Space name", name = SPACE_NAME,
numberOfSpaces = 9, numberOfSpaces = 9,
numberOfRooms = 88, numberOfRooms = 88,
) )
@@ -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.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight 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.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getAvatarData
import io.element.android.libraries.matrix.ui.model.getBestName import io.element.android.libraries.matrix.ui.model.getBestName
@@ -58,7 +59,7 @@ internal fun SelectedUserRtlPreview() = CompositionLocalProvider(
) { ) {
ElementPreview { ElementPreview {
SelectedUser( SelectedUser(
matrixUser = aMatrixUser(displayName = "John Doe"), matrixUser = aMatrixUser(displayName = USER_NAME_JOHN_DOE),
canRemove = true, canRemove = true,
onUserRemove = {}, onUserRemove = {},
) )
@@ -30,6 +30,11 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarType
import io.element.android.libraries.designsystem.components.avatar.anAvatarData import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.preview.SPACE_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.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.core.RoomAlias
import io.element.android.libraries.matrix.api.spaces.SpaceRoomVisibility import io.element.android.libraries.matrix.api.spaces.SpaceRoomVisibility
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
@@ -115,15 +120,15 @@ internal fun SpaceHeaderViewPreview() = ElementPreview {
size = AvatarSize.SpaceHeader, size = AvatarSize.SpaceHeader,
), ),
alias = RoomAlias("#spaceAlias:matrix.org"), alias = RoomAlias("#spaceAlias:matrix.org"),
name = "Space name", name = SPACE_NAME,
topic = "Space topic: " + LoremIpsum(40).values.first(), topic = "Space topic: " + LoremIpsum(40).values.first(),
topicMaxLines = 2, topicMaxLines = 2,
visibility = SpaceRoomVisibility.Public, visibility = SpaceRoomVisibility.Public,
heroes = persistentListOf( heroes = persistentListOf(
aMatrixUser(id = "@1:d", displayName = "Alice", avatarUrl = "aUrl"), aMatrixUser(id = "@1:d", displayName = USER_NAME_ALICE, avatarUrl = "aUrl"),
aMatrixUser(id = "@2:d", displayName = "Bob"), aMatrixUser(id = "@2:d", displayName = USER_NAME_BOB),
aMatrixUser(id = "@3:d", displayName = "Charlie", avatarUrl = "aUrl"), aMatrixUser(id = "@3:d", displayName = USER_NAME_CHARLIE, avatarUrl = "aUrl"),
aMatrixUser(id = "@4:d", displayName = "Dave"), aMatrixUser(id = "@4:d", displayName = USER_NAME_DAVID),
), ),
numberOfMembers = 999, numberOfMembers = 999,
) )
@@ -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.components.avatar.AvatarType
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight 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.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables import io.element.android.libraries.designsystem.utils.CommonDrawables
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
@@ -98,10 +102,10 @@ internal fun SpaceMembersViewPreview() = ElementPreview(
) { ) {
SpaceMembersView( SpaceMembersView(
heroes = persistentListOf( heroes = persistentListOf(
aMatrixUser(id = "@1:d", displayName = "Alice", avatarUrl = "aUrl"), aMatrixUser(id = "@1:d", displayName = USER_NAME_ALICE, avatarUrl = "aUrl"),
aMatrixUser(id = "@2:d", displayName = "Bob"), aMatrixUser(id = "@2:d", displayName = USER_NAME_BOB),
aMatrixUser(id = "@3:d", displayName = "Charlie", avatarUrl = "aUrl"), aMatrixUser(id = "@3:d", displayName = USER_NAME_CHARLIE, avatarUrl = "aUrl"),
aMatrixUser(id = "@4:d", displayName = "Dave"), aMatrixUser(id = "@4:d", displayName = USER_NAME_DAVID),
), ),
numberOfMembers = 123, numberOfMembers = 123,
) )
@@ -9,6 +9,8 @@
package io.element.android.libraries.matrix.ui.components package io.element.android.libraries.matrix.ui.components
import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.core.RoomId
import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.CurrentUserMembership
import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.RoomType
@@ -28,10 +30,10 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
state = CurrentUserMembership.LEFT, state = CurrentUserMembership.LEFT,
), ),
aSpaceRoom( aSpaceRoom(
displayName = "Alice", displayName = SPACE_NAME,
roomType = RoomType.Room, roomType = RoomType.Room,
isDirect = true, isDirect = true,
heroes = listOf(aMatrixUser(displayName = "Alice")), heroes = listOf(aMatrixUser(displayName = USER_NAME_ALICE)),
state = CurrentUserMembership.JOINED, state = CurrentUserMembership.JOINED,
numJoinedMembers = 2, numJoinedMembers = 2,
), ),
@@ -69,9 +71,9 @@ class SpaceRoomProvider : PreviewParameterProvider<SpaceRoom> {
state = CurrentUserMembership.INVITED, state = CurrentUserMembership.INVITED,
), ),
aSpaceRoom( aSpaceRoom(
displayName = "Alice", displayName = SPACE_NAME,
roomType = RoomType.Space, roomType = RoomType.Space,
heroes = listOf(aMatrixUser(displayName = "Alice")), heroes = listOf(aMatrixUser(displayName = USER_NAME_ALICE)),
state = CurrentUserMembership.JOINED, state = CurrentUserMembership.JOINED,
numJoinedMembers = 2, numJoinedMembers = 2,
), ),
@@ -9,6 +9,7 @@
package io.element.android.libraries.matrix.ui.messages.reply package io.element.android.libraries.matrix.ui.messages.reply
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.preview.USER_NAME_SENDER
import io.element.android.libraries.matrix.api.core.EventId 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.core.UserId
import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.media.MediaSource
@@ -159,7 +160,7 @@ private fun aInReplyToDetails(
) )
fun aProfileDetailsReady( fun aProfileDetailsReady(
displayName: String? = "Sender", displayName: String? = USER_NAME_SENDER,
displayNameAmbiguous: Boolean = false, displayNameAmbiguous: Boolean = false,
avatarUrl: String? = null, avatarUrl: String? = null,
) = ProfileDetails.Ready( ) = ProfileDetails.Ready(
@@ -9,6 +9,7 @@
package io.element.android.libraries.mediaviewer.impl.details package io.element.android.libraries.mediaviewer.impl.details
import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.EventId
import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.media.MediaSource
import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.MediaInfo
@@ -26,7 +27,7 @@ open class MediaBottomSheetStateDeleteConfirmationProvider : PreviewParameterPro
fun aMediaBottomSheetStateDeleteConfirmation( fun aMediaBottomSheetStateDeleteConfirmation(
mediaInfo: MediaInfo = anImageMediaInfo( mediaInfo: MediaInfo = anImageMediaInfo(
senderName = "Alice", senderName = USER_NAME_ALICE,
), ),
thumbnailSource: MediaSource? = null, thumbnailSource: MediaSource? = null,
) = MediaBottomSheetState.DeleteConfirmation( ) = MediaBottomSheetState.DeleteConfirmation(
@@ -8,6 +8,7 @@
package io.element.android.libraries.mediaviewer.impl.details package io.element.android.libraries.mediaviewer.impl.details
import androidx.compose.ui.tooling.preview.PreviewParameterProvider 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.EventId
import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.MediaInfo
import io.element.android.libraries.mediaviewer.api.anApkMediaInfo import io.element.android.libraries.mediaviewer.api.anApkMediaInfo
@@ -35,7 +36,7 @@ fun aMediaBottomSheetStateDetails(
eventId: EventId? = EventId($$"$eventId"), eventId: EventId? = EventId($$"$eventId"),
canDelete: Boolean = true, canDelete: Boolean = true,
mediaInfo: MediaInfo = anImageMediaInfo( mediaInfo: MediaInfo = anImageMediaInfo(
senderName = "Alice", senderName = USER_NAME_ALICE,
dateSentFull = "December 6, 2024 at 12:59", dateSentFull = "December 6, 2024 at 12:59",
), ),
) = MediaBottomSheetState.Details( ) = MediaBottomSheetState.Details(
@@ -11,6 +11,7 @@ package io.element.android.libraries.mediaviewer.impl.gallery
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.components.media.WaveFormSamples 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.matrix.api.core.UniqueId
import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetState
import io.element.android.libraries.mediaviewer.impl.details.aMediaBottomSheetStateDetails import io.element.android.libraries.mediaviewer.impl.details.aMediaBottomSheetStateDetails
@@ -112,7 +113,7 @@ open class MediaGalleryStateProvider : PreviewParameterProvider<MediaGalleryStat
} }
private fun aMediaGalleryState( private fun aMediaGalleryState(
roomName: String = "Room name", roomName: String = ROOM_NAME,
mode: MediaGalleryMode = MediaGalleryMode.Images, mode: MediaGalleryMode = MediaGalleryMode.Images,
groupedMediaItems: AsyncData<GroupedMediaItems> = AsyncData.Uninitialized, groupedMediaItems: AsyncData<GroupedMediaItems> = AsyncData.Uninitialized,
mediaBottomSheetState: MediaBottomSheetState = MediaBottomSheetState.Hidden, mediaBottomSheetState: MediaBottomSheetState = MediaBottomSheetState.Hidden,
@@ -13,6 +13,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.components.media.WaveFormSamples 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.core.EventId
import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.api.media.MediaSource
import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.matrix.api.timeline.Timeline
@@ -179,7 +180,7 @@ open class MediaViewerStateProvider : PreviewParameterProvider<MediaViewerState>
) )
), ),
anImageMediaInfo( anImageMediaInfo(
senderName = "Alice", senderName = USER_NAME_ALICE,
dateSent = "21 NOV, 2024", dateSent = "21 NOV, 2024",
caption = LONG_CAPTION, caption = LONG_CAPTION,
).let { ).let {
@@ -8,6 +8,16 @@
package io.element.android.libraries.previewutils.room package io.element.android.libraries.previewutils.room
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_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.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.RoomMembershipState import io.element.android.libraries.matrix.api.room.RoomMembershipState
@@ -38,27 +48,27 @@ fun aRoomMember(
fun aRoomMemberList() = persistentListOf( fun aRoomMemberList() = persistentListOf(
anAlice(), anAlice(),
aBob(), aBob(),
aRoomMember(UserId("@carol:server.org"), "Carol"), aRoomMember(UserId("@carol:server.org"), USER_NAME_CAROL),
aRoomMember(UserId("@david:server.org"), "David"), aRoomMember(UserId("@david:server.org"), USER_NAME_DAVID),
aRoomMember(UserId("@eve:server.org"), "Eve"), aRoomMember(UserId("@eve:server.org"), USER_NAME_EVE),
aRoomMember(UserId("@justin:server.org"), "Justin"), aRoomMember(UserId("@justin:server.org"), USER_NAME_JUSTIN),
aRoomMember(UserId("@mallory:server.org"), "Mallory"), aRoomMember(UserId("@mallory:server.org"), USER_NAME_MALLORY),
aRoomMember(UserId("@susie:server.org"), "Susie"), aRoomMember(UserId("@susie:server.org"), USER_NAME_SUSIE),
aVictor(), aVictor(),
aWalter(), aWalter(),
) )
fun anAlice() = aRoomMember(UserId("@alice:server.org"), "Alice", role = RoomMember.Role.Admin) fun anAlice() = aRoomMember(UserId("@alice:server.org"), USER_NAME_ALICE, role = RoomMember.Role.Admin)
fun aBob() = aRoomMember(UserId("@bob:server.org"), "Bob", role = RoomMember.Role.Moderator) fun aBob() = aRoomMember(UserId("@bob:server.org"), USER_NAME_BOB, role = RoomMember.Role.Moderator)
fun aVictor() = aRoomMember( fun aVictor() = aRoomMember(
UserId("@victor:server.org"), UserId("@victor:server.org"),
"Victor", USER_NAME_VICTOR,
membership = RoomMembershipState.INVITE membership = RoomMembershipState.INVITE
) )
fun aWalter() = aRoomMember( fun aWalter() = aRoomMember(
UserId("@walter:server.org"), UserId("@walter:server.org"),
"Walter", USER_NAME_WALTER,
membership = RoomMembershipState.INVITE membership = RoomMembershipState.INVITE
) )
@@ -8,6 +8,7 @@
package io.element.android.libraries.previewutils.room package io.element.android.libraries.previewutils.room
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.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId 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.CurrentUserMembership
@@ -19,7 +20,7 @@ import kotlinx.collections.immutable.toImmutableList
fun aSpaceRoom( fun aSpaceRoom(
rawName: String? = null, rawName: String? = null,
displayName: String = "Space name", displayName: String = SPACE_NAME,
avatarUrl: String? = null, avatarUrl: String? = null,
canonicalAlias: RoomAlias? = null, canonicalAlias: RoomAlias? = null,
childrenCount: Int = 0, childrenCount: Int = 0,
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:1da26fc2ffe2216cda7aa1b6b92ba587c9d0bb56aa54586b3073befee96d29b6 oid sha256:e83c8d052ce340010f97c4ef2750e4b921a129639a0004bd951f71c7348622bf
size 40956 size 40597
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:be4cbe72c73d76252f902e122bd62ba51ff89cf2cb20ddd61ed6615e983c65cf oid sha256:0a6ddec2c9743976674657e454cb14bb479d774f1aa13882a34ceb89ff75b179
size 25153 size 24424
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:1a4be2c70eb477dbd58e4e6924d0141f1c8d7205807d968b3a34221c12a301c6 oid sha256:95e30b24d5a6571cf42a707a01f0458cf509428c9ab8333924e1679f6d4d4f31
size 36176 size 35778
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:9176ee2b5b78032639d9f51f7680d82f7d3ca916fb587d914f12d075382d65f0 oid sha256:8e54c2c665235d6b4c45161b4fcc0b8f0a96ce7620bbed9f56e04ecb71916f3e
size 27077 size 26640
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:76caf93913c979f3327dec4331d3a5bea5027df45c5cacf55a786b8f677e3162 oid sha256:c2fd721612e0620c3a4eac0f0835ac1d03ffb36ec45477340bb732ff1c63cc30
size 27340 size 26921
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:e457b722fe403205f1394e7347dedb3aba308e48c979ea002399425c9a130fd2 oid sha256:7c7fc020ec4bcb2f67a3a534a621e71233488b469b24e6bd6d3efa42f9f944a1
size 20667 size 20263
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:6a0202d081e5aed85ca093239fae1c8f46d42fd6e859c818f5c0301597e5b473 oid sha256:a07bd9ac57c1fb6074b81134edcd169c2c7edc3dd19039766dabbfe8ccd5d8fb
size 41957 size 41621
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:8d3a7ae9522da2911bf256273a4972020fc1677f026fbb9f17d27f549ab03ea3 oid sha256:fa1a7c175f6551680b1a71ddaac14014f6503ccc2928d4ad97eced8a80626ed4
size 25978 size 25158
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2ae20b874dba38a89a59e418bce33e748449446e0fc913b7f3ff2e87b8200c40 oid sha256:67bc6eac2128230323aa7dabb6896b98c4249e6fba9edb4d1769f36dbe031135
size 36568 size 36346
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:74a4913734d0648115d5056052fa2de8a839bb5a4d2dfdaa3d8ed5f0eef2793d oid sha256:a40fe5dc4a671ec2384265da36f3d42a3cadb2792823308a62dbd82423110652
size 27728 size 27552
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a4f8571893bf9292a7d298c7419ea2e3f0363e1c2eca8c5f6aaea7d39143039c oid sha256:007aeb20270db25edcd3cf2e1ac8e4e0d714e08a043af0473c2263c1e79af452
size 27855 size 27634
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:3d5b500d6275bc6ead5e8644b1afb1a0a829e91d4912444e5e0d431322343855 oid sha256:d644bc2a62596b923d782150334f60b1940730824af0b7a304d2fdfce85cd0e6
size 20700 size 20493
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c8af941ad8e5b553b82aad8b39abd8b4876d67b6906acf0ee8e4715673d8b35a oid sha256:80e8c8bf0bf9b34d3de0b0db7f67b84a667a9f510d6e9eefc708de25dd1ca5f8
size 81462 size 76725
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:f776cecd5278761fe7904b63dd980804a6dc2d3e7acc37fb7ea71d6a1c1e63df oid sha256:d7e8bc45d019ed73b4795f29b36c28411e8e20cd4bd231e76e8619e011b64b31
size 42505 size 40203
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:1a986526c80130e11a0ec9c6450e4cd77dc40ef4a09082a1c526eebabebf4c03 oid sha256:d372726c65f1887a8eba63f04301212780ef04410fd0758d314562f6899859ea
size 49746 size 46072
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d2ca690a89bebaa351990cab34155afcfa7a0b9f02312757fcb933ba97ab9310 oid sha256:ea6ea46123a211b87daadf29aa87588f4e0fa5e5c25ddc0307db490c72f865d5
size 101952 size 96925

Some files were not shown because too many files have changed in this diff Show More