From b03391e3f331d8ba5b467864447e3298673ad4e1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 9 Oct 2025 09:55:19 +0200 Subject: [PATCH] Reduce number of Preview for Avatar. It will cover more cases, and it will limit the risk of conflict on screenshot, which happen each time we touch AvatarSize. --- .../designsystem/components/avatar/Avatar.kt | 65 +++++++++++++++---- .../components/avatar/AvatarDataProvider.kt | 16 ----- 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt index db7ef62483..d3a9ed3107 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt @@ -8,12 +8,13 @@ package io.element.android.libraries.designsystem.components.avatar import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.components.avatar.internal.RoomAvatar @@ -21,8 +22,8 @@ import io.element.android.libraries.designsystem.components.avatar.internal.Spac import io.element.android.libraries.designsystem.components.avatar.internal.UserAvatar import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.PreviewGroup -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.utils.CommonDrawables +import kotlinx.collections.immutable.persistentListOf @Composable fun Avatar( @@ -64,18 +65,54 @@ fun Avatar( @Preview(group = PreviewGroup.Avatars) @Composable -internal fun AvatarPreview(@PreviewParameter(AvatarDataProvider::class) avatarData: AvatarData) = - ElementThemedPreview( - drawableFallbackForImages = CommonDrawables.sample_avatar, +internal fun AvatarPreview() = ElementThemedPreview( + drawableFallbackForImages = CommonDrawables.sample_background, +) { + Column( + modifier = Modifier.padding(4.dp), + verticalArrangement = Arrangement.spacedBy(4.dp), ) { - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(16.dp) - ) { - Avatar( - avatarData = avatarData, - avatarType = AvatarType.User, - ) - Text(text = avatarData.size.name + " " + avatarData.size.dp) + listOf( + anAvatarData(size = AvatarSize.UserListItem), + anAvatarData(size = AvatarSize.UserListItem, name = null), + anAvatarData(size = AvatarSize.UserListItem, url = "aUrl"), + ).forEach { avatarData -> + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(4.dp) + ) { + Avatar( + avatarData = avatarData, + avatarType = AvatarType.User, + ) + Avatar( + avatarData = avatarData, + avatarType = AvatarType.Room(isTombstoned = false), + ) + Avatar( + avatarData = avatarData, + avatarType = AvatarType.Room( + heroes = persistentListOf( + anAvatarData("@carol:server.org", "Carol", size = AvatarSize.UserListItem), + anAvatarData("@david:server.org", "David", size = AvatarSize.UserListItem), + anAvatarData("@eve:server.org", "Eve", size = AvatarSize.UserListItem), + anAvatarData("@justin:server.org", "Justin", size = AvatarSize.UserListItem), + ) + ) + ) + Avatar( + avatarData = avatarData, + avatarType = AvatarType.Room(isTombstoned = true), + ) + Avatar( + avatarData = avatarData, + avatarType = AvatarType.Space(isTombstoned = false), + ) + Avatar( + avatarData = avatarData, + avatarType = AvatarType.Space(isTombstoned = true), + ) + } } } +} diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt index 7ccebd2082..2bc497f10d 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt @@ -7,22 +7,6 @@ package io.element.android.libraries.designsystem.components.avatar -import androidx.compose.ui.tooling.preview.PreviewParameterProvider - -open class AvatarDataProvider : PreviewParameterProvider { - override val values: Sequence - get() = AvatarSize.entries - .asSequence() - .map { - sequenceOf( - anAvatarData(size = it), - anAvatarData(size = it, name = null), - anAvatarData(size = it, url = "aUrl"), - ) - } - .flatten() -} - fun anAvatarData( // Let's the id not start with a 'a'. id: String = "@id_of_alice:server.org",