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