Skip to content

Instantly share code, notes, and snippets.

@VitalyPeryatin
Created July 6, 2022 19:59
Show Gist options
  • Save VitalyPeryatin/21225627fe978e6a7d2ad744afffc853 to your computer and use it in GitHub Desktop.
Save VitalyPeryatin/21225627fe978e6a7d2ad744afffc853 to your computer and use it in GitHub Desktop.
class AppActivity : BaseActivity() {
private val viewModel: AppViewModel by viewModel()
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
tryOpenScreenChain(intent)
}
private fun tryOpenScreenChain(intent: Intent?) {
viewModel.tryOpenScreenChain(
routes = intent?.getStringArrayListExtra(ROUTES_KEY).orEmpty().filterNotNull()
)
}
@OptIn(ExperimentalAnimationApi::class)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
tryOpenScreenChain(intent)
setContent {
AfterglowTheme {
CompositionLocalProvider(
...
) {
AppNavGraph(navController = rememberAnimatedNavController())
}
}
}
}
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun AppNavGraph(
modifier: Modifier = Modifier,
navController: NavHostController
) {
LaunchedEffect(Unit) {
viewModel.getNavigationPendingRoutes()
.onEach { routes ->
navController.popBackStack(DesktopDestination.createRoute(), inclusive = false)
routes.forEach { navController.navigate(it)}
}
.launchIn(this)
}
AnimatedNavHost(
navController = navController,
...
) {
...
}
}
companion object {
private const val ROUTES_KEY = "routes"
fun getMessagesIntent(context: Context, chatId: Long?): Intent {
return Intent(context, AppActivity::class.java).apply {
putStringArrayListExtra(
ROUTES_KEY, arrayListOf(
ChatsDestination.createRoute(ChatsDestination.TabKey.Inbox),
MessagesDestination.createRoute(chatId = chatId ?: 0L)
))
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment