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