Use CompositionLocalProvider provide local navController

This commit is contained in:
tarsin committed 2023-02-08 09:05:22 +08:00
1 parent f442d9d030
commit 433098a388
4 files changed
+30 -23

No files matched your search

@@ -45,7 +45,6 @@ import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import com.hippo.ehviewer.client.EhCookieStore
@@ -62,7 +61,8 @@ import okhttp3.Cookie
import java.util.Locale
@Composable
fun CookieSignInScene(navController: NavController) {
fun CookieSignInScene() {
val navController = LocalNavController.current
val clipboardManager = LocalClipboardManager.current
val focusManager = LocalFocusManager.current
val snackbarHostState = remember { SnackbarHostState() }
@@ -2,11 +2,14 @@ package com.hippo.ehviewer.ui.login
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.navigation.ActivityNavigator
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
@@ -23,26 +26,28 @@ class LoginActivity : EhActivity() {
Mdc3Theme {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = SIGN_IN_ROUTE_NAME) {
composable(SIGN_IN_ROUTE_NAME) {
SignInScreen(navController)
}
CompositionLocalProvider(LocalNavController provides navController) {
NavHost(navController = navController, startDestination = SIGN_IN_ROUTE_NAME) {
composable(SIGN_IN_ROUTE_NAME) {
SignInScreen()
}
composable(WEBVIEW_SIGN_IN_ROUTE_NAME) {
WebviewSignInScreen(navController)
}
composable(WEBVIEW_SIGN_IN_ROUTE_NAME) {
WebviewSignInScreen()
}
composable(COOKIE_SIGN_IN_ROUTE_NAME) {
CookieSignInScene(navController)
}
composable(COOKIE_SIGN_IN_ROUTE_NAME) {
CookieSignInScene()
}
composable(SELECT_SITE_ROUTE_NAME) {
val selectSite by remember { mutableStateOf(Settings.getSelectSite()) }
if (selectSite) {
SelectSiteScreen()
} else {
SideEffect {
finish()
composable(SELECT_SITE_ROUTE_NAME) {
val selectSite by remember { mutableStateOf(Settings.getSelectSite()) }
if (selectSite) {
SelectSiteScreen()
} else {
SideEffect {
finish()
}
}
}
}
@@ -82,6 +87,8 @@ suspend fun postLogin() {
}
}
val LocalNavController = compositionLocalOf<NavController> { error("CompositionLocal LocalNavController not present!") }
const val SIGN_IN_ROUTE_NAME = "SignIn"
const val WEBVIEW_SIGN_IN_ROUTE_NAME = "WebViewSignIn"
const val COOKIE_SIGN_IN_ROUTE_NAME = "CookieSignIn"
@@ -50,7 +50,6 @@ import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.UrlOpener
@@ -65,7 +64,8 @@ import kotlinx.coroutines.Job
import rikka.core.util.ContextUtils.requireActivity
@Composable
fun SignInScreen(navController: NavController) {
fun SignInScreen() {
val navController = LocalNavController.current
val coroutineScope = rememberCoroutineScope()
val focusManager = LocalFocusManager.current
var isProgressIndicatorVisible by rememberSaveable { mutableStateOf(false) }
@@ -10,7 +10,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView
import androidx.navigation.NavController
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.client.EhCookieStore
import com.hippo.ehviewer.client.EhUrl
@@ -23,7 +22,8 @@ import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebviewSignInScreen(navController: NavController) {
fun WebviewSignInScreen() {
val navController = LocalNavController.current
val context = LocalContext.current
val coroutineScope = rememberCoroutineScope()
AndroidView(factory = {