From 3ad6b9106b4fcd9ccfc0bb2d62f304d8b2215777 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 26 Dec 2023 20:24:58 +0800 Subject: [PATCH] Merge ConfigureActivity into MainActivity --- app/src/main/AndroidManifest.xml | 5 -- .../hippo/ehviewer/ui/ConfigureActivity.kt | 51 ------------------- .../com/hippo/ehviewer/ui/MainActivity.kt | 42 ++++++++------- .../ehviewer/ui/login/CookieSignInScreen.kt | 5 +- .../ehviewer/ui/login/SelectSiteScreen.kt | 13 ++--- .../hippo/ehviewer/ui/login/SignInScreen.kt | 17 +++---- .../ehviewer/ui/login/WebViewSignInScreen.kt | 5 +- .../com/hippo/ehviewer/ui/screen/MainNav.kt | 6 +++ .../hippo/ehviewer/ui/settings/EhScreen.kt | 3 +- .../{BaseScreen.kt => SettingsScreen.kt} | 7 +-- 10 files changed, 46 insertions(+), 108 deletions(-) delete mode 100644 app/src/main/kotlin/com/hippo/ehviewer/ui/ConfigureActivity.kt rename app/src/main/kotlin/com/hippo/ehviewer/ui/settings/{BaseScreen.kt => SettingsScreen.kt} (91%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 372555821..1feeb4756 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -37,11 +37,6 @@ tools:targetApi="tiramisu"> - ().finish() - } -} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt index c58655458..9ab15bc22 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt @@ -65,6 +65,7 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.SnackbarResult import androidx.compose.material3.Text import androidx.compose.material3.rememberDrawerState +import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect @@ -89,6 +90,7 @@ import androidx.lifecycle.compose.LifecycleResumeEffect import androidx.navigation.compose.rememberNavController import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings +import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.data.ListUrlBuilder import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser import com.hippo.ehviewer.client.parser.GalleryPageUrlParser @@ -105,6 +107,9 @@ import com.hippo.ehviewer.ui.destinations.GalleryListScreenDestination import com.hippo.ehviewer.ui.destinations.HistoryScreenDestination import com.hippo.ehviewer.ui.destinations.HomePageScreenDestination import com.hippo.ehviewer.ui.destinations.ProgressScreenDestination +import com.hippo.ehviewer.ui.destinations.SelectSiteScreenDestination +import com.hippo.ehviewer.ui.destinations.SettingsScreenDestination +import com.hippo.ehviewer.ui.destinations.SignInScreenDestination import com.hippo.ehviewer.ui.destinations.SubscriptionScreenDestination import com.hippo.ehviewer.ui.destinations.ToplistScreenDestination import com.hippo.ehviewer.ui.destinations.WhatshotScreenDestination @@ -115,6 +120,7 @@ import com.hippo.ehviewer.ui.screen.navigate import com.hippo.ehviewer.ui.settings.showNewVersion import com.hippo.ehviewer.ui.tools.LocalDialogState import com.hippo.ehviewer.ui.tools.LocalTouchSlopProvider +import com.hippo.ehviewer.ui.tools.LocalWindowSizeClass import com.hippo.ehviewer.updater.AppUpdater import com.hippo.ehviewer.util.AppConfig import com.hippo.ehviewer.util.ExceptionUtils @@ -147,8 +153,12 @@ private val navItems = arrayOf( Triple(FavouritesScreenDestination, R.string.favourite, Icons.Default.Favorite), Triple(HistoryScreenDestination, R.string.history, Icons.Default.History), Triple(DownloadsScreenDestination, R.string.downloads, Icons.Default.Download), + Triple(SettingsScreenDestination, R.string.settings, Icons.Default.Settings), ) +val StartDestination + get() = navItems[Settings.launchPage].first + class MainActivity : EhActivity() { private val sideSheet = mutableStateListOf<@Composable ColumnScope.(DrawerState2) -> Unit>() @@ -357,19 +367,6 @@ class MainActivity : EhActivity() { }, ) } - NavigationDrawerItem( - label = { - Text(text = stringResource(id = R.string.settings)) - }, - selected = false, - onClick = { - closeDrawer { startActivity(Intent(applicationContext, ConfigureActivity::class.java)) } - }, - modifier = Modifier.padding(horizontal = 12.dp), - icon = { - Icon(imageVector = Icons.Default.Settings, contentDescription = null) - }, - ) } } }, @@ -394,10 +391,18 @@ class MainActivity : EhActivity() { drawerState = sideSheetState, gesturesEnabled = sheet != null && !drawerLocked, ) { - CompositionLocalProvider(LocalViewConfiguration provides viewConfiguration) { + val windowSizeClass = calculateWindowSizeClass(this) + CompositionLocalProvider( + LocalViewConfiguration provides viewConfiguration, + LocalWindowSizeClass provides windowSizeClass, + ) { DestinationsNavHost( navGraph = NavGraphs.root, - startRoute = navItems[Settings.launchPage].first, + startRoute = if (Settings.needSignIn) { + if (EhCookieStore.hasSignedIn()) SelectSiteScreenDestination else SignInScreenDestination + } else { + StartDestination + }, engine = rememberNavHostEngine(rootDefaultAnimations = ehNavAnim), navController = navController, ) @@ -470,13 +475,6 @@ class MainActivity : EhActivity() { .show() } - override fun onResume() { - if (Settings.needSignIn) { - startActivity(Intent(this, ConfigureActivity::class.java)) - } - super.onResume() - } - fun showTip(@StringRes id: Int, useToast: Boolean = false) { showTip(getString(id), useToast) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt index 2b21c5824..516afbe1c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/CookieSignInScreen.kt @@ -55,8 +55,9 @@ import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.ui.destinations.FinishDestination +import com.hippo.ehviewer.ui.StartDestination import com.hippo.ehviewer.ui.destinations.SelectSiteScreenDestination +import com.hippo.ehviewer.ui.screen.popNavigate import com.hippo.ehviewer.ui.tools.LocalDialogState import com.hippo.ehviewer.ui.tools.LocalWindowSizeClass import com.hippo.ehviewer.util.ExceptionUtils @@ -123,7 +124,7 @@ fun CookieSignInScene(navigator: DestinationsNavigator) { EhEngine.getProfile() }.onSuccess { val canEx = withNonCancellableContext { postLogin() } - withUIContext { navigator.navigate(if (canEx) SelectSiteScreenDestination else FinishDestination) } + withUIContext { navigator.popNavigate(if (canEx) SelectSiteScreenDestination else StartDestination) } }.onFailure { EhCookieStore.signOut() dialogState.awaitPermissionOrCancel( diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SelectSiteScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SelectSiteScreen.kt index 1aafac749..911d81a18 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SelectSiteScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SelectSiteScreen.kt @@ -1,7 +1,5 @@ package com.hippo.ehviewer.ui.login -import android.app.Activity -import androidx.activity.compose.BackHandler import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -22,14 +20,14 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUrl -import com.hippo.ehviewer.ui.destinations.FinishDestination +import com.hippo.ehviewer.ui.StartDestination +import com.hippo.ehviewer.ui.screen.popNavigate import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator @@ -37,11 +35,6 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator @Composable fun SelectSiteScreen(navigator: DestinationsNavigator) { var siteEx by remember { mutableStateOf(true) } - val context = LocalContext.current - - BackHandler { - (context as Activity).moveTaskToBack(true) - } Column( modifier = Modifier.systemBarsPadding().padding(horizontal = dimensionResource(R.dimen.keyline_margin)).padding(top = dimensionResource(R.dimen.keyline_margin)).fillMaxSize(), @@ -71,7 +64,7 @@ fun SelectSiteScreen(navigator: DestinationsNavigator) { // Gallery site was set to ex in sad panda check if (!siteEx) Settings.gallerySite = EhUrl.SITE_E Settings.needSignIn = false - navigator.navigate(FinishDestination) + navigator.popNavigate(StartDestination) }, modifier = Modifier.fillMaxWidth(), ) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt index 33e771b62..10b799b19 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/SignInScreen.kt @@ -1,7 +1,5 @@ package com.hippo.ehviewer.ui.login -import android.app.Activity -import androidx.activity.compose.BackHandler import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -61,21 +59,24 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils +import com.hippo.ehviewer.ui.StartDestination import com.hippo.ehviewer.ui.destinations.CookieSignInSceneDestination -import com.hippo.ehviewer.ui.destinations.FinishDestination import com.hippo.ehviewer.ui.destinations.SelectSiteScreenDestination import com.hippo.ehviewer.ui.destinations.WebViewSignInScreenDestination import com.hippo.ehviewer.ui.openBrowser +import com.hippo.ehviewer.ui.screen.popNavigate import com.hippo.ehviewer.ui.tools.LocalDialogState import com.hippo.ehviewer.ui.tools.LocalWindowSizeClass import com.hippo.ehviewer.util.ExceptionUtils import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.annotation.RootNavGraph import com.ramcosta.composedestinations.navigation.DestinationsNavigator 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 +@RootNavGraph(start = true) @Destination @Composable fun SignInScreen(navigator: DestinationsNavigator) { @@ -92,10 +93,6 @@ fun SignInScreen(navigator: DestinationsNavigator) { var signInJob by remember { mutableStateOf(null) } val dialogState = LocalDialogState.current - BackHandler { - (context as Activity).moveTaskToBack(true) - } - fun signIn() { if (signInJob?.isActive == true) return if (username.isEmpty()) { @@ -137,7 +134,7 @@ fun SignInScreen(navigator: DestinationsNavigator) { } }.onSuccess { val canEx = withNonCancellableContext { postLogin() } - withUIContext { navigator.navigate(if (canEx) SelectSiteScreenDestination else FinishDestination) } + withUIContext { navigator.popNavigate(if (canEx) SelectSiteScreenDestination else StartDestination) } } } } @@ -251,7 +248,7 @@ fun SignInScreen(navigator: DestinationsNavigator) { onClick = { Settings.needSignIn = false Settings.gallerySite = EhUrl.SITE_E - navigator.navigate(FinishDestination) + navigator.popNavigate(StartDestination) }, ) { Text( @@ -347,7 +344,7 @@ fun SignInScreen(navigator: DestinationsNavigator) { onClick = { Settings.needSignIn = false Settings.gallerySite = EhUrl.SITE_E - navigator.navigate(FinishDestination) + navigator.popNavigate(StartDestination) }, modifier = Modifier.padding(horizontal = 4.dp), ) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt index f385354b3..ba7fd89b1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/login/WebViewSignInScreen.kt @@ -14,8 +14,9 @@ import com.google.accompanist.web.rememberWebViewState import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.EhUtils -import com.hippo.ehviewer.ui.destinations.FinishDestination +import com.hippo.ehviewer.ui.StartDestination import com.hippo.ehviewer.ui.destinations.SelectSiteScreenDestination +import com.hippo.ehviewer.ui.screen.popNavigate import com.hippo.ehviewer.util.setDefaultSettings import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator @@ -50,7 +51,7 @@ fun WebViewSignInScreen(navigator: DestinationsNavigator) { present = true coroutineScope.launchIO { val canEx = withNonCancellableContext { postLogin() } - withUIContext { navigator.navigate(if (canEx) SelectSiteScreenDestination else FinishDestination) } + withUIContext { navigator.popNavigate(if (canEx) SelectSiteScreenDestination else StartDestination) } } } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt index efbd70ffd..a154b2eb0 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/MainNav.kt @@ -5,6 +5,7 @@ import androidx.navigation.NavController import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser import com.hippo.ehviewer.client.parser.GalleryListUrlParser import com.hippo.ehviewer.client.parser.GalleryPageUrlParser +import com.hippo.ehviewer.ui.NavGraphs import com.hippo.ehviewer.ui.destinations.GalleryDetailScreenDestination import com.hippo.ehviewer.ui.destinations.GalleryListScreenDestination import com.hippo.ehviewer.ui.destinations.ProgressScreenDestination @@ -29,6 +30,11 @@ fun DestinationsNavigator.navWithUrl(url: String): Boolean { return true } +@MainThread +fun DestinationsNavigator.popNavigate(direction: Direction) = navigate(direction) { + popUpTo(NavGraphs.root.route) +} + @MainThread fun NavController.navWithUrl(url: String): Boolean { val dest = urlToDestination(url) ?: return false diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt index 5f48dc9fd..f43ae7372 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt @@ -47,6 +47,7 @@ import com.hippo.ehviewer.ui.destinations.MyTagsScreenDestination import com.hippo.ehviewer.ui.destinations.SignInScreenDestination import com.hippo.ehviewer.ui.destinations.UConfigScreenDestination import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder +import com.hippo.ehviewer.ui.screen.popNavigate import com.hippo.ehviewer.ui.tools.LocalDialogState import com.hippo.ehviewer.ui.tools.observed import com.hippo.ehviewer.ui.tools.rememberedAccessor @@ -118,7 +119,7 @@ fun EhScreen(navigator: DestinationsNavigator) { } setPositiveButton(R.string.settings_eh_sign_out) { _, _ -> EhUtils.signOut() - navigator.navigate(SignInScreenDestination) + navigator.popNavigate(SignInScreenDestination) } }.show() } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/BaseScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/SettingsScreen.kt similarity index 91% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/settings/BaseScreen.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/settings/SettingsScreen.kt index ca86317f4..38f2bf06e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/BaseScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/SettingsScreen.kt @@ -25,23 +25,20 @@ import com.hippo.ehviewer.ui.destinations.AboutScreenDestination import com.hippo.ehviewer.ui.destinations.AdvancedScreenDestination import com.hippo.ehviewer.ui.destinations.DownloadScreenDestination import com.hippo.ehviewer.ui.destinations.EhScreenDestination -import com.hippo.ehviewer.ui.destinations.FinishDestination import com.hippo.ehviewer.ui.destinations.PrivacyScreenDestination import com.ramcosta.composedestinations.annotation.Destination -import com.ramcosta.composedestinations.annotation.RootNavGraph import com.ramcosta.composedestinations.navigation.DestinationsNavigator -@RootNavGraph(start = true) @Destination @Composable -fun BaseScreen(navigator: DestinationsNavigator) { +fun SettingsScreen(navigator: DestinationsNavigator) { val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() Scaffold( topBar = { TopAppBar( title = { Text(text = stringResource(id = R.string.settings)) }, navigationIcon = { - IconButton(onClick = { navigator.navigate(FinishDestination) }) { + IconButton(onClick = { navigator.navigateUp() }) { Icon(imageVector = Icons.AutoMirrored.Default.ArrowBack, contentDescription = null) } },