From b3dd6a257ec74a429b890fd33c67989427192114 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 23 Sep 2025 21:41:13 +0200 Subject: [PATCH] Reduce number of previews of MessagesView and create preview dedicated to MessagesViewTopBar. --- .../messages/impl/MessagesStateProvider.kt | 9 --- .../impl/topbars/MessagesViewTopBar.kt | 70 +++++++++++++++++++ 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index 8217cb977c..6284cf45ad 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -60,31 +60,22 @@ open class MessagesStateProvider : PreviewParameterProvider { aMessagesState(composerState = aMessageComposerState(showAttachmentSourcePicker = true)), aMessagesState(userEventPermissions = aUserEventPermissions(canSendMessage = false)), aMessagesState(showReinvitePrompt = true), - aMessagesState(roomName = null), aMessagesState(composerState = aMessageComposerState(showTextFormatting = true)), aMessagesState( voiceMessageComposerState = aVoiceMessageComposerState(showPermissionRationaleDialog = true), ), - aMessagesState( - roomCallState = anOngoingCallState(), - ), aMessagesState( voiceMessageComposerState = aVoiceMessageComposerState( voiceMessageState = aVoiceMessagePreviewState(), showSendFailureDialog = true ), ), - aMessagesState( - roomCallState = aStandByCallState(canStartCall = false), - ), aMessagesState( pinnedMessagesBannerState = aLoadedPinnedMessagesBannerState( knownPinnedMessagesCount = 4, currentPinnedMessageIndex = 0, ), ), - aMessagesState(roomName = "A DM with a very looong name", dmUserVerificationState = IdentityState.Verified), - aMessagesState(roomName = "A DM with a very looong name", dmUserVerificationState = IdentityState.VerificationViolation), aMessagesState(successorRoom = SuccessorRoom(RoomId("!id:domain"), null)), aMessagesState(timelineState = aTimelineState( timelineMode = Timeline.Mode.Thread(threadRootId = ThreadId("\$a-thread-id")), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt index a65f732576..570cf98529 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/topbars/MessagesViewTopBar.kt @@ -9,6 +9,7 @@ package io.element.android.features.messages.impl.topbars import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets @@ -30,16 +31,25 @@ import io.element.android.compound.theme.ElementTheme import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.features.messages.impl.timeline.components.CallMenuItem import io.element.android.features.roomcall.api.RoomCallState +import io.element.android.features.roomcall.api.aStandByCallState +import io.element.android.features.roomcall.api.anOngoingCallState import io.element.android.libraries.designsystem.components.avatar.Avatar 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.AvatarType import io.element.android.libraries.designsystem.components.button.BackButton +import io.element.android.libraries.designsystem.preview.ElementPreview +import io.element.android.libraries.designsystem.preview.PreviewsDayNight +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.Text import io.element.android.libraries.designsystem.theme.components.TopAppBar import io.element.android.libraries.matrix.api.encryption.identity.IdentityState +import io.element.android.libraries.matrix.ui.components.aMatrixUserList +import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -141,3 +151,63 @@ private fun RoomAvatarAndNameRow( ) } } + +@PreviewsDayNight +@Composable +internal fun MessagesViewTopBarPreview() = ElementPreview { + @Composable + fun AMessagesViewTopBar( + roomName: String? = "Room name", + roomAvatar: AvatarData = AvatarData( + id = "id", + name = "Room name", + url = null, + size = AvatarSize.TimelineRoom, + ), + isTombstoned: Boolean = false, + heroes: List = emptyList(), + roomCallState: RoomCallState = RoomCallState.Unavailable, + dmUserIdentityState: IdentityState? = null, + ) = MessagesViewTopBar( + roomName = roomName, + roomAvatar = roomAvatar, + isTombstoned = isTombstoned, + heroes = heroes.toImmutableList(), + roomCallState = roomCallState, + dmUserIdentityState = dmUserIdentityState, + onRoomDetailsClick = {}, + onJoinCallClick = {}, + onBackClick = {}, + ) + Column { + AMessagesViewTopBar() + HorizontalDivider() + AMessagesViewTopBar( + heroes = aMatrixUserList().map { it.getAvatarData(AvatarSize.TimelineRoom) }, + roomCallState = anOngoingCallState(), + ) + HorizontalDivider() + AMessagesViewTopBar( + roomName = null, + roomCallState = anOngoingCallState(canJoinCall = false), + ) + HorizontalDivider() + AMessagesViewTopBar( + roomName = "A DM with a very very very long name", + roomAvatar = AvatarData( + id = "id", + name = "Room name", + url = null, + size = AvatarSize.TimelineRoom, + ).copy(url = "https://some-avatar.jpg"), + roomCallState = aStandByCallState(canStartCall = false), + dmUserIdentityState = IdentityState.Verified + ) + HorizontalDivider() + AMessagesViewTopBar( + roomName = "A DM with a very very very long name", + isTombstoned = true, + dmUserIdentityState = IdentityState.VerificationViolation + ) + } +}