diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/markdown/RenderContentAsMarkdown.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/markdown/RenderContentAsMarkdown.kt index 4be4fcb40..47f05e6ec 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/markdown/RenderContentAsMarkdown.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/markdown/RenderContentAsMarkdown.kt @@ -26,15 +26,17 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.platform.UriHandler import androidx.compose.ui.tooling.preview.Preview +import com.halilibo.richtext.commonmark.CommonMarkdownParseOptions import com.halilibo.richtext.commonmark.CommonmarkAstNodeParser -import com.halilibo.richtext.commonmark.MarkdownParseOptions import com.halilibo.richtext.markdown.BasicMarkdown import com.halilibo.richtext.ui.material3.RichText import com.vitorpamplona.amethyst.model.LocalCache @@ -69,24 +71,25 @@ fun RenderContentAsMarkdown( accountViewModel: AccountViewModel, nav: INav, ) { - val uri = LocalUriHandler.current + val uriHandler = LocalUriHandler.current val onClick = - remember { - { link: String -> - val route = uriToRoute(link, accountViewModel.account) - if (route != null) { - nav.nav(route) - } else { - runCatching { uri.openUri(link) } + remember(uriHandler) { + object : UriHandler { + override fun openUri(uri: String) { + val route = uriToRoute(uri, accountViewModel.account) + if (route != null) { + nav.nav(route) + } else { + runCatching { uriHandler.openUri(uri) } + } } - Unit } } ProvideTextStyle(MarkdownTextStyle) { val astNode = remember(content) { - CommonmarkAstNodeParser(MarkdownParseOptions.MarkdownWithLinks).parse(content) + CommonmarkAstNodeParser(CommonMarkdownParseOptions.MarkdownWithLinks).parse(content) } val renderer = @@ -103,12 +106,13 @@ fun RenderContentAsMarkdown( ) } - RichText( - style = MaterialTheme.colorScheme.markdownStyle, - linkClickHandler = onClick, - renderer = renderer, - ) { - BasicMarkdown(astNode) + CompositionLocalProvider(LocalUriHandler provides onClick) { + RichText( + style = MaterialTheme.colorScheme.markdownStyle, + renderer = renderer, + ) { + BasicMarkdown(astNode) + } } } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt index 4d6e95a21..92bf2d60e 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/keyBackup/AccountBackupDialog.kt @@ -83,8 +83,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.fragment.app.FragmentActivity +import com.halilibo.richtext.commonmark.CommonMarkdownParseOptions import com.halilibo.richtext.commonmark.CommonmarkAstNodeParser -import com.halilibo.richtext.commonmark.MarkdownParseOptions import com.halilibo.richtext.markdown.BasicMarkdown import com.halilibo.richtext.ui.RichTextStyle import com.halilibo.richtext.ui.material3.RichText @@ -177,7 +177,7 @@ private fun DialogContents( val astNode1 = remember { - CommonmarkAstNodeParser(MarkdownParseOptions.MarkdownWithLinks).parse(content1) + CommonmarkAstNodeParser(CommonMarkdownParseOptions.MarkdownWithLinks).parse(content1) } RichText( @@ -205,7 +205,7 @@ private fun DialogContents( val astNode = remember { - CommonmarkAstNodeParser(MarkdownParseOptions.MarkdownWithLinks).parse(content) + CommonmarkAstNodeParser(CommonMarkdownParseOptions.MarkdownWithLinks).parse(content) } RichText( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt index 29a1e50a6..4c75a29de 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/theme/Theme.kt @@ -20,6 +20,8 @@ */ package com.vitorpamplona.amethyst.ui.theme +import android.R.attr.fontFamily +import android.R.id.primary import android.app.Activity import android.app.UiModeManager import android.content.Context @@ -49,6 +51,7 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalView import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.TextLinkStyles import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.unit.dp @@ -292,8 +295,11 @@ val MarkDownStyleOnDark = stringStyle = RichTextDefaults.stringStyle?.copy( linkStyle = - SpanStyle( - color = DarkColorPalette.primary, + TextLinkStyles( + style = + SpanStyle( + color = DarkColorPalette.primary, + ), ), codeStyle = SpanStyle( @@ -330,8 +336,11 @@ val MarkDownStyleOnLight = stringStyle = RichTextDefaults.stringStyle?.copy( linkStyle = - SpanStyle( - color = LightColorPalette.primary, + TextLinkStyles( + style = + SpanStyle( + color = LightColorPalette.primary, + ), ), codeStyle = SpanStyle( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 896582390..65f3e4009 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -34,7 +34,7 @@ lazysodiumAndroid = "5.2.0" lazysodiumJava = "5.2.0" lifecycleRuntimeKtx = "2.9.4" lightcompressor = "1.3.3" -markdown = "e1151c8" +markdown = "f92ef49c9d" media3 = "1.8.0" mockk = "1.14.5" kotlinx-coroutines-test = "1.10.2"