Migrate to Android Gradle Plugin 9

This commit is contained in:
MM20
2026-03-28 16:02:54 +01:00
parent dfad063811
commit 37fa1697dd
59 changed files with 31 additions and 179 deletions

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.kotlin.plugin.compose)
}
@@ -60,6 +59,7 @@ android {
buildFeatures {
compose = true
viewBinding = true
buildConfig = true
}
lint {
@@ -86,7 +86,6 @@ dependencies {
implementation(libs.androidx.navigation3.ui)
implementation(libs.androidx.compose.material3adaptive.navigation3)
implementation(libs.jsoup)
implementation(libs.markdown)
implementation(libs.accompanist.systemuicontroller)
@@ -107,8 +106,6 @@ dependencies {
implementation(libs.androidx.lifecycle.viewmodelcompose)
implementation(libs.androidx.lifecycle.runtimecompose)
implementation(libs.jsoup)
implementation(libs.koin.android)
implementation(libs.koin.androidxcompose)

View File

@@ -1,105 +0,0 @@
package de.mm20.launcher2.ui.utils
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.BaselineShift
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextIndent
import androidx.compose.ui.unit.em
import org.jsoup.Jsoup
import org.jsoup.nodes.Element
import org.jsoup.nodes.TextNode
fun htmlToAnnotatedString(html: String): AnnotatedString {
val document = Jsoup.parse(html.replace("\n", ""))
return buildAnnotatedString {
addNodes(this, document)
}
}
private val blockElements = arrayOf("p", "h1", "h2", "h3", "h4", "h5", "h6", "li", "pre")
private val inlineElements = arrayOf("i", "b", "strong", "em", "sup", "sub", "u", "s", "code", "br")
/**
* @param inParagraph: ParagraphStyles may not be nested, this parameter indicates if we are already inside a paragraph
*/
private fun addNodes(builder: AnnotatedString.Builder, element: Element, inParagraph: Boolean = false) {
val tagName = element.tag().normalName()
when {
blockElements.contains(tagName) -> {
val spanStyle = SpanStyle(
fontSize = when (tagName) {
"h1" -> 2.em
"h2" -> 1.75.em
"h3" -> 1.5.em
"h4" -> 1.25.em
"h5" -> 1.125.em
"h6" -> 1.em
else -> 1.em
},
fontWeight = if (tagName.matches(Regex("h[1-6]"))) FontWeight.Bold else FontWeight.Normal,
fontFamily = if (tagName == "pre") FontFamily.Monospace else null
)
if (!inParagraph) {
builder.withStyle(ParagraphStyle(
textIndent = if (tagName == "li") TextIndent(0.em, 1.em) else TextIndent.None
)) {
withStyle(
spanStyle
) {
if (tagName == "li") builder.append("")
children(builder, element, true)
}
}
} else {
builder.append("\n")
builder.withStyle(
spanStyle
) {
if (tagName == "li") builder.append("")
children(builder, element, true)
}
}
}
inlineElements.contains(tagName) -> {
builder.withStyle(
SpanStyle(
fontStyle = if (tagName == "i" || tagName == "em") FontStyle.Italic else FontStyle.Normal,
fontWeight = if (tagName == "b" || tagName == "strong") FontWeight.Bold else FontWeight.Normal,
textDecoration = when (tagName) {
"u" -> TextDecoration.Underline
"s" -> TextDecoration.LineThrough
else -> TextDecoration.None
},
baselineShift = when (tagName) {
"sup" -> BaselineShift.Superscript
"sub" -> BaselineShift.Subscript
else -> BaselineShift.None
},
fontFamily = if (tagName == "code") FontFamily.Monospace else null
)
) {
if(tagName == "br") builder.append("\n")
children(builder, element, inParagraph)
}
}
else -> {
children(builder, element, inParagraph)
}
}
}
private fun children(builder: AnnotatedString.Builder, element: Element, inParagraph: Boolean) {
for (node in element.childNodes()) {
if (node is TextNode) {
builder.append(node.text())
}
if (node is Element) {
addNodes(builder, node, inParagraph)
}
}
}