Skip to content

Commit

Permalink
Add ability to pass custom animators to rememberAnimatedNavController
Browse files Browse the repository at this point in the history
Fixes #744
  • Loading branch information
jossiwolf committed Sep 29, 2021
1 parent 197bc4f commit ff4c2af
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@ package com.google.accompanist.navigation.animation

import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.text.BasicText
import androidx.compose.runtime.remember
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.navigation.NavHostController
import androidx.navigation.NoOpNavigator
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.get
import androidx.navigation.testing.TestNavigatorState
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import com.google.common.truth.Truth.assertThat
Expand Down Expand Up @@ -64,6 +67,36 @@ class NavHostControllerTest {
.isEqualTo(navigator)
}
}

@Test
fun testRememberAnimatedNavControllerAddsCustomNavigator() {
lateinit var navController: NavHostController

composeTestRule.setContent {
val customNavigator = remember { NoOpNavigator() }
navController = rememberAnimatedNavController(customNavigator)
// get state to trigger recompose on navigate
navController.currentBackStackEntryAsState().value
AnimatedNavHost(navController, startDestination = first) {
composable(first) { BasicText(first) }
composable(second) { BasicText(second) }
}
}

val navigator = composeTestRule.runOnIdle {
navController.navigatorProvider[NoOpNavigator::class]
}

// trigger recompose
composeTestRule.runOnIdle {
navController.navigate(second)
}

composeTestRule.runOnIdle {
assertThat(navController.navigatorProvider[NoOpNavigator::class])
.isEqualTo(navigator)
}
}
}

private const val first = "first"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ package com.google.accompanist.navigation.animation
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.navigation.NavDestination
import androidx.navigation.NavHostController
import androidx.navigation.Navigator
import androidx.navigation.compose.rememberNavController
import androidx.navigation.plusAssign

/**
* Creates a NavHostController that handles the adding of the [ComposeNavigator], [DialogNavigator]
Expand All @@ -32,8 +33,9 @@ import androidx.navigation.plusAssign
*/
@ExperimentalAnimationApi
@Composable
public fun rememberAnimatedNavController(): NavHostController {
return rememberNavController().apply {
navigatorProvider += remember(this) { AnimatedComposeNavigator() }
}
fun rememberAnimatedNavController(
vararg navigators: Navigator<out NavDestination>
): NavHostController {
val animatedNavigator = remember { AnimatedComposeNavigator() }
return rememberNavController(animatedNavigator, *navigators)
}

0 comments on commit ff4c2af

Please sign in to comment.