Skip to content

Commit f95cc43

Browse files
committed
feat: add default screen transitions to nested navigation
1 parent 511f44b commit f95cc43

File tree

3 files changed

+47
-11
lines changed

3 files changed

+47
-11
lines changed

app/src/main/java/to/bitkit/ui/ContentView.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import androidx.navigation.NavHostController
2424
import androidx.navigation.NavOptions
2525
import androidx.navigation.compose.NavHost
2626
import androidx.navigation.compose.composable
27-
import androidx.navigation.compose.navigation
2827
import androidx.navigation.compose.rememberNavController
2928
import androidx.navigation.toRoute
3029
import kotlinx.coroutines.delay
@@ -141,6 +140,7 @@ import to.bitkit.ui.theme.TRANSITION_SHEET_MS
141140
import to.bitkit.ui.utils.AutoReadClipboardHandler
142141
import to.bitkit.ui.utils.Transitions
143142
import to.bitkit.ui.utils.composableWithDefaultTransitions
143+
import to.bitkit.ui.utils.navigationWithDefaultTransitions
144144
import to.bitkit.utils.Logger
145145
import to.bitkit.viewmodels.ActivityListViewModel
146146
import to.bitkit.viewmodels.AppViewModel
@@ -410,7 +410,7 @@ private fun RootNavHost(
410410
widgets(navController, settingsViewModel, currencyViewModel)
411411

412412
// TODO extract transferNavigation
413-
navigation<Routes.TransferRoot>(
413+
navigationWithDefaultTransitions<Routes.TransferRoot>(
414414
startDestination = Routes.TransferIntro,
415415
) {
416416
composableWithDefaultTransitions<Routes.TransferIntro> {
@@ -549,7 +549,7 @@ private fun RootNavHost(
549549
onCloseClick = { navController.navigateToHome() },
550550
)
551551
}
552-
navigation<Routes.ExternalNav>(
552+
navigationWithDefaultTransitions<Routes.ExternalNav>(
553553
startDestination = Routes.ExternalConnection(),
554554
) {
555555
composableWithDefaultTransitions<Routes.ExternalConnection> {
@@ -901,7 +901,7 @@ private fun NavGraphBuilder.cjitDetailSettings(
901901
private fun NavGraphBuilder.lightningConnections(
902902
navController: NavHostController,
903903
) {
904-
navigation<Routes.ConnectionsNav>(
904+
navigationWithDefaultTransitions<Routes.ConnectionsNav>(
905905
startDestination = Routes.LightningConnections,
906906
) {
907907
composableWithDefaultTransitions<Routes.LightningConnections> {
@@ -1084,7 +1084,7 @@ private fun NavGraphBuilder.widgets(
10841084
currencyViewModel = currencyViewModel
10851085
)
10861086
}
1087-
navigation<Routes.Headlines>(
1087+
navigationWithDefaultTransitions<Routes.Headlines>(
10881088
startDestination = Routes.HeadlinesPreview
10891089
) {
10901090
composableWithDefaultTransitions<Routes.HeadlinesPreview> {
@@ -1112,7 +1112,7 @@ private fun NavGraphBuilder.widgets(
11121112
)
11131113
}
11141114
}
1115-
navigation<Routes.Facts>(
1115+
navigationWithDefaultTransitions<Routes.Facts>(
11161116
startDestination = Routes.FactsPreview
11171117
) {
11181118
composableWithDefaultTransitions<Routes.FactsPreview> {
@@ -1138,7 +1138,7 @@ private fun NavGraphBuilder.widgets(
11381138
)
11391139
}
11401140
}
1141-
navigation<Routes.Blocks>(
1141+
navigationWithDefaultTransitions<Routes.Blocks>(
11421142
startDestination = Routes.BlocksPreview
11431143
) {
11441144
composableWithDefaultTransitions<Routes.BlocksPreview> {
@@ -1164,7 +1164,7 @@ private fun NavGraphBuilder.widgets(
11641164
)
11651165
}
11661166
}
1167-
navigation<Routes.Weather>(
1167+
navigationWithDefaultTransitions<Routes.Weather>(
11681168
startDestination = Routes.WeatherPreview
11691169
) {
11701170
composableWithDefaultTransitions<Routes.WeatherPreview> {
@@ -1190,7 +1190,7 @@ private fun NavGraphBuilder.widgets(
11901190
)
11911191
}
11921192
}
1193-
navigation<Routes.Price>(
1193+
navigationWithDefaultTransitions<Routes.Price>(
11941194
startDestination = Routes.PricePreview
11951195
) {
11961196
composableWithDefaultTransitions<Routes.PricePreview> {

app/src/main/java/to/bitkit/ui/sheets/SendSheet.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import androidx.compose.ui.platform.testTag
1212
import androidx.hilt.navigation.compose.hiltViewModel
1313
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1414
import androidx.navigation.compose.NavHost
15-
import androidx.navigation.compose.navigation
1615
import androidx.navigation.compose.rememberNavController
1716
import androidx.navigation.toRoute
1817
import kotlinx.serialization.Serializable
@@ -36,6 +35,7 @@ import to.bitkit.ui.screens.wallets.withdraw.WithdrawErrorScreen
3635
import to.bitkit.ui.settings.support.SupportScreen
3736
import to.bitkit.ui.shared.modifiers.sheetHeight
3837
import to.bitkit.ui.utils.composableWithDefaultTransitions
38+
import to.bitkit.ui.utils.navigationWithDefaultTransitions
3939
import to.bitkit.viewmodels.AppViewModel
4040
import to.bitkit.viewmodels.SendEffect
4141
import to.bitkit.viewmodels.SendEvent
@@ -127,7 +127,7 @@ fun SendSheet(
127127
onContinue = { utxos -> appViewModel.setSendEvent(SendEvent.CoinSelectionContinue(utxos)) },
128128
)
129129
}
130-
navigation<SendRoute.FeeNav>(
130+
navigationWithDefaultTransitions<SendRoute.FeeNav>(
131131
startDestination = SendRoute.FeeRate,
132132
) {
133133
composableWithDefaultTransitions<SendRoute.FeeRate> {

app/src/main/java/to/bitkit/ui/utils/Nav.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ import androidx.compose.animation.slideOutVertically
1616
import androidx.compose.runtime.Composable
1717
import androidx.navigation.NavBackStackEntry
1818
import androidx.navigation.NavDeepLink
19+
import androidx.navigation.NavGraph
1920
import androidx.navigation.NavGraphBuilder
2021
import androidx.navigation.NavOptionsBuilder
2122
import androidx.navigation.NavType
2223
import androidx.navigation.compose.composable
24+
import androidx.navigation.compose.navigation
2325
import kotlin.reflect.KType
2426

2527
fun NavOptionsBuilder.clearBackStack() = popUpTo(id = 0)
@@ -63,3 +65,37 @@ inline fun <reified T : Any> NavGraphBuilder.composableWithDefaultTransitions(
6365
content = content,
6466
)
6567
}
68+
69+
70+
/**
71+
* Construct a nested [NavGraph] with the default screen transitions.
72+
*/
73+
inline fun <reified T : Any> NavGraphBuilder.navigationWithDefaultTransitions(
74+
startDestination: Any,
75+
typeMap: Map<KType, @JvmSuppressWildcards NavType<*>> = emptyMap(),
76+
deepLinks: List<NavDeepLink> = emptyList(),
77+
noinline enterTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?)? = {
78+
Transitions.slideInHorizontally
79+
},
80+
noinline exitTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?)? = {
81+
Transitions.scaleOut
82+
},
83+
noinline popEnterTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> EnterTransition?)? = {
84+
Transitions.scaleIn
85+
},
86+
noinline popExitTransition: (AnimatedContentTransitionScope<NavBackStackEntry>.() -> ExitTransition?)? = {
87+
Transitions.slideOutHorizontally
88+
},
89+
noinline builder: NavGraphBuilder.() -> Unit,
90+
) {
91+
navigation<T>(
92+
startDestination = startDestination,
93+
typeMap = typeMap,
94+
deepLinks = deepLinks,
95+
enterTransition = enterTransition,
96+
exitTransition = exitTransition,
97+
popEnterTransition = popEnterTransition,
98+
popExitTransition = popExitTransition,
99+
builder = builder,
100+
)
101+
}

0 commit comments

Comments
 (0)