@@ -2,6 +2,8 @@ package app.revanced.manager.ui.screen.settings
22
33import androidx.annotation.StringRes
44import androidx.compose.foundation.clickable
5+ import androidx.compose.foundation.layout.Arrangement
6+ import androidx.compose.foundation.layout.Column
57import androidx.compose.foundation.layout.fillMaxSize
68import androidx.compose.foundation.layout.fillMaxWidth
79import androidx.compose.foundation.layout.padding
@@ -10,10 +12,13 @@ import androidx.compose.material.icons.Icons
1012import androidx.compose.material.icons.filled.Delete
1113import androidx.compose.material.icons.outlined.Delete
1214import androidx.compose.material3.AlertDialog
15+ import androidx.compose.material3.Card
16+ import androidx.compose.material3.CardDefaults
1317import androidx.compose.material3.ExperimentalMaterial3Api
1418import androidx.compose.material3.Icon
1519import androidx.compose.material3.IconButton
1620import androidx.compose.material3.MaterialTheme
21+ import androidx.compose.material3.OutlinedCard
1722import androidx.compose.material3.Scaffold
1823import androidx.compose.material3.Text
1924import androidx.compose.material3.TextButton
@@ -28,6 +33,7 @@ import androidx.compose.runtime.saveable.rememberSaveable
2833import androidx.compose.runtime.setValue
2934import androidx.compose.ui.Modifier
3035import androidx.compose.ui.input.nestedscroll.nestedScroll
36+ import androidx.compose.ui.platform.LocalContext
3137import androidx.compose.ui.res.stringResource
3238import androidx.compose.ui.text.style.TextAlign
3339import androidx.compose.ui.unit.dp
@@ -36,10 +42,10 @@ import app.revanced.manager.R
3642import app.revanced.manager.network.downloader.DownloaderPluginState
3743import app.revanced.manager.ui.component.AppLabel
3844import app.revanced.manager.ui.component.AppTopBar
45+ import app.revanced.manager.ui.component.ConfirmDialog
3946import app.revanced.manager.ui.component.ExceptionViewerDialog
4047import app.revanced.manager.ui.component.GroupHeader
4148import app.revanced.manager.ui.component.LazyColumnWithScrollbar
42- import app.revanced.manager.ui.component.ConfirmDialog
4349import app.revanced.manager.ui.component.haptics.HapticCheckbox
4450import app.revanced.manager.ui.component.settings.SettingsListItem
4551import app.revanced.manager.ui.viewmodel.DownloadsViewModel
@@ -52,6 +58,7 @@ fun DownloadsSettingsScreen(
5258 onBackClick : () -> Unit ,
5359 viewModel : DownloadsViewModel = koinViewModel()
5460) {
61+ val context = LocalContext .current
5562 val downloadedApps by viewModel.downloadedApps.collectAsStateWithLifecycle(emptyList())
5663 val pluginStates by viewModel.downloaderPluginStates.collectAsStateWithLifecycle()
5764 val scrollBehavior = TopAppBarDefaults .pinnedScrollBehavior(rememberTopAppBarState())
@@ -75,7 +82,7 @@ fun DownloadsSettingsScreen(
7582 onBackClick = onBackClick,
7683 actions = {
7784 if (viewModel.appSelection.isNotEmpty()) {
78- IconButton (onClick = { showDeleteConfirmationDialog = true }) {
85+ IconButton (onClick = { viewModel.deleteApps() }) {
7986 Icon (Icons .Default .Delete , stringResource(R .string.delete))
8087 }
8188 }
@@ -121,6 +128,11 @@ fun DownloadsSettingsScreen(
121128 .digest(androidSignature.toByteArray())
122129 hash.toHexString(format = HexFormat .UpperCase )
123130 }
131+ val appName = remember {
132+ packageInfo.applicationInfo?.loadLabel(context.packageManager)
133+ ?.toString()
134+ ? : packageName
135+ }
124136
125137 when (state) {
126138 is DownloaderPluginState .Loaded -> TrustDialog (
@@ -130,6 +142,8 @@ fun DownloadsSettingsScreen(
130142 packageName,
131143 signature
132144 ),
145+ pluginName = appName,
146+ signature = signature,
133147 onDismiss = ::dismiss,
134148 onConfirm = {
135149 viewModel.revokePluginTrust(packageName)
@@ -147,10 +161,10 @@ fun DownloadsSettingsScreen(
147161 is DownloaderPluginState .Untrusted -> TrustDialog (
148162 title = R .string.downloader_plugin_trust_dialog_title,
149163 body = stringResource(
150- R .string.downloader_plugin_trust_dialog_body,
151- packageName,
152- signature
164+ R .string.downloader_plugin_trust_dialog_body
153165 ),
166+ pluginName = appName,
167+ signature = signature,
154168 onDismiss = ::dismiss,
155169 onConfirm = {
156170 viewModel.trustPlugin(packageName)
@@ -226,6 +240,8 @@ fun DownloadsSettingsScreen(
226240private fun TrustDialog (
227241 @StringRes title : Int ,
228242 body : String ,
243+ pluginName : String ,
244+ signature : String ,
229245 onDismiss : () -> Unit ,
230246 onConfirm : () -> Unit
231247) {
@@ -238,10 +254,39 @@ private fun TrustDialog(
238254 },
239255 dismissButton = {
240256 TextButton (onClick = onDismiss) {
241- Text (stringResource(R .string.dismiss ))
257+ Text (stringResource(R .string.cancel ))
242258 }
243259 },
244260 title = { Text (stringResource(title)) },
245- text = { Text (body) }
261+ text = {
262+ Column (verticalArrangement = Arrangement .spacedBy(12 .dp)) {
263+ Text (body)
264+ Card {
265+ Column (
266+ Modifier .padding(12 .dp),
267+ verticalArrangement = Arrangement .spacedBy(12 .dp)
268+ ) {
269+ Text (
270+ stringResource(
271+ R .string.downloader_plugin_trust_dialog_plugin,
272+ pluginName
273+ ),
274+ )
275+ OutlinedCard (
276+ colors = CardDefaults .outlinedCardColors(
277+ containerColor = MaterialTheme .colorScheme.surfaceContainerHighest
278+ )
279+ ) {
280+ Text (
281+ stringResource(
282+ R .string.downloader_plugin_trust_dialog_signature,
283+ signature.chunked(2 ).joinToString(" " )
284+ ), modifier = Modifier .padding(12 .dp)
285+ )
286+ }
287+ }
288+ }
289+ }
290+ }
246291 )
247292}
0 commit comments