Skip to content

Commit 482b430

Browse files
committed
Add deep link validation in addDeeplink
1 parent a278b5c commit 482b430

3 files changed

Lines changed: 10 additions & 3 deletions

File tree

‎navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,8 @@ class NavDestinationAndroidTest {
250250
val destination = NoOpNavigator().createDestination()
251251
destination.addArgument("testString", stringArgument())
252252
destination.addDeepLink("android-app://androidx.navigation.test/{testString}")
253-
val deepLink = Uri.parse("android-app://androidx.navigation.test/test")
254-
destination.addDeepLink(deepLink.toString())
255253

254+
val deepLink = Uri.parse("android-app://androidx.navigation.test/test")
256255
assertWithMessage("Deep link should match")
257256
.that(destination.hasDeepLink(deepLink)).isTrue()
258257
}

‎navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class NavDeepLink internal constructor(
4747
*/
4848
public val mimeType: String?
4949
) {
50-
private val arguments = mutableListOf<String>()
50+
internal val arguments = mutableListOf<String>()
5151
private val paramArgMap = mutableMapOf<String, ParamQuery>()
5252
private var pattern: Pattern? = null
5353
private var isParameterizedQuery = false

‎navigation/navigation-common/src/main/java/androidx/navigation/NavDestination.kt‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,14 @@ public open class NavDestination(
312312
* @see NavController.navigate
313313
*/
314314
public fun addDeepLink(navDeepLink: NavDeepLink) {
315+
val missingRequiredArguments = arguments.filterValues { !it.isDefaultValuePresent }
316+
.keys
317+
.filter { it !in navDeepLink.arguments }
318+
require(missingRequiredArguments.isEmpty()) {
319+
"Deep link ${navDeepLink.uriPattern} can't be used to open destination $this.\n" +
320+
"Following required arguments are missing: $missingRequiredArguments"
321+
}
322+
315323
deepLinks.add(navDeepLink)
316324
}
317325

0 commit comments

Comments
 (0)