Implement respecting the markdown rendering flag

...and fixing the reply ellipsizing for any reply messages

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2023-07-27 23:30:35 +02:00
parent da0ef59ca3
commit c4290f11ca
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
12 changed files with 38 additions and 25 deletions

View File

@ -195,9 +195,9 @@ class IncomingLinkPreviewMessageViewHolder(incomingView: View, payload: Any) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context.getText(R.string.nc_nick_guest) ?: context.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
binding.messageQuote.quotedMessage.context.resources.getColor( binding.messageQuote.quotedMessage.context.resources.getColor(
R.color.nc_incoming_text_default R.color.nc_incoming_text_default
) )

View File

@ -180,9 +180,9 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context!!.getText(R.string.nc_nick_guest) ?: context!!.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
binding.messageQuote.quotedMessage.context.resources.getColor( binding.messageQuote.quotedMessage.context.resources.getColor(
R.color.nc_incoming_text_default R.color.nc_incoming_text_default
) )

View File

@ -203,9 +203,9 @@ class IncomingPollMessageViewHolder(incomingView: View, payload: Any) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context.getText(R.string.nc_nick_guest) ?: context.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
binding.messageQuote.quotedMessage.context.resources.getColor( binding.messageQuote.quotedMessage.context.resources.getColor(
R.color.nc_incoming_text_default R.color.nc_incoming_text_default
) )

View File

@ -44,7 +44,6 @@ import com.nextcloud.talk.models.json.chat.ChatMessage
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DateUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.TextMatchers import com.nextcloud.talk.utils.TextMatchers
import com.nextcloud.talk.utils.message.MessageUtils import com.nextcloud.talk.utils.message.MessageUtils
import com.nextcloud.talk.utils.preferences.AppPreferences import com.nextcloud.talk.utils.preferences.AppPreferences
@ -202,10 +201,11 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
} else { } else {
parentChatMessage.actorDisplayName parentChatMessage.actorDisplayName
} }
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
DisplayUtils.ellipsize(parentChatMessage.text, MAX_REPLY_LENGTH), parentChatMessage,
binding.messageQuote.quotedMessage.context.resources.getColor(R.color.nc_incoming_text_default) binding.messageQuote.quotedMessage.context.resources.getColor(R.color.nc_incoming_text_default)
) )
@ -240,6 +240,5 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
companion object { companion object {
const val TEXT_SIZE_MULTIPLIER = 2.5 const val TEXT_SIZE_MULTIPLIER = 2.5
const val MAX_REPLY_LENGTH = 250
} }
} }

View File

@ -296,9 +296,9 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context!!.getText(R.string.nc_nick_guest) ?: context!!.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
binding.messageQuote.quotedMessage.context.resources.getColor( binding.messageQuote.quotedMessage.context.resources.getColor(
R.color.nc_incoming_text_default R.color.nc_incoming_text_default
) )

View File

@ -173,9 +173,9 @@ class OutcomingLinkPreviewMessageViewHolder(outcomingView: View, payload: Any) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context.getText(R.string.nc_nick_guest) ?: context.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant
) )
viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage)

View File

@ -226,9 +226,9 @@ class OutcomingLocationMessageViewHolder(incomingView: View) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context!!.getText(R.string.nc_nick_guest) ?: context!!.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant
) )
viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage)

View File

@ -188,9 +188,9 @@ class OutcomingPollMessageViewHolder(outcomingView: View, payload: Any) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context.getText(R.string.nc_nick_guest) ?: context.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant
) )
viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage)

View File

