Skip to content

Commit d5a0091

Browse files
committed
feat: improve downloader plugin trust dialog ReVanced/revanced-manager#2420
1 parent 40926fd commit d5a0091

File tree

9 files changed

+96
-68
lines changed

9 files changed

+96
-68
lines changed

api/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- Updated the patcher steps UI to match upstream improvements https://github.com/ReVanced/revanced-manager/pull/2805
2323
- Added a new "Auto-expand running steps" setting for patcher progress widgets
2424
- Upstreamed app info improvements https://github.com/ReVanced/revanced-manager/pull/2896
25+
- Improved downloader plugin trust dialog design https://github.com/ReVanced/revanced-manager/pull/2420
2526

2627

2728
# Bug fixes

app/src/main/java/app/revanced/manager/ui/screen/settings/DownloadsSettingsScreen.kt

Lines changed: 52 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.activity.result.contract.ActivityResultContracts.CreateDocument
55
import androidx.annotation.StringRes
66
import androidx.compose.foundation.clickable
77
import androidx.compose.foundation.layout.Arrangement
8+
import androidx.compose.foundation.layout.Column
89
import androidx.compose.foundation.layout.Row
910
import androidx.compose.foundation.layout.fillMaxSize
1011
import androidx.compose.foundation.layout.fillMaxWidth
@@ -15,11 +16,14 @@ import androidx.compose.material.icons.filled.Delete
1516
import androidx.compose.material.icons.outlined.Delete
1617
import androidx.compose.material.icons.outlined.Save
1718
import androidx.compose.material3.AlertDialog
19+
import androidx.compose.material3.Card
20+
import androidx.compose.material3.CardDefaults
1821
import androidx.compose.material3.ExperimentalMaterial3Api
1922
import androidx.compose.material3.Icon
2023
import androidx.compose.material3.IconButton
2124
import androidx.compose.material3.MaterialTheme
22-
import androidx.compose.material3.Scaffold
25+
import androidx.compose.material3.OutlinedCard
26+
import androidx.compose.material3.Scaffold
2327
import androidx.compose.material3.Text
2428
import androidx.compose.material3.TextButton
2529
import androidx.compose.material3.TopAppBarDefaults
@@ -70,7 +74,6 @@ fun DownloadsSettingsScreen(
7074
val downloadedApps by viewModel.downloadedApps.collectAsStateWithLifecycle(emptyList())
7175
val pluginStates by viewModel.downloaderPluginStates.collectAsStateWithLifecycle()
7276
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
73-
var showDeleteConfirmationDialog by rememberSaveable { mutableStateOf(false) }
7477
var showHelpDialog by rememberSaveable { mutableStateOf(false) } // From PR #37: https://github.com/Jman-Github/Universal-ReVanced-Manager/pull/37
7578
val context = LocalContext.current
7679

@@ -83,19 +86,6 @@ fun DownloadsSettingsScreen(
8386
uri?.let { viewModel.exportSelectedApps(context, it, asArchive = true) }
8487
}
8588

86-
if (showDeleteConfirmationDialog) {
87-
ConfirmDialog(
88-
onDismiss = { showDeleteConfirmationDialog = false },
89-
onConfirm = {
90-
showDeleteConfirmationDialog = false
91-
viewModel.deleteApps()
92-
},
93-
title = stringResource(R.string.downloader_plugin_delete_apps_title),
94-
description = stringResource(R.string.downloader_plugin_delete_apps_description),
95-
icon = Icons.Outlined.Delete
96-
)
97-
}
98-
9989
if (showHelpDialog) {
10090
AlertDialog(
10191
onDismissRequest = { showHelpDialog = false },
@@ -139,12 +129,12 @@ fun DownloadsSettingsScreen(
139129
}) {
140130
Icon(Icons.Outlined.Save, stringResource(R.string.downloaded_apps_export))
141131
}
142-
IconButton(onClick = { showDeleteConfirmationDialog = true }) {
132+
IconButton(onClick = { viewModel.deleteApps() }) {
143133
Icon(Icons.Default.Delete, stringResource(R.string.delete))
144134
}
145135
}
146136
}
147-
)
137+
)
148138
},
149139
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
150140
) { paddingValues ->
@@ -191,16 +181,21 @@ fun DownloadsSettingsScreen(
191181
hash.toHexString(format = HexFormat.UpperCase)
192182
}.getOrNull()
193183
}
184+
val appName = remember(packageName) {
185+
packageInfo.applicationInfo?.loadLabel(context.packageManager)
186+
?.toString()
187+
?: packageName
188+
}
194189

