Add module uninstallation confirmation dialog and file type validation message

This commit is contained in:
ShirkNeko
2025-04-16 14:36:27 +08:00
parent bcf6809deb
commit 7e1c363bad
3 changed files with 24 additions and 9 deletions

View File

@@ -47,6 +47,8 @@ import java.net.URLEncoder
* 以下内核模块功能由KernelPatch开发经过修改后加入SukiSU Ultra的内核模块功能 * 以下内核模块功能由KernelPatch开发经过修改后加入SukiSU Ultra的内核模块功能
* 开发者zako, Liaokong * 开发者zako, Liaokong
*/ */
var globalModuleFileName: String = ""
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Destination<RootGraph> @Destination<RootGraph>
@Composable @Composable
@@ -70,13 +72,16 @@ fun KpmScreen(
val kpmInstallFailed = stringResource(R.string.kpm_install_failed) val kpmInstallFailed = stringResource(R.string.kpm_install_failed)
val cancel = stringResource(R.string.cancel) val cancel = stringResource(R.string.cancel)
val uninstall = stringResource(R.string.uninstall) val uninstall = stringResource(R.string.uninstall)
val FailedtoCheckModuleFile = stringResource(R.string.snackbar_failed_to_check_module_file) val failedToCheckModuleFile = stringResource(R.string.snackbar_failed_to_check_module_file)
val kpmUninstallSuccess = stringResource(R.string.kpm_uninstall_success) val kpmUninstallSuccess = stringResource(R.string.kpm_uninstall_success)
val kpmUninstallFailed = stringResource(R.string.kpm_uninstall_failed) val kpmUninstallFailed = stringResource(R.string.kpm_uninstall_failed)
val kpmInstallMode = stringResource(R.string.kpm_install_mode) val kpmInstallMode = stringResource(R.string.kpm_install_mode)
val kpmInstallModeLoad = stringResource(R.string.kpm_install_mode_load) val kpmInstallModeLoad = stringResource(R.string.kpm_install_mode_load)
val kpmInstallModeEmbed = stringResource(R.string.kpm_install_mode_embed) val kpmInstallModeEmbed = stringResource(R.string.kpm_install_mode_embed)
val kpmInstallModeDescription = stringResource(R.string.kpm_install_mode_description) val kpmInstallModeDescription = stringResource(R.string.kpm_install_mode_description)
val invalidFileTypeMessage = stringResource(R.string.invalid_file_type)
val confirmTitle = stringResource(R.string.confirm_uninstall_title_with_filename)
val confirmContent = stringResource(R.string.confirm_uninstall_content, globalModuleFileName)
var tempFileForInstall by remember { mutableStateOf<File?>(null) } var tempFileForInstall by remember { mutableStateOf<File?>(null) }
val installModeDialog = rememberCustomDialog { dismiss -> val installModeDialog = rememberCustomDialog { dismiss ->
@@ -167,7 +172,7 @@ fun KpmScreen(
if (!tempFile.name.endsWith(".kpm")) { if (!tempFile.name.endsWith(".kpm")) {
snackBarHost.showSnackbar( snackBarHost.showSnackbar(
message = "文件类型不正确,请选择 .kpm 文件", message = invalidFileTypeMessage,
duration = SnackbarDuration.Short duration = SnackbarDuration.Short
) )
tempFile.delete() tempFile.delete()
@@ -282,10 +287,12 @@ fun KpmScreen(
snackBarHost = snackBarHost, snackBarHost = snackBarHost,
kpmUninstallSuccess = kpmUninstallSuccess, kpmUninstallSuccess = kpmUninstallSuccess,
kpmUninstallFailed = kpmUninstallFailed, kpmUninstallFailed = kpmUninstallFailed,
FailedtoCheckModuleFile = FailedtoCheckModuleFile, failedToCheckModuleFile = failedToCheckModuleFile,
uninstall = uninstall, uninstall = uninstall,
cancel = cancel, cancel = cancel,
confirmDialog = confirmDialog confirmDialog = confirmDialog,
confirmTitle = confirmTitle,
confirmContent = confirmContent
) )
} }
}, },
@@ -369,12 +376,15 @@ private suspend fun handleModuleUninstall(
snackBarHost: SnackbarHostState, snackBarHost: SnackbarHostState,
kpmUninstallSuccess: String, kpmUninstallSuccess: String,
kpmUninstallFailed: String, kpmUninstallFailed: String,
FailedtoCheckModuleFile: String, failedToCheckModuleFile: String,
uninstall: String, uninstall: String,
cancel: String, cancel: String,
confirmTitle : String,
confirmContent : String,
confirmDialog: ConfirmDialogHandle confirmDialog: ConfirmDialogHandle
) { ) {
val moduleFileName = "${module.id}.kpm" val moduleFileName = "${module.id}.kpm"
globalModuleFileName = moduleFileName
val moduleFilePath = "/data/adb/kpm/$moduleFileName" val moduleFilePath = "/data/adb/kpm/$moduleFileName"
val fileExists = try { val fileExists = try {
@@ -383,15 +393,14 @@ private suspend fun handleModuleUninstall(
} catch (e: Exception) { } catch (e: Exception) {
Log.e("KsuCli", "Failed to check module file existence: ${e.message}", e) Log.e("KsuCli", "Failed to check module file existence: ${e.message}", e)
snackBarHost.showSnackbar( snackBarHost.showSnackbar(
message = FailedtoCheckModuleFile, message = failedToCheckModuleFile,
duration = SnackbarDuration.Short duration = SnackbarDuration.Short
) )
false false
} }
val confirmResult = confirmDialog.awaitConfirm( val confirmResult = confirmDialog.awaitConfirm(
title = "将卸载以下kpm模块\n$moduleFileName", title = confirmTitle,
content = "The following kpm modules will be uninstalled\n$moduleFileName", content = confirmContent,
confirm = uninstall, confirm = uninstall,
dismiss = cancel dismiss = cancel
) )

View File

@@ -259,4 +259,7 @@
<string name="confirm_uninstall_confirm">删除</string> <string name="confirm_uninstall_confirm">删除</string>
<string name="confirm_uninstall_dismiss">取消</string> <string name="confirm_uninstall_dismiss">取消</string>
<string name="theme_color">主题颜色</string> <string name="theme_color">主题颜色</string>
<string name="invalid_file_type">文件类型不正确,请选择 .kpm 文件</string>
<string name="confirm_uninstall_title_with_filename">卸载</string>
<string name="confirm_uninstall_content">将卸载以下 kpm 模块:\n%s</string>
</resources> </resources>

View File

@@ -263,4 +263,7 @@
<string name="confirm_uninstall_confirm">removing</string> <string name="confirm_uninstall_confirm">removing</string>
<string name="confirm_uninstall_dismiss">abolish</string> <string name="confirm_uninstall_dismiss">abolish</string>
<string name="theme_color">Theme Color</string> <string name="theme_color">Theme Color</string>
<string name="invalid_file_type">Incorrect file type, select .kpm file</string>
<string name="confirm_uninstall_title_with_filename">uninstallation</string>
<string name="confirm_uninstall_content">The following kpm modules will be uninstalled\n%s</string>
</resources> </resources>