mirror of
https://github.com/revanced/revanced-manager.git
synced 2025-04-29 21:44:26 +02:00
feat: Start redesign of trust dialog
This commit is contained in:
parent
e10e5e4e3f
commit
690ab655f6
@ -2,7 +2,9 @@ package app.revanced.manager.ui.screen.settings
|
|||||||
|
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
@ -10,10 +12,13 @@ import androidx.compose.foundation.lazy.items
|
|||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Delete
|
import androidx.compose.material.icons.filled.Delete
|
||||||
import androidx.compose.material3.AlertDialog
|
import androidx.compose.material3.AlertDialog
|
||||||
|
import androidx.compose.material3.Card
|
||||||
|
import androidx.compose.material3.CardDefaults
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.OutlinedCard
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextButton
|
import androidx.compose.material3.TextButton
|
||||||
@ -31,8 +36,10 @@ import androidx.compose.runtime.setValue
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.zIndex
|
import androidx.compose.ui.zIndex
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
@ -59,6 +66,7 @@ fun DownloadsSettingsScreen(
|
|||||||
val downloadedApps by viewModel.downloadedApps.collectAsStateWithLifecycle(emptyList())
|
val downloadedApps by viewModel.downloadedApps.collectAsStateWithLifecycle(emptyList())
|
||||||
val pluginStates by viewModel.downloaderPluginStates.collectAsStateWithLifecycle()
|
val pluginStates by viewModel.downloaderPluginStates.collectAsStateWithLifecycle()
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||||
|
val context = LocalContext.current
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
@ -129,15 +137,18 @@ fun DownloadsSettingsScreen(
|
|||||||
.digest(androidSignature.toByteArray())
|
.digest(androidSignature.toByteArray())
|
||||||
hash.toHexString(format = HexFormat.UpperCase)
|
hash.toHexString(format = HexFormat.UpperCase)
|
||||||
}
|
}
|
||||||
|
val appName = packageInfo.applicationInfo?.loadLabel(context.packageManager)
|
||||||
|
?.toString()
|
||||||
|
?: packageName
|
||||||
|
|
||||||
when (state) {
|
when (state) {
|
||||||
is DownloaderPluginState.Loaded -> TrustDialog(
|
is DownloaderPluginState.Loaded -> TrustDialog(
|
||||||
title = R.string.downloader_plugin_revoke_trust_dialog_title,
|
title = R.string.downloader_plugin_revoke_trust_dialog_title,
|
||||||
body = stringResource(
|
body = stringResource(
|
||||||
R.string.downloader_plugin_trust_dialog_body,
|
R.string.downloader_plugin_trust_dialog_body,
|
||||||
packageName,
|
|
||||||
signature
|
|
||||||
),
|
),
|
||||||
|
pluginName = appName,
|
||||||
|
signature = signature,
|
||||||
onDismiss = ::dismiss,
|
onDismiss = ::dismiss,
|
||||||
onConfirm = {
|
onConfirm = {
|
||||||
viewModel.revokePluginTrust(packageName)
|
viewModel.revokePluginTrust(packageName)
|
||||||
@ -152,19 +163,20 @@ fun DownloadsSettingsScreen(
|
|||||||
onDismiss = ::dismiss
|
onDismiss = ::dismiss
|
||||||
)
|
)
|
||||||
|
|
||||||
is DownloaderPluginState.Untrusted -> TrustDialog(
|
is DownloaderPluginState.Untrusted ->
|
||||||
title = R.string.downloader_plugin_trust_dialog_title,
|
TrustDialog(
|
||||||
body = stringResource(
|
title = R.string.downloader_plugin_trust_dialog_title,
|
||||||
R.string.downloader_plugin_trust_dialog_body,
|
body = stringResource(
|
||||||
packageName,
|
R.string.downloader_plugin_trust_dialog_body
|
||||||
signature
|
),
|
||||||
),
|
pluginName = appName,
|
||||||
onDismiss = ::dismiss,
|
signature = signature,
|
||||||
onConfirm = {
|
onDismiss = ::dismiss,
|
||||||
viewModel.trustPlugin(packageName)
|
onConfirm = {
|
||||||
dismiss()
|
viewModel.trustPlugin(packageName)
|
||||||
}
|
dismiss()
|
||||||
)
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,10 +241,27 @@ fun DownloadsSettingsScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun PreviewTrustDialog() {
|
||||||
|
TrustDialog(
|
||||||
|
title = R.string.downloader_plugin_trust_dialog_title,
|
||||||
|
body = stringResource(
|
||||||
|
R.string.downloader_plugin_trust_dialog_body,
|
||||||
|
),
|
||||||
|
onDismiss = { },
|
||||||
|
onConfirm = { },
|
||||||
|
pluginName = "app.revanced.manager.apkmirror",
|
||||||
|
signature = "23 01 84 F6 0B AE 2F EA F2 44 F1 0A 8B AC 05 3C 8F F3 3A 18 3B CC 36 5B 4D 8B 87 6D 2B 7F 48 09"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun TrustDialog(
|
private fun TrustDialog(
|
||||||
@StringRes title: Int,
|
@StringRes title: Int,
|
||||||
body: String,
|
body: String,
|
||||||
|
pluginName: String,
|
||||||
|
signature: String,
|
||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
onConfirm: () -> Unit
|
onConfirm: () -> Unit
|
||||||
) {
|
) {
|
||||||
@ -249,6 +278,35 @@ private fun TrustDialog(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
title = { Text(stringResource(title)) },
|
title = { Text(stringResource(title)) },
|
||||||
text = { Text(body) }
|
text = {
|
||||||
|
Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
|
||||||
|
Text(body)
|
||||||
|
Card {
|
||||||
|
Column(
|
||||||
|
Modifier.padding(12.dp),
|
||||||
|
verticalArrangement = Arrangement.spacedBy(12.dp)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
stringResource(
|
||||||
|
R.string.downloader_plugin_trust_dialog_plugin,
|
||||||
|
pluginName
|
||||||
|
),
|
||||||
|
)
|
||||||
|
OutlinedCard(
|
||||||
|
colors = CardDefaults.outlinedCardColors(
|
||||||
|
containerColor = MaterialTheme.colorScheme.surfaceContainerHighest
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
stringResource(
|
||||||
|
R.string.downloader_plugin_trust_dialog_signature,
|
||||||
|
signature.chunked(2).joinToString(" ")
|
||||||
|
), modifier = Modifier.padding(12.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
@ -137,7 +137,9 @@
|
|||||||
<string name="downloader_plugin_state_untrusted">Untrusted</string>
|
<string name="downloader_plugin_state_untrusted">Untrusted</string>
|
||||||
<string name="downloader_plugin_trust_dialog_title">Trust plugin?</string>
|
<string name="downloader_plugin_trust_dialog_title">Trust plugin?</string>
|
||||||
<string name="downloader_plugin_revoke_trust_dialog_title">Revoke trust?</string>
|
<string name="downloader_plugin_revoke_trust_dialog_title">Revoke trust?</string>
|
||||||
<string name="downloader_plugin_trust_dialog_body">Package name: %1$s\nSignature (SHA-256): %2$s</string>
|
<string name="downloader_plugin_trust_dialog_body">By continuing you\'ve agreed to running external plugins.\n\nDo not allow any suspicious plugin(s) to be installed as they can run arbitrary code.</string>
|
||||||
|
<string name="downloader_plugin_trust_dialog_signature">Signature:\n\n%s</string>
|
||||||
|
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
|
||||||
<string name="downloader_settings_no_apps">No downloaded apps found</string>
|
<string name="downloader_settings_no_apps">No downloaded apps found</string>
|
||||||
|
|
||||||
<string name="search_apps">Search apps…</string>
|
<string name="search_apps">Search apps…</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user