@ -41,7 +41,6 @@ import com.nextcloud.talk.models.json.chat.ReadStatus
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DateUtils
import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.TextMatchers import com.nextcloud.talk.utils.TextMatchers
import com.nextcloud.talk.utils.message.MessageUtils import com.nextcloud.talk.utils.message.MessageUtils
import com.stfalcon.chatkit.messages.MessageHolders.OutcomingTextMessageViewHolder import com.stfalcon.chatkit.messages.MessageHolders.OutcomingTextMessageViewHolder
@ -175,9 +174,9 @@ class OutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewH
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context!!.getText(R.string.nc_nick_guest) ?: context!!.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
DisplayUtils.ellipsize(parentChatMessage.text, MAX_REPLY_LENGTH), parentChatMessage,
textColor textColor
) )
@ -201,6 +200,5 @@ class OutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewH
companion object { companion object {
const val TEXT_SIZE_MULTIPLIER = 2.5 const val TEXT_SIZE_MULTIPLIER = 2.5
const val MAX_REPLY_LENGTH = 250
} }
} }

View File

@ -283,9 +283,9 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) :
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
?: context!!.getText(R.string.nc_nick_guest) ?: context!!.getText(R.string.nc_nick_guest)
binding.messageQuote.quotedMessage.text = messageUtils binding.messageQuote.quotedMessage.text = messageUtils
.enrichChatMessageText( .enrichChatReplyMessageText(
binding.messageQuote.quotedMessage.context, binding.messageQuote.quotedMessage.context,
parentChatMessage.text, parentChatMessage,
viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant viewThemeUtils.getScheme(binding.messageQuote.quotedMessage.context).onSurfaceVariant
) )
viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage) viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage)

View File

@ -119,6 +119,9 @@ data class ChatMessage(
@JsonField(name = ["expirationTimestamp"]) @JsonField(name = ["expirationTimestamp"])
var expirationTimestamp: Int = 0, var expirationTimestamp: Int = 0,
@JsonField(name = ["markdown"])
var renderMarkdown: Boolean? = null,
var isDownloadingVoiceMessage: Boolean = false, var isDownloadingVoiceMessage: Boolean = false,
var resetVoiceMessage: Boolean = false, var resetVoiceMessage: Boolean = false,

View File

@ -23,6 +23,7 @@ package com.nextcloud.talk.utils.message
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.text.SpannableString
import android.text.Spanned import android.text.Spanned
import android.util.Log import android.util.Log
import android.view.View import android.view.View
@ -39,16 +40,27 @@ import io.noties.markwon.ext.tasklist.TaskListDrawable
import io.noties.markwon.ext.tasklist.TaskListPlugin import io.noties.markwon.ext.tasklist.TaskListPlugin
class MessageUtils(val context: Context) { class MessageUtils(val context: Context) {
fun enrichChatReplyMessageText(context: Context, message: ChatMessage, textColor: Int): Spanned? {
return if (message.message == null) {
null
} else if (message.renderMarkdown == false) {
SpannableString(DisplayUtils.ellipsize(message.message!!, MAX_REPLY_LENGTH))
} else {
enrichChatMessageText(context, DisplayUtils.ellipsize(message.message!!, MAX_REPLY_LENGTH), textColor)
}
}
fun enrichChatMessageText(context: Context, message: ChatMessage, textColor: Int): Spanned? { fun enrichChatMessageText(context: Context, message: ChatMessage, textColor: Int): Spanned? {
return if (message.message == null) { return if (message.message == null) {
null null
} else if (message.renderMarkdown == false) {
SpannableString(message.message)
} else { } else {
enrichChatMessageText(context, message.message!!, textColor) enrichChatMessageText(context, message.message!!, textColor)
} }
} }
fun enrichChatMessageText(context: Context, message: String, textColor: Int): Spanned { private fun enrichChatMessageText(context: Context, message: String, textColor: Int): Spanned {
return getRenderedMarkdownText(context, message, textColor) return getRenderedMarkdownText(context, message, textColor)
} }
@ -139,5 +151,6 @@ class MessageUtils(val context: Context) {
companion object { companion object {
private const val TAG = "MessageUtils" private const val TAG = "MessageUtils"
const val MAX_REPLY_LENGTH = 250
} }
} }