Downgrade markwon version and enable LaTeX rendering for messages

This commit is contained in:
Nick Hu 2020-09-18 15:22:10 +01:00
parent 8f4609e72b
commit 78b870c558
No known key found for this signature in database
GPG key ID: 9E35DDA3DF631330
5 changed files with 24 additions and 1 deletions

View file

@ -14,7 +14,7 @@ def kotlinCoroutines = "1.5.1"
def dagger = "2.38.1" def dagger = "2.38.1"
def retrofit = "2.9.0" def retrofit = "2.9.0"
def arrow = "0.8.2" def arrow = "0.8.2"
def markwon = "4.6.2" def markwon = "4.3.1"
def moshi = "1.12.0" def moshi = "1.12.0"
def lifecycle = "2.2.0" def lifecycle = "2.2.0"
def rxBinding = "3.1.0" def rxBinding = "3.1.0"
@ -90,6 +90,8 @@ ext.libs = [
], ],
markwon : [ markwon : [
'core' : "io.noties.markwon:core:$markwon", 'core' : "io.noties.markwon:core:$markwon",
'extLatex' : "io.noties.markwon:ext-latex:$markwon",
'inlineParser' : "io.noties.markwon:inline-parser:$markwon",
'html' : "io.noties.markwon:html:$markwon" 'html' : "io.noties.markwon:html:$markwon"
], ],
airbnb : [ airbnb : [

View file

@ -390,6 +390,8 @@ dependencies {
implementation libs.google.material implementation libs.google.material
implementation 'me.gujun.android:span:1.7' implementation 'me.gujun.android:span:1.7'
implementation libs.markwon.core implementation libs.markwon.core
implementation libs.markwon.extLatex
implementation libs.markwon.inlineParser
implementation libs.markwon.html implementation libs.markwon.html
implementation 'com.googlecode.htmlcompressor:htmlcompressor:1.5.2' implementation 'com.googlecode.htmlcompressor:htmlcompressor:1.5.2'
implementation 'me.saket:better-link-movement-method:2.2.0' implementation 'me.saket:better-link-movement-method:2.2.0'

View file

@ -484,6 +484,7 @@ class MessageItemFactory @Inject constructor(
} }
.useBigFont(linkifiedBody.length <= MAX_NUMBER_OF_EMOJI_FOR_BIG_FONT * 2 && containsOnlyEmojis(linkifiedBody.toString())) .useBigFont(linkifiedBody.length <= MAX_NUMBER_OF_EMOJI_FOR_BIG_FONT * 2 && containsOnlyEmojis(linkifiedBody.toString()))
.canUseTextFuture(canUseTextFuture) .canUseTextFuture(canUseTextFuture)
.markwonPlugins(htmlRenderer.get().plugins)
.searchForPills(isFormatted) .searchForPills(isFormatted)
.previewUrlRetriever(callback?.getPreviewUrlRetriever()) .previewUrlRetriever(callback?.getPreviewUrlRetriever())
.imageContentRenderer(imageContentRenderer) .imageContentRenderer(imageContentRenderer)

View file

@ -16,6 +16,7 @@
package im.vector.app.features.home.room.detail.timeline.item package im.vector.app.features.home.room.detail.timeline.item
import android.text.Spanned
import android.text.method.MovementMethod import android.text.method.MovementMethod
import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.AppCompatTextView
import androidx.core.text.PrecomputedTextCompat import androidx.core.text.PrecomputedTextCompat
@ -31,6 +32,7 @@ import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlRetriever
import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlUiState import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlUiState
import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlView import im.vector.app.features.home.room.detail.timeline.url.PreviewUrlView
import im.vector.app.features.media.ImageContentRenderer import im.vector.app.features.media.ImageContentRenderer
import io.noties.markwon.MarkwonPlugin
@EpoxyModelClass(layout = R.layout.item_timeline_event_base) @EpoxyModelClass(layout = R.layout.item_timeline_event_base)
abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() { abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
@ -59,6 +61,9 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash) @EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
var movementMethod: MovementMethod? = null var movementMethod: MovementMethod? = null
@EpoxyAttribute(EpoxyAttribute.Option.DoNotHash)
var markwonPlugins: (List<MarkwonPlugin>)? = null
private val previewUrlViewUpdater = PreviewUrlViewUpdater() private val previewUrlViewUpdater = PreviewUrlViewUpdater()
override fun bind(holder: Holder) { override fun bind(holder: Holder) {
@ -92,6 +97,7 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
} else { } else {
null null
} }
markwonPlugins?.forEach { plugin -> plugin.beforeSetText(holder.messageView, message as Spanned) }
super.bind(holder) super.bind(holder)
holder.messageView.movementMethod = movementMethod holder.messageView.movementMethod = movementMethod
@ -104,6 +110,7 @@ abstract class MessageTextItem : AbsMessageItem<MessageTextItem.Holder>() {
} else { } else {
holder.messageView.text = message holder.messageView.text = message
} }
markwonPlugins?.forEach { plugin -> plugin.afterSetText(holder.messageView) }
} }
override fun unbind(holder: Holder) { override fun unbind(holder: Holder) {

View file

@ -21,7 +21,11 @@ import android.text.Spannable
import androidx.core.text.toSpannable import androidx.core.text.toSpannable
import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.ColorProvider
import io.noties.markwon.Markwon import io.noties.markwon.Markwon
import io.noties.markwon.MarkwonPlugin
import io.noties.markwon.ext.latex.JLatexMathPlugin
import io.noties.markwon.ext.latex.JLatexMathTheme
import io.noties.markwon.html.HtmlPlugin import io.noties.markwon.html.HtmlPlugin
import io.noties.markwon.inlineparser.MarkwonInlineParserPlugin
import org.commonmark.node.Node import org.commonmark.node.Node
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -37,8 +41,15 @@ class EventHtmlRenderer @Inject constructor(htmlConfigure: MatrixHtmlPluginConfi
private val markwon = Markwon.builder(context) private val markwon = Markwon.builder(context)
.usePlugin(HtmlPlugin.create(htmlConfigure)) .usePlugin(HtmlPlugin.create(htmlConfigure))
.usePlugin(MarkwonInlineParserPlugin.create())
.usePlugin(JLatexMathPlugin.create(44F) { builder ->
builder.inlinesEnabled(true)
builder.theme().inlinePadding(JLatexMathTheme.Padding.symmetric(24, 8))
})
.build() .build()
val plugins: List<MarkwonPlugin> = markwon.plugins
fun parse(text: String): Node { fun parse(text: String): Node {
return markwon.parse(text) return markwon.parse(text)
} }