diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt index e870ce05b..19358a0e9 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt @@ -17,6 +17,7 @@ import com.x8bit.bitwarden.ui.platform.feature.settings.other.navigateToOther import com.x8bit.bitwarden.ui.platform.feature.settings.other.otherDestination import com.x8bit.bitwarden.ui.platform.feature.settings.vault.navigateToVault import com.x8bit.bitwarden.ui.platform.feature.settings.vault.vaultDestination +import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders const val SETTINGS_GRAPH_ROUTE: String = "settings_graph" private const val SETTINGS_ROUTE: String = "settings" @@ -31,7 +32,13 @@ fun NavGraphBuilder.settingsGraph( startDestination = SETTINGS_ROUTE, route = SETTINGS_GRAPH_ROUTE, ) { - composable(SETTINGS_ROUTE) { + composable( + route = SETTINGS_ROUTE, + enterTransition = TransitionProviders.Enter.stay, + exitTransition = TransitionProviders.Exit.pushLeft, + popEnterTransition = TransitionProviders.Enter.pushRight, + popExitTransition = TransitionProviders.Exit.fadeOut, + ) { SettingsScreen( onNavigateToAbout = { navController.navigateToAbout() }, onNavigateToAccountSecurity = { navController.navigateToAccountSecurity() }, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt index 318619191..48ba740de 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt @@ -4,6 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable +import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders private const val ABOUT_ROUTE = "settings_about" @@ -13,7 +14,13 @@ private const val ABOUT_ROUTE = "settings_about" fun NavGraphBuilder.aboutDestination( onNavigateBack: () -> Unit, ) { - composable(ABOUT_ROUTE) { + composable( + route = ABOUT_ROUTE, + enterTransition = TransitionProviders.Enter.pushLeft, + exitTransition = TransitionProviders.Exit.pushLeft, + popEnterTransition = TransitionProviders.Enter.pushLeft, + popExitTransition = TransitionProviders.Exit.pushRight, + ) { AboutScreen(onNavigateBack = onNavigateBack) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt index d12fe9a0b..97aea094b 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt @@ -4,6 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable +import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders private const val ACCOUNT_SECURITY_ROUTE = "settings_account_security" @@ -13,7 +14,13 @@ private const val ACCOUNT_SECURITY_ROUTE = "settings_account_security" fun NavGraphBuilder.accountSecurityDestination( onNavigateBack: () -> Unit, ) { - composable(ACCOUNT_SECURITY_ROUTE) { + composable( + route = ACCOUNT_SECURITY_ROUTE, + enterTransition = TransitionProviders.Enter.pushLeft, + exitTransition = TransitionProviders.Exit.pushLeft, + popEnterTransition = TransitionProviders.Enter.pushLeft, + popExitTransition = TransitionProviders.Exit.pushRight, + ) { AccountSecurityScreen(onNavigateBack = onNavigateBack) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt index a5a4f5587..d01ca794d 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt @@ -4,6 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable +import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders private const val APPEARANCE_ROUTE = "settings_appearance" @@ -13,7 +14,13 @@ private const val APPEARANCE_ROUTE = "settings_appearance" fun NavGraphBuilder.appearanceDestination( onNavigateBack: () -> Unit, ) { - composable(APPEARANCE_ROUTE) { + composable( + route = APPEARANCE_ROUTE, + enterTransition = TransitionProviders.Enter.pushLeft, + exitTransition = TransitionProviders.Exit.pushLeft, + popEnterTransition = TransitionProviders.Enter.pushLeft, + popExitTransition = TransitionProviders.Exit.pushRight, + ) { AppearanceScreen(onNavigateBack = onNavigateBack) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt index ad28f72d7..5f1f05bb6 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt @@ -4,6 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable +import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders private const val AUTO_FILL_ROUTE = "settings_auto_fill" @@ -13,7 +14,13 @@ private const val AUTO_FILL_ROUTE = "settings_auto_fill" fun NavGraphBuilder.autoFillDestination( onNavigateBack: () -> Unit, ) { - composable(AUTO_FILL_ROUTE) { + composable( + route = AUTO_FILL_ROUTE, + enterTransition = TransitionProviders.Enter.pushLeft, + exitTransition = TransitionProviders.Exit.pushLeft, + popEnterTransition = TransitionProviders.Enter.pushLeft, + popExitTransition = TransitionProviders.Exit.pushRight, + ) { AutoFillScreen(onNavigateBack = onNavigateBack) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt index 0d736b7f7..7fa24dcf5 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt @@ -4,6 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable +import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders private const val OTHER_ROUTE = "settings_other" @@ -13,7 +14,13 @@ private const val OTHER_ROUTE = "settings_other" fun NavGraphBuilder.otherDestination( onNavigateBack: () -> Unit, ) { - composable(OTHER_ROUTE) { + composable( + route = OTHER_ROUTE, + enterTransition = TransitionProviders.Enter.pushLeft, + exitTransition = TransitionProviders.Exit.pushLeft, + popEnterTransition = TransitionProviders.Enter.pushLeft, + popExitTransition = TransitionProviders.Exit.pushRight, + ) { OtherScreen(onNavigateBack = onNavigateBack) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultNavigation.kt index 67e4249fd..f575538ac 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultNavigation.kt @@ -4,6 +4,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable +import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders private const val VAULT_ROUTE = "settings_vault" @@ -13,7 +14,13 @@ private const val VAULT_ROUTE = "settings_vault" fun NavGraphBuilder.vaultDestination( onNavigateBack: () -> Unit, ) { - composable(VAULT_ROUTE) { + composable( + route = VAULT_ROUTE, + enterTransition = TransitionProviders.Enter.pushLeft, + exitTransition = TransitionProviders.Exit.pushLeft, + popEnterTransition = TransitionProviders.Enter.pushLeft, + popExitTransition = TransitionProviders.Exit.pushRight, + ) { VaultScreen(onNavigateBack = onNavigateBack) } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Transition.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Transition.kt index c038386bc..245ff7bb3 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Transition.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/theme/Transition.kt @@ -57,6 +57,26 @@ object TransitionProviders { .takeIf { isSameGraphNavigation } } + /** + * Slides the new screen in from the left of the screen. + */ + val pushLeft: EnterTransitionProvider = { + RootTransitionProviders + .Enter + .pushLeft(this) + .takeIf { isSameGraphNavigation } + } + + /** + * Slides the new screen in from the right of the screen. + */ + val pushRight: EnterTransitionProvider = { + RootTransitionProviders + .Enter + .pushRight(this) + .takeIf { isSameGraphNavigation } + } + /** * Slides the new screen in from the bottom of the screen. * @@ -103,6 +123,26 @@ object TransitionProviders { .takeIf { isSameGraphNavigation } } + /** + * Slides the current screen out to the left of the screen. + */ + val pushLeft: ExitTransitionProvider = { + RootTransitionProviders + .Exit + .pushLeft(this) + .takeIf { isSameGraphNavigation } + } + + /** + * Slides the current screen out to the right of the screen. + */ + val pushRight: ExitTransitionProvider = { + RootTransitionProviders + .Exit + .pushRight(this) + .takeIf { isSameGraphNavigation } + } + /** * Slides the current screen down to the bottom of the screen. * @@ -149,6 +189,26 @@ object RootTransitionProviders { fadeIn(tween(DEFAULT_TRANSITION_TIME_MS)) } + /** + * Slides the new screen in from the left of the screen. + */ + val pushLeft: NonNullEnterTransitionProvider = { + slideIntoContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Left, + animationSpec = tween(DEFAULT_TRANSITION_TIME_MS), + ) + fadeIn(tween(DEFAULT_TRANSITION_TIME_MS)) + } + + /** + * Slides the new screen in from the right of the screen. + */ + val pushRight: NonNullEnterTransitionProvider = { + slideIntoContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Right, + animationSpec = tween(DEFAULT_TRANSITION_TIME_MS), + ) + fadeIn(tween(DEFAULT_TRANSITION_TIME_MS)) + } + /** * Slides the new screen in from the bottom of the screen. */ @@ -183,6 +243,26 @@ object RootTransitionProviders { fadeOut(tween(DEFAULT_TRANSITION_TIME_MS)) } + /** + * Slides the current screen out to the left of the screen. + */ + val pushLeft: NonNullExitTransitionProvider = { + slideOutOfContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Left, + animationSpec = tween(DEFAULT_TRANSITION_TIME_MS), + ) + fadeOut(tween(DEFAULT_TRANSITION_TIME_MS)) + } + + /** + * Slides the current screen out to the right of the screen. + */ + val pushRight: NonNullExitTransitionProvider = { + slideOutOfContainer( + towards = AnimatedContentTransitionScope.SlideDirection.Right, + animationSpec = tween(DEFAULT_TRANSITION_TIME_MS), + ) + fadeOut(tween(DEFAULT_TRANSITION_TIME_MS)) + } + /** * Slides the current screen down to the bottom of the screen. */