diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/ui/LocationPinMarkers.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/ui/LocationPinMarkers.kt index ad3a4c48e1..6fed056a28 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/ui/LocationPinMarkers.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/ui/LocationPinMarkers.kt @@ -182,7 +182,11 @@ private fun LocationPinMarkerLayer( @Composable private fun rememberLocationPinImage(variant: PinVariant): ImageBitmap { val bitmap = rememberMarkerBitmap(variant) { - LocationPin(variant = variant) + LocationPin( + variant = variant, + // Disable as it doesn't work with the rememberMarkerBitmap method + allowHardwareBitmapRendering = false + ) } return bitmap.asImageBitmap() } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LocationPin.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LocationPin.kt index 60bccc1228..60f83ffea1 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LocationPin.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/LocationPin.kt @@ -25,12 +25,13 @@ import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.Fill import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.unit.dp +import coil3.request.allowHardware import io.element.android.compound.theme.ElementTheme -import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.avatar.AvatarType import io.element.android.libraries.designsystem.components.avatar.avatarShape +import io.element.android.libraries.designsystem.components.avatar.internal.ImageAvatar import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -61,6 +62,7 @@ private val CONTENT_OFFSET = 5.dp fun LocationPin( variant: PinVariant, modifier: Modifier = Modifier, + allowHardwareBitmapRendering: Boolean = true, ) { val colors = LocationPinColors.fromVariant(variant) Box( @@ -80,12 +82,16 @@ fun LocationPin( when (variant) { is PinVariant.UserLocation -> { - Avatar( + val avatarShape = AvatarType.User.avatarShape() + ImageAvatar( avatarData = variant.avatarData, forcedAvatarSize = avatarSize, - avatarType = AvatarType.User, + avatarShape = avatarShape, modifier = contentModifier - .border(width = 1.dp, color = colors.avatarStoke, shape = AvatarType.User.avatarShape()), + .border(width = 1.dp, color = colors.avatarStoke, shape = avatarShape), + configureRequest = { builder -> + builder.allowHardware(allowHardwareBitmapRendering) + } ) } PinVariant.PinnedLocation, PinVariant.StaleLocation -> { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/ImageAvatar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/ImageAvatar.kt index da57fbcbe1..10136bb5c1 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/ImageAvatar.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/internal/ImageAvatar.kt @@ -17,10 +17,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Shape import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.Dp import coil3.compose.AsyncImagePainter import coil3.compose.SubcomposeAsyncImage import coil3.compose.SubcomposeAsyncImageContent +import coil3.request.ImageRequest import io.element.android.libraries.designsystem.components.avatar.AvatarData import timber.log.Timber @@ -31,10 +33,16 @@ internal fun ImageAvatar( forcedAvatarSize: Dp?, modifier: Modifier = Modifier, contentDescription: String? = null, + configureRequest: (ImageRequest.Builder) -> ImageRequest.Builder = { it }, ) { val size = forcedAvatarSize ?: avatarData.size.dp + val request = ImageRequest.Builder(LocalContext.current) + .data(avatarData) + .let(configureRequest) + .build() + SubcomposeAsyncImage( - model = avatarData, + model = request, contentDescription = contentDescription, contentScale = ContentScale.Crop, modifier = modifier