Updated on 2026-08-14

This commit is contained in:
Tangem 2023-06-30 09:26:53 +08:00
parent 65ff4a4b49
commit 9112d2bab8
55 changed files with 492 additions and 389 deletions

View file

@ -2,15 +2,15 @@ package com.tangem.tap.common.analytics.converters
import com.tangem.blockchain.common.Blockchain
import com.tangem.common.Converter
import com.tangem.domain.common.CardTypesResolver
import com.tangem.domain.card.CardTypeResolver
import com.tangem.tap.common.analytics.events.AnalyticsParam
/**
[REDACTED_AUTHOR]
*/
class ParamCardCurrencyConverter : Converter<CardTypesResolver, AnalyticsParam.CardCurrency?> {
class ParamCardCurrencyConverter : Converter<CardTypeResolver, AnalyticsParam.CardCurrency?> {
override fun convert(value: CardTypesResolver): AnalyticsParam.CardCurrency? {
override fun convert(value: CardTypeResolver): AnalyticsParam.CardCurrency? {
if (value.isMultiwalletAllowed()) return AnalyticsParam.CardCurrency.MultiCurrency
val type = when {

View file

@ -1,15 +1,15 @@
package com.tangem.tap.common.analytics.converters
import com.tangem.common.Converter
import com.tangem.domain.common.CardTypesResolver
import com.tangem.domain.card.CardTypeResolver
import com.tangem.tap.common.analytics.events.Basic
/**
[REDACTED_AUTHOR]
*/
class TopUpEventConverter : Converter<CardTypesResolver, Basic.ToppedUp?> {
class TopUpEventConverter : Converter<CardTypeResolver, Basic.ToppedUp?> {
override fun convert(value: CardTypesResolver): Basic.ToppedUp? {
override fun convert(value: CardTypeResolver): Basic.ToppedUp? {
val paramCardCurrency = ParamCardCurrencyConverter().convert(value) ?: return null
return Basic.ToppedUp(paramCardCurrency)

View file

@ -2,7 +2,7 @@ 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.util.cardTypesResolver
import com.tangem.domain.card.CardTypeResolver
import com.tangem.domain.models.scan.ProductType
import com.tangem.domain.models.scan.ScanResponse
import com.tangem.tap.common.analytics.converters.ParamCardCurrencyConverter
@ -16,6 +16,7 @@ import com.tangem.tap.features.demo.DemoHelper
*/
class CardContextInterceptor(
private val scanResponse: ScanResponse?,
private val cardTypeResolver: CardTypeResolver,
) : ParamsInterceptor {
override fun id(): String = CardContextInterceptor.id()
@ -35,7 +36,7 @@ class CardContextInterceptor(
params[AnalyticsParam.PRODUCT_TYPE] = getProductType(scanResponse)
params[AnalyticsParam.FIRMWARE] = card.firmwareVersion.stringValue
ParamCardCurrencyConverter().convert(scanResponse.cardTypesResolver)?.let {
ParamCardCurrencyConverter().convert(cardTypeResolver)?.let {
params[AnalyticsParam.CURRENCY] = it.value
}
}

View file

@ -2,17 +2,19 @@ package com.tangem.tap.common.analytics.paramsInterceptor
import com.tangem.core.analytics.AnalyticsEvent
import com.tangem.core.analytics.api.ParamsInterceptor
import com.tangem.domain.card.CardTypeResolver
import com.tangem.domain.models.scan.ScanResponse
/**
[REDACTED_AUTHOR]
*/
class LinkedCardContextInterceptor(
private val scanResponse: ScanResponse,
scanResponse: ScanResponse,
cardTypeResolver: CardTypeResolver,
val parent: LinkedCardContextInterceptor? = null,
) : ParamsInterceptor {
private val contextInterceptor = CardContextInterceptor(scanResponse)
private val contextInterceptor = CardContextInterceptor(scanResponse, cardTypeResolver)
override fun id(): String = LinkedCardContextInterceptor.id()

View file

@ -5,9 +5,8 @@ import com.tangem.common.extensions.isZero
import com.tangem.core.analytics.Analytics
import com.tangem.data.source.preferences.model.DataSourceTopupInfo
import com.tangem.data.source.preferences.storage.ToppedUpWalletStorage
import com.tangem.domain.common.CardTypesResolver
import com.tangem.domain.card.CardTypeResolver
import com.tangem.domain.common.util.UserWalletId
import com.tangem.domain.common.util.cardTypesResolver
import com.tangem.domain.models.scan.ScanResponse
import com.tangem.tap.common.analytics.converters.TopUpEventConverter
import com.tangem.tap.common.analytics.events.AnalyticsParam
@ -32,6 +31,7 @@ class TopUpController(
var scanResponseProvider: (() -> ScanResponse?)? = null,
var walletStoresManagerProvider: (() -> WalletStoresManager)? = null,
private val topupWalletStorage: ToppedUpWalletStorage,
private val cardTypeResolver: CardTypeResolver,
) : WalletCurrenciesManager.Listener {
private var hadMissedDerivations: Boolean = false
@ -100,7 +100,7 @@ class TopUpController(
}
val cardBalanceState = BalanceCalculator(walletDataModels).calculate().toCardBalanceState()
send(userWalletId, cardBalanceState, scanResponse.cardTypesResolver)
send(userWalletId, cardBalanceState, cardTypeResolver)
}
}
@ -120,14 +120,14 @@ class TopUpController(
fun send(scanResponse: ScanResponse, cardBalanceState: AnalyticsParam.CardBalanceState) {
UserWalletIdBuilder.scanResponse(scanResponse).build()?.let {
send(it, cardBalanceState, scanResponse.cardTypesResolver)
send(it, cardBalanceState, cardTypeResolver)
}
}
fun send(
userWalletId: UserWalletId,
cardBalanceState: AnalyticsParam.CardBalanceState,
cardTypesResolver: CardTypesResolver,
cardTypeResolver: CardTypeResolver,
) {
val topupInfo = topupWalletStorage.restore(userWalletId.stringValue).guard {
val topupInfo = DataSourceTopupInfo(
@ -152,7 +152,7 @@ class TopUpController(
if (cardBalanceState.isToppedUp()) {
topupWalletStorage.save(topupInfo.copy(cardBalanceState = DataSourceTopupInfo.CardBalanceState.Full))
TopUpEventConverter().convert(cardTypesResolver)?.let {
TopUpEventConverter().convert(cardTypeResolver)?.let {
Analytics.send(it)
}
}

View file

@ -1,6 +1,7 @@
package com.tangem.tap.common.extensions
import com.tangem.core.analytics.Analytics
import com.tangem.domain.card.CardTypeResolver
import com.tangem.domain.models.scan.ScanResponse
import com.tangem.tap.common.analytics.paramsInterceptor.LinkedCardContextInterceptor
@ -11,8 +12,8 @@ import com.tangem.tap.common.analytics.paramsInterceptor.LinkedCardContextInterc
/**
* Sets the new context
*/
fun Analytics.setContext(scanResponse: ScanResponse) {
addParamsInterceptor(LinkedCardContextInterceptor(scanResponse))
fun Analytics.setContext(scanResponse: ScanResponse, cardTypeResolver: CardTypeResolver) {
addParamsInterceptor(LinkedCardContextInterceptor(scanResponse, cardTypeResolver))
}
/**
@ -25,9 +26,13 @@ fun Analytics.eraseContext() {
/**
* Adds a new context and keeps a previous context as the parent of the new one
*/
fun Analytics.addContext(scanResponse: ScanResponse) {
fun Analytics.addContext(scanResponse: ScanResponse, cardTypeResolver: CardTypeResolver) {
val currentContext = removeParamsInterceptor(LinkedCardContextInterceptor.id()) as? LinkedCardContextInterceptor
val newContext = LinkedCardContextInterceptor(scanResponse, parent = currentContext)
val newContext = LinkedCardContextInterceptor(
scanResponse = scanResponse,
cardTypeResolver = cardTypeResolver,
parent = currentContext,
)
addParamsInterceptor(newContext)
}