From 5bb983ba5af52ed2999d946ee7636803ef6d1242 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Mon, 11 Dec 2023 17:57:19 -0500 Subject: [PATCH] Adding blurhash when images are not supposed to be downloaded. --- .../amethyst/ui/components/VideoView.kt | 24 ++++++++++++++++++- .../ui/components/ZoomableContentView.kt | 14 ++++++++++- .../vitorpamplona/amethyst/ui/note/Icons.kt | 4 ++-- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt index 17218010d..53a0fdacb 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/VideoView.kt @@ -22,6 +22,7 @@ import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -70,6 +71,7 @@ import androidx.media3.ui.AspectRatioFrameLayout import androidx.media3.ui.PlayerView import com.linc.audiowaveform.infiniteLinearGradient import com.vitorpamplona.amethyst.service.playback.PlaybackClientController +import com.vitorpamplona.amethyst.ui.note.DownloadForOfflineIcon import com.vitorpamplona.amethyst.ui.note.LyricsIcon import com.vitorpamplona.amethyst.ui.note.LyricsOffIcon import com.vitorpamplona.amethyst.ui.note.MuteIcon @@ -79,6 +81,7 @@ import com.vitorpamplona.amethyst.ui.theme.PinBottomIconSize import com.vitorpamplona.amethyst.ui.theme.Size0dp import com.vitorpamplona.amethyst.ui.theme.Size22Modifier import com.vitorpamplona.amethyst.ui.theme.Size50Modifier +import com.vitorpamplona.amethyst.ui.theme.Size75dp import com.vitorpamplona.amethyst.ui.theme.VolumeBottomIconSize import com.vitorpamplona.amethyst.ui.theme.imageModifier import kotlinx.collections.immutable.ImmutableList @@ -180,7 +183,26 @@ fun VideoView( } if (!automaticallyStartPlayback.value) { - ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback) + if (blurhash != null) { + val ratio = aspectRatio(dimensions) + val modifier = if (ratio != null && roundedCorner) { + Modifier.aspectRatio(ratio) + } else { + Modifier + } + + Box(modifier, contentAlignment = Alignment.Center) { + DisplayBlurHash(blurhash, null, ContentScale.Crop, MaterialTheme.colorScheme.imageModifier) + IconButton( + modifier = Modifier.size(Size75dp), + onClick = { automaticallyStartPlayback.value = true } + ) { + DownloadForOfflineIcon(Size75dp, Color.White) + } + } + } else { + ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback) + } } else { val ratio = aspectRatio(dimensions) val modifier = if (ratio != null && roundedCorner) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt index 984118e96..0c0c9cec7 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/components/ZoomableContentView.kt @@ -58,6 +58,7 @@ 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.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalConfiguration @@ -102,6 +103,7 @@ import com.vitorpamplona.amethyst.ui.theme.Size24dp import com.vitorpamplona.amethyst.ui.theme.Size30dp import com.vitorpamplona.amethyst.ui.theme.Size55dp import com.vitorpamplona.amethyst.ui.theme.Size5dp +import com.vitorpamplona.amethyst.ui.theme.Size75dp import com.vitorpamplona.amethyst.ui.theme.StdHorzSpacer import com.vitorpamplona.amethyst.ui.theme.imageModifier import com.vitorpamplona.quartz.crypto.CryptoUtils @@ -528,7 +530,17 @@ private fun AddedImageFeatures( showImage: MutableState ) { if (!showImage.value) { - ImageUrlWithDownloadButton(content.url, showImage) + if (content.blurhash != null) { + DisplayBlurHash(content.blurhash, content.description, contentScale, myModifier) + IconButton( + modifier = Modifier.size(Size75dp), + onClick = { showImage.value = true } + ) { + DownloadForOfflineIcon(Size75dp, Color.White) + } + } else { + ImageUrlWithDownloadButton(content.url, showImage) + } } else { var verifiedHash by remember { mutableStateOf(null) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/Icons.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/Icons.kt index bb750a37c..e7420c249 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/Icons.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/Icons.kt @@ -78,12 +78,12 @@ fun MessageIcon(modifier: Modifier) { } @Composable -fun DownloadForOfflineIcon(iconSize: Dp) { +fun DownloadForOfflineIcon(iconSize: Dp, tint: Color = MaterialTheme.colorScheme.primary) { Icon( imageVector = Icons.Default.DownloadForOffline, null, modifier = remember(iconSize) { Modifier.size(iconSize) }, - tint = MaterialTheme.colorScheme.primary + tint = tint ) }