From 69fe86f07c8b6b2aa09cd092961e64b0885dc3ce Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 17 Feb 2023 13:40:03 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../common/analytics/events/AnalyticsParam.kt | 5 +- .../tap/common/analytics/events/Basic.kt | 6 +- .../tap/common/analytics/events/Onboarding.kt | 2 +- .../BatchIdParamsInterceptor.kt | 4 +- .../CardContextInterceptor.kt | 56 +++++++++++++++++++ .../com/tangem/core/analytics/Analytics.kt | 4 +- .../analytics/api/ParamsInterceptorApi.kt | 2 +- .../com/tangem/domain/common/LogConfig.kt | 2 +- 8 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt index bad36d3f0d..75ab0b8929 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/AnalyticsParam.kt @@ -61,7 +61,10 @@ sealed class AnalyticsParam { } companion object Key { - const val BatchId = "Batch" + const val Batch = "Batch" + const val ProductType = "Product Type" + const val Firmware = "Firmware" + const val Currency = "Currency" const val ErrorDescription = "Error Description" const val ErrorCode = "Error Code" const val ErrorKey = "Error Key" diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt index ecdedd9761..bbae0634fa 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/Basic.kt @@ -19,14 +19,14 @@ sealed class Basic( event = "Signed in", params = mapOf( "State" to state.value, - "Currency" to currency.value, - AnalyticsParam.BatchId to batch, + AnalyticsParam.Currency to currency.value, + AnalyticsParam.Batch to batch, ), ) class ToppedUp(currency: AnalyticsParam.CardCurrency) : Basic( event = "Topped up", - params = mapOf("Currency" to currency.value), + params = mapOf(AnalyticsParam.Currency to currency.value), ) class ScanError(error: Throwable) : Basic( diff --git a/app/src/main/java/com/tangem/tap/common/analytics/events/Onboarding.kt b/app/src/main/java/com/tangem/tap/common/analytics/events/Onboarding.kt index 8eb0f6490d..d5283849ef 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/events/Onboarding.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/events/Onboarding.kt @@ -51,7 +51,7 @@ sealed class Onboarding( class ButtonBuyCrypto(currency: AnalyticsParam.CurrencyType) : Topup( event = "Button - Buy Crypto", - params = mapOf("Currency" to currency.value), + params = mapOf(AnalyticsParam.Currency to currency.value), ) class ButtonShowWalletAddress : Topup("Button - Show the Wallet Address") diff --git a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/BatchIdParamsInterceptor.kt b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/BatchIdParamsInterceptor.kt index b7e7ec6fbf..33701c53d4 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/BatchIdParamsInterceptor.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/BatchIdParamsInterceptor.kt @@ -1,7 +1,7 @@ package com.tangem.tap.common.analytics.paramsInterceptor -import com.tangem.core.analytics.api.ParamsInterceptor import com.tangem.core.analytics.AnalyticsEvent +import com.tangem.core.analytics.api.ParamsInterceptor import com.tangem.tap.common.analytics.events.AnalyticsParam /** @@ -16,6 +16,6 @@ class BatchIdParamsInterceptor( override fun canBeAppliedTo(event: AnalyticsEvent): Boolean = true override fun intercept(params: MutableMap) { - params[AnalyticsParam.BatchId] = batchId + params[AnalyticsParam.Batch] = batchId } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt new file mode 100644 index 0000000000..fe3ccc5898 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt @@ -0,0 +1,56 @@ +package com.tangem.tap.common.analytics.paramsInterceptor + +import com.tangem.core.analytics.AnalyticsEvent +import com.tangem.core.analytics.api.ParamsInterceptor +import com.tangem.domain.common.ProductType +import com.tangem.domain.common.ScanResponse +import com.tangem.tap.common.analytics.converters.ParamCardCurrencyConverter +import com.tangem.tap.common.analytics.events.AnalyticsParam +import com.tangem.tap.features.demo.DemoHelper + +/** +[REDACTED_AUTHOR] + */ +class CardContextInterceptor( + private val scanResponse: ScanResponse?, +) : ParamsInterceptor { + + override fun id(): String = CardContextInterceptor.id() + + override fun canBeAppliedTo(event: AnalyticsEvent): Boolean = true + + override fun intercept(params: MutableMap) { + scanResponse ?: return + + val card = scanResponse.card + params[AnalyticsParam.Batch] = card.batchId + params[AnalyticsParam.ProductType] = getProductType(scanResponse) + params[AnalyticsParam.Firmware] = card.firmwareVersion.stringValue + + ParamCardCurrencyConverter().convert(scanResponse)?.let { + params[AnalyticsParam.Currency] = it.value + } + } + + private fun getProductType(scanResponse: ScanResponse): String { + return when (scanResponse.productType) { + ProductType.Note -> "Note" + ProductType.Twins -> "Twin" + ProductType.Wallet -> "Wallet" + ProductType.SaltPay -> when (scanResponse.isSaltPayVisa()) { + true -> "Visa" + else -> "Visa Backup" + } + ProductType.Start2Coin -> "Start2Coin" + else -> when (DemoHelper.isDemoCard(scanResponse)) { + // TODO: separate demo cards + true -> "Demo Wallet | Demo Note" + else -> "Other" + } + } + } + + companion object { + fun id(): String = CardContextInterceptor::class.java.simpleName + } +} \ No newline at end of file diff --git a/core/analytics/src/main/java/com/tangem/core/analytics/Analytics.kt b/core/analytics/src/main/java/com/tangem/core/analytics/Analytics.kt index 20fcb92c92..0e0f40b6c9 100644 --- a/core/analytics/src/main/java/com/tangem/core/analytics/Analytics.kt +++ b/core/analytics/src/main/java/com/tangem/core/analytics/Analytics.kt @@ -54,8 +54,8 @@ object Analytics : GlobalAnalyticsEventHandler { paramsInterceptors[interceptor.id()] = interceptor } - override fun removeParamsInterceptor(interceptor: ParamsInterceptor): ParamsInterceptor? { - return paramsInterceptors.remove(interceptor.id()) + override fun removeParamsInterceptor(interceptorId: String): ParamsInterceptor? { + return paramsInterceptors.remove(interceptorId) } override fun send(event: AnalyticsEvent) { diff --git a/core/analytics/src/main/java/com/tangem/core/analytics/api/ParamsInterceptorApi.kt b/core/analytics/src/main/java/com/tangem/core/analytics/api/ParamsInterceptorApi.kt index e2f9dd5860..683a1c45a0 100644 --- a/core/analytics/src/main/java/com/tangem/core/analytics/api/ParamsInterceptorApi.kt +++ b/core/analytics/src/main/java/com/tangem/core/analytics/api/ParamsInterceptorApi.kt @@ -13,5 +13,5 @@ interface ParamsInterceptor { interface ParamsInterceptorHolder { fun addParamsInterceptor(interceptor: ParamsInterceptor) - fun removeParamsInterceptor(interceptor: ParamsInterceptor): ParamsInterceptor? + fun removeParamsInterceptor(interceptorId: String): ParamsInterceptor? } \ No newline at end of file diff --git a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt index a0046af552..1d1bf6d11a 100644 --- a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt +++ b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -22,5 +22,5 @@ object NetworkLogConfig { object AnalyticsHandlersLogConfig { val firebase: Boolean = false val appsFlyer: Boolean = false - val amplitude: Boolean = false + val amplitude: Boolean = true } \ No newline at end of file