Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit cc399240 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé Committed by GitHub
Browse files

Merge pull request #7189 from thundernest/use_deeplinks_in_navigation

Use deep links in navigation
parents 3e861792 5afd7b70
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
package app.k9mail.core.ui.compose.common.navigation

import android.net.Uri
import androidx.compose.animation.AnimatedContentScope
import androidx.compose.runtime.Composable
import androidx.core.net.toUri
import androidx.navigation.NamedNavArgument
import androidx.navigation.NavBackStackEntry
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import androidx.navigation.navDeepLink

fun NavGraphBuilder.deepLinkComposable(
    route: String,
    arguments: List<NamedNavArgument> = emptyList(),
    content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit,
) {
    composable(
        route = route,
        arguments = arguments,
        deepLinks = listOf(
            navDeepLink { uriPattern = route.toDeepLink() },
        ),
        content = content,
    )
}

fun String.toDeepLink(): String = "app://$this"

fun String.toDeepLinkUri(): Uri = toDeepLink().toUri()
+2 −2
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ package app.k9mail.feature.account.setup.navigation
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavOptions
import androidx.navigation.compose.composable
import app.k9mail.core.ui.compose.common.navigation.deepLinkComposable
import app.k9mail.feature.account.setup.ui.AccountSetupScreen

const val NAVIGATION_ROUTE_ACCOUNT_SETUP = "/account/setup"
@@ -16,7 +16,7 @@ fun NavGraphBuilder.accountSetupRoute(
    onBack: () -> Unit,
    onFinish: (String) -> Unit,
) {
    composable(route = NAVIGATION_ROUTE_ACCOUNT_SETUP) {
    deepLinkComposable(route = NAVIGATION_ROUTE_ACCOUNT_SETUP) {
        AccountSetupScreen(
            onBack = onBack,
            onFinish = onFinish,
+4 −9
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.core.view.WindowCompat
import app.k9mail.core.ui.compose.common.activity.setActivityContent
import app.k9mail.core.ui.compose.common.navigation.toDeepLinkUri
import app.k9mail.feature.account.setup.navigation.NAVIGATION_ROUTE_ACCOUNT_SETUP
import app.k9mail.feature.launcher.ui.FeatureLauncherApp
import app.k9mail.feature.onboarding.navigation.NAVIGATION_ROUTE_ONBOARDING
@@ -17,22 +18,16 @@ class FeatureLauncherActivity : ComponentActivity() {

        WindowCompat.setDecorFitsSystemWindows(window, false)

        val destination = intent.getStringExtra(EXTRA_DESTINATION)

        setActivityContent {
            FeatureLauncherApp(startDestination = destination)
            FeatureLauncherApp()
        }
    }

    companion object {
        private const val EXTRA_DESTINATION = "destination"
        private const val DESTINATION_ONBOARDING = NAVIGATION_ROUTE_ONBOARDING
        private const val DESTINATION_SETUP_ACCOUNT = NAVIGATION_ROUTE_ACCOUNT_SETUP

        @JvmStatic
        fun launchOnboarding(context: Activity) {
            val intent = Intent(context, FeatureLauncherActivity::class.java).apply {
                putExtra(EXTRA_DESTINATION, DESTINATION_ONBOARDING)
                data = NAVIGATION_ROUTE_ONBOARDING.toDeepLinkUri()
                flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
            }
            context.startActivity(intent)
@@ -41,7 +36,7 @@ class FeatureLauncherActivity : ComponentActivity() {
        @JvmStatic
        fun launchSetupAccount(context: Activity) {
            val intent = Intent(context, FeatureLauncherActivity::class.java).apply {
                putExtra(EXTRA_DESTINATION, DESTINATION_SETUP_ACCOUNT)
                data = NAVIGATION_ROUTE_ACCOUNT_SETUP.toDeepLinkUri()
            }
            context.startActivity(intent)
        }
+1 −2
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@ import org.koin.compose.koinInject
@Composable
fun FeatureLauncherNavHost(
    navController: NavHostController,
    startDestination: String?,
    onBack: () -> Unit,
    modifier: Modifier = Modifier,
    importSettingsLauncher: ImportSettingsLauncher = koinInject(),
@@ -23,7 +22,7 @@ fun FeatureLauncherNavHost(
) {
    NavHost(
        navController = navController,
        startDestination = startDestination ?: NAVIGATION_ROUTE_ONBOARDING,
        startDestination = NAVIGATION_ROUTE_ONBOARDING,
        modifier = modifier,
    ) {
        onboardingRoute(
+0 −2
Original line number Diff line number Diff line
@@ -12,7 +12,6 @@ import app.k9mail.feature.launcher.navigation.FeatureLauncherNavHost

@Composable
fun FeatureLauncherApp(
    startDestination: String?,
    modifier: Modifier = Modifier,
) {
    val navController = rememberNavController()
@@ -28,7 +27,6 @@ fun FeatureLauncherApp(

            FeatureLauncherNavHost(
                navController = navController,
                startDestination = startDestination,
                onBack = { activity.finish() },
            )
        }
Loading