From d05ec413797759b8b5cd25c603b1ecda362e46f9 Mon Sep 17 00:00:00 2001 From: weishu Date: Wed, 12 Jul 2023 13:00:40 +0800 Subject: [PATCH] manager: show loading dialog when uninstall/enable/disable module. --- .../me/weishu/kernelsu/ui/screen/Module.kt | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt index e80bb111..0f12a569 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt @@ -34,11 +34,14 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import me.weishu.kernelsu.Natives import me.weishu.kernelsu.R import me.weishu.kernelsu.ui.component.ConfirmDialog import me.weishu.kernelsu.ui.component.ConfirmResult +import me.weishu.kernelsu.ui.component.LoadingDialog import me.weishu.kernelsu.ui.screen.destinations.InstallScreenDestination import me.weishu.kernelsu.ui.util.* import me.weishu.kernelsu.ui.viewmodel.ModuleViewModel @@ -95,6 +98,8 @@ fun ModuleScreen(navigator: DestinationsNavigator) { ConfirmDialog() + LoadingDialog() + when { hasMagisk -> { Box( @@ -153,7 +158,12 @@ private fun ModuleList( return } - val success = uninstallModule(module.id) + val success = dialogHost.withLoading { + withContext(Dispatchers.IO) { + uninstallModule(module.id) + } + } + if (success) { viewModel.fetchModuleList() } @@ -214,10 +224,14 @@ private fun ModuleList( ModuleItem(module, isChecked, updateUrl, onUninstall = { scope.launch { onModuleUninstall(module) } }, onCheckChanged = { - val success = toggleModule(module.id, !isChecked) - if (success) { - isChecked = it - scope.launch { + scope.launch { + val success = dialogHost.withLoading { + withContext(Dispatchers.IO) { + toggleModule(module.id, !isChecked) + } + } + if (success) { + isChecked = it viewModel.fetchModuleList() val result = snackBarHost.showSnackbar( @@ -226,10 +240,10 @@ private fun ModuleList( if (result == SnackbarResult.ActionPerformed) { reboot() } + } else { + val message = if (isChecked) failedDisable else failedEnable + snackBarHost.showSnackbar(message.format(module.name)) } - } else scope.launch { - val message = if (isChecked) failedDisable else failedEnable - snackBarHost.showSnackbar(message.format(module.name)) } }, onUpdate = {