|
@@ -24,11 +24,7 @@
|
|
|
package com.nextcloud.talk.adapters.messages
|
|
|
|
|
|
import android.content.Context
|
|
|
-import android.content.Intent
|
|
|
import android.graphics.PorterDuff
|
|
|
-import android.net.Uri
|
|
|
-import android.text.Spannable
|
|
|
-import android.text.SpannableString
|
|
|
import android.util.TypedValue
|
|
|
import android.view.View
|
|
|
import androidx.core.content.res.ResourcesCompat
|
|
@@ -47,6 +43,7 @@ import com.nextcloud.talk.utils.ApiUtils
|
|
|
import com.nextcloud.talk.utils.DateUtils
|
|
|
import com.nextcloud.talk.utils.DisplayUtils
|
|
|
import com.nextcloud.talk.utils.TextMatchers
|
|
|
+import com.nextcloud.talk.utils.message.MessageUtils
|
|
|
import com.stfalcon.chatkit.messages.MessageHolders.OutcomingTextMessageViewHolder
|
|
|
import javax.inject.Inject
|
|
|
|
|
@@ -61,6 +58,9 @@ class OutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewH
|
|
|
@Inject
|
|
|
lateinit var viewThemeUtils: ViewThemeUtils
|
|
|
|
|
|
+ @Inject
|
|
|
+ lateinit var messageUtils: MessageUtils
|
|
|
+
|
|
|
@Inject
|
|
|
lateinit var dateUtils: DateUtils
|
|
|
|
|
@@ -69,17 +69,27 @@ class OutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewH
|
|
|
override fun onBind(message: ChatMessage) {
|
|
|
super.onBind(message)
|
|
|
sharedApplication!!.componentApplication.inject(this)
|
|
|
- val messageParameters: HashMap<String?, HashMap<String?, String?>>? = message.messageParameters
|
|
|
- var messageString: Spannable = SpannableString(message.message)
|
|
|
realView.isSelected = false
|
|
|
val layoutParams = binding.messageTime.layoutParams as FlexboxLayout.LayoutParams
|
|
|
layoutParams.isWrapBefore = false
|
|
|
var textSize = context!!.resources.getDimension(R.dimen.chat_text_size)
|
|
|
val textColor = viewThemeUtils.getScheme(binding.messageText.context).onSurfaceVariant
|
|
|
binding.messageTime.setTextColor(textColor)
|
|
|
- if (messageParameters != null && messageParameters.size > 0) {
|
|
|
- messageString = processMessageParameters(messageParameters, message, messageString)
|
|
|
- } else if (TextMatchers.isMessageWithSingleEmoticonOnly(message.text)) {
|
|
|
+
|
|
|
+ var processedMessageText = messageUtils.enrichChatMessageText(binding.messageText.context, message, textColor)
|
|
|
+ processedMessageText = messageUtils.processMessageParameters(
|
|
|
+ binding.messageText.context,
|
|
|
+ viewThemeUtils,
|
|
|
+ processedMessageText!!,
|
|
|
+ message,
|
|
|
+ itemView
|
|
|
+ )
|
|
|
+
|
|
|
+ val messageParameters = message.messageParameters
|
|
|
+ if (
|
|
|
+ (messageParameters == null || messageParameters.size <= 0) &&
|
|
|
+ TextMatchers.isMessageWithSingleEmoticonOnly(message.text)
|
|
|
+ ) {
|
|
|
textSize = (textSize * TEXT_SIZE_MULTIPLIER).toFloat()
|
|
|
layoutParams.isWrapBefore = true
|
|
|
realView.isSelected = true
|
|
@@ -90,7 +100,7 @@ class OutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewH
|
|
|
binding.messageText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
|
|
|
binding.messageTime.layoutParams = layoutParams
|
|
|
binding.messageText.setTextColor(textColor)
|
|
|
- binding.messageText.text = messageString
|
|
|
+ binding.messageText.text = processedMessageText
|
|
|
|
|
|
binding.messageTime.text = dateUtils.getLocalTimeStringFromTimestamp(message.timestamp)
|
|
|
|
|
@@ -164,7 +174,12 @@ class OutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewH
|
|
|
}
|
|
|
binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
|
|
|
?: context!!.getText(R.string.nc_nick_guest)
|
|
|
- binding.messageQuote.quotedMessage.text = DisplayUtils.ellipsize(parentChatMessage.text, MAX_REPLY_LENGTH)
|
|
|
+ binding.messageQuote.quotedMessage.text = messageUtils
|
|
|
+ .enrichChatMessageText(
|
|
|
+ binding.messageQuote.quotedMessage.context,
|
|
|
+ DisplayUtils.ellipsize(parentChatMessage.text, MAX_REPLY_LENGTH),
|
|
|
+ textColor
|
|
|
+ )
|
|
|
|
|
|
binding.messageQuote.quotedMessageAuthor.setTextColor(textColor)
|
|
|
binding.messageQuote.quotedMessage.setTextColor(textColor)
|
|
@@ -180,46 +195,6 @@ class OutcomingTextMessageViewHolder(itemView: View) : OutcomingTextMessageViewH
|
|
|
viewThemeUtils.talk.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted)
|
|
|
}
|
|
|
|
|
|
- private fun processMessageParameters(
|
|
|
- messageParameters: HashMap<String?, HashMap<String?, String?>>,
|
|
|
- message: ChatMessage,
|
|
|
- messageString: Spannable
|
|
|
- ): Spannable {
|
|
|
- var messageStringInternal = messageString
|
|
|
- for (key in messageParameters.keys) {
|
|
|
- val individualHashMap: HashMap<String?, String?>? = message.messageParameters!![key]
|
|
|
- if (individualHashMap != null) {
|
|
|
- when (individualHashMap["type"]) {
|
|
|
- "user", "guest", "call", "user-group" -> {
|
|
|
- val chip = if (individualHashMap["id"] == message.activeUser!!.userId) {
|
|
|
- R.xml.chip_you
|
|
|
- } else {
|
|
|
- R.xml.chip_others
|
|
|
- }
|
|
|
- messageStringInternal = DisplayUtils.searchAndReplaceWithMentionSpan(
|
|
|
- key,
|
|
|
- binding.messageText.context,
|
|
|
- messageStringInternal,
|
|
|
- individualHashMap["id"]!!,
|
|
|
- individualHashMap["name"]!!,
|
|
|
- individualHashMap["type"]!!,
|
|
|
- message.activeUser!!,
|
|
|
- chip,
|
|
|
- viewThemeUtils
|
|
|
- )
|
|
|
- }
|
|
|
- "file" -> {
|
|
|
- itemView.setOnClickListener { v ->
|
|
|
- val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(individualHashMap["link"]))
|
|
|
- context.startActivity(browserIntent)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return messageStringInternal
|
|
|
- }
|
|
|
-
|
|
|
fun assignCommonMessageInterface(commonMessageInterface: CommonMessageInterface) {
|
|
|
this.commonMessageInterface = commonMessageInterface
|
|
|
}
|