Rework AvatarSize.

Remove default value for AvatarSize, it has to be explicitely provided.
This commit is contained in:
Benoit Marty 2023-06-21 16:01:42 +02:00 committed by Benoit Marty
parent 4d0f58568f
commit 92bd16832d
32 changed files with 106 additions and 60 deletions

View file

@ -17,7 +17,9 @@
package io.element.android.libraries.designsystem.components.avatar
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable
@ -30,6 +32,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
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.sp
import coil.compose.AsyncImage
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
@ -109,4 +112,12 @@ private fun InitialsAvatar(
@Preview(group = PreviewGroup.Avatars)
@Composable
fun AvatarPreview(@PreviewParameter(AvatarDataProvider::class) avatarData: AvatarData) =
ElementThemedPreview { Avatar(avatarData) }
ElementThemedPreview {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(16.dp)
) {
Avatar(avatarData)
Text(text = avatarData.size.name + " " + avatarData.size.dp)
}
}

View file

@ -23,7 +23,7 @@ data class AvatarData(
val id: String,
val name: String?,
val url: String? = null,
val size: AvatarSize = AvatarSize.MEDIUM
val size: AvatarSize,
) {
val initial by lazy {

View file

@ -20,15 +20,28 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider
open class AvatarDataProvider : PreviewParameterProvider<AvatarData> {
override val values: Sequence<AvatarData>
get() = sequenceOf(
anAvatarData(),
anAvatarData().copy(name = null),
anAvatarData().copy(url = "aUrl"),
)
get() {
AvatarSize.values()
.also { it.sortBy { item -> item.name } }
.asSequence()
return AvatarSize.values().asSequence().map {
sequenceOf(
anAvatarData(size = it),
anAvatarData(size = it).copy(name = null),
anAvatarData(size = it).copy(url = "aUrl"),
)
}
.flatten()
}
}
fun anAvatarData(id: String = "@id_of_alice:server.org", name: String = "Alice") = AvatarData(
fun anAvatarData(
// Let's the id not start with a 'a'.
id: String = "@id_of_alice:server.org",
name: String = "Alice",
size: AvatarSize = AvatarSize.RoomListItem,
) = AvatarData(
id = id,
name = name,
size = size,
)

View file

@ -19,13 +19,19 @@ package io.element.android.libraries.designsystem.components.avatar
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
sealed class AvatarSize(open val dp: Dp) {
enum class AvatarSize(val dp: Dp) {
CurrentUserTopBar(28.dp),
object SMALL : AvatarSize(32.dp)
object MEDIUM : AvatarSize(40.dp)
object BIG : AvatarSize(48.dp)
object HUGE : AvatarSize(96.dp)
RoomHeader(96.dp),
RoomListItem(52.dp),
// FIXME maybe remove this field and switch back to an enum (or remove this class) when design system will be integrated
data class Custom(override val dp: Dp) : AvatarSize(dp)
UserHeader(96.dp),
UserListItem(36.dp),
SelectedUser(56.dp),
TimelineRoom(32.dp),
TimelineSender(32.dp),
InviteSender(16.dp),
}