diff --git a/manager/app/build.gradle.kts b/manager/app/build.gradle.kts index 0da361dd..464146c4 100644 --- a/manager/app/build.gradle.kts +++ b/manager/app/build.gradle.kts @@ -138,15 +138,14 @@ dependencies { implementation(libs.kotlinx.coroutines.core) + implementation(libs.markdown) + implementation(libs.markdown.ext.tables) + implementation(libs.androidx.webkit) implementation(libs.lsposed.cxx) implementation(libs.miuix) - implementation(libs.haze) - implementation(libs.capsule) - - implementation(libs.twain) -} \ No newline at end of file +} diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/component/Dialog.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/component/Dialog.kt index e7c6852c..d32e4ecf 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/component/Dialog.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/component/Dialog.kt @@ -29,7 +29,6 @@ import androidx.compose.ui.layout.Layout import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import com.colintheshots.twain.MarkdownText import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.async @@ -418,12 +417,7 @@ private fun ConfirmDialog( content = { visuals.content?.let { if (visuals.isMarkdown) { - MarkdownText( - markdown = visuals.content!!, - color = MiuixTheme.colorScheme.onSurface, - modifier = Modifier - .fillMaxWidth() - ) + MarkdownContent(content = visuals.content!!) } else { Text(text = visuals.content!!) } diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/component/MarkdownContent.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/component/MarkdownContent.kt index eb1be919..0bb249a7 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/component/MarkdownContent.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/component/MarkdownContent.kt @@ -15,6 +15,9 @@ import androidx.compose.ui.draw.clipToBounds import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.viewinterop.AndroidView import io.noties.markwon.Markwon +import io.noties.markwon.ext.tables.TableAwareMovementMethod +import io.noties.markwon.ext.tables.TablePlugin +import io.noties.markwon.movement.MovementMethodPlugin import io.noties.markwon.utils.NoCopySpannableFactory import top.yukonga.miuix.kmp.theme.MiuixTheme @@ -45,7 +48,11 @@ fun MarkdownContent(content: String) { .clipToBounds(), update = { val textView = it.getChildAt(0) as TextView - Markwon.create(textView.context).setMarkdown(textView, content) + val markwon = Markwon.builder(textView.context) + .usePlugin(TablePlugin.create(textView.context)) + .usePlugin(MovementMethodPlugin.create(TableAwareMovementMethod.create())) + .build() + markwon.setMarkdown(textView, content) textView.setTextColor(contentColor) } ) diff --git a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ModuleRepo.kt b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ModuleRepo.kt index 1e819daf..539511c1 100644 --- a/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ModuleRepo.kt +++ b/manager/app/src/main/java/com/sukisu/ultra/ui/screen/ModuleRepo.kt @@ -49,7 +49,6 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel -import com.colintheshots.twain.MarkdownText import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.RootGraph import com.ramcosta.composedestinations.generated.destinations.FlashScreenDestination @@ -67,6 +66,7 @@ import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize import com.sukisu.ultra.R import com.sukisu.ultra.ksuApp +import com.sukisu.ultra.ui.component.MarkdownContent import com.sukisu.ultra.ui.component.SearchBox import com.sukisu.ultra.ui.component.SearchPager import com.sukisu.ultra.ui.component.rememberConfirmDialog @@ -92,7 +92,6 @@ import top.yukonga.miuix.kmp.icon.MiuixIcons import top.yukonga.miuix.kmp.icon.icons.useful.Back import top.yukonga.miuix.kmp.icon.icons.useful.NavigatorSwitch import top.yukonga.miuix.kmp.icon.icons.useful.Save -import top.yukonga.miuix.kmp.theme.MiuixTheme import top.yukonga.miuix.kmp.theme.MiuixTheme.colorScheme import top.yukonga.miuix.kmp.utils.PressFeedbackType import top.yukonga.miuix.kmp.utils.getWindowSize @@ -622,12 +621,7 @@ fun ModuleRepoDetailScreen( insideMargin = PaddingValues(16.dp) ) { Column { - MarkdownText( - markdown = readmeText!!, - color = colorScheme.onSurface, - modifier = Modifier - .fillMaxWidth() - ) + MarkdownContent(content = readmeText!!) } } } diff --git a/manager/gradle/libs.versions.toml b/manager/gradle/libs.versions.toml index 5ad6d1ae..db54a8fe 100644 --- a/manager/gradle/libs.versions.toml +++ b/manager/gradle/libs.versions.toml @@ -10,7 +10,7 @@ activity-compose = "1.11.0" kotlinx-coroutines = "1.10.2" coil-compose = "2.7.0" compose-destination = "2.3.0" -twain = "0.3.2" +markdown = "4.6.2" webkit = "1.14.0" parcelablelist = "2.0.1" ndk = "29.0.14206865" @@ -66,6 +66,9 @@ kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-c compose-destinations-core = { group = "io.github.raamcosta.compose-destinations", name = "core", version.ref = "compose-destination" } compose-destinations-ksp = { group = "io.github.raamcosta.compose-destinations", name = "ksp", version.ref = "compose-destination" } +markdown = { group = "io.noties.markwon", name = "core", version.ref = "markdown" } +markdown-ext-tables = { group = "io.noties.markwon", name = "ext-tables", version.ref = "markdown" } + lsposed-cxx = { module = "org.lsposed.libcxx:libcxx", version.ref = "ndk" } miuix = { module = "top.yukonga.miuix.kmp:miuix-android", version.ref = "miuix" } @@ -73,6 +76,7 @@ miuix = { module = "top.yukonga.miuix.kmp:miuix-android", version.ref = "miuix" haze = { module = "dev.chrisbanes.haze:haze-android", version.ref = "haze" } capsule = { module = "io.github.kyant0:capsule", version.ref = "capsule" } + twain = { module = "com.colintheshots:twain", version.ref = "twain" } androidx-documentfile = { group = "androidx.documentfile", name = "documentfile", version.ref = "documentfile" }