Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package com.nextcloud.talk.mediaviewer.activities

import android.graphics.drawable.Drawable
import android.util.Log
import android.view.View
import android.view.ViewGroup.MarginLayoutParams
Expand Down Expand Up @@ -74,18 +75,21 @@ import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.DefaultTimeBar
import androidx.media3.ui.PlayerView
import coil.compose.AsyncImage
import coil.imageLoader
import coil.request.ImageRequest
import coil.request.SuccessResult
import com.github.chrisbanes.photoview.PhotoView
import com.nextcloud.talk.R
import com.nextcloud.talk.components.StandardAppBar
import com.nextcloud.talk.mediaviewer.model.MediaViewerGroup
import com.nextcloud.talk.mediaviewer.model.MediaViewerItem
import com.nextcloud.talk.mediaviewer.viewmodels.MediaViewerViewModel
import com.nextcloud.talk.utils.BitmapShrinker
import com.nextcloud.talk.utils.DateConstants
import com.nextcloud.talk.utils.DateUtils
import com.nextcloud.talk.utils.DrawableUtils
import com.nextcloud.talk.utils.Mimetype
import com.nextcloud.talk.utils.MimetypeUtils
import java.io.File
import kotlinx.coroutines.launch
import pl.droidsonroids.gif.GifDrawable
import pl.droidsonroids.gif.GifImageView
Expand Down Expand Up @@ -348,26 +352,33 @@ private fun GifPage(localPath: String, onToggleControls: () -> Unit) {

@Composable
private fun ImagePage(localPath: String, onToggleControls: () -> Unit) {
val context = LocalContext.current
var drawable by remember(localPath) { mutableStateOf<Drawable?>(null) }

LaunchedEffect(localPath) {
val displayMetrics = context.resources.displayMetrics
val request = ImageRequest.Builder(context)
.data(File(localPath))
.size(displayMetrics.widthPixels * 2, displayMetrics.heightPixels * 2)
.build()
val result = context.imageLoader.execute(request)
if (result is SuccessResult) {
drawable = result.drawable
} else {
Log.e(TAG, "image could not be decoded from path: $localPath")
}
}

AndroidView(
factory = { ctx ->
PhotoView(ctx).apply {
maximumScale = MAX_SCALE
mediumScale = MEDIUM_SCALE
setOnPhotoTapListener { _, _, _ -> onToggleControls() }
setOnOutsidePhotoTapListener { onToggleControls() }
val displayMetrics = ctx.resources.displayMetrics
val bitmap = BitmapShrinker.shrinkBitmap(
localPath,
displayMetrics.widthPixels * 2,
displayMetrics.heightPixels * 2
)
if (bitmap != null) {
setImageBitmap(bitmap)
} else {
Log.e(TAG, "bitmap could not be decoded from path: $localPath")
}
}
},
update = { photoView -> drawable?.let { photoView.setImageDrawable(it) } },
modifier = Modifier.fillMaxSize()
)
}
Expand Down
Loading