diff --git a/app/src/main/java/com/tangem/tap/di/domain/AssetsDiscoveryDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/AssetsDiscoveryDomainModule.kt index 1745d88c51..9886ff8e2c 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/AssetsDiscoveryDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/AssetsDiscoveryDomainModule.kt @@ -1,5 +1,6 @@ package com.tangem.tap.di.domain +import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.domain.account.status.usecase.ManageCryptoCurrenciesUseCase import com.tangem.domain.assetsdiscovery.repository.AssetsDiscoveryRepository import com.tangem.domain.assetsdiscovery.usecase.AcknowledgeAssetsDiscoveryCompletionUseCase @@ -41,11 +42,13 @@ internal object AssetsDiscoveryDomainModule { fun provideStartAssetsDiscoveryUseCase( assetsDiscoveryRepository: AssetsDiscoveryRepository, manageCryptoCurrenciesUseCase: ManageCryptoCurrenciesUseCase, + analyticsEventHandler: AnalyticsEventHandler, appCoroutineScope: AppCoroutineScope, ): StartAssetsDiscoveryUseCase { return StartAssetsDiscoveryUseCase( assetsDiscoveryRepository = assetsDiscoveryRepository, manageCryptoCurrenciesUseCase = manageCryptoCurrenciesUseCase, + analyticsEventHandler = analyticsEventHandler, appCoroutineScope = appCoroutineScope, ) } diff --git a/core/analytics/models/src/main/java/com/tangem/core/analytics/models/event/AssetsDiscoveryAnalyticsEvent.kt b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/event/AssetsDiscoveryAnalyticsEvent.kt new file mode 100644 index 0000000000..2961459d3d --- /dev/null +++ b/core/analytics/models/src/main/java/com/tangem/core/analytics/models/event/AssetsDiscoveryAnalyticsEvent.kt @@ -0,0 +1,17 @@ +package com.tangem.core.analytics.models.event + +import com.tangem.core.analytics.models.AnalyticsEvent + +sealed class AssetsDiscoveryAnalyticsEvent( + event: String, + params: Map = emptyMap(), +) : AnalyticsEvent(category = "Token Sync", event = event, params = params) { + + class SyncStarted : AssetsDiscoveryAnalyticsEvent(event = "Sync Started") + + class SyncCompleted : AssetsDiscoveryAnalyticsEvent(event = "Sync Completed") + + class ButtonManageTokens : AssetsDiscoveryAnalyticsEvent(event = "Button - Manage Tokens") + + class ButtonCloseBanner : AssetsDiscoveryAnalyticsEvent(event = "Button - Close Banner") +} \ No newline at end of file diff --git a/domain/assetsdiscovery/src/main/kotlin/com/tangem/domain/assetsdiscovery/usecase/StartAssetsDiscoveryUseCase.kt b/domain/assetsdiscovery/src/main/kotlin/com/tangem/domain/assetsdiscovery/usecase/StartAssetsDiscoveryUseCase.kt index 11df5ba962..5ba4a8ffe6 100644 --- a/domain/assetsdiscovery/src/main/kotlin/com/tangem/domain/assetsdiscovery/usecase/StartAssetsDiscoveryUseCase.kt +++ b/domain/assetsdiscovery/src/main/kotlin/com/tangem/domain/assetsdiscovery/usecase/StartAssetsDiscoveryUseCase.kt @@ -1,6 +1,8 @@ package com.tangem.domain.assetsdiscovery.usecase import arrow.core.Either +import com.tangem.core.analytics.api.AnalyticsEventHandler +import com.tangem.core.analytics.models.event.AssetsDiscoveryAnalyticsEvent import com.tangem.domain.account.status.usecase.ManageCryptoCurrenciesUseCase import com.tangem.domain.models.account.AccountId import com.tangem.domain.models.wallet.UserWalletId @@ -15,6 +17,7 @@ class StartAssetsDiscoveryUseCase( private val assetsDiscoveryRepository: AssetsDiscoveryRepository, private val manageCryptoCurrenciesUseCase: ManageCryptoCurrenciesUseCase, private val appCoroutineScope: AppCoroutineScope, + private val analyticsEventHandler: AnalyticsEventHandler, ) { private val activeSyncJobs = ConcurrentHashMap() @@ -23,9 +26,11 @@ class StartAssetsDiscoveryUseCase( activeSyncJobs[userWalletId]?.cancel() activeSyncJobs[userWalletId] = appCoroutineScope.launch { try { + analyticsEventHandler.send(AssetsDiscoveryAnalyticsEvent.SyncStarted()) assetsDiscoveryRepository.runDiscovery(userWalletId) applyDiscoveredTokens(userWalletId) assetsDiscoveryRepository.completeDiscovery(userWalletId) + analyticsEventHandler.send(AssetsDiscoveryAnalyticsEvent.SyncCompleted()) } catch (e: Exception) { TangemLogger.e("Token sync failed for wallet: $userWalletId", e) } finally { diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt index f3642a626e..7c66a4acc4 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt @@ -9,6 +9,7 @@ import com.tangem.common.ui.userwallet.handle import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.core.analytics.models.Basic.ButtonSupport +import com.tangem.core.analytics.models.event.AssetsDiscoveryAnalyticsEvent import com.tangem.core.decompose.di.ModelScoped import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.navigation.review.ReviewManager @@ -509,10 +510,12 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor( } override fun onDismissAssetsDiscoveryNotification(userWalletId: UserWalletId) { + analyticsEventHandler.send(AssetsDiscoveryAnalyticsEvent.ButtonCloseBanner()) acknowledgeAssetsDiscoveryCompletionUseCase(userWalletId) } override fun onAssetsDiscoveryManageClick(userWalletId: UserWalletId) { + analyticsEventHandler.send(AssetsDiscoveryAnalyticsEvent.ButtonManageTokens()) acknowledgeAssetsDiscoveryCompletionUseCase(userWalletId) router.openManageTokensScreen( AccountId.forMainCryptoPortfolio(userWalletId),