From c4d28e6256c1c6472e34e3007d0c944e595c8ea0 Mon Sep 17 00:00:00 2001
From: 5ec1cff <56485584+5ec1cff@users.noreply.github.com>
Date: Tue, 26 Mar 2024 08:55:34 +0800
Subject: [PATCH] manager: open webui in single task (#1531)
---
manager/app/src/main/AndroidManifest.xml | 3 ++
.../me/weishu/kernelsu/ui/MainActivity.kt | 5 +-
.../me/weishu/kernelsu/ui/screen/Module.kt | 54 ++++++++++++++++---
.../me/weishu/kernelsu/ui/screen/WebScreen.kt | 3 +-
.../weishu/kernelsu/ui/webui/WebUIActivity.kt | 49 +++++++++++++++++
5 files changed, 102 insertions(+), 12 deletions(-)
create mode 100644 manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt
diff --git a/manager/app/src/main/AndroidManifest.xml b/manager/app/src/main/AndroidManifest.xml
index 4d6860e5..cbebf197 100644
--- a/manager/app/src/main/AndroidManifest.xml
+++ b/manager/app/src/main/AndroidManifest.xml
@@ -31,6 +31,9 @@
android:value="" />
+
+
CompositionLocalProvider(
diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt
index 501b0874..73d6663e 100644
--- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt
+++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt
@@ -8,7 +8,17 @@ import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.defaultMinSize
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -18,9 +28,29 @@ import androidx.compose.material.icons.filled.Add
import androidx.compose.material.pullrefresh.PullRefreshIndicator
import androidx.compose.material.pullrefresh.pullRefresh
import androidx.compose.material.pullrefresh.rememberPullRefreshState
-import androidx.compose.material3.*
-import androidx.compose.runtime.*
+import androidx.compose.material3.Button
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.Divider
+import androidx.compose.material3.ElevatedCard
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.ExtendedFloatingActionButton
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.SnackbarResult
+import androidx.compose.material3.Switch
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
+import androidx.compose.material3.TopAppBar
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.produceState
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
@@ -44,15 +74,22 @@ import me.weishu.kernelsu.ui.component.ConfirmResult
import me.weishu.kernelsu.ui.component.rememberConfirmDialog
import me.weishu.kernelsu.ui.component.rememberLoadingDialog
import me.weishu.kernelsu.ui.screen.destinations.FlashScreenDestination
-import me.weishu.kernelsu.ui.screen.destinations.WebScreenDestination
-import me.weishu.kernelsu.ui.util.*
+import me.weishu.kernelsu.ui.util.DownloadListener
+import me.weishu.kernelsu.ui.util.LocalSnackbarHost
+import me.weishu.kernelsu.ui.util.download
+import me.weishu.kernelsu.ui.util.hasMagisk
+import me.weishu.kernelsu.ui.util.reboot
+import me.weishu.kernelsu.ui.util.toggleModule
+import me.weishu.kernelsu.ui.util.uninstallModule
import me.weishu.kernelsu.ui.viewmodel.ModuleViewModel
+import me.weishu.kernelsu.ui.webui.WebUIActivity
import okhttp3.OkHttpClient
@Destination
@Composable
fun ModuleScreen(navigator: DestinationsNavigator) {
val viewModel = viewModel()
+ val context = LocalContext.current
LaunchedEffect(Unit) {
if (viewModel.moduleList.isEmpty() || viewModel.isNeedRefresh) {
@@ -126,7 +163,12 @@ fun ModuleScreen(navigator: DestinationsNavigator) {
navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(it)))
}, onClickModule = { id, name, hasWebUi ->
if (hasWebUi) {
- navigator.navigate(WebScreenDestination(id, name))
+ context.startActivity(Intent(context, WebUIActivity::class.java)
+ .setData(Uri.parse("kernelsu://webui/$id"))
+ .putExtra("id", id)
+ .putExtra("name", name)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
+ )
}
})
}
diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/WebScreen.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/WebScreen.kt
index 54d97d5a..e353a33e 100644
--- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/WebScreen.kt
+++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/WebScreen.kt
@@ -26,9 +26,8 @@ import me.weishu.kernelsu.ui.webui.showSystemUI
import java.io.File
@SuppressLint("SetJavaScriptEnabled")
-@Destination
@Composable
-fun WebScreen(navigator: DestinationsNavigator, moduleId: String, moduleName: String) {
+fun WebScreen(moduleId: String, moduleName: String) {
val context = LocalContext.current
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
new file mode 100644
index 00000000..30146945
--- /dev/null
+++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt
@@ -0,0 +1,49 @@
+package me.weishu.kernelsu.ui.webui
+
+import android.os.Bundle
+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
+
+class WebUIActivity : ComponentActivity() {
+ @OptIn(ExperimentalAnimationApi::class)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val id = intent.getStringExtra("id")!!
+ val name = intent.getStringExtra("name")!!
+ setTitle("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)
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file