From e41da35a02713a7b9400bcb78a11d1f7c71f05b0 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 28 Mar 2023 18:13:00 -0400 Subject: [PATCH] Adds image url when previews can't be loaded. --- .../ui/components/ZoomableImageView.kt | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt index 84486200d..8910d83a6 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableImageView.kt @@ -28,10 +28,12 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import coil.compose.AsyncImage +import coil.compose.AsyncImagePainter import com.google.accompanist.pager.ExperimentalPagerApi import com.google.accompanist.pager.PagerState import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.ui.actions.CloseButton +import com.vitorpamplona.amethyst.ui.actions.LoadingAnimation import com.vitorpamplona.amethyst.ui.actions.SaveToGallery import net.engawapg.lib.zoomable.rememberZoomState import net.engawapg.lib.zoomable.zoomable @@ -46,6 +48,11 @@ fun ZoomableImageView(word: String, images: List = listOf(word)) { mutableStateOf(false) } + // store the dialog open or close state + var imageState by remember { + mutableStateOf(null) + } + if (imageExtension.matcher(word).matches()) { AsyncImage( model = word, @@ -63,8 +70,19 @@ fun ZoomableImageView(word: String, images: List = listOf(word)) { .combinedClickable( onClick = { dialogOpen = true }, onLongClick = { clipboardManager.setText(AnnotatedString(word)) } - ) + ), + onLoading = { + imageState = it + }, + onSuccess = { + imageState = it + } ) + + if (imageState !is AsyncImagePainter.State.Success) { + ClickableUrl(urlText = "$word ", url = word) + LoadingAnimation(indicatorSize = 15.dp) + } } else { VideoView(word) { dialogOpen = true } } @@ -86,7 +104,9 @@ fun ZoomableImageDialog(imageUrl: String, allImages: List = listOf(image var pagerState: PagerState = remember { PagerState() } Row( - modifier = Modifier.padding(10.dp).fillMaxWidth(), + modifier = Modifier + .padding(10.dp) + .fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) {