diff --git a/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt b/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt index f5e7a28eb..33893662f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/Amethyst.kt @@ -53,7 +53,7 @@ class Amethyst : Application() { newCache } - private val imageCache: DiskCache by lazy { + val coilCache: DiskCache by lazy { DiskCache.Builder() .directory(applicationContext.safeCacheDir.resolve("image_cache")) .maxSizePercent(0.2) @@ -85,7 +85,7 @@ class Amethyst : Application() { } fun imageLoaderBuilder(): ImageLoader.Builder { - return ImageLoader.Builder(applicationContext).diskCache { imageCache } + return ImageLoader.Builder(applicationContext).diskCache { coilCache } } fun encryptedStorage(npub: String? = null): EncryptedSharedPreferences { 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 4856148f1..9de3bc620 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 @@ -104,7 +104,7 @@ import androidx.core.view.ViewCompat import coil.annotation.ExperimentalCoilApi import coil.compose.AsyncImage import coil.compose.AsyncImagePainter -import coil.imageLoader +import com.vitorpamplona.amethyst.Amethyst import com.vitorpamplona.amethyst.R import com.vitorpamplona.amethyst.commons.BaseMediaContent import com.vitorpamplona.amethyst.commons.MediaLocalImage @@ -305,7 +305,7 @@ private fun UrlImageView( BoxWithConstraints(contentAlignment = Alignment.Center) { val showImage = remember { - mutableStateOf( + mutableStateOf( if (alwayShowImage) true else accountViewModel.settings.showImages.value, ) } @@ -313,19 +313,9 @@ private fun UrlImageView( val myModifier = remember { mainImageModifier.widthIn(max = maxWidth).heightIn(max = maxHeight) - /* Is this necessary? It makes images bleed into other pages - .run { - aspectRatio(content.dim)?.let { ratio -> - this.aspectRatio(ratio, false) - } ?: this - } - */ } - val contentScale = - remember { - if (maxHeight.isFinite) ContentScale.Fit else ContentScale.FillWidth - } + val contentScale = if (maxHeight.isFinite) ContentScale.Fit else ContentScale.FillWidth val verifierModifier = if (topPaddingForControllers.isSpecified) { @@ -342,7 +332,9 @@ private fun UrlImageView( contentDescription = content.description, contentScale = contentScale, modifier = myModifier, - onState = { painterState.value = it }, + onState = { + painterState.value = it + }, ) } @@ -489,7 +481,7 @@ private fun AddedImageFeatures( verifiedModifier: Modifier, showImage: MutableState, ) { - val ratio = remember { aspectRatio(content.dim) } + val ratio = remember(content.url) { aspectRatio(content.dim) } if (!showImage.value) { if (content.blurhash != null && ratio != null) { @@ -509,7 +501,7 @@ private fun AddedImageFeatures( ImageUrlWithDownloadButton(content.url, showImage) } } else { - var verifiedHash by remember { mutableStateOf(null) } + var verifiedHash by remember(content.url) { mutableStateOf(null) } when (painter.value) { null, @@ -537,10 +529,9 @@ private fun AddedImageFeatures( } is AsyncImagePainter.State.Success -> { if (content.hash != null) { - val context = LocalContext.current LaunchedEffect(key1 = content.url) { launch(Dispatchers.IO) { - val newVerifiedHash = verifyHash(content, context) + val newVerifiedHash = verifyHash(content) if (newVerifiedHash != verifiedHash) { verifiedHash = newVerifiedHash } @@ -1002,13 +993,10 @@ private fun RenderImageOrVideo( } @OptIn(ExperimentalCoilApi::class) -private fun verifyHash( - content: MediaUrlContent, - context: Context, -): Boolean? { +private suspend fun verifyHash(content: MediaUrlContent): Boolean? { if (content.hash == null) return null - context.imageLoader.diskCache?.get(content.url)?.use { snapshot -> + Amethyst.instance.coilCache.openSnapshot(content.url)?.use { snapshot -> val hash = CryptoUtils.sha256(snapshot.data.toFile().readBytes()).toHexKey() Log.d("Image Hash Verification", "$hash == ${content.hash}")