Give the id to AvatarData to be able to compute initial properly.

This commit is contained in:
Benoit Marty 2023-02-13 10:06:30 +01:00 committed by Benoit Marty
parent b439109d05
commit 443076f636
19 changed files with 76 additions and 61 deletions

View file

@ -29,6 +29,7 @@ import androidx.compose.ui.graphics.Brush
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.sp
import coil.compose.AsyncImage
import io.element.android.libraries.designsystem.AvatarGradientEnd
@ -90,7 +91,7 @@ private fun InitialsAvatar(
) {
Text(
modifier = Modifier.align(Alignment.Center),
text = avatarData.name.first().uppercase(),
text = avatarData.getInitial(),
fontSize = (avatarData.size.value / 2).sp,
color = Color.White,
)
@ -99,13 +100,15 @@ private fun InitialsAvatar(
@Preview
@Composable
fun AvatarLightPreview() = ElementPreviewLight { ContentToPreview() }
fun AvatarLightPreview(@PreviewParameter(AvatarDataPreviewParameterProvider::class) avatarData: AvatarData) =
ElementPreviewLight { ContentToPreview(avatarData) }
@Preview
@Composable
fun AvatarDarkPreview() = ElementPreviewDark { ContentToPreview() }
fun AvatarDarkPreview(@PreviewParameter(AvatarDataPreviewParameterProvider::class) avatarData: AvatarData) =
ElementPreviewDark { ContentToPreview(avatarData) }
@Composable
private fun ContentToPreview() {
Avatar(AvatarData(name = "A"))
private fun ContentToPreview(avatarData: AvatarData) {
Avatar(avatarData)
}

View file

@ -17,10 +17,31 @@
package io.element.android.libraries.designsystem.components.avatar
import androidx.compose.runtime.Immutable
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
@Immutable
data class AvatarData(
val name: String = "",
val id: String,
val name: String?,
val url: String? = null,
val size: AvatarSize = AvatarSize.MEDIUM
) {
fun getInitial(): String {
val firstChar = name?.firstOrNull() ?: id.getOrNull(1) ?: '?'
return firstChar.uppercase()
}
}
open class AvatarDataPreviewParameterProvider : PreviewParameterProvider<AvatarData> {
override val values: Sequence<AvatarData>
get() = sequenceOf(
anAvatarData(),
anAvatarData().copy(name = null),
)
}
fun anAvatarData() = AvatarData(
// Let's the id not start with a 'a'.
id = "@id_of_alice:server.org",
name = "Alice",
)

View file

@ -38,7 +38,8 @@ class MatrixItemHelper @Inject constructor(
val userDisplayName = client.loadUserDisplayName().getOrNull()
val avatarData =
AvatarData(
userDisplayName ?: client.userId().value,
client.userId().value,
userDisplayName,
userAvatarUrl,
avatarSize
)

View file

@ -17,22 +17,24 @@
package io.element.android.libraries.matrix.ui.components
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.components.avatar.anAvatarData
import io.element.android.libraries.matrix.core.UserId
import io.element.android.libraries.matrix.ui.model.MatrixUser
open class MatrixUserPreviewParameterProvider : PreviewParameterProvider<MatrixUser> {
override val values: Sequence<MatrixUser>
get() = sequenceOf(
aMatrixUser(),
MatrixUser(
id = UserId("@alice:server.org"),
username = "Alice",
avatarData = AvatarData("Alice")
),
MatrixUser(
id = UserId("@alice:server.org"),
id = UserId("@id_of_alice:server.org"),
username = null,
avatarData = AvatarData("Alice")
avatarData = anAvatarData().copy(name = null)
),
)
}
fun aMatrixUser() = MatrixUser(
id = UserId("@id_of_alice:server.org"),
username = "Alice",
avatarData = anAvatarData()
)

View file

@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.core.UserId
data class MatrixUser(
val id: UserId,
val username: String? = null,
val avatarData: AvatarData = AvatarData(),
val avatarData: AvatarData = AvatarData(id.value, username),
)
fun MatrixUser.getBestName(): String {