From d9d1c874abe3d619866c5b1b590cc214e5321878 Mon Sep 17 00:00:00 2001 From: rifsxd Date: Fri, 30 May 2025 02:09:13 +0600 Subject: [PATCH 1/2] manager: improved module update detection and pre-load applist and modulelist --- .../java/com/rifsxd/ksunext/ui/screen/Home.kt | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Home.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Home.kt index 54ce3986..a766cc28 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Home.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Home.kt @@ -51,6 +51,7 @@ import com.rifsxd.ksunext.ui.component.rememberConfirmDialog import com.rifsxd.ksunext.ui.util.* import com.rifsxd.ksunext.ui.util.module.LatestVersionInfo import com.rifsxd.ksunext.ui.viewmodel.ModuleViewModel +import com.rifsxd.ksunext.ui.viewmodel.SuperUserViewModel import java.util.* @OptIn(ExperimentalMaterial3Api::class) @@ -87,10 +88,22 @@ fun HomeScreen(navigator: DestinationsNavigator) { val lkmMode = ksuVersion?.let { if (it >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && kernelVersion.isGKI()) Natives.isLkmMode else null } - + + val superUserViewModel: SuperUserViewModel = viewModel() + val moduleViewModel: ModuleViewModel = viewModel() + + LaunchedEffect(Unit) { + if (superUserViewModel.appList.isEmpty()) { + superUserViewModel.fetchAppList() + } + + if (moduleViewModel.moduleList.isEmpty()) { + moduleViewModel.fetchModuleList() + } + } + val moduleUpdateCount = moduleViewModel.moduleList.count { - // Only count modules when update available (updateUrl is not empty) moduleViewModel.checkUpdate(it).first.isNotEmpty() } From ebc3ded2b22807e0c3662222636260820a1b76cf Mon Sep 17 00:00:00 2001 From: rifsxd Date: Fri, 30 May 2025 04:18:02 +0600 Subject: [PATCH 2/2] manager: removed module config to override webui engine --- .../com/rifsxd/ksunext/ui/screen/Module.kt | 23 ++----------------- .../ksunext/ui/viewmodel/ModuleViewModel.kt | 13 ++++------- .../src/main/res/values-pt-rBR/strings.xml | 2 +- manager/app/src/main/res/values/strings.xml | 2 +- 4 files changed, 8 insertions(+), 32 deletions(-) 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 6d7315c8..b94bede2 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 @@ -81,6 +81,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.core.net.toUri import androidx.lifecycle.viewmodel.compose.viewModel import com.dergoogler.mmrl.platform.Platform import com.ramcosta.composedestinations.annotation.Destination @@ -111,9 +112,6 @@ import com.rifsxd.ksunext.ui.util.restoreModule import com.rifsxd.ksunext.ui.viewmodel.ModuleViewModel import com.rifsxd.ksunext.ui.webui.WebUIActivity import com.rifsxd.ksunext.ui.webui.WebUIXActivity -import androidx.core.net.toUri -import com.dergoogler.mmrl.platform.model.ModuleConfig -import com.dergoogler.mmrl.platform.model.ModuleConfig.Companion.asModuleConfig import com.dergoogler.mmrl.ui.component.LabelItem @OptIn(ExperimentalMaterial3Api::class) @@ -313,22 +311,6 @@ fun ModuleScreen(navigator: DestinationsNavigator) { .putExtra("id", id) .putExtra("name", name) - val config = id.asModuleConfig - - val engine = config.getWebuiEngine(context) - - if (engine != null) { - webUILauncher.launch( - when (config.getWebuiEngine(context)) { - "wx" -> wxEngine - "ksu" -> ksuEngine - else -> wxEngine - } - ) - - return@ModuleList - } - webUILauncher.launch( if (prefs.getBoolean("use_webuix", true) && Platform.isAlive) { wxEngine @@ -908,8 +890,7 @@ fun ModuleItemPreview() { updateJson = "", hasWebUi = false, hasActionScript = false, - dirId = "dirId", - config = ModuleConfig() + dirId = "dirId" ) ModuleItem(EmptyDestinationsNavigator, module, "", {}, {}, {}, {}, {}) } 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 c122e302..aff1f413 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 @@ -8,8 +8,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.dergoogler.mmrl.platform.model.ModuleConfig -import com.dergoogler.mmrl.platform.model.ModuleConfig.Companion.asModuleConfig import com.dergoogler.mmrl.platform.Platform import com.dergoogler.mmrl.platform.TIMEOUT_MILLIS import kotlinx.coroutines.delay @@ -45,8 +43,7 @@ class ModuleViewModel : ViewModel() { val updateJson: String, val hasWebUi: Boolean, val hasActionScript: Boolean, - val dirId: String, - val config: ModuleConfig, + val dirId: String ) data class ModuleUpdateInfo( @@ -120,23 +117,21 @@ class ModuleViewModel : ViewModel() { .map { array.getJSONObject(it) } .map { obj -> val id = obj.getString("id") - val config = id.asModuleConfig ModuleInfo( id, - config.name ?: obj.optString("name"), + obj.optString("name"), obj.optString("author", "Unknown"), obj.optString("version", "Unknown"), obj.optInt("versionCode", 0), - config.description ?: obj.optString("description"), + obj.optString("description"), obj.getBoolean("enabled"), obj.getBoolean("update"), obj.getBoolean("remove"), obj.optString("updateJson"), obj.optBoolean("web"), obj.optBoolean("action"), - obj.getString("dir_id"), - config + obj.getString("dir_id") ) }.toList() isNeedRefresh = false diff --git a/manager/app/src/main/res/values-pt-rBR/strings.xml b/manager/app/src/main/res/values-pt-rBR/strings.xml index 2208b61a..72eee4ef 100644 --- a/manager/app/src/main/res/values-pt-rBR/strings.xml +++ b/manager/app/src/main/res/values-pt-rBR/strings.xml @@ -200,7 +200,7 @@ Desative temporariamente a capacidade de qualquer app obter privilégios root por meio do comando ⁠su (processos root existentes não serão afetados). Idioma Usar WebUI X - Use o WebUI X em vez do WebUI, que oferece suporte a mais APIs. Esteja ciente de que os desenvolvedores podem substituir esse recurso na configuração do módulo. + Use o WebUI X em vez do WebUI, que oferece suporte a mais APIs. Injetar Eruda no WebUI X Injeta um console de depuração no WebUI X para facilitar a depuração. Requer que a depuração web esteja ativada. diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 1a523a03..f43a73eb 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -210,7 +210,7 @@ Temporarily disable the ability of any app to gain root privileges via the ⁠su command (existing root processes won\'t be affected). Language Use WebUI X - Use WebUI X instead of WebUI, which supports more APIs. Be aware that developers can override this feature in their module config. + Use WebUI X instead of WebUI, which supports more APIs. Inject Eruda into WebUI X Inject a debug console into WebUI X to make debugging easier. Requires web debugging to be on.