diff --git a/app/src/main/assets/webmarkdown/renderer.html b/app/src/main/assets/webmarkdown/renderer.html new file mode 100644 index 00000000..0ed13253 --- /dev/null +++ b/app/src/main/assets/webmarkdown/renderer.html @@ -0,0 +1,90 @@ + + + + + + + + + +
+ + + + + \ No newline at end of file diff --git a/app/src/main/java/chat/revolt/components/generic/WebMarkdown.kt b/app/src/main/java/chat/revolt/components/generic/WebMarkdown.kt index 81efc463..d31e1762 100644 --- a/app/src/main/java/chat/revolt/components/generic/WebMarkdown.kt +++ b/app/src/main/java/chat/revolt/components/generic/WebMarkdown.kt @@ -31,91 +31,6 @@ import androidx.compose.ui.viewinterop.AndroidView import androidx.webkit.WebViewAssetLoader import chat.revolt.activities.InviteActivity import chat.revolt.api.REVOLT_APP -import org.intellij.lang.annotations.Language - -// TODO: Obvious placeholder. -@Language("HTML") -private const val HTML_TEMPLATE = """ - - - - - - - - - -
%s
- - - - - -""" private fun argbAsCssColour(argb: Int): String { val alpha = (argb shr 24 and 0xff) / 255.0f @@ -154,16 +69,6 @@ fun WebMarkdown( modifier = modifier, factory = { context -> WebView(context).apply { - val cssContentColour = argbAsCssColour(contentColour.toArgb()) - val cssPrimaryColour = argbAsCssColour(materialColourScheme.primary.toArgb()) - - val html = String.format( - HTML_TEMPLATE, - cssContentColour, - cssPrimaryColour, - text.replace("&", "&").replace("<", "<").replace(">", ">") - ) - val assetLoader = WebViewAssetLoader.Builder() .setDomain(Uri.parse(REVOLT_APP).host!!) .addPathHandler( @@ -222,12 +127,8 @@ fun WebMarkdown( } } - loadDataWithBaseURL( - REVOLT_APP, - html, - "text/html; charset=utf-8", - "UTF-8", - null + loadUrl( + "https://app.revolt.chat/_android_assets/webmarkdown/renderer.html", ) settings.apply { @@ -245,8 +146,26 @@ fun WebMarkdown( fun onLoaded() { finishedLoading = true } + + @JavascriptInterface + fun getMarkdown(): String { + return text + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + } + + @JavascriptInterface + fun getContentColour(): String { + return argbAsCssColour(contentColour.toArgb()) + } + + @JavascriptInterface + fun getPrimaryColour(): String { + return argbAsCssColour(materialColourScheme.primary.toArgb()) + } }, - "Android" + "Bridge" ) setBackgroundColor(android.graphics.Color.TRANSPARENT)