diff --git a/app/src/main/java/com/x8bit/bitwarden/MainActivity.kt b/app/src/main/java/com/x8bit/bitwarden/MainActivity.kt index 6061cdc910..de46d0cd84 100644 --- a/app/src/main/java/com/x8bit/bitwarden/MainActivity.kt +++ b/app/src/main/java/com/x8bit/bitwarden/MainActivity.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.remember import androidx.core.os.LocaleListCompat import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.compose.NavHost import androidx.navigation.compose.rememberNavController import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilityCompletionManager import com.x8bit.bitwarden.data.autofill.manager.AutofillActivityManager @@ -25,9 +26,11 @@ import com.x8bit.bitwarden.data.platform.manager.util.ObserveScreenDataEffect import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.ui.platform.base.util.EventsEffect import com.x8bit.bitwarden.ui.platform.composition.LocalManagerProvider +import com.x8bit.bitwarden.ui.platform.feature.debugmenu.debugMenuDestination import com.x8bit.bitwarden.ui.platform.feature.debugmenu.manager.DebugMenuLaunchManager import com.x8bit.bitwarden.ui.platform.feature.debugmenu.navigateToDebugMenuScreen -import com.x8bit.bitwarden.ui.platform.feature.rootnav.RootNavScreen +import com.x8bit.bitwarden.ui.platform.feature.rootnav.ROOT_ROUTE +import com.x8bit.bitwarden.ui.platform.feature.rootnav.rootNavDestination import com.x8bit.bitwarden.ui.platform.theme.BitwardenTheme import com.x8bit.bitwarden.ui.platform.util.appLanguage import dagger.hilt.android.AndroidEntryPoint @@ -121,10 +124,19 @@ class MainActivity : AppCompatActivity() { }, ) BitwardenTheme(theme = state.theme) { - RootNavScreen( - onSplashScreenRemoved = { shouldShowSplashScreen = false }, + NavHost( navController = navController, - ) + startDestination = ROOT_ROUTE, + ) { + // Nothing else should end up at this top level, we just want the ability + // to have the debug menu appear on top of the rest of the app without + // interacting with the state-based navigation used by the RootNavScreen. + rootNavDestination { shouldShowSplashScreen = false } + debugMenuDestination( + onNavigateBack = { navController.popBackStack() }, + onSplashScreenRemoved = { shouldShowSplashScreen = false }, + ) + } } } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuNavigation.kt index 84dfd08459..00ef326dc4 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuNavigation.kt @@ -18,12 +18,15 @@ fun NavController.navigateToDebugMenuScreen() { /** * Add the setup unlock screen to the nav graph. */ -fun NavGraphBuilder.setupDebugMenuDestination( +fun NavGraphBuilder.debugMenuDestination( onNavigateBack: () -> Unit, + onSplashScreenRemoved: () -> Unit, ) { composableWithPushTransitions( route = DEBUG_MENU, ) { DebugMenuScreen(onNavigateBack = onNavigateBack) + // If we are displaying the debug screen, then we can just hide the splash screen. + onSplashScreenRemoved() } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavNavigation.kt new file mode 100644 index 0000000000..7814d8bf30 --- /dev/null +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavNavigation.kt @@ -0,0 +1,20 @@ +package com.x8bit.bitwarden.ui.platform.feature.rootnav + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable + +/** + * The route for the root navigation screen. + */ +const val ROOT_ROUTE: String = "root" + +/** + * Add the root navigation screen to the nav graph. + */ +fun NavGraphBuilder.rootNavDestination( + onSplashScreenRemoved: () -> Unit, +) { + composable(route = ROOT_ROUTE) { + RootNavScreen(onSplashScreenRemoved = onSplashScreenRemoved) + } +} diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt index 7edeb0cadd..b26c5f3ddf 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt @@ -45,7 +45,6 @@ import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.VAULT_UNLOCK_ROUTE import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.navigateToVaultUnlock import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.vaultUnlockDestination import com.x8bit.bitwarden.ui.auth.feature.welcome.navigateToWelcome -import com.x8bit.bitwarden.ui.platform.feature.debugmenu.setupDebugMenuDestination import com.x8bit.bitwarden.ui.platform.feature.rootnav.util.toVaultItemListingType import com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity.loginapproval.navigateToLoginApproval import com.x8bit.bitwarden.ui.platform.feature.splash.SPLASH_ROUTE @@ -104,7 +103,6 @@ fun RootNavScreen( trustedDeviceGraph(navController) vaultUnlockDestination() vaultUnlockedGraph(navController) - setupDebugMenuDestination(onNavigateBack = { navController.popBackStack() }) setupUnlockDestinationAsRoot() setupAutoFillDestinationAsRoot() setupCompleteDestination()