handle markdown links

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
This commit is contained in:
sowjanyakch 2025-07-21 14:41:38 +02:00
parent 465d779401
commit 5fb1ae4560
No known key found for this signature in database
GPG Key ID: F7AA2A8B65B50220
2 changed files with 38 additions and 4 deletions

View File

@ -7,17 +7,22 @@
package com.nextcloud.talk.utils
import android.annotation.SuppressLint
import android.content.Context
import android.util.Log
import android.content.Intent
import android.text.method.ScrollingMovementMethod
import android.view.View
import androidx.core.net.toUri
import com.nextcloud.talk.R
import io.noties.markwon.AbstractMarkwonPlugin
import io.noties.markwon.LinkResolverDef
import io.noties.markwon.Markwon
import io.noties.markwon.MarkwonConfiguration
import io.noties.markwon.core.MarkwonTheme
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin
import io.noties.markwon.ext.tasklist.TaskListDrawable
import io.noties.markwon.ext.tasklist.TaskListPlugin
import io.noties.markwon.movement.MovementMethodPlugin
object MarkwonUtils {
private const val TAG = "MarkwonUtils"
@ -31,13 +36,28 @@ object MarkwonUtils {
}
override fun configureConfiguration(builder: MarkwonConfiguration.Builder) {
builder.linkResolver { view: View?, link: String? ->
Log.i(TAG, "Link action not implemented $view / $link")
}
builder.linkResolver(object : LinkResolverDef() {
@SuppressLint("SuspiciousIndentation")
override fun resolve(view: View, link: String) {
var linkToOpen = link
if (!(linkToOpen.contains("http://") || linkToOpen.contains("https://"))) {
linkToOpen = "https://$link"
} else {
linkToOpen = link
}
val browserIntent = Intent(
Intent.ACTION_VIEW,
linkToOpen.toUri()
)
context.startActivity(browserIntent)
}
})
}
})
.usePlugin(TaskListPlugin.create(drawable))
.usePlugin(StrikethroughPlugin.create())
.usePlugin(MovementMethodPlugin.create(ScrollingMovementMethod.getInstance()))
.build()
}
}

View File

@ -16,6 +16,7 @@ import android.text.Spanned
import android.text.style.StyleSpan
import android.util.Log
import android.view.View
import android.widget.TextView
import com.nextcloud.talk.R
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.ui.theme.ViewThemeUtils
@ -208,6 +209,19 @@ class MessageUtils(val context: Context) {
return markwon.toMarkdown(markdown)
}
fun isMarkdownInlineLink(text: String): Boolean {
val markdownLinkRegex = Regex("""\[([^\]]+?)]\((.*?)(?:\s+"[^"]*")?\)""")
return markdownLinkRegex.containsMatchIn(text)
}
fun hyperLinks(view: TextView, text: String) {
val isMarkdownLink = isMarkdownInlineLink(text)
if (isMarkdownLink) {
view.autoLinkMask = 0
} else {
view.autoLinkMask = 15
}
}
companion object {
private const val TAG = "MessageUtils"
const val MAX_REPLY_LENGTH = 250