diff --git a/manager/src/main/java/org/lsposed/lspatch/ui/page/HomePage.kt b/manager/src/main/java/org/lsposed/lspatch/ui/page/HomePage.kt
index e040150..8724bca 100644
--- a/manager/src/main/java/org/lsposed/lspatch/ui/page/HomePage.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/ui/page/HomePage.kt
@@ -22,6 +22,7 @@ import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import org.lsposed.lspatch.BuildConfig
import org.lsposed.lspatch.R
+import org.lsposed.lspatch.ui.util.HtmlText
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -38,6 +39,8 @@ fun HomePage() {
.verticalScroll(rememberScrollState())
) {
InfoCard(snackbarHostState)
+ Spacer(Modifier.height(16.dp))
+ SupportCard()
}
}
}
@@ -120,3 +123,34 @@ private fun InfoCard(snackbarHostState: SnackbarHostState) {
}
}
}
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Preview
+@Composable
+private fun SupportCard() {
+ Card {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(24.dp)
+ ) {
+ Text(
+ text = stringResource(R.string.home_support),
+ fontWeight = FontWeight.SemiBold,
+ style = MaterialTheme.typography.titleMedium
+ )
+ Text(
+ modifier = Modifier.padding(vertical = 8.dp),
+ text = stringResource(R.string.home_description),
+ style = MaterialTheme.typography.bodyMedium
+ )
+ HtmlText(
+ stringResource(
+ R.string.home_view_source_code,
+ "GitHub",
+ "Telegram"
+ )
+ )
+ }
+ }
+}
diff --git a/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt b/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt
index c52abcf..86d4180 100644
--- a/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt
+++ b/manager/src/main/java/org/lsposed/lspatch/ui/page/NewPatchPage.kt
@@ -17,10 +17,7 @@ import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.outlined.Api
-import androidx.compose.material.icons.outlined.AutoFixHigh
-import androidx.compose.material.icons.outlined.BugReport
-import androidx.compose.material.icons.outlined.WorkOutline
+import androidx.compose.material.icons.outlined.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
@@ -165,9 +162,9 @@ private fun ConfiguringFab(onClick: () -> Unit) {
@Composable
private fun sigBypassLvStr(level: Int) = when (level) {
- 0 -> stringResource(R.string.patch_sigbypasslv_0)
- 1 -> stringResource(R.string.patch_sigbypasslv_1)
- 2 -> stringResource(R.string.patch_sigbypasslv_2)
+ 0 -> stringResource(R.string.patch_sigbypasslv0)
+ 1 -> stringResource(R.string.patch_sigbypasslv1)
+ 2 -> stringResource(R.string.patch_sigbypasslv2)
else -> throw IllegalArgumentException("Invalid sigBypassLv: $level")
}
@@ -239,6 +236,7 @@ private fun PatchOptionsBody(
SettingsCheckBox(
checked = viewModel.overrideVersionCode,
onClick = { viewModel.overrideVersionCode = !viewModel.overrideVersionCode },
+ icon = Icons.Outlined.Layers,
title = stringResource(R.string.patch_override_version_code),
desc = stringResource(R.string.patch_override_version_code_desc)
)
@@ -246,6 +244,7 @@ private fun PatchOptionsBody(
var expanded by remember { mutableStateOf(false) }
SettingsItem(
onClick = { expanded = true },
+ icon = Icons.Outlined.Edit,
title = stringResource(R.string.patch_sign),
desc = viewModel.sign.mapIndexedNotNull { index, on -> if (on) "V" + (index + 1) else null }.joinToString(" + ").ifEmpty { "None" }
)
@@ -267,7 +266,8 @@ private fun PatchOptionsBody(
var expanded by remember { mutableStateOf(false) }
SettingsItem(
onClick = { expanded = true },
- title = stringResource(R.string.patch_sigbypasslv),
+ icon = Icons.Outlined.RemoveModerator,
+ title = stringResource(R.string.patch_sigbypass),
desc = sigBypassLvStr(viewModel.sigBypassLevel)
)
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
diff --git a/manager/src/main/java/org/lsposed/lspatch/ui/util/HtmlText.kt b/manager/src/main/java/org/lsposed/lspatch/ui/util/HtmlText.kt
new file mode 100644
index 0000000..56a5299
--- /dev/null
+++ b/manager/src/main/java/org/lsposed/lspatch/ui/util/HtmlText.kt
@@ -0,0 +1,20 @@
+package org.lsposed.lspatch.ui.util
+
+import android.text.method.LinkMovementMethod
+import android.widget.TextView
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.viewinterop.AndroidView
+import androidx.core.text.HtmlCompat
+
+@Composable
+fun HtmlText(html: String, modifier: Modifier = Modifier) {
+ AndroidView(
+ modifier = modifier,
+ factory = { context -> TextView(context) },
+ update = {
+ it.movementMethod = LinkMovementMethod.getInstance()
+ it.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT)
+ }
+ )
+}
diff --git a/manager/src/main/res/values/strings.xml b/manager/src/main/res/values/strings.xml
index e980d60..66a04e0 100644
--- a/manager/src/main/res/values/strings.xml
+++ b/manager/src/main/res/values/strings.xml
@@ -14,6 +14,9 @@
Device
System ABI
Copied to clipboard
+ Support
+ LSPatch is a free non-root Xposed framework based on LSPosed core.
+ Join our %2$s channel]]>
Manage
@@ -30,10 +33,10 @@
Embed modules
Debuggable
Sign
- Signature bypass level
- lv0: Off
- lv1: Bypass PM
- lv2: Bypass PM + openat (libc)
+ Signature bypass
+ lv0: Off
+ lv1: Bypass PM
+ lv2: Bypass PM + openat (libc)
Override version code
Override the patched app\'s version code to 1\nThis allows downgrade installation
Start Patch