|
6 | 6 | */ |
7 | 7 | package com.nextcloud.talk.mediaviewer.activities |
8 | 8 |
|
| 9 | +import android.graphics.drawable.Drawable |
9 | 10 | import android.util.Log |
10 | 11 | import android.view.View |
11 | 12 | import android.view.ViewGroup.MarginLayoutParams |
@@ -74,18 +75,21 @@ import androidx.media3.exoplayer.ExoPlayer |
74 | 75 | import androidx.media3.ui.DefaultTimeBar |
75 | 76 | import androidx.media3.ui.PlayerView |
76 | 77 | import coil.compose.AsyncImage |
| 78 | +import coil.imageLoader |
| 79 | +import coil.request.ImageRequest |
| 80 | +import coil.request.SuccessResult |
77 | 81 | import com.github.chrisbanes.photoview.PhotoView |
78 | 82 | import com.nextcloud.talk.R |
79 | 83 | import com.nextcloud.talk.components.StandardAppBar |
80 | 84 | import com.nextcloud.talk.mediaviewer.model.MediaViewerGroup |
81 | 85 | import com.nextcloud.talk.mediaviewer.model.MediaViewerItem |
82 | 86 | import com.nextcloud.talk.mediaviewer.viewmodels.MediaViewerViewModel |
83 | | -import com.nextcloud.talk.utils.BitmapShrinker |
84 | 87 | import com.nextcloud.talk.utils.DateConstants |
85 | 88 | import com.nextcloud.talk.utils.DateUtils |
86 | 89 | import com.nextcloud.talk.utils.DrawableUtils |
87 | 90 | import com.nextcloud.talk.utils.Mimetype |
88 | 91 | import com.nextcloud.talk.utils.MimetypeUtils |
| 92 | +import java.io.File |
89 | 93 | import kotlinx.coroutines.launch |
90 | 94 | import pl.droidsonroids.gif.GifDrawable |
91 | 95 | import pl.droidsonroids.gif.GifImageView |
@@ -348,26 +352,33 @@ private fun GifPage(localPath: String, onToggleControls: () -> Unit) { |
348 | 352 |
|
349 | 353 | @Composable |
350 | 354 | private fun ImagePage(localPath: String, onToggleControls: () -> Unit) { |
| 355 | + val context = LocalContext.current |
| 356 | + var drawable by remember(localPath) { mutableStateOf<Drawable?>(null) } |
| 357 | + |
| 358 | + LaunchedEffect(localPath) { |
| 359 | + val displayMetrics = context.resources.displayMetrics |
| 360 | + val request = ImageRequest.Builder(context) |
| 361 | + .data(File(localPath)) |
| 362 | + .size(displayMetrics.widthPixels * 2, displayMetrics.heightPixels * 2) |
| 363 | + .build() |
| 364 | + val result = context.imageLoader.execute(request) |
| 365 | + if (result is SuccessResult) { |
| 366 | + drawable = result.drawable |
| 367 | + } else { |
| 368 | + Log.e(TAG, "image could not be decoded from path: $localPath") |
| 369 | + } |
| 370 | + } |
| 371 | + |
351 | 372 | AndroidView( |
352 | 373 | factory = { ctx -> |
353 | 374 | PhotoView(ctx).apply { |
354 | 375 | maximumScale = MAX_SCALE |
355 | 376 | mediumScale = MEDIUM_SCALE |
356 | 377 | setOnPhotoTapListener { _, _, _ -> onToggleControls() } |
357 | 378 | setOnOutsidePhotoTapListener { onToggleControls() } |
358 | | - val displayMetrics = ctx.resources.displayMetrics |
359 | | - val bitmap = BitmapShrinker.shrinkBitmap( |
360 | | - localPath, |
361 | | - displayMetrics.widthPixels * 2, |
362 | | - displayMetrics.heightPixels * 2 |
363 | | - ) |
364 | | - if (bitmap != null) { |
365 | | - setImageBitmap(bitmap) |
366 | | - } else { |
367 | | - Log.e(TAG, "bitmap could not be decoded from path: $localPath") |
368 | | - } |
369 | 379 | } |
370 | 380 | }, |
| 381 | + update = { photoView -> drawable?.let { photoView.setImageDrawable(it) } }, |
371 | 382 | modifier = Modifier.fillMaxSize() |
372 | 383 | ) |
373 | 384 | } |
|
0 commit comments