@@ -28,18 +28,21 @@ import androidx.compose.ui.Alignment
2828import androidx.compose.ui.Modifier
2929import androidx.compose.ui.draw.clip
3030import androidx.compose.ui.layout.ContentScale
31+ import androidx.compose.ui.platform.LocalInspectionMode
3132import androidx.compose.ui.semantics.clearAndSetSemantics
3233import androidx.compose.ui.tooling.preview.Preview
3334import androidx.compose.ui.tooling.preview.PreviewParameter
3435import androidx.compose.ui.unit.dp
3536import androidx.compose.ui.unit.sp
37+ import coil.compose.AsyncImage
3638import coil.compose.AsyncImagePainter
3739import coil.compose.SubcomposeAsyncImage
3840import coil.compose.SubcomposeAsyncImageContent
3941import io.element.android.compound.theme.ElementTheme
4042import io.element.android.libraries.designsystem.colors.AvatarColorsProvider
4143import io.element.android.libraries.designsystem.preview.ElementThemedPreview
4244import io.element.android.libraries.designsystem.preview.PreviewGroup
45+ import io.element.android.libraries.designsystem.preview.debugPlaceholderAvatar
4346import io.element.android.libraries.designsystem.text.toSp
4447import io.element.android.libraries.designsystem.theme.components.Text
4548import timber.log.Timber
@@ -73,21 +76,32 @@ private fun ImageAvatar(
7376 modifier : Modifier = Modifier ,
7477 contentDescription : String? = null,
7578) {
76- SubcomposeAsyncImage (
77- model = avatarData,
78- contentDescription = contentDescription,
79- contentScale = ContentScale .Crop ,
80- modifier = modifier
81- ) {
82- when (val state = painter.state) {
83- is AsyncImagePainter .State .Success -> SubcomposeAsyncImageContent ()
84- is AsyncImagePainter .State .Error -> {
85- SideEffect {
86- Timber .e(state.result.throwable, " Error loading avatar $state \n ${state.result} " )
79+ if (LocalInspectionMode .current) {
80+ // For compose previews, use debugPlaceholderAvatar()
81+ // instead of falling back to initials avatar on load failure
82+ AsyncImage (
83+ model = avatarData,
84+ contentDescription = contentDescription,
85+ placeholder = debugPlaceholderAvatar(),
86+ modifier = modifier
87+ )
88+ } else {
89+ SubcomposeAsyncImage (
90+ model = avatarData,
91+ contentDescription = contentDescription,
92+ contentScale = ContentScale .Crop ,
93+ modifier = modifier
94+ ) {
95+ when (val state = painter.state) {
96+ is AsyncImagePainter .State .Success -> SubcomposeAsyncImageContent ()
97+ is AsyncImagePainter .State .Error -> {
98+ SideEffect {
99+ Timber .e(state.result.throwable, " Error loading avatar $state \n ${state.result} " )
100+ }
101+ InitialsAvatar (avatarData = avatarData)
87102 }
88- InitialsAvatar (avatarData = avatarData)
103+ else -> InitialsAvatar (avatarData = avatarData)
89104 }
90- else -> InitialsAvatar (avatarData = avatarData)
91105 }
92106 }
93107}
0 commit comments