From f71de1742a564cc90cbc83a373d9f746865c6c36 Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Tue, 1 Apr 2025 16:16:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96KPM=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=9A=84=E8=8E=B7=E5=8F=96=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=AE=9A=E6=97=B6=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=B9=B6=E8=B0=83=E6=95=B4=E7=A9=BA?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shirkneko/zako/sukisu/ui/screen/kpm.kt | 121 ++++++++---------- 1 file changed, 56 insertions(+), 65 deletions(-) diff --git a/manager/app/src/main/java/shirkneko/zako/sukisu/ui/screen/kpm.kt b/manager/app/src/main/java/shirkneko/zako/sukisu/ui/screen/kpm.kt index 30dc79eb..3d8574da 100644 --- a/manager/app/src/main/java/shirkneko/zako/sukisu/ui/screen/kpm.kt +++ b/manager/app/src/main/java/shirkneko/zako/sukisu/ui/screen/kpm.kt @@ -1,5 +1,3 @@ -package shirkneko.zako.sukisu.ui.screen - import android.app.Activity.RESULT_OK import android.content.Context import android.content.Intent @@ -14,8 +12,6 @@ import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.* import androidx.compose.material3.* -import androidx.compose.material3.pulltorefresh.PullToRefreshBox -import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -27,6 +23,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.RootGraph import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlinx.coroutines.delay import kotlinx.coroutines.launch import shirkneko.zako.sukisu.R import shirkneko.zako.sukisu.ui.component.ConfirmResult @@ -42,7 +39,6 @@ import java.io.File import androidx.core.content.edit import shirkneko.zako.sukisu.ui.theme.ThemeConfig - /** * KPM 管理界面 * 以下内核模块功能由KernelPatch开发,经过修改后加入SukiSU Ultra的内核模块功能 @@ -132,8 +128,9 @@ fun KpmScreen( } LaunchedEffect(Unit) { - if (viewModel.moduleList.isEmpty()) { + while(true) { viewModel.fetchModuleList() + delay(5000) } } @@ -206,69 +203,63 @@ fun KpmScreen( } } - PullToRefreshBox( - onRefresh = { viewModel.fetchModuleList() }, - isRefreshing = viewModel.isRefreshing, - modifier = Modifier, - ) { - if (viewModel.moduleList.isEmpty()) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - Text( - stringResource(R.string.kpm_empty), - textAlign = TextAlign.Center - ) - } - } else { - LazyColumn( - modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(16.dp), - verticalArrangement = Arrangement.spacedBy(16.dp) - ) { - items(viewModel.moduleList) { module -> - val kpmUninstallConfirm = String.format(kpmUninstallConfirmTemplate, module.name) - KpmModuleItem( - module = module, - onUninstall = { - scope.launch { - val confirmResult = confirmDialog.awaitConfirm( - title = kpmUninstall, - content = kpmUninstallConfirm, - confirm = uninstall, - dismiss = cancel - ) - if (confirmResult == ConfirmResult.Confirmed) { - val success = loadingDialog.withLoading { - try { - unloadKpmModule(module.id) - true - } catch (e: Exception) { - Log.e("KsuCli", "Failed to unload KPM module: ${e.message}") - false - } - } - if (success) { - viewModel.fetchModuleList() - snackBarHost.showSnackbar( - message = kpmUninstallSuccess, - duration = SnackbarDuration.Short - ) - } else { - snackBarHost.showSnackbar( - message = kpmUninstallFailed, - duration = SnackbarDuration.Short - ) + if (viewModel.moduleList.isEmpty()) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + stringResource(R.string.kpm_empty), + textAlign = TextAlign.Center + ) + } + } else { + LazyColumn( + modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + items(viewModel.moduleList) { module -> + val kpmUninstallConfirm = String.format(kpmUninstallConfirmTemplate, module.name) + KpmModuleItem( + module = module, + onUninstall = { + scope.launch { + val confirmResult = confirmDialog.awaitConfirm( + title = kpmUninstall, + content = kpmUninstallConfirm, + confirm = uninstall, + dismiss = cancel + ) + if (confirmResult == ConfirmResult.Confirmed) { + val success = loadingDialog.withLoading { + try { + unloadKpmModule(module.id) + true + } catch (e: Exception) { + Log.e("KsuCli", "Failed to unload KPM module: ${e.message}") + false } } + if (success) { + viewModel.fetchModuleList() + snackBarHost.showSnackbar( + message = kpmUninstallSuccess, + duration = SnackbarDuration.Short + ) + } else { + snackBarHost.showSnackbar( + message = kpmUninstallFailed, + duration = SnackbarDuration.Short + ) + } } - }, - onControl = { - viewModel.loadModuleDetail(module.id) } - ) - } + }, + onControl = { + viewModel.loadModuleDetail(module.id) + } + ) } } }