diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt index 6d715437..aa12ee75 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Module.kt @@ -428,6 +428,20 @@ private fun ModuleList( }, ) { when { + !viewModel.isOverlayAvailable -> { + item { + Box( + modifier = Modifier.fillParentMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + stringResource(R.string.module_overlay_fs_not_available), + textAlign = TextAlign.Center + ) + } + } + } + viewModel.moduleList.isEmpty() -> { item { Box( @@ -537,6 +551,19 @@ fun ModuleItem( Column( modifier = Modifier + .run { + if (module.hasWebUi) { + toggleable( + value = isChecked, + interactionSource = interactionSource, + role = Role.Button, + indication = indication, + onValueChange = { onClick(module) } + ) + } else { + this + } + } .padding(22.dp, 18.dp, 22.dp, 12.dp) ) { Row( diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt index 28291a22..866008e6 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/util/KsuCli.kt @@ -403,6 +403,12 @@ suspend fun getSupportedKmis(): List = withContext(Dispatchers.IO) { out.filter { it.isNotBlank() }.map { it.trim() } } +fun overlayFsAvailable(): Boolean { + val shell = getRootShell() + // check /proc/filesystems + return ShellUtils.fastCmdResult(shell, "cat /proc/filesystems | grep overlay") +} + fun hasMagisk(): Boolean { val shell = getRootShell(true) val result = shell.newJob().add("which magisk").exec() diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt index 4312fa2e..0ee3d56c 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/viewmodel/ModuleViewModel.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.viewModelScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import com.rifsxd.ksunext.ui.util.listModules +import com.rifsxd.ksunext.ui.util.overlayFsAvailable import org.json.JSONArray import org.json.JSONObject import java.text.Collator @@ -45,6 +46,9 @@ class ModuleViewModel : ViewModel() { val changelog: String, ) + var isOverlayAvailable by mutableStateOf(overlayFsAvailable()) + private set + var isRefreshing by mutableStateOf(false) private set @@ -71,6 +75,8 @@ class ModuleViewModel : ViewModel() { val start = SystemClock.elapsedRealtime() kotlin.runCatching { + isOverlayAvailable = overlayFsAvailable() + val result = listModules() Log.i(TAG, "result: $result") diff --git a/manager/app/src/main/res/values-zh-rCN/strings.xml b/manager/app/src/main/res/values-zh-rCN/strings.xml index 290315e8..7d4fd88d 100644 --- a/manager/app/src/main/res/values-zh-rCN/strings.xml +++ b/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -55,6 +55,7 @@ 恢复失败: %s 版本 作者 + OverlayFS被内核禁用,模块不可用。 刷新 显示系统应用 隐藏系统应用 diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 1de03d64..9130d1c5 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -56,6 +56,7 @@ Failed to restore: %s Version Author + Modules are unavailable as OverlayFS is disabled by the kernel. Refresh Show system apps Hide system apps