diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/component/SettingsItem.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/component/SettingsItem.kt index 080ee3c9..786cfe3e 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/component/SettingsItem.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/component/SettingsItem.kt @@ -5,14 +5,18 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.selection.toggleable import androidx.compose.material3.Icon import androidx.compose.material3.ListItem +import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.RadioButton import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.semantics.Role +import com.dergoogler.mmrl.ui.component.LabelItem +import com.dergoogler.mmrl.ui.component.text.TextRow @Composable fun SwitchItem( @@ -21,9 +25,11 @@ fun SwitchItem( summary: String? = null, checked: Boolean, enabled: Boolean = true, - onCheckedChange: (Boolean) -> Unit + beta: Boolean = false, + onCheckedChange: (Boolean) -> Unit, ) { val interactionSource = remember { MutableInteractionSource() } + val stateAlpha = remember(checked, enabled) { Modifier.alpha(if (enabled) 1f else 0.5f) } ListItem( modifier = Modifier @@ -36,10 +42,30 @@ fun SwitchItem( onValueChange = onCheckedChange ), headlineContent = { - Text(title) + TextRow( + leadingContent = if (beta) { + { + LabelItem( + modifier = Modifier.then(stateAlpha), + text = "Beta" + ) + } + } else null + ) { + Text( + modifier = Modifier.then(stateAlpha), + text = title, + ) + } }, leadingContent = icon?.let { - { Icon(icon, title) } + { + Icon( + modifier = Modifier.then(stateAlpha), + imageVector = icon, + contentDescription = title + ) + } }, trailingContent = { Switch( @@ -51,7 +77,10 @@ fun SwitchItem( }, supportingContent = { if (summary != null) { - Text(summary) + Text( + modifier = Modifier.then(stateAlpha), + text = summary + ) } } ) diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt index 5fafcd9c..a188a9ae 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/screen/Settings.kt @@ -329,6 +329,7 @@ fun SettingScreen(navigator: DestinationsNavigator) { } if (ksuVersion != null) { SwitchItem( + beta = true, enabled = Platform.isAlive, icon = Icons.Filled.WebAsset, title = stringResource(id = R.string.use_webuix), @@ -339,6 +340,24 @@ fun SettingScreen(navigator: DestinationsNavigator) { useWebUIX = it } } + var useWebUIXEruda by rememberSaveable { + mutableStateOf( + prefs.getBoolean("use_webuix_eruda", false) + ) + } + if (ksuVersion != null) { + SwitchItem( + beta = true, + enabled = Platform.isAlive && useWebUIX && enableWebDebugging, + icon = Icons.Filled.FormatListNumbered, + title = stringResource(id = R.string.use_webuix_eruda), + summary = stringResource(id = R.string.use_webuix_eruda_summary), + checked = useWebUIXEruda + ) { + prefs.edit().putBoolean("use_webuix_eruda", it).apply() + useWebUIXEruda = it + } + } if (isOverlayAvailable && useOverlayFs) { val shrink = stringResource(id = R.string.shrink_sparse_image) diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIActivity.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIActivity.kt index f582c2c5..8e755f33 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIActivity.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIActivity.kt @@ -15,8 +15,8 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.updateLayoutParams import androidx.webkit.WebViewAssetLoader +import com.dergoogler.mmrl.platform.model.ModId import com.dergoogler.mmrl.webui.interfaces.WXOptions -import com.dergoogler.mmrl.webui.model.ModId import com.topjohnwu.superuser.Shell import com.rifsxd.ksunext.ui.util.createRootShell import java.io.File diff --git a/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIXActivity.kt b/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIXActivity.kt index 1fba0365..e2b4b78b 100644 --- a/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIXActivity.kt +++ b/manager/app/src/main/java/com/rifsxd/ksunext/ui/webui/WebUIXActivity.kt @@ -15,9 +15,8 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.lifecycle.lifecycleScope import com.dergoogler.mmrl.platform.Platform +import com.dergoogler.mmrl.platform.model.ModId import com.dergoogler.mmrl.ui.component.Loading -import com.dergoogler.mmrl.webui.interfaces.WXOptions -import com.dergoogler.mmrl.webui.model.ModId import com.dergoogler.mmrl.webui.screen.WebUIScreen import com.dergoogler.mmrl.webui.util.rememberWebUIOptions import com.rifsxd.ksunext.BuildConfig @@ -28,6 +27,24 @@ import kotlinx.coroutines.launch class WebUIXActivity : ComponentActivity() { private lateinit var webView: WebView + private val userAgent + get(): String { + val ksuVersion = BuildConfig.VERSION_CODE + + val platform = Platform.get("Unknown") { + platform.name + } + + val platformVersion = Platform.get(-1) { + moduleManager.versionCode + } + + val osVersion = Build.VERSION.RELEASE + val deviceModel = Build.MODEL + + return "KernelSU Next/$ksuVersion (Linux; Android $osVersion; $deviceModel; $platform/$platformVersion)" + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -70,6 +87,7 @@ class WebUIXActivity : ComponentActivity() { } val webDebugging = prefs.getBoolean("enable_web_debugging", false) + val erudaInject = prefs.getBoolean("use_webuix_eruda", false) val dark = isSystemInDarkTheme() val options = rememberWebUIOptions( @@ -77,7 +95,9 @@ class WebUIXActivity : ComponentActivity() { debug = webDebugging, appVersionCode = BuildConfig.VERSION_CODE, isDarkMode = dark, - cls = WebUIXActivity::class.java + enableEruda = erudaInject, + cls = WebUIXActivity::class.java, + userAgentString = userAgent ) WebUIScreen( diff --git a/manager/app/src/main/res/values/strings.xml b/manager/app/src/main/res/values/strings.xml index 824b0287..b851b9b9 100644 --- a/manager/app/src/main/res/values/strings.xml +++ b/manager/app/src/main/res/values/strings.xml @@ -196,4 +196,6 @@ Language Use WebUI X 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. diff --git a/manager/gradle/libs.versions.toml b/manager/gradle/libs.versions.toml index f7fdbe4e..8e6c0d1b 100644 --- a/manager/gradle/libs.versions.toml +++ b/manager/gradle/libs.versions.toml @@ -17,7 +17,7 @@ parcelablelist = "2.0.1" libsu = "6.0.0" apksign = "1.4" cmaker = "1.2" -mmrl = "b3c7ca55e0" +mmrl = "v33560" [plugins] agp-app = { id = "com.android.application", version.ref = "agp" }