From a8f5ae63fde30eb38bdabbfc4781bce15459300c Mon Sep 17 00:00:00 2001 From: k1ngsterr1 Date: Wed, 28 Jan 2026 01:14:29 +0500 Subject: [PATCH] feat: Add loading of blur preview for images in ZoomableImage component --- .../ui/chats/components/ImageViewerScreen.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/components/ImageViewerScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/components/ImageViewerScreen.kt index 557d5c5..74ba8ad 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/components/ImageViewerScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/components/ImageViewerScreen.kt @@ -300,6 +300,7 @@ private fun ZoomableImage( val scope = rememberCoroutineScope() var bitmap by remember { mutableStateOf(null) } + var previewBitmap by remember { mutableStateOf(null) } var isLoading by remember { mutableStateOf(true) } var loadError by remember { mutableStateOf(null) } @@ -331,6 +332,21 @@ private fun ZoomableImage( val minScale = 1f val maxScale = 5f + // Load preview first + LaunchedEffect(image.preview) { + withContext(Dispatchers.IO) { + try { + // Декодируем blur preview (после ::) + if (image.preview.contains("::")) { + val blurPart = image.preview.substringAfter("::") + previewBitmap = base64ToBitmapSafe(blurPart) + } + } catch (e: Exception) { + Log.e(TAG, "Failed to load preview: ${e.message}") + } + } + } + // Load image LaunchedEffect(image.attachmentId) { isLoading = true @@ -514,6 +530,16 @@ private fun ZoomableImage( }, contentAlignment = Alignment.Center ) { + // Blur preview в фоне + if (previewBitmap != null && bitmap == null) { + Image( + bitmap = previewBitmap!!.asImageBitmap(), + contentDescription = "Preview", + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Fit + ) + } + when { isLoading -> { CircularProgressIndicator(