diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt index 3f2fa9d58..1c47b26c8 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt @@ -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() } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt index 09d1b23e8..d988bf9bc 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/LoginActivity.kt @@ -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 { 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" diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt index 894fa8ff9..798dab73c 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/SignInScreen.kt @@ -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) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/login/WebviewSignInScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/login/WebviewSignInScreen.kt index f19fd4ff9..45bc0de21 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/login/WebviewSignInScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/login/WebviewSignInScreen.kt @@ -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 = {