Add support card
This commit is contained in:
parent
bf7c5ffadc
commit
041e58a038
|
|
@ -22,6 +22,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.BuildConfig
|
import org.lsposed.lspatch.BuildConfig
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.lspatch.R
|
||||||
|
import org.lsposed.lspatch.ui.util.HtmlText
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -38,6 +39,8 @@ fun HomePage() {
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState())
|
||||||
) {
|
) {
|
||||||
InfoCard(snackbarHostState)
|
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,
|
||||||
|
"<b><a href=\"https://github.com/LSPosed/LSPatch\">GitHub</a></b>",
|
||||||
|
"<b><a href=\"https://t.me/LSPosed\">Telegram</a></b>"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,7 @@ import androidx.compose.foundation.rememberScrollState
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.outlined.Api
|
import androidx.compose.material.icons.outlined.*
|
||||||
import androidx.compose.material.icons.outlined.AutoFixHigh
|
|
||||||
import androidx.compose.material.icons.outlined.BugReport
|
|
||||||
import androidx.compose.material.icons.outlined.WorkOutline
|
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
|
@ -165,9 +162,9 @@ private fun ConfiguringFab(onClick: () -> Unit) {
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun sigBypassLvStr(level: Int) = when (level) {
|
private fun sigBypassLvStr(level: Int) = when (level) {
|
||||||
0 -> stringResource(R.string.patch_sigbypasslv_0)
|
0 -> stringResource(R.string.patch_sigbypasslv0)
|
||||||
1 -> stringResource(R.string.patch_sigbypasslv_1)
|
1 -> stringResource(R.string.patch_sigbypasslv1)
|
||||||
2 -> stringResource(R.string.patch_sigbypasslv_2)
|
2 -> stringResource(R.string.patch_sigbypasslv2)
|
||||||
else -> throw IllegalArgumentException("Invalid sigBypassLv: $level")
|
else -> throw IllegalArgumentException("Invalid sigBypassLv: $level")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -239,6 +236,7 @@ private fun PatchOptionsBody(
|
||||||
SettingsCheckBox(
|
SettingsCheckBox(
|
||||||
checked = viewModel.overrideVersionCode,
|
checked = viewModel.overrideVersionCode,
|
||||||
onClick = { viewModel.overrideVersionCode = !viewModel.overrideVersionCode },
|
onClick = { viewModel.overrideVersionCode = !viewModel.overrideVersionCode },
|
||||||
|
icon = Icons.Outlined.Layers,
|
||||||
title = stringResource(R.string.patch_override_version_code),
|
title = stringResource(R.string.patch_override_version_code),
|
||||||
desc = stringResource(R.string.patch_override_version_code_desc)
|
desc = stringResource(R.string.patch_override_version_code_desc)
|
||||||
)
|
)
|
||||||
|
|
@ -246,6 +244,7 @@ private fun PatchOptionsBody(
|
||||||
var expanded by remember { mutableStateOf(false) }
|
var expanded by remember { mutableStateOf(false) }
|
||||||
SettingsItem(
|
SettingsItem(
|
||||||
onClick = { expanded = true },
|
onClick = { expanded = true },
|
||||||
|
icon = Icons.Outlined.Edit,
|
||||||
title = stringResource(R.string.patch_sign),
|
title = stringResource(R.string.patch_sign),
|
||||||
desc = viewModel.sign.mapIndexedNotNull { index, on -> if (on) "V" + (index + 1) else null }.joinToString(" + ").ifEmpty { "None" }
|
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) }
|
var expanded by remember { mutableStateOf(false) }
|
||||||
SettingsItem(
|
SettingsItem(
|
||||||
onClick = { expanded = true },
|
onClick = { expanded = true },
|
||||||
title = stringResource(R.string.patch_sigbypasslv),
|
icon = Icons.Outlined.RemoveModerator,
|
||||||
|
title = stringResource(R.string.patch_sigbypass),
|
||||||
desc = sigBypassLvStr(viewModel.sigBypassLevel)
|
desc = sigBypassLvStr(viewModel.sigBypassLevel)
|
||||||
)
|
)
|
||||||
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -14,6 +14,9 @@
|
||||||
<string name="home_device">Device</string>
|
<string name="home_device">Device</string>
|
||||||
<string name="home_system_abi">System ABI</string>
|
<string name="home_system_abi">System ABI</string>
|
||||||
<string name="home_info_copied">Copied to clipboard</string>
|
<string name="home_info_copied">Copied to clipboard</string>
|
||||||
|
<string name="home_support">Support</string>
|
||||||
|
<string name="home_description">LSPatch is a free non-root Xposed framework based on LSPosed core.</string>
|
||||||
|
<string name="home_view_source_code"><![CDATA[View source code at %1$s<br/>Join our %2$s channel]]></string>
|
||||||
|
|
||||||
<!-- Manage Page -->
|
<!-- Manage Page -->
|
||||||
<string name="page_manage">Manage</string>
|
<string name="page_manage">Manage</string>
|
||||||
|
|
@ -30,10 +33,10 @@
|
||||||
<string name="patch_embed_modules">Embed modules</string>
|
<string name="patch_embed_modules">Embed modules</string>
|
||||||
<string name="patch_debuggable">Debuggable</string>
|
<string name="patch_debuggable">Debuggable</string>
|
||||||
<string name="patch_sign">Sign</string>
|
<string name="patch_sign">Sign</string>
|
||||||
<string name="patch_sigbypasslv">Signature bypass level</string>
|
<string name="patch_sigbypass">Signature bypass</string>
|
||||||
<string name="patch_sigbypasslv_0">lv0: Off</string>
|
<string name="patch_sigbypasslv0">lv0: Off</string>
|
||||||
<string name="patch_sigbypasslv_1">lv1: Bypass PM</string>
|
<string name="patch_sigbypasslv1">lv1: Bypass PM</string>
|
||||||
<string name="patch_sigbypasslv_2">lv2: Bypass PM + openat (libc)</string>
|
<string name="patch_sigbypasslv2">lv2: Bypass PM + openat (libc)</string>
|
||||||
<string name="patch_override_version_code">Override version code</string>
|
<string name="patch_override_version_code">Override version code</string>
|
||||||
<string name="patch_override_version_code_desc">Override the patched app\'s version code to 1\nThis allows downgrade installation</string>
|
<string name="patch_override_version_code_desc">Override the patched app\'s version code to 1\nThis allows downgrade installation</string>
|
||||||
<string name="patch_start">Start Patch</string>
|
<string name="patch_start">Start Patch</string>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue