Updated on 2026-08-14

This commit is contained in:
Tangem 2022-11-02 21:48:54 +05:00
parent bd0adfea6f
commit 7d7b6106a0
8 changed files with 134 additions and 8 deletions

View file

@ -0,0 +1,38 @@
package com.tangem.tap.common.analytics.converters
import com.tangem.common.Converter
import com.tangem.common.extensions.isZero
import com.tangem.domain.common.ScanResponse
import com.tangem.tap.common.analytics.events.AnalyticsParam
import com.tangem.tap.common.analytics.events.Basic
import com.tangem.tap.domain.tokens.UserWalletId
import com.tangem.tap.features.wallet.redux.ProgressState
import java.math.BigDecimal
/**
[REDACTED_AUTHOR]
*/
class BasicSignInEventConverter(
private val scanResponse: ScanResponse,
private val progressState: ProgressState,
private val totalCryptoAmount: BigDecimal,
) : Converter<Any?, Basic.SignedIn?> {
override fun convert(value: Any?): Basic.SignedIn? {
if (progressState == ProgressState.Loading || progressState == ProgressState.Refreshing) return null
val cardCurrency = ParamCardCurrencyConverter().convert(scanResponse) ?: return null
val cardState = when {
totalCryptoAmount.isZero() -> AnalyticsParam.CardState.Empty
else -> AnalyticsParam.CardState.Full
}
return Basic.SignedIn(
state = cardState,
currency = cardCurrency,
batch = scanResponse.card.batchId,
).apply {
filterData = UserWalletId(scanResponse.card.wallets.first().publicKey).stringValue
}
}
}

View file

@ -0,0 +1,31 @@
package com.tangem.tap.common.analytics.converters
import com.tangem.blockchain.common.Blockchain
import com.tangem.common.Converter
import com.tangem.domain.common.SaltPayWorkaround
import com.tangem.domain.common.ScanResponse
import com.tangem.domain.common.TapWorkarounds.getTangemNoteBlockchain
import com.tangem.tap.common.analytics.events.AnalyticsParam
import com.tangem.tap.domain.extensions.isMultiwalletAllowed
/**
[REDACTED_AUTHOR]
*/
class ParamCardCurrencyConverter : Converter<ScanResponse, AnalyticsParam.CardCurrency?> {
override fun convert(value: ScanResponse): AnalyticsParam.CardCurrency? {
if (value.card.isMultiwalletAllowed) return AnalyticsParam.CardCurrency.MultiCurrency
val type = when {
value.isTangemNote() -> {
value.card.getTangemNoteBlockchain()?.let { AnalyticsParam.CurrencyType.Blockchain(it) }
}
value.isTangemTwins() -> AnalyticsParam.CurrencyType.Blockchain(Blockchain.Bitcoin)
value.isSaltPay() -> AnalyticsParam.CurrencyType.Token(SaltPayWorkaround.tokenFrom(Blockchain.SaltPay))
value.getPrimaryToken() != null -> AnalyticsParam.CurrencyType.Token(value.getPrimaryToken()!!)
else -> null
} ?: return null
return AnalyticsParam.CardCurrency.SingleCurrency(type)
}
}

View file

@ -7,4 +7,5 @@ sealed class AnalyticsEvent(
val category: String,
val event: String,
val params: Map<String, String> = mapOf(),
var filterData: Any? = null,
)

View file

@ -8,7 +8,7 @@ sealed class Basic(
params: Map<String, String> = mapOf(),
) : AnalyticsEvent("Basic", event, params) {
sealed class SignedIn(
class SignedIn(
state: AnalyticsParam.CardState,
currency: AnalyticsParam.CardCurrency,
batch: String,

View file

@ -0,0 +1,27 @@
package com.tangem.tap.common.analytics.filters
import com.tangem.tap.common.analytics.api.AnalyticsEventFilter
import com.tangem.tap.common.analytics.api.AnalyticsEventHandler
import com.tangem.tap.common.analytics.events.AnalyticsEvent
import com.tangem.tap.common.analytics.events.Basic
/**
[REDACTED_AUTHOR]
*/
class BasicSignInFilter : AnalyticsEventFilter {
private val alreadySignedIn = mutableSetOf<String>()
override fun canBeAppliedTo(event: AnalyticsEvent): Boolean = event is Basic.SignedIn
override fun canBeSent(event: AnalyticsEvent): Boolean {
val userWalletId = event.filterData as? String ?: return false
val canBeSent = !alreadySignedIn.contains(userWalletId)
alreadySignedIn.add(userWalletId)
return canBeSent
}
override fun canBeConsumedBy(handler: AnalyticsEventHandler, event: AnalyticsEvent): Boolean = true
}