Skip to content

Commit 08952de

Browse files
committed
handle markdown links
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
1 parent 53c02f9 commit 08952de

2 files changed

Lines changed: 38 additions & 4 deletions

File tree

app/src/main/java/com/nextcloud/talk/utils/MarkwonUtils.kt

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,22 @@
77

88
package com.nextcloud.talk.utils
99

10+
import android.annotation.SuppressLint
1011
import android.content.Context
11-
import android.util.Log
12+
import android.content.Intent
13+
import android.text.method.ScrollingMovementMethod
1214
import android.view.View
15+
import androidx.core.net.toUri
1316
import com.nextcloud.talk.R
1417
import io.noties.markwon.AbstractMarkwonPlugin
18+
import io.noties.markwon.LinkResolverDef
1519
import io.noties.markwon.Markwon
1620
import io.noties.markwon.MarkwonConfiguration
1721
import io.noties.markwon.core.MarkwonTheme
1822
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin
1923
import io.noties.markwon.ext.tasklist.TaskListDrawable
2024
import io.noties.markwon.ext.tasklist.TaskListPlugin
25+
import io.noties.markwon.movement.MovementMethodPlugin
2126

2227
object MarkwonUtils {
2328
private const val TAG = "MarkwonUtils"
@@ -31,13 +36,28 @@ object MarkwonUtils {
3136
}
3237

3338
override fun configureConfiguration(builder: MarkwonConfiguration.Builder) {
34-
builder.linkResolver { view: View?, link: String? ->
35-
Log.i(TAG, "Link action not implemented $view / $link")
36-
}
39+
builder.linkResolver(object : LinkResolverDef() {
40+
@SuppressLint("SuspiciousIndentation")
41+
override fun resolve(view: View, link: String) {
42+
var linkToOpen = link
43+
if (!(linkToOpen.contains("http://") || linkToOpen.contains("https://"))) {
44+
linkToOpen = "https://$link"
45+
} else {
46+
linkToOpen = link
47+
}
48+
49+
val browserIntent = Intent(
50+
Intent.ACTION_VIEW,
51+
linkToOpen.toUri()
52+
)
53+
context.startActivity(browserIntent)
54+
}
55+
})
3756
}
3857
})
3958
.usePlugin(TaskListPlugin.create(drawable))
4059
.usePlugin(StrikethroughPlugin.create())
60+
.usePlugin(MovementMethodPlugin.create(ScrollingMovementMethod.getInstance()))
4161
.build()
4262
}
4363
}

app/src/main/java/com/nextcloud/talk/utils/message/MessageUtils.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import android.text.Spanned
1616
import android.text.style.StyleSpan
1717
import android.util.Log
1818
import android.view.View
19+
import android.widget.TextView
1920
import com.nextcloud.talk.R
2021
import com.nextcloud.talk.chat.data.model.ChatMessage
2122
import com.nextcloud.talk.ui.theme.ViewThemeUtils
@@ -208,6 +209,19 @@ class MessageUtils(val context: Context) {
208209
return markwon.toMarkdown(markdown)
209210
}
210211

212+
fun isMarkdownInlineLink(text: String): Boolean {
213+
val markdownLinkRegex = Regex("""\[([^\]]+?)]\((.*?)(?:\s+"[^"]*")?\)""")
214+
return markdownLinkRegex.containsMatchIn(text)
215+
}
216+
217+
fun hyperLinks(view: TextView, text: String) {
218+
val isMarkdownLink = isMarkdownInlineLink(text)
219+
if (isMarkdownLink) {
220+
view.autoLinkMask = 0
221+
} else {
222+
view.autoLinkMask = 15
223+
}
224+
}
211225
companion object {
212226
private const val TAG = "MessageUtils"
213227
const val MAX_REPLY_LENGTH = 250

0 commit comments

Comments
 (0)