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.
This commit is contained in:
Benoit Marty 2025-10-09 09:55:19 +02:00
parent eb51b5cc3f
commit b03391e3f3
2 changed files with 51 additions and 30 deletions

View file

@ -8,12 +8,13 @@
package io.element.android.libraries.designsystem.components.avatar package io.element.android.libraries.designsystem.components.avatar
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview 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 androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.components.avatar.internal.RoomAvatar 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.components.avatar.internal.UserAvatar
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.theme.components.Text
import io.element.android.libraries.designsystem.utils.CommonDrawables import io.element.android.libraries.designsystem.utils.CommonDrawables
import kotlinx.collections.immutable.persistentListOf
@Composable @Composable
fun Avatar( fun Avatar(
@ -64,18 +65,54 @@ fun Avatar(
@Preview(group = PreviewGroup.Avatars) @Preview(group = PreviewGroup.Avatars)
@Composable @Composable
internal fun AvatarPreview(@PreviewParameter(AvatarDataProvider::class) avatarData: AvatarData) = internal fun AvatarPreview() = ElementThemedPreview(
ElementThemedPreview( drawableFallbackForImages = CommonDrawables.sample_background,
drawableFallbackForImages = CommonDrawables.sample_avatar, ) {
Column(
modifier = Modifier.padding(4.dp),
verticalArrangement = Arrangement.spacedBy(4.dp),
) { ) {
Row( listOf(
verticalAlignment = Alignment.CenterVertically, anAvatarData(size = AvatarSize.UserListItem),
horizontalArrangement = Arrangement.spacedBy(16.dp) anAvatarData(size = AvatarSize.UserListItem, name = null),
) { anAvatarData(size = AvatarSize.UserListItem, url = "aUrl"),
Avatar( ).forEach { avatarData ->
avatarData = avatarData, Row(
avatarType = AvatarType.User, verticalAlignment = Alignment.CenterVertically,
) horizontalArrangement = Arrangement.spacedBy(4.dp)
Text(text = avatarData.size.name + " " + avatarData.size.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),
)
}
} }
} }
}

View file

@ -7,22 +7,6 @@
package io.element.android.libraries.designsystem.components.avatar package io.element.android.libraries.designsystem.components.avatar
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
open class AvatarDataProvider : PreviewParameterProvider<AvatarData> {
override val values: Sequence<AvatarData>
get() = AvatarSize.entries
.asSequence()
.map {
sequenceOf(
anAvatarData(size = it),
anAvatarData(size = it, name = null),
anAvatarData(size = it, url = "aUrl"),
)
}
.flatten()
}
fun anAvatarData( fun anAvatarData(
// Let's the id not start with a 'a'. // Let's the id not start with a 'a'.
id: String = "@id_of_alice:server.org", id: String = "@id_of_alice:server.org",