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 = {