From 8b85e003f6fa39df829e86d40cd5a30789a02a8b Mon Sep 17 00:00:00 2001
From: 5ec1cff <56485584+5ec1cff@users.noreply.github.com>
Date: Tue, 26 Mar 2024 17:16:01 +0800
Subject: [PATCH] manager: refine webui (#1535)
---
manager/app/src/main/AndroidManifest.xml | 5 +-
.../me/weishu/kernelsu/ui/screen/Module.kt | 1 -
.../me/weishu/kernelsu/ui/screen/WebScreen.kt | 76 ------------------
.../weishu/kernelsu/ui/webui/WebUIActivity.kt | 79 +++++++++++--------
.../kernelsu/ui/webui/WebViewInterface.kt | 5 --
.../src/main/res/values-night-v27/themes.xml | 7 ++
.../app/src/main/res/values-night/themes.xml | 7 +-
.../app/src/main/res/values-v27/themes.xml | 7 ++
manager/app/src/main/res/values/themes.xml | 7 +-
9 files changed, 72 insertions(+), 122 deletions(-)
delete mode 100644 manager/app/src/main/java/me/weishu/kernelsu/ui/screen/WebScreen.kt
create mode 100644 manager/app/src/main/res/values-night-v27/themes.xml
create mode 100644 manager/app/src/main/res/values-v27/themes.xml
diff --git a/manager/app/src/main/AndroidManifest.xml b/manager/app/src/main/AndroidManifest.xml
index cbebf197..bc343b48 100644
--- a/manager/app/src/main/AndroidManifest.xml
+++ b/manager/app/src/main/AndroidManifest.xml
@@ -32,7 +32,10 @@
+ android:autoRemoveFromRecents="true"
+ android:documentLaunchMode="intoExisting"
+ android:exported="false"
+ android:theme="@style/Theme.KernelSU.WebUI" />
- val webRoot = File("/data/adb/modules/${moduleId}/webroot")
- val webViewAssetLoader = WebViewAssetLoader.Builder()
- .setDomain("mui.kernelsu.org")
- .addPathHandler("/",
- SuFilePathHandler(context, webRoot)
- )
- .build()
-
- val webViewClient = object : AccompanistWebViewClient() {
- override fun shouldInterceptRequest(
- view: WebView,
- request: WebResourceRequest
- ): WebResourceResponse? {
- return webViewAssetLoader.shouldInterceptRequest(request.url)
- }
- }
- WebView(
- state = rememberWebViewState(url = "https://mui.kernelsu.org/index.html"),
- Modifier
- .fillMaxSize()
- .padding(innerPadding),
- client = webViewClient,
- factory = { context ->
- WebView(context).apply {
- settings.javaScriptEnabled = true
- settings.domStorageEnabled = true
- settings.allowFileAccess = false
- addJavascriptInterface(WebViewInterface(context, this), "ksu")
- }
- })
- }
-}
\ No newline at end of file
diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt
index 30146945..9d2fe8a8 100644
--- a/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt
+++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt
@@ -1,49 +1,58 @@
package me.weishu.kernelsu.ui.webui
+import android.annotation.SuppressLint
+import android.app.ActivityManager
+import android.content.Context
import android.os.Bundle
+import android.webkit.WebResourceRequest
+import android.webkit.WebResourceResponse
+import android.webkit.WebView
+import android.webkit.WebViewClient
import androidx.activity.ComponentActivity
-import androidx.activity.compose.setContent
-import androidx.compose.animation.ExperimentalAnimationApi
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.SnackbarHost
-import androidx.compose.material3.SnackbarHostState
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.remember
-import androidx.compose.ui.Modifier
-import androidx.navigation.compose.currentBackStackEntryAsState
-import com.google.accompanist.navigation.animation.rememberAnimatedNavController
-import com.ramcosta.composedestinations.DestinationsNavHost
-import me.weishu.kernelsu.ui.screen.NavGraphs
-import me.weishu.kernelsu.ui.screen.WebScreen
-import me.weishu.kernelsu.ui.theme.KernelSUTheme
-import me.weishu.kernelsu.ui.util.LocalSnackbarHost
+import androidx.webkit.WebViewAssetLoader
+import java.io.File
+@SuppressLint("SetJavaScriptEnabled")
class WebUIActivity : ComponentActivity() {
- @OptIn(ExperimentalAnimationApi::class)
+ private lateinit var webviewInterface: WebViewInterface
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- val id = intent.getStringExtra("id")!!
+ val moduleId = intent.getStringExtra("id")!!
val name = intent.getStringExtra("name")!!
- setTitle("KernelSU - $name")
+ setTaskDescription(ActivityManager.TaskDescription("KernelSU - $name"))
- setContent {
- KernelSUTheme {
- val navController = rememberAnimatedNavController()
- val snackbarHostState = remember { SnackbarHostState() }
- Scaffold(
- snackbarHost = { SnackbarHost(snackbarHostState) }
- ) { innerPadding ->
- Box(modifier = Modifier
- .padding(innerPadding)
- .fillMaxSize()) {
- WebScreen(moduleId = id, moduleName = name)
- }
- }
+ val prefs = getSharedPreferences("settings", Context.MODE_PRIVATE)
+ WebView.setWebContentsDebuggingEnabled(prefs.getBoolean("enable_web_debugging", false))
+
+ val webRoot = File("/data/adb/modules/${moduleId}/webroot")
+ val webViewAssetLoader = WebViewAssetLoader.Builder()
+ .setDomain("mui.kernelsu.org")
+ .addPathHandler(
+ "/",
+ SuFilePathHandler(this, webRoot)
+ )
+ .build()
+
+ val webViewClient = object : WebViewClient() {
+ override fun shouldInterceptRequest(
+ view: WebView,
+ request: WebResourceRequest
+ ): WebResourceResponse? {
+ return webViewAssetLoader.shouldInterceptRequest(request.url)
}
}
+
+ val webView = WebView(this).apply {
+ settings.javaScriptEnabled = true
+ settings.domStorageEnabled = true
+ settings.allowFileAccess = false
+ webviewInterface = WebViewInterface(this@WebUIActivity, this)
+ addJavascriptInterface(webviewInterface, "ksu")
+ setWebViewClient(webViewClient)
+ loadUrl("https://mui.kernelsu.org/index.html")
+ }
+
+ setContentView(webView)
}
}
\ No newline at end of file
diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt
index 9d94c600..8e5a3dac 100644
--- a/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt
+++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt
@@ -21,10 +21,6 @@ import java.util.concurrent.CompletableFuture
class WebViewInterface(val context: Context, private val webView: WebView) {
- companion object {
- var isHideSystemUI: Boolean = false
- }
-
@JavascriptInterface
fun exec(cmd: String): String {
val shell = createRootShell(true)
@@ -167,7 +163,6 @@ class WebViewInterface(val context: Context, private val webView: WebView) {
} else {
showSystemUI(context.window)
}
- isHideSystemUI = enable
}
}
}
diff --git a/manager/app/src/main/res/values-night-v27/themes.xml b/manager/app/src/main/res/values-night-v27/themes.xml
new file mode 100644
index 00000000..10a773b1
--- /dev/null
+++ b/manager/app/src/main/res/values-night-v27/themes.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/manager/app/src/main/res/values-night/themes.xml b/manager/app/src/main/res/values-night/themes.xml
index 10a773b1..91abf657 100644
--- a/manager/app/src/main/res/values-night/themes.xml
+++ b/manager/app/src/main/res/values-night/themes.xml
@@ -1,7 +1,10 @@
-
\ No newline at end of file
diff --git a/manager/app/src/main/res/values-v27/themes.xml b/manager/app/src/main/res/values-v27/themes.xml
new file mode 100644
index 00000000..325416c0
--- /dev/null
+++ b/manager/app/src/main/res/values-v27/themes.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/manager/app/src/main/res/values/themes.xml b/manager/app/src/main/res/values/themes.xml
index 325416c0..7d41d8ec 100644
--- a/manager/app/src/main/res/values/themes.xml
+++ b/manager/app/src/main/res/values/themes.xml
@@ -1,7 +1,10 @@
-
\ No newline at end of file