From 6890f5c44884b03b636b22bf50e41d614726a7e8 Mon Sep 17 00:00:00 2001 From: andrew Date: Tue, 4 Jul 2023 09:31:14 +0930 Subject: [PATCH] Add image click listener --- .../conversation/v2/MessageDetailActivity.kt | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt index 247505659..3d9e1fa45 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/MessageDetailActivity.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.conversation.v2 import android.content.Intent import android.os.Bundle import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -51,12 +52,14 @@ import network.loki.messenger.R import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment import org.session.libsession.utilities.Util import org.session.libsession.utilities.recipients.Recipient +import org.thoughtcrime.securesms.MediaPreviewActivity import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.components.ProfilePictureView import org.thoughtcrime.securesms.database.AttachmentDatabase import org.thoughtcrime.securesms.database.Storage import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.database.model.MmsMessageRecord + import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.mms.Slide import org.thoughtcrime.securesms.ui.AppTheme @@ -69,6 +72,7 @@ import org.thoughtcrime.securesms.ui.ItemButton import org.thoughtcrime.securesms.ui.SessionHorizontalPagerIndicator import org.thoughtcrime.securesms.ui.colorDestructive import org.thoughtcrime.securesms.ui.destructiveButtonColors +import org.thoughtcrime.securesms.util.ActivityDispatcher import java.util.* import java.util.concurrent.TimeUnit import javax.inject.Inject @@ -106,6 +110,7 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { _details.value = value?.run { MessageDetails( + mmsRecord = mmsRecord, attachments = slides.map { slide -> val duration = slide.takeIf { it.hasAudio() } ?.let { it.asAttachment() as? DatabaseAttachment } @@ -190,7 +195,11 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { details, onReply = { setResultAndFinish(ON_REPLY) }, onResend = { setResultAndFinish(ON_RESEND) }, - onDelete = { setResultAndFinish(ON_DELETE) } + onDelete = { setResultAndFinish(ON_DELETE) }, + onClickImage = { slide -> + MediaPreviewActivity.getPreviewIntent(this, slide, details.mmsRecord, details.sender) + .let(::startActivity) + } ) } @@ -206,6 +215,8 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { data class MessageDetails( val attachments: List = emptyList(), + val mmsRecord: MmsMessageRecord? = null, + val sent: TitledText? = null, val received: TitledText? = null, val error: TitledText? = null, @@ -238,6 +249,7 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { onReply: () -> Unit = {}, onResend: () -> Unit = {}, onDelete: () -> Unit = {}, + onClickImage: (Slide) -> Unit = {}, ) { messageDetails.apply { AppTheme { @@ -245,7 +257,7 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { modifier = Modifier.verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.spacedBy(16.dp) ) { - Attachments(attachments) + Attachments(attachments) { onClickImage(it) } if (sent != null || received != null || senderInfo != null) CellWithPaddingAndMargin { Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { sent?.let { titledText(it) } @@ -335,10 +347,10 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { } @Composable - fun Attachments(attachments: List) { + fun Attachments(attachments: List, onClick: (Slide) -> Unit) { val slide = attachments.firstOrNull()?.slide ?: return when { - slide.hasImage() -> ImageAttachments(attachments) + slide.hasImage() -> ImageAttachments(attachments) { onClick(it) } } } @@ -347,7 +359,7 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { ExperimentalGlideComposeApi::class, ) @Composable - fun ImageAttachments(attachments: List) { + fun ImageAttachments(attachments: List, onClick: (Slide) -> Unit) { val imageAttachments = attachments.filter { it.slide.hasImage() } val pagerState = rememberPagerState { imageAttachments.size } @@ -360,10 +372,13 @@ class MessageDetailActivity : PassphraseRequiredActionBarActivity() { Box(modifier = Modifier.weight(1f)) { CellNoMargin { HorizontalPager(state = pagerState) { i -> - imageAttachments[i].slide.apply { + val slide = imageAttachments[i].slide + slide.apply { GlideImage( contentScale = ContentScale.Crop, - modifier = Modifier.aspectRatio(1f), + modifier = Modifier + .aspectRatio(1f) + .clickable { onClick(slide) }, model = uri, contentDescription = fileName.orNull() ?: "image" )