mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-18 04:50:08 +03:00
Custom emojis: detect as emoji-only
Change-Id: Ia147a0362eb7d930ad6709bca0f86b51cb62612e
This commit is contained in:
parent
04cc69c206
commit
797a8c6c10
2 changed files with 16 additions and 2 deletions
|
@ -18,6 +18,14 @@ package im.vector.app.core.utils
|
|||
|
||||
import com.vanniktech.emoji.EmojiUtils
|
||||
|
||||
/**
|
||||
* Replace custom emojis with some other arbitrary emoji, so we can maintain our logic
|
||||
* for when to display emoji-only messages larger than others.
|
||||
*/
|
||||
fun customToPseudoEmoji(str: String): String {
|
||||
return str.replace(Regex("""<img\s+([^>]*)data-mx-emoticon([^>]*)>"""), "\uD83D\uDC40")
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if a string contains emojis.
|
||||
* It seems that the regex [emoji_regex]+ does not work.
|
||||
|
|
|
@ -34,6 +34,7 @@ import im.vector.app.core.resources.StringProvider
|
|||
import im.vector.app.core.time.Clock
|
||||
import im.vector.app.core.utils.DimensionConverter
|
||||
import im.vector.app.core.utils.containsOnlyEmojis
|
||||
import im.vector.app.core.utils.customToPseudoEmoji
|
||||
import im.vector.app.features.home.room.detail.timeline.TimelineEventController
|
||||
import im.vector.app.features.home.room.detail.timeline.helper.AudioMessagePlaybackTracker
|
||||
import im.vector.app.features.home.room.detail.timeline.helper.AvatarSizeProvider
|
||||
|
@ -615,7 +616,8 @@ class MessageItemFactory @Inject constructor(
|
|||
): MessageTextItem? {
|
||||
val compressed = htmlCompressor.compress(matrixFormattedBody)
|
||||
val renderedFormattedBody = htmlRenderer.get().render(compressed, pillsPostProcessor) as Spanned
|
||||
return buildMessageTextItem(renderedFormattedBody, true, informationData, highlight, callback, attributes)
|
||||
val pseudoEmojiBody = htmlRenderer.get().render(customToPseudoEmoji(compressed), pillsPostProcessor) as Spanned
|
||||
return buildMessageTextItem(renderedFormattedBody, true, informationData, highlight, callback, attributes, pseudoEmojiBody)
|
||||
}
|
||||
|
||||
private fun buildMessageTextItem(
|
||||
|
@ -625,11 +627,15 @@ class MessageItemFactory @Inject constructor(
|
|||
highlight: Boolean,
|
||||
callback: TimelineEventController.Callback?,
|
||||
attributes: AbsMessageItem.Attributes,
|
||||
emojiCheckCharSequence: CharSequence? = null
|
||||
): MessageTextItem? {
|
||||
val renderedBody = textRenderer.render(body)
|
||||
val bindingOptions = spanUtils.getBindingOptions(renderedBody)
|
||||
val linkifiedBody = renderedBody.linkify(callback)
|
||||
|
||||
// Only for checking if it's a emoji-only message
|
||||
val pseudoEmojiBody = emojiCheckCharSequence ?: linkifiedBody
|
||||
|
||||
return MessageTextItem_()
|
||||
.message(
|
||||
if (informationData.hasBeenEdited) {
|
||||
|
@ -638,7 +644,7 @@ class MessageItemFactory @Inject constructor(
|
|||
linkifiedBody
|
||||
}.toMessageTextEpoxyCharSequence()
|
||||
)
|
||||
.useBigFont(linkifiedBody.length <= MAX_NUMBER_OF_EMOJI_FOR_BIG_FONT * 2 && containsOnlyEmojis(linkifiedBody.toString()))
|
||||
.useBigFont(pseudoEmojiBody.length <= MAX_NUMBER_OF_EMOJI_FOR_BIG_FONT * 2 && containsOnlyEmojis(pseudoEmojiBody.toString()))
|
||||
.bindingOptions(bindingOptions)
|
||||
.markwonPlugins(htmlRenderer.get().plugins)
|
||||
.searchForPills(isFormatted)
|
||||
|
|
Loading…
Add table
Reference in a new issue