Skip to content

Commit

Permalink
Merge pull request #35 from kiwicom/destination-to-deeplink
Browse files Browse the repository at this point in the history
Public extension to convert Destination into a deeplink Uri
  • Loading branch information
Bořek Leikep authored Feb 21, 2023
2 parents f97ae1c + 9d09caf commit f69c262
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions core/src/main/kotlin/com/kiwi/navigationcompose/typed/Routing.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package com.kiwi.navigationcompose.typed

import android.annotation.SuppressLint
import android.content.Intent
import android.net.Uri
import androidx.annotation.MainThread
import androidx.core.net.toUri
import androidx.navigation.NavDestination
import com.kiwi.navigationcompose.typed.internal.addPolymorphicType
import com.kiwi.navigationcompose.typed.internal.createRouteSlug
import com.kiwi.navigationcompose.typed.internal.isNavTypeOptional
import com.kiwi.navigationcompose.typed.internal.toRoute
import kotlin.reflect.KClass
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.KSerializer
Expand Down Expand Up @@ -74,3 +80,26 @@ public fun <T : Destination> createRoutePattern(serializer: KSerializer<T>): Str

return destination + path.toString() + query.toString()
}

/**
* Converts the destination into a deeplink [Uri].
*
* The most typical usage would be in construction of an [Intent].
* Such intent can then be used to open the destination from anywhere, e.g. notification.
*
* ```
* fun onArticleClick(id: Int) {
* context.startActivity(
* Intent(
* Intent.ACTION_VIEW,
* Destinations.Article(id).toDeepLinkUri()
* )
* )
* )
* ```
*/
@SuppressLint("RestrictedApi")
@ExperimentalSerializationApi
@MainThread
public fun <T : Destination> T.toDeepLinkUri(): Uri =
NavDestination.createRoute(this.toRoute()).toUri()

0 comments on commit f69c262

Please sign in to comment.