195190
when (dialogType) {
196191
PluginDialogType.Trust -> {
197192
PluginActionDialog(
198193
title = R.string.downloader_plugin_trust_dialog_title,
199194
body = stringResource(
200-
R.string.downloader_plugin_trust_dialog_body,
201-
packageName,
202-
signature.orEmpty()
195+
R.string.downloader_plugin_trust_dialog_body
203196
),
197+
pluginName = appName,
198+
signature = signature.orEmpty(),
204199
primaryLabel = R.string.continue_,
205200
onPrimary = {
206201
viewModel.trustPlugin(packageName)
@@ -217,10 +212,10 @@ fun DownloadsSettingsScreen(
217212
PluginActionDialog(
218213
title = R.string.downloader_plugin_revoke_trust_dialog_title,
219214
body = stringResource(
220-
R.string.downloader_plugin_trust_dialog_body,
221-
packageName,
222-
signature.orEmpty()
215+
R.string.downloader_plugin_trust_dialog_body
223216
),
217+
pluginName = appName,
218+
signature = signature.orEmpty(),
224219
primaryLabel = R.string.continue_,
225220
onPrimary = {
226221
viewModel.revokePluginTrust(packageName)
@@ -366,6 +361,8 @@ private enum class PluginDialogType {
366361
private fun PluginActionDialog(
367362
@StringRes title: Int,
368363
body: String,
364+
pluginName: String,
365+
signature: String,
369366
@StringRes primaryLabel: Int,
370367
onPrimary: () -> Unit,
371368
onUninstall: () -> Unit,
@@ -374,7 +371,37 @@ private fun PluginActionDialog(
374371
AlertDialog(
375372
onDismissRequest = onDismiss,
376373
title = { Text(stringResource(title)) },
377-
text = { Text(body) },
374+
text = {
375+
Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
376+
Text(body)
377+
Card {
378+
Column(
379+
Modifier.padding(12.dp),
380+
verticalArrangement = Arrangement.spacedBy(12.dp)
381+
) {
382+
Text(
383+
stringResource(
384+
R.string.downloader_plugin_trust_dialog_plugin,
385+
pluginName
386+
)
387+
)
388+
OutlinedCard(
389+
colors = CardDefaults.outlinedCardColors(
390+
containerColor = MaterialTheme.colorScheme.surfaceContainerHighest
391+
)
392+
) {
393+
Text(
394+
stringResource(
395+
R.string.downloader_plugin_trust_dialog_signature,
396+
signature.chunked(2).joinToString(" ")
397+
),
398+
modifier = Modifier.padding(12.dp)
399+
)
400+
}
401+
}
402+
}
403+
}
404+
},
378405
dismissButton = {
379406
TextButton(onClick = onUninstall) {
380407
Text(stringResource(R.string.uninstall))
@@ -383,7 +410,7 @@ private fun PluginActionDialog(
383410
confirmButton = {
384411
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
385412
TextButton(onClick = onDismiss) {
386-
Text(stringResource(R.string.dismiss))
413+
Text(stringResource(R.string.cancel))
387414
}
388415
TextButton(onClick = onPrimary) {
389416
Text(stringResource(primaryLabel))

app/src/main/res/values-ja/strings.xml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,13 +367,14 @@
367367
<string name="downloader_plugin_state_failed">読み込みに失敗しました。詳細はクリックしてください</string>
368368
<string name="downloader_plugin_state_untrusted">信頼されていない</string>
369369
<string name="downloader_plugin_trust_dialog_title">プラグインを信頼しますか?</string>
370-
<string name="downloader_plugin_revoke_trust_dialog_title">信頼を取り消しますか?</string>
371-
<string name="downloader_plugin_trust_dialog_body">パッケージ名: %1$s\n署名 (SHA-256): %2$s</string>
372370
<!-- Needs translation -->
373-
<string name="downloader_plugin_trust_dialog_plugin">"Plugin:\n%s"</string>
371+
<string name="downloader_plugin_trust_dialog_body">Continuing will allow this plugin to run on your system.\n\nOnly enable this plugin if you trust it. Plugins can execute arbitrary code and may compromise your device.</string>
372+
<!-- Needs translation -->
373+
<string name="downloader_plugin_trust_dialog_signature">Signature:\n\n%s</string>
374374
<!-- Needs translation -->
375-
<string name="downloader_plugin_trust_dialog_signature">"Signature:\n\n%s"</string>
376-
<string name="downloader_plugin_view_error">エラー詳細を表示</string>
375+
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
376+
<string name="downloader_plugin_revoke_trust_dialog_title">信頼を取り消しますか?</string>
377+
<string name="downloader_plugin_view_error">エラー詳細を表示</string>
377378
<string name="downloader_plugin_failed_dialog_body">「%1$s」の読み込みに失敗しました。エラー詳細を表示するか、プラグインをアンインストールできます。</string>
378379
<string name="downloader_plugin_uninstall_title">プラグインをアンインストールしますか?</string>
379380
<string name="downloader_plugin_uninstall_description">本当に「%1$s」をアンインストールしますか?</string>

app/src/main/res/values-ko/strings.xml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,14 @@
366366
<string name="downloader_plugin_state_failed">로드할 수 없습니다. 자세한 내용을 보려면 여기를 탭하세요</string>
367367
<string name="downloader_plugin_state_untrusted">신뢰하지 않음</string>
368368
<string name="downloader_plugin_trust_dialog_title">플러그인을 신뢰하시겠습니까?</string>
369-
<string name="downloader_plugin_revoke_trust_dialog_title">신뢰하지 않으시겠습니까?</string>
370-
<string name="downloader_plugin_trust_dialog_body">패키지 이름: %1$s\n서명 (SHA-256): %2$s</string>
371369
<!-- Needs translation -->
372-
<string name="downloader_plugin_trust_dialog_plugin">"Plugin:\n%s"</string>
370+
<string name="downloader_plugin_trust_dialog_body">Continuing will allow this plugin to run on your system.\n\nOnly enable this plugin if you trust it. Plugins can execute arbitrary code and may compromise your device.</string>
371+
<!-- Needs translation -->
372+
<string name="downloader_plugin_trust_dialog_signature">Signature:\n\n%s</string>
373373
<!-- Needs translation -->
374-
<string name="downloader_plugin_trust_dialog_signature">"Signature:\n\n%s"</string>
375-
<string name="downloader_plugin_view_error">오류 세부 정보 보기</string>
374+
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
375+
<string name="downloader_plugin_revoke_trust_dialog_title">신뢰하지 않으시겠습니까?</string>
376+
<string name="downloader_plugin_view_error">오류 세부 정보 보기</string>
376377
<string name="downloader_plugin_failed_dialog_body">\"%1$s\"를 로드할 수 없습니다. 오류 세부 정보를 보거나 플러그인을 삭제할 수 있습니다.</string>
377378
<string name="downloader_plugin_uninstall_title">플러그인을 삭제하시겠습니까?</string>
378379
<string name="downloader_plugin_uninstall_description">\"%1$s\"를 삭제하시겠습니까?</string>

app/src/main/res/values-ru/strings.xml

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -160,16 +160,14 @@
160160
<string name="downloader_plugin_state_failed">Не удалось загрузить. Нажмите, чтобы узнать больше</string>
161161
<string name="downloader_plugin_state_trusted">Надежный</string>
162162
<string name="downloader_plugin_state_untrusted">Ненадежный</string>
163-
<string name="downloader_plugin_trust_dialog_body">"Продолжение позволит этому плагину работать в вашей системе.
164-
165-
Включайте этот плагин только в том случае, если вы ему доверяете. Плагины могут выполнять произвольный код и могут поставить под угрозу ваше устройство."</string>
166-
<string name="downloader_plugin_trust_dialog_plugin">"Плагин:
167-
%s"</string>
168-
<string name="downloader_plugin_trust_dialog_signature">"Подпись:
169-
170-
%s"</string>
171-
<string name="downloader_plugin_trust_dialog_title">Доверять плагину?</string>
172-
<string name="downloader_plugins">Плагины</string>
163+
<string name="downloader_plugin_trust_dialog_title">Доверять плагину?</string>
164+
<!-- Needs translation -->
165+
<string name="downloader_plugin_trust_dialog_body">Continuing will allow this plugin to run on your system.\n\nOnly enable this plugin if you trust it. Plugins can execute arbitrary code and may compromise your device.</string>
166+
<!-- Needs translation -->
167+
<string name="downloader_plugin_trust_dialog_signature">Signature:\n\n%s</string>
168+
<!-- Needs translation -->
169+
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
170+
<string name="downloader_plugins">Плагины</string>
173171
<string name="downloader_settings_no_apps">Загруженных приложений не найдено</string>
174172
<string name="downloading_manager_update">Загрузка обновления…</string>
175173
<string name="downloading_patches">Загрузка патчей…</string>

app/src/main/res/values-uk/strings.xml

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -160,16 +160,14 @@
160160
<string name="downloader_plugin_state_failed">Не вдалося завантажити. Натисніть, щоб дізнатися більше</string>
161161
<string name="downloader_plugin_state_trusted">Надійний</string>
162162
<string name="downloader_plugin_state_untrusted">Ненадійний</string>
163-
<string name="downloader_plugin_trust_dialog_body">"Продовження дозволить цьому плагіну працювати у вашій системі.
164-
165-
Увімкніть цей плагін, лише якщо ви йому довіряєте. Плагіни можуть виконувати довільний код і можуть скомпрометувати ваш пристрій."</string>
166-
<string name="downloader_plugin_trust_dialog_plugin">"Плагін:
167-
%s"</string>
168-
<string name="downloader_plugin_trust_dialog_signature">"Підпис:
169-
170-
%s"</string>
171-
<string name="downloader_plugin_trust_dialog_title">Довіряти плагіну?</string>
172-
<string name="downloader_plugins">Плагіни</string>
163+
<string name="downloader_plugin_trust_dialog_title">Довіряти плагіну?</string>
164+
<!-- Needs translation -->
165+
<string name="downloader_plugin_trust_dialog_body">Continuing will allow this plugin to run on your system.\n\nOnly enable this plugin if you trust it. Plugins can execute arbitrary code and may compromise your device.</string>
166+
<!-- Needs translation -->
167+
<string name="downloader_plugin_trust_dialog_signature">Signature:\n\n%s</string>
168+
<!-- Needs translation -->
169+
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
170+
<string name="downloader_plugins">Плагіни</string>
173171
<string name="downloader_settings_no_apps">Завантажених програм не знайдено</string>
174172
<string name="downloading_manager_update">Завантаження оновлення…</string>
175173
<string name="downloading_patches">Завантаження патчів…</string>

app/src/main/res/values-vi/strings.xml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,14 @@
356356
<string name="downloader_plugin_state_failed">Không thể tải được. Nhấn để biết thêm chi tiết</string>
357357
<string name="downloader_plugin_state_untrusted">Không đáng tin</string>
358358
<string name="downloader_plugin_trust_dialog_title">Tin tưởng tiện ích?</string>
359-
<string name="downloader_plugin_revoke_trust_dialog_title">Thu hồi quyền?</string>
360-
<string name="downloader_plugin_trust_dialog_body">Tên gói: %1$s\n\nChữ ký (SHA-256): %2$s</string>
361359
<!-- Needs translation -->
362-
<string name="downloader_plugin_trust_dialog_plugin">"Plugin:\n%s"</string>
360+
<string name="downloader_plugin_trust_dialog_body">Continuing will allow this plugin to run on your system.\n\nOnly enable this plugin if you trust it. Plugins can execute arbitrary code and may compromise your device.</string>
361+
<!-- Needs translation -->
362+
<string name="downloader_plugin_trust_dialog_signature">Signature:\n\n%s</string>
363363
<!-- Needs translation -->
364-
<string name="downloader_plugin_trust_dialog_signature">"Signature:\n\n%s"</string>
365-
<string name="downloader_plugin_view_error">Xem chi tiết lỗi</string>
364+
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
365+
<string name="downloader_plugin_revoke_trust_dialog_title">Thu hồi quyền?</string>
366+
<string name="downloader_plugin_view_error">Xem chi tiết lỗi</string>
366367
<string name="downloader_plugin_failed_dialog_body">Không thể tải %1$s. Bạn có thể xem chi tiết lỗi hoặc gỡ cài đặt tiện tích này.</string>
367368
<string name="downloader_plugin_uninstall_title">Gỡ cài đặt tiện ích?</string>
368369
<string name="downloader_plugin_uninstall_description">Bạn có chắn chắn muốn gỡ cài đặt %1$s?</string>

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -357,13 +357,14 @@
357357
<string name="downloader_plugin_state_failed">加载失败。点击查看更多详情</string>
358358
<string name="downloader_plugin_state_untrusted">不受信任</string>
359359
<string name="downloader_plugin_trust_dialog_title">信任插件?</string>
360-
<string name="downloader_plugin_revoke_trust_dialog_title">撤销信任?</string>
361-
<string name="downloader_plugin_trust_dialog_body">包名:%1$s\n签名 (SHA-256):%2$s</string>
362360
<!-- Needs translation -->
363-
<string name="downloader_plugin_trust_dialog_plugin">"Plugin:\n%s"</string>
361+
<string name="downloader_plugin_trust_dialog_body">Continuing will allow this plugin to run on your system.\n\nOnly enable this plugin if you trust it. Plugins can execute arbitrary code and may compromise your device.</string>
362+
<!-- Needs translation -->
363+
<string name="downloader_plugin_trust_dialog_signature">Signature:\n\n%s</string>
364364
<!-- Needs translation -->
365-
<string name="downloader_plugin_trust_dialog_signature">"Signature:\n\n%s"</string>
366-
<string name="downloader_plugin_view_error">查看错误详情</string>
365+
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
366+
<string name="downloader_plugin_revoke_trust_dialog_title">撤销信任?</string>
367+
<string name="downloader_plugin_view_error">查看错误详情</string>
367368
<string name="downloader_plugin_failed_dialog_body">加载 \"%1$s\" 失败。您可以查看错误详情或卸载该插件。</string>
368369
<string name="downloader_plugin_uninstall_title">卸载插件?</string>
369370
<string name="downloader_plugin_uninstall_description">您确定要卸载 \"%1$s\" 吗?</string>

0 commit comments

Comments
 (0)