mirror of
https://github.com/nextcloud/talk-android
synced 2025-08-17 17:05:06 +01:00
handle markdown links
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
This commit is contained in:
parent
465d779401
commit
5fb1ae4560
@ -7,17 +7,22 @@
|
|||||||
|
|
||||||
package com.nextcloud.talk.utils
|
package com.nextcloud.talk.utils
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
import android.content.Intent
|
||||||
|
import android.text.method.ScrollingMovementMethod
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import androidx.core.net.toUri
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
import io.noties.markwon.AbstractMarkwonPlugin
|
import io.noties.markwon.AbstractMarkwonPlugin
|
||||||
|
import io.noties.markwon.LinkResolverDef
|
||||||
import io.noties.markwon.Markwon
|
import io.noties.markwon.Markwon
|
||||||
import io.noties.markwon.MarkwonConfiguration
|
import io.noties.markwon.MarkwonConfiguration
|
||||||
import io.noties.markwon.core.MarkwonTheme
|
import io.noties.markwon.core.MarkwonTheme
|
||||||
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin
|
import io.noties.markwon.ext.strikethrough.StrikethroughPlugin
|
||||||
import io.noties.markwon.ext.tasklist.TaskListDrawable
|
import io.noties.markwon.ext.tasklist.TaskListDrawable
|
||||||
import io.noties.markwon.ext.tasklist.TaskListPlugin
|
import io.noties.markwon.ext.tasklist.TaskListPlugin
|
||||||
|
import io.noties.markwon.movement.MovementMethodPlugin
|
||||||
|
|
||||||
object MarkwonUtils {
|
object MarkwonUtils {
|
||||||
private const val TAG = "MarkwonUtils"
|
private const val TAG = "MarkwonUtils"
|
||||||
@ -31,13 +36,28 @@ object MarkwonUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun configureConfiguration(builder: MarkwonConfiguration.Builder) {
|
override fun configureConfiguration(builder: MarkwonConfiguration.Builder) {
|
||||||
builder.linkResolver { view: View?, link: String? ->
|
builder.linkResolver(object : LinkResolverDef() {
|
||||||
Log.i(TAG, "Link action not implemented $view / $link")
|
@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(TaskListPlugin.create(drawable))
|
||||||
.usePlugin(StrikethroughPlugin.create())
|
.usePlugin(StrikethroughPlugin.create())
|
||||||
|
.usePlugin(MovementMethodPlugin.create(ScrollingMovementMethod.getInstance()))
|
||||||
.build()
|
.build()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ import android.text.Spanned
|
|||||||
import android.text.style.StyleSpan
|
import android.text.style.StyleSpan
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.TextView
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
import com.nextcloud.talk.chat.data.model.ChatMessage
|
import com.nextcloud.talk.chat.data.model.ChatMessage
|
||||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||||
@ -208,6 +209,19 @@ class MessageUtils(val context: Context) {
|
|||||||
return markwon.toMarkdown(markdown)
|
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 {
|
companion object {
|
||||||
private const val TAG = "MessageUtils"
|
private const val TAG = "MessageUtils"
|
||||||
const val MAX_REPLY_LENGTH = 250
|
const val MAX_REPLY_LENGTH = 250
|
||||||
|
Loading…
Reference in New Issue
Block a user