mirror of
https://github.com/element-hq/element-android
synced 2024-11-27 20:06:51 +03:00
Show stickers on click
Play animated stickers Signed-off-by: sim <git@sgougeon.fr>
This commit is contained in:
parent
d1a77d2eca
commit
e5c04d9cc8
5 changed files with 50 additions and 5 deletions
2
changelog.d/5572.misc
Normal file
2
changelog.d/5572.misc
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Show stickers on click
|
||||||
|
|
|
@ -177,6 +177,7 @@ import im.vector.app.features.html.PillsPostProcessor
|
||||||
import im.vector.app.features.invite.VectorInviteView
|
import im.vector.app.features.invite.VectorInviteView
|
||||||
import im.vector.app.features.location.LocationSharingMode
|
import im.vector.app.features.location.LocationSharingMode
|
||||||
import im.vector.app.features.location.toLocationData
|
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.ImageContentRenderer
|
||||||
import im.vector.app.features.media.VideoContentRenderer
|
import im.vector.app.features.media.VideoContentRenderer
|
||||||
import im.vector.app.features.notifications.NotificationDrawerManager
|
import im.vector.app.features.notifications.NotificationDrawerManager
|
||||||
|
@ -1868,12 +1869,16 @@ class TimelineFragment @Inject constructor(
|
||||||
vectorBaseActivity.notImplemented("encrypted message click")
|
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<AttachmentData>) {
|
||||||
navigator.openMediaViewer(
|
navigator.openMediaViewer(
|
||||||
activity = requireActivity(),
|
activity = requireActivity(),
|
||||||
roomId = timelineArgs.roomId,
|
roomId = timelineArgs.roomId,
|
||||||
mediaData = mediaData,
|
mediaData = mediaData,
|
||||||
view = view
|
view = view,
|
||||||
|
inMemory = inMemory
|
||||||
) { pairs ->
|
) { pairs ->
|
||||||
pairs.add(Pair(views.roomToolbar, ViewCompat.getTransitionName(views.roomToolbar) ?: ""))
|
pairs.add(Pair(views.roomToolbar, ViewCompat.getTransitionName(views.roomToolbar) ?: ""))
|
||||||
pairs.add(Pair(views.composerLayout, ViewCompat.getTransitionName(views.composerLayout) ?: ""))
|
pairs.add(Pair(views.composerLayout, ViewCompat.getTransitionName(views.composerLayout) ?: ""))
|
||||||
|
|
|
@ -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.ReadReceiptData
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptsItem
|
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.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.ImageContentRenderer
|
||||||
import im.vector.app.features.media.VideoContentRenderer
|
import im.vector.app.features.media.VideoContentRenderer
|
||||||
import im.vector.app.features.settings.VectorPreferences
|
import im.vector.app.features.settings.VectorPreferences
|
||||||
|
@ -127,7 +128,10 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec
|
||||||
fun onEventVisible(event: TimelineEvent)
|
fun onEventVisible(event: TimelineEvent)
|
||||||
fun onRoomCreateLinkClicked(url: String)
|
fun onRoomCreateLinkClicked(url: String)
|
||||||
fun onEncryptedMessageClicked(informationData: MessageInformationData, view: View)
|
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<AttachmentData>)
|
||||||
fun onVideoMessageClicked(messageVideoContent: MessageVideoContent, mediaData: VideoContentRenderer.Data, view: View)
|
fun onVideoMessageClicked(messageVideoContent: MessageVideoContent, mediaData: VideoContentRenderer.Data, view: View)
|
||||||
|
|
||||||
// fun onFileMessageClicked(eventId: String, messageFileContent: MessageFileContent)
|
// fun onFileMessageClicked(eventId: String, messageFileContent: MessageFileContent)
|
||||||
|
|
|
@ -480,9 +480,12 @@ class MessageItemFactory @Inject constructor(
|
||||||
.apply {
|
.apply {
|
||||||
if (messageContent.msgType == MessageType.MSGTYPE_STICKER_LOCAL) {
|
if (messageContent.msgType == MessageType.MSGTYPE_STICKER_LOCAL) {
|
||||||
mode(ImageContentRenderer.Mode.STICKER)
|
mode(ImageContentRenderer.Mode.STICKER)
|
||||||
|
clickListener { view ->
|
||||||
|
callback?.onImageMessageClicked(messageContent, data, view, listOf(data))
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
clickListener { view ->
|
clickListener { view ->
|
||||||
callback?.onImageMessageClicked(messageContent, data, view)
|
callback?.onImageMessageClicked(messageContent, data, view, emptyList())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.file.FileService
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
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.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.MessageVideoContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.getFileUrl
|
import org.matrix.android.sdk.api.session.room.model.message.getFileUrl
|
||||||
|
@ -52,7 +53,10 @@ class RoomEventsAttachmentProvider(
|
||||||
|
|
||||||
override fun getAttachmentInfoAt(position: Int): AttachmentInfo {
|
override fun getAttachmentInfoAt(position: Int): AttachmentInfo {
|
||||||
return getItem(position).let {
|
return getItem(position).let {
|
||||||
val content = it.root.getClearContent().toModel<MessageContent>() as? MessageWithAttachmentContent
|
val clearContent = it.root.getClearContent()
|
||||||
|
val content = clearContent.toModel<MessageContent>()
|
||||||
|
?: clearContent.toModel<MessageStickerContent>()
|
||||||
|
as? MessageWithAttachmentContent
|
||||||
if (content is MessageImageContent) {
|
if (content is MessageImageContent) {
|
||||||
val data = ImageContentRenderer.Data(
|
val data = ImageContentRenderer.Data(
|
||||||
eventId = it.eventId,
|
eventId = it.eventId,
|
||||||
|
@ -66,6 +70,33 @@ class RoomEventsAttachmentProvider(
|
||||||
height = null,
|
height = null,
|
||||||
allowNonMxcUrls = it.root.sendState.isSending()
|
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) {
|
if (content.mimeType == MimeTypes.Gif) {
|
||||||
AttachmentInfo.AnimatedImage(
|
AttachmentInfo.AnimatedImage(
|
||||||
|
|
Loading…
Reference in a new issue