From d6c6cef5f9e1b7a28f6650f97d4cbb282171abdf Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 15 Jul 2025 18:55:31 +0400 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 1 - .../main/java/com/tangem/tap/MainActivity.kt | 8 +- common/routing/build.gradle.kts | 6 + .../routing/deeplink}/DeepLinkBuilder.kt | 29 +-- .../common/routing}/deeplink/DeeplinkConst.kt | 5 +- .../deeplink}/PayloadToDeeplinkConverter.kt | 18 +- .../routing/deeplink}/DeepLinkBuilderTest.kt | 3 +- .../PayloadToDeeplinkConverterTest.kt | 14 +- core/deep-links/.gitignore | 1 - core/deep-links/build.gradle.kts | 34 --- core/deep-links/global/.gitignore | 1 - core/deep-links/global/build.gradle.kts | 15 -- .../com/tangem/core/deeplink/DeepLink.kt | 36 ---- .../tangem/core/deeplink/DeepLinksRegistry.kt | 58 ----- .../core/deeplink/di/DeepLinksModule.kt | 20 -- .../deeplink/impl/DefaultDeepLinksRegistry.kt | 201 ------------------ data/onramp/build.gradle.kts | 1 - features/markets/impl/build.gradle.kts | 1 - ...efaultMarketsTokenDetailDeepLinkHandler.kt | 2 +- features/onramp/api/build.gradle.kts | 1 - features/onramp/impl/build.gradle.kts | 1 - features/referral/impl/build.gradle.kts | 1 - features/staking/impl/build.gradle.kts | 2 - .../deeplink/DefaultStakingDeepLinkHandler.kt | 6 +- features/tester/impl/build.gradle.kts | 1 - ...hMarketTokenClickBottomSheetTransformer.kt | 2 +- features/tokendetails/impl/build.gradle.kts | 2 - .../DefaultTokenDetailsDeepLinkHandler.kt | 12 +- features/wallet/impl/build.gradle.kts | 2 - settings.gradle.kts | 2 - 30 files changed, 49 insertions(+), 437 deletions(-) rename {core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter => common/routing/src/main/kotlin/com/tangem/common/routing/deeplink}/DeepLinkBuilder.kt (68%) rename {core/deep-links/src/main/kotlin/com/tangem/core => common/routing/src/main/kotlin/com/tangem/common/routing}/deeplink/DeeplinkConst.kt (75%) rename {core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter => common/routing/src/main/kotlin/com/tangem/common/routing/deeplink}/PayloadToDeeplinkConverter.kt (79%) rename {core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter => common/routing/src/test/kotlin/com/tangem/common/routing/deeplink}/DeepLinkBuilderTest.kt (97%) rename {core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter => common/routing/src/test/kotlin/com/tangem/common/routing/deeplink}/PayloadToDeeplinkConverterTest.kt (89%) delete mode 100644 core/deep-links/.gitignore delete mode 100644 core/deep-links/build.gradle.kts delete mode 100644 core/deep-links/global/.gitignore delete mode 100644 core/deep-links/global/build.gradle.kts delete mode 100644 core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLink.kt delete mode 100644 core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLinksRegistry.kt delete mode 100644 core/deep-links/src/main/kotlin/com/tangem/core/deeplink/di/DeepLinksModule.kt delete mode 100644 core/deep-links/src/main/kotlin/com/tangem/core/deeplink/impl/DefaultDeepLinksRegistry.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1bc92535f2..323d254426 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -134,7 +134,6 @@ dependencies { implementation(projects.core.datasource) implementation(projects.core.utils) implementation(projects.core.decompose) - implementation(projects.core.deepLinks) implementation(projects.core.error.ext) implementation(projects.libs.crypto) implementation(projects.libs.auth) diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index 57b465765c..776dbb7b61 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -26,13 +26,12 @@ import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import arrow.core.getOrElse import com.tangem.common.routing.AppRoute +import com.tangem.common.routing.deeplink.DeeplinkConst.WEBLINK_KEY +import com.tangem.common.routing.deeplink.PayloadToDeeplinkConverter import com.tangem.common.routing.entity.SerializableIntent import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.di.RootAppComponentContext -import com.tangem.core.deeplink.DeepLinksRegistry -import com.tangem.core.deeplink.WEBLINK_KEY -import com.tangem.core.deeplink.converter.PayloadToDeeplinkConverter import com.tangem.core.navigation.url.UrlOpener import com.tangem.data.balancehiding.DefaultDeviceFlipDetector import com.tangem.data.card.sdk.CardSdkOwner @@ -116,9 +115,6 @@ class MainActivity : AppCompatActivity(), ActivityResultCallbackHolder { @Inject lateinit var walletConnectInteractor: WalletConnectInteractor - @Inject - lateinit var deepLinksRegistry: DeepLinksRegistry - @Inject lateinit var settingsRepository: SettingsRepository diff --git a/common/routing/build.gradle.kts b/common/routing/build.gradle.kts index 7a2f8e3e73..17e65d1d6a 100644 --- a/common/routing/build.gradle.kts +++ b/common/routing/build.gradle.kts @@ -30,4 +30,10 @@ dependencies { api(deps.kotlin.serialization) implementation(deps.androidx.core.ktx) implementation(deps.timber) + + /* Tests */ + testImplementation(deps.test.junit) + testImplementation(deps.test.coroutine) + testImplementation(deps.test.truth) + testImplementation(deps.test.mockk) } \ No newline at end of file diff --git a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter/DeepLinkBuilder.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/DeepLinkBuilder.kt similarity index 68% rename from core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter/DeepLinkBuilder.kt rename to common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/DeepLinkBuilder.kt index 1d6216e48c..d1863be6e0 100644 --- a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter/DeepLinkBuilder.kt +++ b/common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/DeepLinkBuilder.kt @@ -1,51 +1,40 @@ -package com.tangem.core.deeplink.converter +package com.tangem.common.routing.deeplink -import com.tangem.core.deeplink.DeeplinkConst.TANGEM_SCHEME +import com.tangem.common.routing.deeplink.DeeplinkConst.TANGEM_SCHEME -/** - * Builder class for constructing deep links with a fluent interface. - */ +/** Builder class for constructing deep links with a fluent interface */ internal class DeepLinkBuilder { + private var scheme: String = TANGEM_SCHEME private var action: String = "" private val pathParams: MutableList = mutableListOf() private val queryParams: MutableMap = mutableMapOf() - /** - * Sets the scheme for the deep link (e.g., "tangem", "https") - */ + /** Sets the scheme for the deep link (e.g., "tangem", "https") */ fun setScheme(scheme: String): DeepLinkBuilder { this.scheme = scheme return this } - /** - * Sets the action for the deep link (e.g., "link", "wallet") - */ + /** Sets the action for the deep link (e.g., "link", "wallet") */ fun setAction(action: String): DeepLinkBuilder { this.action = action return this } - /** - * Adds a path parameter to the deep link - */ + /** Adds a path parameter to the deep link */ fun addPathParam(param: String): DeepLinkBuilder { pathParams.add(param) return this } - /** - * Adds a query parameter to the deep link - */ + /** Adds a query parameter to the deep link */ fun addQueryParam(key: String, value: String): DeepLinkBuilder { queryParams[key] = value return this } - /** - * Builds the deep link URI string - */ + /** Builds the deep link URI string */ fun build(): String { val path = if (pathParams.isEmpty()) { action diff --git a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeeplinkConst.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/DeeplinkConst.kt similarity index 75% rename from core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeeplinkConst.kt rename to common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/DeeplinkConst.kt index e0ffec3703..a435e90549 100644 --- a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeeplinkConst.kt +++ b/common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/DeeplinkConst.kt @@ -1,6 +1,9 @@ -package com.tangem.core.deeplink +package com.tangem.common.routing.deeplink object DeeplinkConst { + const val DEEPLINK_KEY = "deeplink" + const val WEBLINK_KEY = "link" + const val TANGEM_SCHEME = "tangem" const val WALLET_ID_KEY = "user_wallet_id" const val NETWORK_ID_KEY = "network_id" diff --git a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter/PayloadToDeeplinkConverter.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/PayloadToDeeplinkConverter.kt similarity index 79% rename from core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter/PayloadToDeeplinkConverter.kt rename to common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/PayloadToDeeplinkConverter.kt index 586bc9b593..ff88b96b22 100644 --- a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/converter/PayloadToDeeplinkConverter.kt +++ b/common/routing/src/main/kotlin/com/tangem/common/routing/deeplink/PayloadToDeeplinkConverter.kt @@ -1,16 +1,16 @@ -package com.tangem.core.deeplink.converter +package com.tangem.common.routing.deeplink import android.os.Bundle import com.tangem.common.routing.DeepLinkRoute import com.tangem.common.routing.DeepLinkScheme -import com.tangem.core.deeplink.DEEPLINK_KEY -import com.tangem.core.deeplink.DeeplinkConst.DERIVATION_PATH_KEY -import com.tangem.core.deeplink.DeeplinkConst.NAME_KEY -import com.tangem.core.deeplink.DeeplinkConst.NETWORK_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TOKEN_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TRANSACTION_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TYPE_KEY -import com.tangem.core.deeplink.DeeplinkConst.WALLET_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.DEEPLINK_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.DERIVATION_PATH_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.NAME_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.NETWORK_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TOKEN_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TRANSACTION_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TYPE_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.WALLET_ID_KEY import com.tangem.utils.converter.Converter object PayloadToDeeplinkConverter : Converter, String?> { diff --git a/core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter/DeepLinkBuilderTest.kt b/common/routing/src/test/kotlin/com/tangem/common/routing/deeplink/DeepLinkBuilderTest.kt similarity index 97% rename from core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter/DeepLinkBuilderTest.kt rename to common/routing/src/test/kotlin/com/tangem/common/routing/deeplink/DeepLinkBuilderTest.kt index 9f74bcee23..596d7cd6c2 100644 --- a/core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter/DeepLinkBuilderTest.kt +++ b/common/routing/src/test/kotlin/com/tangem/common/routing/deeplink/DeepLinkBuilderTest.kt @@ -1,7 +1,6 @@ -package com.tangem.core.deeplink.converter +package com.tangem.common.routing.deeplink import com.google.common.truth.Truth.assertThat -import com.tangem.core.deeplink.DeeplinkConst import org.junit.Before import org.junit.Test diff --git a/core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter/PayloadToDeeplinkConverterTest.kt b/common/routing/src/test/kotlin/com/tangem/common/routing/deeplink/PayloadToDeeplinkConverterTest.kt similarity index 89% rename from core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter/PayloadToDeeplinkConverterTest.kt rename to common/routing/src/test/kotlin/com/tangem/common/routing/deeplink/PayloadToDeeplinkConverterTest.kt index 0158e98655..03e08c352b 100644 --- a/core/deep-links/src/test/kotlin/com/tangem/core/deeplink/converter/PayloadToDeeplinkConverterTest.kt +++ b/common/routing/src/test/kotlin/com/tangem/common/routing/deeplink/PayloadToDeeplinkConverterTest.kt @@ -1,12 +1,12 @@ -package com.tangem.core.deeplink.converter +package com.tangem.common.routing.deeplink import com.google.common.truth.Truth.assertThat -import com.tangem.core.deeplink.DEEPLINK_KEY -import com.tangem.core.deeplink.DeeplinkConst.DERIVATION_PATH_KEY -import com.tangem.core.deeplink.DeeplinkConst.NETWORK_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TOKEN_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TYPE_KEY -import com.tangem.core.deeplink.DeeplinkConst.WALLET_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.DEEPLINK_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.DERIVATION_PATH_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.NETWORK_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TOKEN_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TYPE_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.WALLET_ID_KEY import org.junit.Test internal class PayloadToDeeplinkConverterTest { diff --git a/core/deep-links/.gitignore b/core/deep-links/.gitignore deleted file mode 100644 index 796b96d1c4..0000000000 --- a/core/deep-links/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/core/deep-links/build.gradle.kts b/core/deep-links/build.gradle.kts deleted file mode 100644 index dd23856660..0000000000 --- a/core/deep-links/build.gradle.kts +++ /dev/null @@ -1,34 +0,0 @@ -plugins { - alias(deps.plugins.android.library) - alias(deps.plugins.kotlin.android) - alias(deps.plugins.kotlin.kapt) - id("configuration") -} - -android { - namespace = "com.tangem.core.deeplink" -} - -dependencies { - /* Common */ - implementation(projects.common.routing) - - /* Core */ - implementation(projects.core.decompose) - - /* Libs - AndroidX */ - implementation(deps.lifecycle.runtime.ktx) - - /* Libs - Other */ - implementation(deps.timber) - - /* DI */ - implementation(deps.hilt.android) - kapt(deps.hilt.kapt) - - /* Tests */ - testImplementation(deps.test.junit) - testImplementation(deps.test.coroutine) - testImplementation(deps.test.truth) - testImplementation(deps.test.mockk) -} \ No newline at end of file diff --git a/core/deep-links/global/.gitignore b/core/deep-links/global/.gitignore deleted file mode 100644 index 796b96d1c4..0000000000 --- a/core/deep-links/global/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/core/deep-links/global/build.gradle.kts b/core/deep-links/global/build.gradle.kts deleted file mode 100644 index ac47c5ac3d..0000000000 --- a/core/deep-links/global/build.gradle.kts +++ /dev/null @@ -1,15 +0,0 @@ -plugins { - alias(deps.plugins.android.library) - alias(deps.plugins.kotlin.android) - id("configuration") -} - -android { - namespace = "com.tangem.core.deeplink.global" -} - -dependencies { - - /* Project */ - implementation(projects.core.deepLinks) -} \ No newline at end of file diff --git a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLink.kt b/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLink.kt deleted file mode 100644 index a3ea2b5083..0000000000 --- a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLink.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.tangem.core.deeplink - -/** - * Represents a deep link. - */ -abstract class DeepLink(val shouldHandleDelayed: Boolean = false) { - - /** - * ID of the deep link. - * - * By default, it is the same as the [uri]. - * */ - val id: String get() = uri - - /** - * URI of the deep link. - * - * **Note: Remember to add the URI in the AndroidManifest.xml file in the `app` module.** - * - * Query parameters will be received automatically. - * - * Path parameters can be added using the following syntax: - * ```kotlin - * "tangem://link" // Without parameters - * "tangem://link/{param1}/{param2}" // With path parameters - * ``` - * */ - abstract val uri: String - - /** - * Method to be called when this deep link is received. - * - * @param params Map of parameters received from the deep link. - * */ - abstract fun onReceive(params: Map) -} \ No newline at end of file diff --git a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLinksRegistry.kt b/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLinksRegistry.kt deleted file mode 100644 index 3fa3e28ef8..0000000000 --- a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/DeepLinksRegistry.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.tangem.core.deeplink - -import android.content.Intent - -/** - * Key to pass deeplink via intent - */ -const val DEEPLINK_KEY = "deeplink" -const val WEBLINK_KEY = "link" - -// TODO: Add tests -/** - * Provides functionality to handle deep links. - * - * Allows deep links to be launched, registered, or unregistered. - */ -interface DeepLinksRegistry { - - /** - * Finds matches registered deep links for the given [intent] and launches them. - * - * @return `true` if any deep link was received, `false` otherwise. - */ - fun launch(intent: Intent): Boolean - - /** - * Registers the given [deepLink]. - */ - fun register(deepLink: DeepLink) - - /** - * Registers the given [deepLinks]. - */ - fun register(deepLinks: Collection) - - /** - * Unregisters the given [deepLinks]. - */ - fun unregister(deepLinks: Collection) - - /** - * Unregisters the given [deepLink]. - */ - fun unregister(deepLink: DeepLink) - - /** - * Unregisters deep links with the given [ids]. - * */ - fun unregisterByIds(ids: Collection) - - /** - * Triggers run last launched [Intent] with deeplink handlers that can handle delayed deeplink - * of specific [deepLinkClass] after handle [Intent] clear that and second time no intent will be handled - */ - fun triggerDelayedDeeplink(deepLinkClass: Class) - - fun cancelDelayedDeeplink() -} \ No newline at end of file diff --git a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/di/DeepLinksModule.kt b/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/di/DeepLinksModule.kt deleted file mode 100644 index 4398db12a2..0000000000 --- a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/di/DeepLinksModule.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.tangem.core.deeplink.di - -import com.tangem.core.deeplink.DeepLinksRegistry -import com.tangem.core.deeplink.impl.DefaultDeepLinksRegistry -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -internal object DeepLinksModule { - - @Provides - @Singleton - fun provideDeepLinksRegistry(): DeepLinksRegistry { - return DefaultDeepLinksRegistry() - } -} \ No newline at end of file diff --git a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/impl/DefaultDeepLinksRegistry.kt b/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/impl/DefaultDeepLinksRegistry.kt deleted file mode 100644 index ff0c60033b..0000000000 --- a/core/deep-links/src/main/kotlin/com/tangem/core/deeplink/impl/DefaultDeepLinksRegistry.kt +++ /dev/null @@ -1,201 +0,0 @@ -package com.tangem.core.deeplink.impl - -import android.content.Intent -import android.net.Uri -import androidx.core.net.toUri -import com.tangem.core.deeplink.DEEPLINK_KEY -import com.tangem.core.deeplink.DeepLink -import com.tangem.core.deeplink.DeepLinksRegistry -import timber.log.Timber - -internal class DefaultDeepLinksRegistry : DeepLinksRegistry { - - private var registries: List = emptyList() - private var lastDeepLink: Uri? = null - - override fun launch(intent: Intent): Boolean { - // Try to get deeplink from data (direct deeplink flow) - // Otherwise, try to get from extras (notification deeplink flow) - val deepLinkExtras = intent.getStringExtra(DEEPLINK_KEY)?.toUri() - val received = intent.data ?: deepLinkExtras ?: return false - lastDeepLink = received - var hasMatch = false - - Timber.i( - """ - Received deep link intent - |- Received URI: $received - |- Registries: $registries - """.trimIndent(), - ) - registries.forEach { deepLink -> - val expected = deepLink.uri.toUri() - - if (!isMatches(expected, received)) return@forEach - hasMatch = true - - val params = getParams(expected, received) - - logMatch(hasMatch, expected, received, params) - - deepLink.onReceive(params) - lastDeepLink = null // clear deeplink if it was handled - } - - if (!hasMatch) { - logMatch(hasMatch, null, received, null) - } - - return hasMatch - } - - override fun register(deepLinks: Collection) { - registries = (registries + deepLinks).distinctBy(DeepLink::id) - - Timber.d( - """ - Registered deep links - |- Registries: $registries - """.trimIndent(), - ) - } - - override fun register(deepLink: DeepLink) { - registries = (registries + deepLink).distinctBy(DeepLink::id) - - Timber.d( - """ - Registered deep link - |- Registries: $registries - """.trimIndent(), - ) - } - - override fun unregister(deepLinks: Collection) { - registries = registries.filter { it !in deepLinks } - - Timber.d( - """ - Unregistered deep links - |- Registries: $registries - """.trimIndent(), - ) - } - - override fun unregister(deepLink: DeepLink) { - registries = registries.filter { it.id != deepLink.id } - - Timber.d( - """ - Unregistered deep link - |- Registries: $registries - """.trimIndent(), - ) - } - - override fun unregisterByIds(ids: Collection) { - registries = registries.filter { it.id !in ids } - - Timber.d( - """ - Unregistered deep links - |- Registries: $registries - """.trimIndent(), - ) - } - - override fun triggerDelayedDeeplink(deepLinkClass: Class) { - val received = lastDeepLink - if (received != null) { - var hasMatch = false - registries - .filterIsInstance(deepLinkClass) - .forEach { deepLink -> - if (!deepLink.shouldHandleDelayed) return@forEach - val expected = deepLink.uri.toUri() - if (!isMatches(expected, received)) return@forEach - hasMatch = true - - val params = getParams(expected, received) - logMatch(hasMatch, expected, received, params) - deepLink.onReceive(params) - } - - if (!hasMatch) { - logMatch(hasMatch, null, received, null) - } - lastDeepLink = null // clear deeplink in any case handle or not - } - } - - override fun cancelDelayedDeeplink() { - lastDeepLink = null - } - - private fun logMatch(hasMatch: Boolean, expected: Uri?, received: Uri?, params: Map?) { - if (hasMatch) { - Timber.i( - """ - Matched deep link - |- Expected URI: $expected - |- Received URI: $received - |- Params: $params - """.trimIndent(), - ) - } else { - Timber.i( - """ - No match found for deep link - |- Received URI: $received - |- Registries: $registries - """.trimIndent(), - ) - } - } - - private fun isMatches(received: Uri, expected: Uri): Boolean { - if (received == expected) return true - if (received.authority != expected.authority || - received.pathSegments.size != expected.pathSegments.size - ) { - return false - } - - received.pathSegments.forEachIndexed { index, receivedSegment -> - val expectedSegment = expected.pathSegments[index] - if (receivedSegment != expectedSegment && - !(receivedSegment.startsWith(prefix = "{") && receivedSegment.endsWith(suffix = "}")) - ) { - return false - } - } - - return true - } - - private fun getParams(received: Uri, expected: Uri): Map { - val params = mutableMapOf() - - received.pathSegments.forEachIndexed { index, receivedSegment -> - val expectedSegment = expected.pathSegments[index] - if (receivedSegment != expectedSegment && - receivedSegment.startsWith(prefix = "{") && - receivedSegment.endsWith(suffix = "}") - ) { - val path = receivedSegment - .replace(oldValue = "{", newValue = "") - .replace(oldValue = "}", newValue = "") - - params[path] = expectedSegment - } - } - - expected.queryParameterNames.forEach { paramName -> - expected.getQueryParameter(paramName)?.let { param -> - params[paramName] = param - } - } - - return params - } -} \ No newline at end of file diff --git a/data/onramp/build.gradle.kts b/data/onramp/build.gradle.kts index 01a57f9c01..82c038ad68 100644 --- a/data/onramp/build.gradle.kts +++ b/data/onramp/build.gradle.kts @@ -17,7 +17,6 @@ dependencies { /** Core modules */ implementation(projects.core.datasource) implementation(projects.core.utils) - implementation(projects.core.deepLinks.global) implementation(projects.core.analytics) /** Common modules */ diff --git a/features/markets/impl/build.gradle.kts b/features/markets/impl/build.gradle.kts index 2ce867d718..ca27225294 100644 --- a/features/markets/impl/build.gradle.kts +++ b/features/markets/impl/build.gradle.kts @@ -74,7 +74,6 @@ dependencies { implementation(projects.core.analytics) implementation(projects.core.analytics.models) implementation(projects.core.navigation) - implementation(projects.core.deepLinks) /* Common */ implementation(projects.common.ui) diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/deeplink/DefaultMarketsTokenDetailDeepLinkHandler.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/deeplink/DefaultMarketsTokenDetailDeepLinkHandler.kt index f9d5ca176b..35b7a3b8d6 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/deeplink/DefaultMarketsTokenDetailDeepLinkHandler.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/deeplink/DefaultMarketsTokenDetailDeepLinkHandler.kt @@ -3,7 +3,7 @@ package com.tangem.features.markets.deeplink import arrow.core.getOrElse import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter -import com.tangem.core.deeplink.DeeplinkConst.TOKEN_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TOKEN_ID_KEY import com.tangem.data.common.currency.getTokenIconUrlFromDefaultHost import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.model.AppCurrency diff --git a/features/onramp/api/build.gradle.kts b/features/onramp/api/build.gradle.kts index 598b224b08..ac5210f2a6 100644 --- a/features/onramp/api/build.gradle.kts +++ b/features/onramp/api/build.gradle.kts @@ -13,7 +13,6 @@ dependencies { /* Project - Core */ implementation(projects.core.decompose) implementation(projects.core.ui) - implementation(projects.core.deepLinks) /* Project - Domain */ implementation(projects.domain.onramp.models) diff --git a/features/onramp/impl/build.gradle.kts b/features/onramp/impl/build.gradle.kts index 2307564258..b32858e319 100644 --- a/features/onramp/impl/build.gradle.kts +++ b/features/onramp/impl/build.gradle.kts @@ -22,7 +22,6 @@ dependencies { implementation(projects.core.analytics) implementation(projects.core.configToggles) implementation(projects.core.decompose) - implementation(projects.core.deepLinks) implementation(projects.core.navigation) implementation(projects.core.ui) implementation(projects.core.utils) diff --git a/features/referral/impl/build.gradle.kts b/features/referral/impl/build.gradle.kts index 34f1402a0b..67ca47e02f 100644 --- a/features/referral/impl/build.gradle.kts +++ b/features/referral/impl/build.gradle.kts @@ -22,7 +22,6 @@ dependencies { implementation(projects.core.utils) implementation(projects.core.ui) implementation(projects.core.decompose) - implementation(projects.core.deepLinks) implementation(projects.libs.crypto) implementation(projects.common.routing) diff --git a/features/staking/impl/build.gradle.kts b/features/staking/impl/build.gradle.kts index d2883b2d82..762201aacb 100644 --- a/features/staking/impl/build.gradle.kts +++ b/features/staking/impl/build.gradle.kts @@ -47,8 +47,6 @@ dependencies { implementation(projects.core.analytics) implementation(projects.core.analytics.models) implementation(projects.core.decompose) - implementation(projects.core.deepLinks) - /** Domain */ implementation(projects.domain.tokens) diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt index 19c9e9e0b2..d1d3a3065f 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt @@ -3,9 +3,9 @@ package com.tangem.features.staking.impl.deeplink import arrow.core.getOrElse import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter -import com.tangem.core.deeplink.DeeplinkConst.NETWORK_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TOKEN_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.WALLET_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.NETWORK_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TOKEN_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.WALLET_ID_KEY import com.tangem.domain.staking.GetStakingAvailabilityUseCase import com.tangem.domain.staking.GetYieldUseCase import com.tangem.domain.staking.model.StakingAvailability diff --git a/features/tester/impl/build.gradle.kts b/features/tester/impl/build.gradle.kts index e376aae27f..bd1dd6bf0f 100644 --- a/features/tester/impl/build.gradle.kts +++ b/features/tester/impl/build.gradle.kts @@ -52,7 +52,6 @@ dependencies { implementation(projects.core.ui) implementation(projects.core.utils) implementation(projects.core.navigation) - implementation(projects.core.deepLinks) implementation(projects.core.pagination) /** Feature Apis */ diff --git a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/testpush/viewmodel/transformers/markettokens/TestPushMarketTokenClickBottomSheetTransformer.kt b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/testpush/viewmodel/transformers/markettokens/TestPushMarketTokenClickBottomSheetTransformer.kt index 58fcfdbf4e..a64b604f6c 100644 --- a/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/testpush/viewmodel/transformers/markettokens/TestPushMarketTokenClickBottomSheetTransformer.kt +++ b/features/tester/impl/src/main/java/com/tangem/feature/tester/presentation/testpush/viewmodel/transformers/markettokens/TestPushMarketTokenClickBottomSheetTransformer.kt @@ -2,7 +2,7 @@ package com.tangem.feature.tester.presentation.testpush.viewmodel.transformers.m import androidx.compose.ui.text.input.TextFieldValue import com.tangem.common.routing.DeepLinkRoute -import com.tangem.core.deeplink.DEEPLINK_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.DEEPLINK_KEY import com.tangem.domain.markets.TokenMarket import com.tangem.feature.tester.presentation.testpush.entity.TestPushUM import com.tangem.utils.transformer.Transformer diff --git a/features/tokendetails/impl/build.gradle.kts b/features/tokendetails/impl/build.gradle.kts index a42a691fc5..68e9bdc3a5 100644 --- a/features/tokendetails/impl/build.gradle.kts +++ b/features/tokendetails/impl/build.gradle.kts @@ -53,8 +53,6 @@ dependencies { implementation(projects.core.analytics) implementation(projects.core.analytics.models) implementation(projects.core.datasource) - implementation(projects.core.deepLinks) - implementation(projects.core.deepLinks.global) implementation(projects.core.configToggles) implementation(projects.core.decompose) implementation(projects.common.ui) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/deeplink/DefaultTokenDetailsDeepLinkHandler.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/deeplink/DefaultTokenDetailsDeepLinkHandler.kt index 533fc19480..1bc0b755b2 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/deeplink/DefaultTokenDetailsDeepLinkHandler.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/deeplink/DefaultTokenDetailsDeepLinkHandler.kt @@ -2,13 +2,13 @@ package com.tangem.feature.tokendetails.deeplink import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter +import com.tangem.common.routing.deeplink.DeeplinkConst.DERIVATION_PATH_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.NETWORK_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TOKEN_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TRANSACTION_ID_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.TYPE_KEY +import com.tangem.common.routing.deeplink.DeeplinkConst.WALLET_ID_KEY import com.tangem.core.analytics.api.AnalyticsEventHandler -import com.tangem.core.deeplink.DeeplinkConst.DERIVATION_PATH_KEY -import com.tangem.core.deeplink.DeeplinkConst.NETWORK_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TOKEN_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TRANSACTION_ID_KEY -import com.tangem.core.deeplink.DeeplinkConst.TYPE_KEY -import com.tangem.core.deeplink.DeeplinkConst.WALLET_ID_KEY import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.network.Network diff --git a/features/wallet/impl/build.gradle.kts b/features/wallet/impl/build.gradle.kts index 75a559a75f..4f26ae1d9a 100644 --- a/features/wallet/impl/build.gradle.kts +++ b/features/wallet/impl/build.gradle.kts @@ -56,8 +56,6 @@ dependencies { implementation(projects.core.utils) implementation(projects.core.analytics) implementation(projects.core.analytics.models) - implementation(projects.core.deepLinks) - implementation(projects.core.deepLinks.global) implementation(projects.core.decompose) implementation(projects.core.datasource) implementation(projects.core.res) diff --git a/settings.gradle.kts b/settings.gradle.kts index a5f9dde696..f8a60bd046 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -156,8 +156,6 @@ include(":core:navigation") include(":core:res") include(":core:ui") include(":core:utils") -include(":core:deep-links") -include(":core:deep-links:global") include(":core:decompose") include(":core:pagination") include(":core:error")