diff --git a/app/src/main/java/com/nextcloud/talk/utils/MarkwonUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/MarkwonUtils.kt index a4a42b0f6..7472454f5 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/MarkwonUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/MarkwonUtils.kt @@ -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() } } 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 edb1f1cdf..18f55051a 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 @@ -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