From 522d18e9d8f206ead6a4390d084c92f04c6c2fed Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Fri, 7 Feb 2025 10:03:41 +0100 Subject: [PATCH] modify DisplayUtils and MessageUtils Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/utils/DisplayUtils.kt | 23 +++++++++++++++++++ .../talk/utils/message/MessageUtils.kt | 14 +++++++++++ 2 files changed, 37 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt index 7a9b5596e..9a2bf1bec 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt @@ -23,6 +23,7 @@ import android.graphics.drawable.Drawable import android.net.Uri import android.text.Spannable import android.text.SpannableString +import android.text.SpannableStringBuilder import android.text.Spanned import android.text.TextPaint import android.text.TextUtils @@ -224,6 +225,28 @@ object DisplayUtils { return chip } + fun replaceLabelWithPlaceholder( + text: Spanned, + labelToSearch: String, + placeholder: String + ): Spannable { + val spannableStringBuilder = SpannableStringBuilder(text) + val stringText = text.toString() + val m = Pattern.compile( + Pattern.quote(labelToSearch), + Pattern.CASE_INSENSITIVE or Pattern.LITERAL or Pattern.MULTILINE + ) + .matcher(spannableStringBuilder) + var lastStartIndex = 0 + while (m.find()) { + val start = stringText.indexOf(m.group(), lastStartIndex) + val end = start + m.group().length + lastStartIndex = end + spannableStringBuilder.replace(start, end, placeholder) + } + return spannableStringBuilder + } + fun searchAndReplaceWithMentionSpan( key: String, context: Context, diff --git a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt index ea0c0335c..a8bd14d9d 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt @@ -118,6 +118,19 @@ class MessageUtils(val context: Context) { } else { individualHashMap["id"] } + val label = individualHashMap["name"]!! + val type = individualHashMap["type"]!! + val labelToSearch = if (type == "circle") { + "@team/$label" + } else { + "@$label" + } + + messageStringInternal = DisplayUtils.replaceLabelWithPlaceholder( + messageStringInternal, + labelToSearch, + PLACEHOLDER + ) messageStringInternal = DisplayUtils.searchAndReplaceWithMentionSpan( key!!, @@ -169,5 +182,6 @@ class MessageUtils(val context: Context) { private const val TAG = "MessageUtils" const val MAX_REPLY_LENGTH = 250 const val HTTPS_PROTOCOL = "https://" + const val PLACEHOLDER = "[mention]" } }