Skip to content

Commit cfab28b

Browse files
DynamicLink: Optimized the code (#2908)
Co-authored-by: Marvin W <git@larma.de>
1 parent 16223d0 commit cfab28b

1 file changed

Lines changed: 28 additions & 30 deletions

File tree

play-services-core/src/main/kotlin/org/microg/gms/firebase/dynamiclinks/DynamicLinksService.kt

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -50,42 +50,40 @@ class DynamicLinksServiceImpl(private val context: Context, private val callingP
5050

5151
override fun getDynamicLink(callback: IDynamicLinksCallbacks, link: String?) {
5252
Log.d(TAG, "getDynamicLink: callingPackageName: $callingPackageName link: $link")
53-
if (link != null) {
54-
val linkUri = Uri.parse(link)
55-
if ("http" == linkUri.scheme || "https" == linkUri.scheme) {
56-
lifecycleScope.launchWhenCreated {
53+
lifecycleScope.launchWhenCreated {
54+
try {
55+
if (link == null) {
56+
throw RuntimeException("Missing link")
57+
}
58+
val linkUri = Uri.parse(link)
59+
if ("http" == linkUri.scheme || "https" == linkUri.scheme) {
5760
val response = runCatching { withContext(Dispatchers.IO) { DynamicLinkUtils.requestLinkResponse(link, queue) } }.getOrNull()
58-
val data = if (response == null) {
59-
DynamicLinkData(null, link, 0, 0, null, null)
60-
} else {
61-
DynamicLinkData(
62-
response.metadata?.info?.url, response.data_?.intentData, (response.data_?.app?.minAppVersion ?: 0).toInt(), System.currentTimeMillis(), null, null
63-
)
61+
?: throw RuntimeException("requestLinkResponse failed")
62+
val data = DynamicLinkData(link, response.data_?.intentData, (response.data_?.app?.minAppVersion ?: 0).toInt(), System.currentTimeMillis(), null, null)
63+
Log.d(TAG, "getDynamicLink: $link -> $data")
64+
callback.onStatusDynamicLinkData(Status.SUCCESS, data)
65+
return@launchWhenCreated
66+
}
67+
val deepLink = linkUri.getQueryParameter("link")
68+
if (!deepLink.isNullOrEmpty()) {
69+
val packageName = linkUri.getQueryParameter("apn")
70+
val amvParameter = linkUri.getQueryParameter("amv")
71+
if (packageName == null) {
72+
throw RuntimeException("Missing package name")
73+
} else if (callingPackageName != packageName) {
74+
throw RuntimeException("Registered package name:$callingPackageName does not match link package name: $packageName")
6475
}
76+
var amv = amvParameter?.takeIf { it !== "" }?.toInt() ?: 0
77+
val data = DynamicLinkData(link, deepLink, amv, 0, null, null)
6578
Log.d(TAG, "getDynamicLink: $link -> $data")
6679
callback.onStatusDynamicLinkData(Status.SUCCESS, data)
80+
return@launchWhenCreated
6781
}
68-
return
69-
}
70-
val packageName = linkUri.getQueryParameter("apn")
71-
val amvParameter = linkUri.getQueryParameter("amv")
72-
if (packageName == null) {
73-
throw RuntimeException("Missing package name")
74-
} else if (callingPackageName != packageName) {
75-
throw RuntimeException("Registered package name:$callingPackageName does not match link package name: $packageName")
76-
}
77-
var amv = 0
78-
if (amvParameter != null && amvParameter !== "") {
79-
amv = amvParameter.toInt()
82+
throw RuntimeException("$link is not a valid dynamic link")
83+
} catch (e: Exception) {
84+
Log.d(TAG, "getDynamicLink: error : ${e.message}")
85+
callback.onStatusDynamicLinkData(Status.SUCCESS, null)
8086
}
81-
val data = DynamicLinkData(
82-
null, linkUri.getQueryParameter("link"), amv, 0, null, null
83-
)
84-
Log.d(TAG, "getDynamicLink: $link -> $data")
85-
callback.onStatusDynamicLinkData(Status.SUCCESS, data)
86-
} else {
87-
Log.d(TAG, "getDynamicLink: " + null + " -> " + null)
88-
callback.onStatusDynamicLinkData(Status.SUCCESS, null)
8987
}
9088
}
9189

0 commit comments

Comments
 (0)