From 6403bd21f8ab9194929aa24697f7b4b48e79f4b6 Mon Sep 17 00:00:00 2001 From: maxmoney21m Date: Tue, 7 Mar 2023 23:46:38 +0800 Subject: [PATCH] Add async image proxy for robohash images --- .../amethyst/ui/components/AsyncImageProxy.kt | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/AsyncImageProxy.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/AsyncImageProxy.kt index 8e4dbcd33..2a3fb994a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/AsyncImageProxy.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/AsyncImageProxy.kt @@ -1,6 +1,10 @@ package com.vitorpamplona.amethyst.ui.components import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter @@ -26,6 +30,48 @@ data class ResizeImage(val url: String?, val size: Dp) { } } +@Composable fun AsyncUserImageProxy( + pubkeyHex: String, + model: ResizeImage, + contentDescription: String?, + modifier: Modifier = Modifier, + alignment: Alignment = Alignment.Center, + contentScale: ContentScale = ContentScale.Fit, + alpha: Float = DefaultAlpha, + colorFilter: ColorFilter? = null, + filterQuality: FilterQuality = DrawScope.DefaultFilterQuality, +) { + var loading by remember { mutableStateOf(false) } + var error by remember { mutableStateOf(false) } + + if (model.url == null || loading || error) { + RoboHashAsyncImage( + message = pubkeyHex, + contentDescription = contentDescription, + modifier = modifier, + alignment = alignment, + contentScale = contentScale, + alpha = alpha, + colorFilter = colorFilter, + filterQuality = filterQuality, + ) + } else { + AsyncImage( + model = model.proxyUrl(), + contentDescription = contentDescription, + modifier = modifier, + onLoading = { loading = true }, + onSuccess = { loading = false; error = false }, + onError = { loading = false; error = true }, + alignment = alignment, + contentScale = contentScale, + alpha = alpha, + colorFilter = colorFilter, + filterQuality = filterQuality + ) + } +} + @Composable fun AsyncImageProxy( model: ResizeImage,