From e5c04d9cc8bb92e0092518022928e3b4a7f0382b Mon Sep 17 00:00:00 2001 From: sim Date: Fri, 18 Mar 2022 00:47:08 +0100 Subject: [PATCH] Show stickers on click Play animated stickers Signed-off-by: sim --- changelog.d/5572.misc | 2 ++ .../home/room/detail/TimelineFragment.kt | 9 +++-- .../timeline/TimelineEventController.kt | 6 +++- .../timeline/factory/MessageItemFactory.kt | 5 ++- .../media/RoomEventsAttachmentProvider.kt | 33 ++++++++++++++++++- 5 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 changelog.d/5572.misc diff --git a/changelog.d/5572.misc b/changelog.d/5572.misc new file mode 100644 index 0000000000..d37d8fe07d --- /dev/null +++ b/changelog.d/5572.misc @@ -0,0 +1,2 @@ +Show stickers on click + diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt index ab64f40159..08622a7671 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt @@ -177,6 +177,7 @@ import im.vector.app.features.html.PillsPostProcessor import im.vector.app.features.invite.VectorInviteView import im.vector.app.features.location.LocationSharingMode import im.vector.app.features.location.toLocationData +import im.vector.app.features.media.AttachmentData import im.vector.app.features.media.ImageContentRenderer import im.vector.app.features.media.VideoContentRenderer import im.vector.app.features.notifications.NotificationDrawerManager @@ -1868,12 +1869,16 @@ class TimelineFragment @Inject constructor( vectorBaseActivity.notImplemented("encrypted message click") } - override fun onImageMessageClicked(messageImageContent: MessageImageInfoContent, mediaData: ImageContentRenderer.Data, view: View) { + override fun onImageMessageClicked(messageImageContent: MessageImageInfoContent, + mediaData: ImageContentRenderer.Data, + view: View, + inMemory: List) { navigator.openMediaViewer( activity = requireActivity(), roomId = timelineArgs.roomId, mediaData = mediaData, - view = view + view = view, + inMemory = inMemory ) { pairs -> pairs.add(Pair(views.roomToolbar, ViewCompat.getTransitionName(views.roomToolbar) ?: "")) pairs.add(Pair(views.composerLayout, ViewCompat.getTransitionName(views.composerLayout) ?: "")) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index fb47fb5136..a14888362b 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -57,6 +57,7 @@ import im.vector.app.features.home.room.detail.timeline.item.ReactionsSummaryEve import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptsItem import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlRetriever +import im.vector.app.features.media.AttachmentData import im.vector.app.features.media.ImageContentRenderer import im.vector.app.features.media.VideoContentRenderer import im.vector.app.features.settings.VectorPreferences @@ -127,7 +128,10 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec fun onEventVisible(event: TimelineEvent) fun onRoomCreateLinkClicked(url: String) fun onEncryptedMessageClicked(informationData: MessageInformationData, view: View) - fun onImageMessageClicked(messageImageContent: MessageImageInfoContent, mediaData: ImageContentRenderer.Data, view: View) + fun onImageMessageClicked(messageImageContent: MessageImageInfoContent, + mediaData: ImageContentRenderer.Data, + view: View, + inMemory: List) fun onVideoMessageClicked(messageVideoContent: MessageVideoContent, mediaData: VideoContentRenderer.Data, view: View) // fun onFileMessageClicked(eventId: String, messageFileContent: MessageFileContent) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt index 3189954e20..5ce9589ca3 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt @@ -480,9 +480,12 @@ class MessageItemFactory @Inject constructor( .apply { if (messageContent.msgType == MessageType.MSGTYPE_STICKER_LOCAL) { mode(ImageContentRenderer.Mode.STICKER) + clickListener { view -> + callback?.onImageMessageClicked(messageContent, data, view, listOf(data)) + } } else { clickListener { view -> - callback?.onImageMessageClicked(messageContent, data, view) + callback?.onImageMessageClicked(messageContent, data, view, emptyList()) } } } diff --git a/vector/src/main/java/im/vector/app/features/media/RoomEventsAttachmentProvider.kt b/vector/src/main/java/im/vector/app/features/media/RoomEventsAttachmentProvider.kt index 1e0a3a2ad9..781a176550 100644 --- a/vector/src/main/java/im/vector/app/features/media/RoomEventsAttachmentProvider.kt +++ b/vector/src/main/java/im/vector/app/features/media/RoomEventsAttachmentProvider.kt @@ -25,6 +25,7 @@ import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.file.FileService import org.matrix.android.sdk.api.session.room.model.message.MessageContent import org.matrix.android.sdk.api.session.room.model.message.MessageImageContent +import org.matrix.android.sdk.api.session.room.model.message.MessageStickerContent import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent import org.matrix.android.sdk.api.session.room.model.message.getFileUrl @@ -52,7 +53,10 @@ class RoomEventsAttachmentProvider( override fun getAttachmentInfoAt(position: Int): AttachmentInfo { return getItem(position).let { - val content = it.root.getClearContent().toModel() as? MessageWithAttachmentContent + val clearContent = it.root.getClearContent() + val content = clearContent.toModel() + ?: clearContent.toModel() + as? MessageWithAttachmentContent if (content is MessageImageContent) { val data = ImageContentRenderer.Data( eventId = it.eventId, @@ -66,6 +70,33 @@ class RoomEventsAttachmentProvider( height = null, allowNonMxcUrls = it.root.sendState.isSending() + ) + if (content.mimeType == MimeTypes.Gif) { + AttachmentInfo.AnimatedImage( + uid = it.eventId, + url = content.url ?: "", + data = data + ) + } else { + AttachmentInfo.Image( + uid = it.eventId, + url = content.url ?: "", + data = data + ) + } + } else if (content is MessageStickerContent) { + val data = ImageContentRenderer.Data( + eventId = it.eventId, + filename = content.body, + mimeType = content.mimeType, + url = content.getFileUrl(), + elementToDecrypt = content.encryptedFileInfo?.toElementToDecrypt(), + maxHeight = -1, + maxWidth = -1, + width = null, + height = null, + allowNonMxcUrls = false + ) if (content.mimeType == MimeTypes.Gif) { AttachmentInfo.AnimatedImage(