diff --git a/firebase-dynamic-links/ktx/api.txt b/firebase-dynamic-links/ktx/api.txt index 79744de6298..6fdf9095c54 100644 --- a/firebase-dynamic-links/ktx/api.txt +++ b/firebase-dynamic-links/ktx/api.txt @@ -5,6 +5,12 @@ package com.google.firebase.dynamiclinks.ktx { ctor public FirebaseDynamicLinksKt(); method @NonNull public static void androidParameters(@NonNull com.google.firebase.dynamiclinks.DynamicLink.Builder, @NonNull kotlin.jvm.functions.Function1 init); method @NonNull public static void androidParameters(@NonNull com.google.firebase.dynamiclinks.DynamicLink.Builder, @NonNull String packageName, @NonNull kotlin.jvm.functions.Function1 init); + method @Nullable public static operator android.net.Uri component1(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink); + method @Nullable public static operator android.net.Uri component1(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData); + method @Nullable public static operator android.net.Uri component2(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink); + method public static operator int component2(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData); + method @NonNull public static operator java.util.List component3(@NonNull com.google.firebase.dynamiclinks.ShortDynamicLink); + method public static operator long component3(@NonNull com.google.firebase.dynamiclinks.PendingDynamicLinkData); method @NonNull public static com.google.firebase.dynamiclinks.DynamicLink dynamicLink(@NonNull com.google.firebase.dynamiclinks.FirebaseDynamicLinks, @NonNull kotlin.jvm.functions.Function1 init); method @NonNull public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks dynamicLinks(@NonNull com.google.firebase.ktx.Firebase, @NonNull com.google.firebase.FirebaseApp app); method @NonNull public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks getDynamicLinks(@NonNull com.google.firebase.ktx.Firebase); diff --git a/firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt b/firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt index 077fe32e7be..89c6f625828 100644 --- a/firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt +++ b/firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt @@ -21,6 +21,7 @@ import com.google.firebase.components.Component import com.google.firebase.components.ComponentRegistrar import com.google.firebase.dynamiclinks.DynamicLink import com.google.firebase.dynamiclinks.FirebaseDynamicLinks +import com.google.firebase.dynamiclinks.PendingDynamicLinkData import com.google.firebase.dynamiclinks.ShortDynamicLink import com.google.firebase.ktx.Firebase import com.google.firebase.platforminfo.LibraryVersionComponent @@ -117,6 +118,24 @@ fun FirebaseDynamicLinks.shortLinkAsync(suffix: Int, init: DynamicLink.Builder.( return builder.buildShortDynamicLink(suffix) } +/** Destructuring declaration for [ShortDynamicLink] to provide shortLink. */ +operator fun ShortDynamicLink.component1() = shortLink + +/** Destructuring declaration for [ShortDynamicLink] to provide previewLink. */ +operator fun ShortDynamicLink.component2() = previewLink + +/** Destructuring declaration for [ShortDynamicLink] to provide warnings. */ +operator fun ShortDynamicLink.component3(): List = warnings + +/** Destructuring declaration for [PendingDynamicLinkData] to provide link. */ +operator fun PendingDynamicLinkData.component1() = link + +/** Destructuring declaration for [PendingDynamicLinkData] to provide minimumAppVersion. */ +operator fun PendingDynamicLinkData.component2() = minimumAppVersion + +/** Destructuring declaration for [PendingDynamicLinkData] to provide clickTimestamp. */ +operator fun PendingDynamicLinkData.component3() = clickTimestamp + internal const val LIBRARY_NAME: String = "fire-dl-ktx" /** @suppress */ diff --git a/firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt b/firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt index 2172a6d91e1..808b626b08c 100644 --- a/firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt +++ b/firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt @@ -19,6 +19,8 @@ import com.google.common.truth.Truth.assertThat import com.google.firebase.FirebaseApp import com.google.firebase.FirebaseOptions import com.google.firebase.dynamiclinks.FirebaseDynamicLinks +import com.google.firebase.dynamiclinks.PendingDynamicLinkData +import com.google.firebase.dynamiclinks.ShortDynamicLink import com.google.firebase.ktx.Firebase import com.google.firebase.ktx.app import com.google.firebase.ktx.initialize @@ -26,6 +28,8 @@ import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.Mockito.`when` +import org.mockito.Mockito.mock import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment @@ -223,4 +227,45 @@ class DynamicLinksTests : BaseTestCase() { val efr = Integer.parseInt(dynamicLink.uri.getQueryParameter("efr")!!) == 1 assertThat(efr).isEqualTo(forcedRedirect) } + + @Test + fun `ShortDynamicLink destructure declaration works`() { + val fakeWarning = object : ShortDynamicLink.Warning { + override fun getMessage() = "Warning" + override fun getCode() = "warning" + } + + val expectedShortLink = Uri.parse("https://example.com") + val expectedPreviewLink = Uri.parse("https://example.com/preview") + val expectedWarnings = mutableListOf(fakeWarning) + + val mockShortDynamicLink = mock(ShortDynamicLink::class.java) + `when`(mockShortDynamicLink.shortLink).thenReturn(expectedShortLink) + `when`(mockShortDynamicLink.previewLink).thenReturn(expectedPreviewLink) + `when`(mockShortDynamicLink.warnings).thenReturn(expectedWarnings) + + val (shortLink, previewLink, warnings) = mockShortDynamicLink + + assertThat(shortLink).isEqualTo(expectedShortLink) + assertThat(previewLink).isEqualTo(expectedPreviewLink) + assertThat(warnings).isEqualTo(expectedWarnings) + } + + @Test + fun `PendingDynamicLinkData destructure declaration works`() { + val expectedLink = Uri.parse("https://example.com") + val expectedMinAppVersion = 30 + val expectedTimestamp = 172947600L + + val mockPendingData = mock(PendingDynamicLinkData::class.java) + `when`(mockPendingData.link).thenReturn(expectedLink) + `when`(mockPendingData.minimumAppVersion).thenReturn(expectedMinAppVersion) + `when`(mockPendingData.clickTimestamp).thenReturn(expectedTimestamp) + + val (link, minAppVersion, timestamp) = mockPendingData + + assertThat(link).isEqualTo(expectedLink) + assertThat(minAppVersion).isEqualTo(expectedMinAppVersion) + assertThat(timestamp).isEqualTo(expectedTimestamp) + } }