Do not show SelectSiteScreen if sad panda

This commit is contained in:
FooIbar authored and tarsin committed 2023-02-08 08:08:21 +08:00
1 parent a639b02890
commit a5140ca293
6 files changed
+89 -33

No files matched your search

@@ -105,6 +105,7 @@ object EhUtils {
Settings.putDisplayName(null)
Settings.putGallerySite(EhUrl.SITE_E)
Settings.putNeedSignIn(true)
Settings.putSelectSite(true)
}
fun needSignedIn(): Boolean {
@@ -55,6 +55,7 @@ import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.client.EhUtils
import com.hippo.util.ExceptionUtils
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
@@ -63,7 +64,7 @@ import java.util.Locale
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CookieSignInScene(navController: NavController) {
fun CookieSignInScene(navController: NavController, postLogin: suspend () -> Unit) {
val clipboardManager = LocalClipboardManager.current
val focusManager = LocalFocusManager.current
val snackbarHostState = remember { SnackbarHostState() }
@@ -122,6 +123,9 @@ fun CookieSignInScene(navController: NavController) {
runCatching {
EhEngine.getProfile()
}.onSuccess {
withNonCancellableContext {
postLogin()
}
withUIContext {
navController.navigate(SELECT_SITE_ROUTE_NAME)
}
@@ -2,11 +2,18 @@ package com.hippo.ehviewer.ui.login
import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.navigation.ActivityNavigator
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.google.accompanist.themeadapter.material3.Mdc3Theme
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhEngine
import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.ui.EhActivity
class LoginActivity : EhActivity() {
@@ -18,20 +25,33 @@ class LoginActivity : EhActivity() {
NavHost(navController = navController, startDestination = SIGN_IN_ROUTE_NAME) {
composable(SIGN_IN_ROUTE_NAME) {
SignInScreen(navController)
SignInScreen(navController) {
postLogin()
}
}
composable(WEBVIEW_SIGN_IN_ROUTE_NAME) {
WebviewSignInScreen(navController)
WebviewSignInScreen(navController) {
postLogin()
}
}
composable(COOKIE_SIGN_IN_ROUTE_NAME) {
CookieSignInScene(navController)
CookieSignInScene(navController) {
postLogin()
}
}
composable(SELECT_SITE_ROUTE_NAME) {
SelectSiteScreen {
finish()
val selectSite by remember { mutableStateOf(Settings.getSelectSite()) }
if (selectSite) {
SelectSiteScreen {
finish()
}
} else {
SideEffect {
finish()
}
}
}
}
@@ -41,8 +61,33 @@ class LoginActivity : EhActivity() {
override fun finish() {
super.finish()
Settings.putNeedSignIn(false)
ActivityNavigator.applyPopAnimationsToPendingTransition(this)
}
private suspend fun postLogin() {
runCatching {
EhEngine.getProfile().run {
Settings.putDisplayName(displayName)
Settings.putAvatar(avatar)
}
}.onFailure {
it.printStackTrace()
}
runCatching {
Settings.putGallerySite(EhUrl.SITE_EX)
EhEngine.getUConfig()
}.onFailure {
Settings.putSelectSite(false)
Settings.putGallerySite(EhUrl.SITE_E)
runCatching {
EhEngine.getUConfig()
}.onFailure {
it.printStackTrace()
}
}
}
}
const val SIGN_IN_ROUTE_NAME = "SignIn"
@@ -24,6 +24,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -31,17 +32,16 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.hippo.ehviewer.EhApplication
import com.hippo.ehviewer.R
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.client.EhEngine
import com.hippo.ehviewer.client.EhUrl
import eu.kanade.tachiyomi.util.lang.launchIO
import kotlinx.coroutines.GlobalScope
import eu.kanade.tachiyomi.util.lang.launchNonCancellable
@Composable
fun SelectSiteScreen(finish: () -> Unit) {
var site by remember { mutableStateOf(EhApplication.ehCookieStore.hasSignedIn()) } // false for e, true for ex
val coroutineScope = rememberCoroutineScope()
var siteEx by remember { mutableStateOf(true) }
Column(
Modifier
@@ -70,8 +70,8 @@ fun SelectSiteScreen(finish: () -> Unit) {
) {
Box(
modifier = Modifier
.background(if (!site) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.surface)
.clickable { site = false }
.background(if (!siteEx) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.surface)
.clickable { siteEx = false }
.size(100.dp, 40.dp),
contentAlignment = Alignment.Center
) {
@@ -89,8 +89,8 @@ fun SelectSiteScreen(finish: () -> Unit) {
Box(
modifier = Modifier
.background(if (site) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.surface)
.clickable { site = true }
.background(if (siteEx) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.surface)
.clickable { siteEx = true }
.size(100.dp, 40.dp),
contentAlignment = Alignment.Center
) {
@@ -116,13 +116,15 @@ fun SelectSiteScreen(finish: () -> Unit) {
) {
Button(onClick = {
Settings.putSelectSite(false)
Settings.putNeedSignIn(false)
if (!site)
if (!siteEx) {
Settings.putGallerySite(EhUrl.SITE_E)
else
Settings.putGallerySite(EhUrl.SITE_EX)
GlobalScope.launchIO {
getProfile()
coroutineScope.launchNonCancellable {
runCatching {
EhEngine.getUConfig()
}.onFailure {
it.printStackTrace()
}
}
}
finish()
}, Modifier.fillMaxWidth()) {
@@ -131,13 +133,3 @@ fun SelectSiteScreen(finish: () -> Unit) {
}
}
}
suspend fun getProfile() {
runCatching {
EhEngine.getProfile().run {
Settings.putDisplayName(displayName)
Settings.putAvatar(avatar)
}
EhEngine.getUConfig()
}
}
@@ -53,19 +53,21 @@ 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
import com.hippo.ehviewer.client.EhEngine
import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.client.EhUtils
import com.hippo.util.ExceptionUtils
import eu.kanade.tachiyomi.util.lang.launchIO
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.Job
import rikka.core.util.ContextUtils.requireActivity
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SignInScreen(navController: NavController) {
fun SignInScreen(navController: NavController, postLogin: suspend () -> Unit) {
val coroutineScope = rememberCoroutineScope()
val focusManager = LocalFocusManager.current
var isProgressIndicatorVisible by rememberSaveable { mutableStateOf(false) }
@@ -110,6 +112,9 @@ fun SignInScreen(navController: NavController) {
showErrorDialog = true
}
}.onSuccess {
withNonCancellableContext {
postLogin()
}
withUIContext {
navController.navigate(SELECT_SITE_ROUTE_NAME)
}
@@ -248,7 +253,10 @@ fun SignInScreen(navController: NavController) {
}
TextButton(
onClick = { navController.navigate(SELECT_SITE_ROUTE_NAME) },
onClick = {
Settings.putSelectSite(false)
navController.navigate(SELECT_SITE_ROUTE_NAME)
},
) {
Text(
text = buildAnnotatedString {
@@ -7,6 +7,7 @@ import android.webkit.CookieManager
import android.webkit.WebView
import android.webkit.WebViewClient
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
@@ -15,14 +16,16 @@ import com.hippo.ehviewer.client.EhCookieStore
import com.hippo.ehviewer.client.EhUrl
import com.hippo.ehviewer.client.EhUtils
import com.hippo.ehviewer.widget.DialogWebChromeClient
import eu.kanade.tachiyomi.util.lang.launchNonCancellable
import okhttp3.Cookie
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebviewSignInScreen(navController: NavController) {
fun WebviewSignInScreen(navController: NavController, postLogin: suspend () -> Unit) {
val context = LocalContext.current
val coroutineScope = rememberCoroutineScope()
AndroidView(factory = {
EhUtils.signOut()
@@ -96,6 +99,9 @@ fun WebviewSignInScreen(navController: NavController) {
}
if (getId && getHash) {
present = true
coroutineScope.launchNonCancellable {
postLogin()
}
navController.navigate(SELECT_SITE_ROUTE_NAME)
}
}