'Navigation component, popping back to another modules Destination

I have a multi module project that uses Navigation Component to navigate between Fragments. This means that in order to get to another module, I have to launch a DeepLink using findNavController().navigate(NavDeepLinkRequest, NavOptions). When it comes time to log out of the application, I need to pop the back stack inclusive to a Destination in another module that is not visible to that module. How do I achieve this?



Solution 1:[1]

I had exactly the same issue and I believe Google doesn't support it by default using Navigation Component (which is sad). However I managed to do it in a bit hacky way (but it works) using old friend getIdentifier.

In your Fragment you may have a navigation request like this:

val navigateToOtherModuleRequest = NavDeepLinkRequest.Builder
    .fromUri("yourapp://othermoduledestination".toUri())
    .build()

Then get the resource id you need to pop-up to using getIdentifier() (it can be Fragment id or in my case nav graph id):

val homeNavGraphResourceId = resources.getIdentifier(
    "home_nav_graph",
    "id",
    requireContext().packageName
)

Define navigationOptions like this:

val navigationOptions = NavOptions.Builder()
    .setPopUpTo(
        destinationId = homeNavGraphResourceId,
        inclusive = true
    )
    .build()

And navigate using

findNavController().navigate(
    navigateToOtherModuleRequest,
    navigationOptions
)

Hope this will help!

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 adek111