Skip to content

Commit 03b8010

Browse files
renovate[bot]bmartyElementBot
authored
fix(deps): update coil to v3.2.0 (#4712)
* fix(deps): update coil to v3.2.0 * Fix compilation issue. Need to provide an image for preview. https://coil-kt.github.io/coil/compose/#previews * Improve preview for images. * Update screenshots * More cleanup * Update screenshots --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Benoit Marty <[email protected]> Co-authored-by: ElementBot <[email protected]>
1 parent 1ca2e9b commit 03b8010

File tree

155 files changed

+362
-399
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+362
-399
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemImageView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ fun TimelineItemImageView(
102102
}
103103
),
104104
model = content.thumbnailMediaRequestData,
105-
contentScale = ContentScale.Fit,
105+
contentScale = ContentScale.Crop,
106106
alignment = Alignment.Center,
107107
contentDescription = description,
108108
onState = { isLoaded = it is AsyncImagePainter.State.Success },

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemStickerView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ fun TimelineItemStickerView(
7676
mimeType = content.mimeType,
7777
),
7878
),
79-
contentScale = ContentScale.Fit,
79+
contentScale = ContentScale.Crop,
8080
alignment = Alignment.Center,
8181
contentDescription = description,
8282
onState = { isLoaded = it is AsyncImagePainter.State.Success },

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/event/TimelineItemVideoView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ fun TimelineItemVideoView(
122122
height = content.thumbnailHeight?.toLong() ?: MAX_THUMBNAIL_HEIGHT,
123123
)
124124
),
125-
contentScale = ContentScale.Fit,
125+
contentScale = ContentScale.Crop,
126126
alignment = Alignment.Center,
127127
contentDescription = description,
128128
onState = { isLoaded = it is AsyncImagePainter.State.Success },

features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportView.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import io.element.android.libraries.designsystem.components.preferences.Preferen
4141
import io.element.android.libraries.designsystem.modifiers.onTabOrEnterKeyFocusNext
4242
import io.element.android.libraries.designsystem.preview.ElementPreview
4343
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
44-
import io.element.android.libraries.designsystem.preview.debugPlaceholderBackground
4544
import io.element.android.libraries.designsystem.theme.components.Button
4645
import io.element.android.libraries.designsystem.theme.components.ListItem
4746
import io.element.android.libraries.designsystem.theme.components.Text
@@ -74,8 +73,8 @@ fun BugReportView(
7473
TextField(
7574
value = descriptionFieldState,
7675
modifier = Modifier
77-
.fillMaxWidth()
78-
.onTabOrEnterKeyFocusNext(LocalFocusManager.current),
76+
.fillMaxWidth()
77+
.onTabOrEnterKeyFocusNext(LocalFocusManager.current),
7978
enabled = isFormEnabled,
8079
placeholder = stringResource(id = R.string.screen_bug_report_editor_placeholder),
8180
supportingText = stringResource(id = R.string.screen_bug_report_editor_description),
@@ -139,7 +138,6 @@ fun BugReportView(
139138
modifier = Modifier.fillMaxWidth(fraction = 0.5f),
140139
model = model,
141140
contentDescription = null,
142-
placeholder = debugPlaceholderBackground(),
143141
)
144142
}
145143
}
@@ -152,8 +150,8 @@ fun BugReportView(
152150
enabled = state.submitEnabled,
153151
showProgress = state.sending.isLoading(),
154152
modifier = Modifier
155-
.fillMaxWidth()
156-
.padding(top = 24.dp, bottom = 16.dp)
153+
.fillMaxWidth()
154+
.padding(top = 24.dp, bottom = 16.dp)
157155
)
158156
}
159157
}

features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/changeroles/ChangeRolesView.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import io.element.android.libraries.designsystem.theme.components.SearchBarResul
6464
import io.element.android.libraries.designsystem.theme.components.Text
6565
import io.element.android.libraries.designsystem.theme.components.TextButton
6666
import io.element.android.libraries.designsystem.theme.components.TopAppBar
67+
import io.element.android.libraries.designsystem.utils.CommonDrawables
6768
import io.element.android.libraries.matrix.api.core.UserId
6869
import io.element.android.libraries.matrix.api.room.RoomMember
6970
import io.element.android.libraries.matrix.api.room.RoomMembershipState
@@ -397,7 +398,9 @@ internal fun ChangeRolesViewPreview(@PreviewParameter(ChangeRolesStateProvider::
397398
@PreviewsDayNight
398399
@Composable
399400
internal fun PendingMemberRowWithLongNamePreview() {
400-
ElementPreview {
401+
ElementPreview(
402+
drawableFallbackForImages = CommonDrawables.sample_avatar,
403+
) {
401404
MemberRow(
402405
avatarData = AvatarData("userId", "A very long name that should be truncated", "https://example.com/avatar.png", AvatarSize.UserListItem),
403406
name = "A very long name that should be truncated",

features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/ui/VerificationUserProfileContent.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
2828
import io.element.android.libraries.designsystem.preview.ElementPreview
2929
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
3030
import io.element.android.libraries.designsystem.theme.components.Text
31+
import io.element.android.libraries.designsystem.utils.CommonDrawables
3132
import io.element.android.libraries.matrix.api.core.UserId
3233

3334
@Composable
@@ -42,7 +43,8 @@ fun VerificationUserProfileContent(
4243
}
4344

4445
Row(
45-
modifier = modifier.fillMaxWidth()
46+
modifier = modifier
47+
.fillMaxWidth()
4648
.clip(RoundedCornerShape(8.dp))
4749
.background(ElementTheme.colors.bgSubtleSecondary)
4850
.padding(12.dp),
@@ -64,7 +66,9 @@ fun VerificationUserProfileContent(
6466

6567
@PreviewsDayNight
6668
@Composable
67-
internal fun VerificationUserProfileContentPreview() = ElementPreview {
69+
internal fun VerificationUserProfileContentPreview() = ElementPreview(
70+
drawableFallbackForImages = CommonDrawables.sample_avatar
71+
) {
6872
VerificationUserProfileContent(
6973
userId = UserId("@alice:example.com"),
7074
displayName = "Alice",

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ serialization_json = "1.8.1"
3838

3939
#other
4040
detekt = "1.23.8"
41-
coil = "3.1.0"
41+
coil = "3.2.0"
4242
showkase = "1.0.3"
4343
appyx = "1.7.1"
4444
sqldelight = "2.1.0"

libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/Bloom.kt

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,11 @@ import androidx.compose.ui.graphics.nativeCanvas
5959
import androidx.compose.ui.graphics.painter.BitmapPainter
6060
import androidx.compose.ui.graphics.toArgb
6161
import androidx.compose.ui.input.nestedscroll.nestedScroll
62-
import androidx.compose.ui.layout.ContentScale
6362
import androidx.compose.ui.layout.onSizeChanged
6463
import androidx.compose.ui.platform.LocalContext
6564
import androidx.compose.ui.platform.LocalDensity
6665
import androidx.compose.ui.platform.LocalFontFamilyResolver
6766
import androidx.compose.ui.platform.LocalLayoutDirection
68-
import androidx.compose.ui.res.painterResource
6967
import androidx.compose.ui.text.TextStyle
7068
import androidx.compose.ui.text.font.FontFamily
7169
import androidx.compose.ui.text.font.FontStyle
@@ -92,9 +90,10 @@ import com.airbnb.android.showkase.annotation.ShowkaseComposable
9290
import com.vanniktech.blurhash.BlurHash
9391
import io.element.android.compound.theme.ElementTheme
9492
import io.element.android.compound.tokens.generated.CompoundIcons
95-
import io.element.android.libraries.designsystem.R
9693
import io.element.android.libraries.designsystem.colors.AvatarColorsProvider
94+
import io.element.android.libraries.designsystem.components.avatar.Avatar
9795
import io.element.android.libraries.designsystem.components.avatar.AvatarData
96+
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
9897
import io.element.android.libraries.designsystem.preview.ElementPreview
9998
import io.element.android.libraries.designsystem.preview.PreviewGroup
10099
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
@@ -103,6 +102,7 @@ import io.element.android.libraries.designsystem.theme.components.Icon
103102
import io.element.android.libraries.designsystem.theme.components.MediumTopAppBar
104103
import io.element.android.libraries.designsystem.theme.components.Scaffold
105104
import io.element.android.libraries.designsystem.theme.components.Text
105+
import io.element.android.libraries.designsystem.utils.CommonDrawables
106106
import kotlinx.collections.immutable.ImmutableList
107107
import kotlinx.collections.immutable.persistentListOf
108108
import kotlinx.coroutines.Dispatchers
@@ -465,7 +465,9 @@ internal fun BloomPreview() {
465465
var topAppBarHeight by remember { mutableIntStateOf(-1) }
466466
val topAppBarState = rememberTopAppBarState()
467467
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarState)
468-
ElementPreview {
468+
ElementPreview(
469+
drawableFallbackForImages = CommonDrawables.sample_avatar,
470+
) {
469471
Scaffold(
470472
modifier = Modifier
471473
.fillMaxSize()
@@ -489,14 +491,13 @@ internal fun BloomPreview() {
489491
scrolledContainerColor = Color.Black.copy(alpha = 0.05f),
490492
),
491493
navigationIcon = {
492-
Image(
493-
modifier = Modifier
494-
.padding(start = 8.dp)
495-
.size(32.dp)
496-
.clip(CircleShape),
497-
painter = painterResource(id = R.drawable.sample_avatar),
498-
contentScale = ContentScale.Crop,
499-
contentDescription = null
494+
Avatar(
495+
avatarData = AvatarData(
496+
id = "sample-avatar",
497+
name = "sample",
498+
url = "aURL",
499+
size = AvatarSize.CurrentUserTopBar,
500+
),
500501
)
501502
},
502503
actions = {

libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,23 @@ import androidx.compose.ui.Alignment
2121
import androidx.compose.ui.Modifier
2222
import androidx.compose.ui.draw.clip
2323
import androidx.compose.ui.layout.ContentScale
24-
import androidx.compose.ui.platform.LocalInspectionMode
2524
import androidx.compose.ui.semantics.clearAndSetSemantics
2625
import androidx.compose.ui.semantics.contentDescription
2726
import androidx.compose.ui.tooling.preview.Preview
2827
import androidx.compose.ui.tooling.preview.PreviewParameter
2928
import androidx.compose.ui.unit.Dp
3029
import androidx.compose.ui.unit.dp
3130
import androidx.compose.ui.unit.sp
32-
import coil3.compose.AsyncImage
3331
import coil3.compose.AsyncImagePainter
3432
import coil3.compose.SubcomposeAsyncImage
3533
import coil3.compose.SubcomposeAsyncImageContent
3634
import io.element.android.compound.theme.ElementTheme
3735
import io.element.android.libraries.designsystem.colors.AvatarColorsProvider
3836
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
3937
import io.element.android.libraries.designsystem.preview.PreviewGroup
40-
import io.element.android.libraries.designsystem.preview.debugPlaceholderAvatar
4138
import io.element.android.libraries.designsystem.text.toSp
4239
import io.element.android.libraries.designsystem.theme.components.Text
40+
import io.element.android.libraries.designsystem.utils.CommonDrawables
4341
import timber.log.Timber
4442

4543
@Composable
@@ -79,41 +77,30 @@ private fun ImageAvatar(
7977
modifier: Modifier = Modifier,
8078
contentDescription: String? = null,
8179
) {
82-
if (LocalInspectionMode.current) {
83-
// For compose previews, use debugPlaceholderAvatar()
84-
// instead of falling back to initials avatar on load failure
85-
AsyncImage(
86-
model = avatarData,
87-
contentDescription = contentDescription,
88-
placeholder = debugPlaceholderAvatar(),
89-
modifier = modifier
90-
)
91-
} else {
92-
SubcomposeAsyncImage(
93-
model = avatarData,
94-
contentDescription = contentDescription,
95-
contentScale = ContentScale.Crop,
96-
modifier = modifier
97-
) {
98-
val collectedState by painter.state.collectAsState()
99-
when (val state = collectedState) {
100-
is AsyncImagePainter.State.Success -> SubcomposeAsyncImageContent()
101-
is AsyncImagePainter.State.Error -> {
102-
SideEffect {
103-
Timber.e(state.result.throwable, "Error loading avatar $state\n${state.result}")
104-
}
105-
InitialsAvatar(
106-
avatarData = avatarData,
107-
forcedAvatarSize = forcedAvatarSize,
108-
contentDescription = contentDescription,
109-
)
80+
SubcomposeAsyncImage(
81+
model = avatarData,
82+
contentDescription = contentDescription,
83+
contentScale = ContentScale.Crop,
84+
modifier = modifier
85+
) {
86+
val collectedState by painter.state.collectAsState()
87+
when (val state = collectedState) {
88+
is AsyncImagePainter.State.Success -> SubcomposeAsyncImageContent()
89+
is AsyncImagePainter.State.Error -> {
90+
SideEffect {
91+
Timber.e(state.result.throwable, "Error loading avatar $state\n${state.result}")
11092
}
111-
else -> InitialsAvatar(
93+
InitialsAvatar(
11294
avatarData = avatarData,
11395
forcedAvatarSize = forcedAvatarSize,
11496
contentDescription = contentDescription,
11597
)
11698
}
99+
else -> InitialsAvatar(
100+
avatarData = avatarData,
101+
forcedAvatarSize = forcedAvatarSize,
102+
contentDescription = contentDescription,
103+
)
117104
}
118105
}
119106
}
@@ -151,7 +138,9 @@ private fun InitialsAvatar(
151138
@Preview(group = PreviewGroup.Avatars)
152139
@Composable
153140
internal fun AvatarPreview(@PreviewParameter(AvatarDataProvider::class) avatarData: AvatarData) =
154-
ElementThemedPreview {
141+
ElementThemedPreview(
142+
drawableFallbackForImages = CommonDrawables.sample_avatar,
143+
) {
155144
Row(
156145
verticalAlignment = Alignment.CenterVertically,
157146
horizontalArrangement = Arrangement.spacedBy(16.dp)

libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/preview/ElementPreview.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,36 @@
77

88
package io.element.android.libraries.designsystem.preview
99

10+
import androidx.annotation.DrawableRes
1011
import androidx.compose.foundation.isSystemInDarkTheme
1112
import androidx.compose.runtime.Composable
1213
import androidx.compose.runtime.CompositionLocalProvider
14+
import androidx.compose.ui.platform.LocalContext
15+
import androidx.core.content.res.ResourcesCompat
1316
import coil3.annotation.ExperimentalCoilApi
17+
import coil3.asImage
1418
import coil3.compose.AsyncImagePreviewHandler
1519
import coil3.compose.LocalAsyncImagePreviewHandler
1620
import io.element.android.compound.theme.ElementTheme
1721
import io.element.android.libraries.designsystem.theme.components.Surface
22+
import io.element.android.libraries.designsystem.utils.CommonDrawables
1823

1924
@OptIn(ExperimentalCoilApi::class)
2025
@Composable
2126
@Suppress("ModifierMissing")
2227
fun ElementPreview(
2328
darkTheme: Boolean = isSystemInDarkTheme(),
2429
showBackground: Boolean = true,
30+
@DrawableRes
31+
drawableFallbackForImages: Int = CommonDrawables.sample_background,
2532
content: @Composable () -> Unit
2633
) {
27-
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides AsyncImagePreviewHandler { null }) {
34+
val context = LocalContext.current
35+
CompositionLocalProvider(
36+
LocalAsyncImagePreviewHandler provides AsyncImagePreviewHandler {
37+
ResourcesCompat.getDrawable(context.resources, drawableFallbackForImages, null)!!.asImage()
38+
}
39+
) {
2840
ElementTheme(darkTheme = darkTheme) {
2941
if (showBackground) {
3042
// If we have a proper contentColor applied we need a Surface instead of a Box

0 commit comments

Comments
 (0)