Updated on 2026-08-14
This commit is contained in:
parent
8632680f20
commit
e024d739b7
87 changed files with 386 additions and 374 deletions
|
|
@ -367,7 +367,7 @@ class MainActivity : AppCompatActivity(), ActivityResultCallbackHolder {
|
|||
|
||||
val isFromPush = intent.extras?.containsKey(OPENED_FROM_GCM_PUSH) == true
|
||||
if (isFromPush) {
|
||||
analyticsEventsHandler.send(Push.PushNotificationOpened)
|
||||
analyticsEventsHandler.send(Push.PushNotificationOpened())
|
||||
}
|
||||
|
||||
handleDeepLink(intent = intent, isFromOnNewIntent = true)
|
||||
|
|
|
|||
|
|
@ -8,5 +8,5 @@ internal sealed class Push(event: String) : AnalyticsEvent(
|
|||
params = emptyMap(),
|
||||
) {
|
||||
|
||||
data object PushNotificationOpened : Push(event = "Push Notification Opened")
|
||||
class PushNotificationOpened : Push(event = "Push Notification Opened")
|
||||
}
|
||||
|
|
@ -67,7 +67,7 @@ sealed class Settings(
|
|||
params = mapOf("State" to state.value),
|
||||
)
|
||||
|
||||
object ButtonEnableBiometricAuthentication : AppSettings(event = "Button - Enable Biometric Authentication")
|
||||
class ButtonEnableBiometricAuthentication : AppSettings(event = "Button - Enable Biometric Authentication")
|
||||
|
||||
class MainCurrencyChanged(currencyType: String) : AppSettings(
|
||||
event = "Main Currency Changed",
|
||||
|
|
@ -79,7 +79,7 @@ sealed class Settings(
|
|||
params = mapOf("State" to theme.value),
|
||||
)
|
||||
|
||||
object EnableBiometrics : AppSettings(event = "Notice - Enable Biometric")
|
||||
class EnableBiometrics : AppSettings(event = "Notice - Enable Biometric")
|
||||
|
||||
class HideBalanceChanged(state: AnalyticsParam.OnOffState) : AppSettings(
|
||||
event = "Hide Balance Changed",
|
||||
|
|
|
|||
|
|
@ -196,7 +196,7 @@ class DetailsMiddleware {
|
|||
}
|
||||
|
||||
private fun enrollBiometrics() {
|
||||
Analytics.send(Settings.AppSettings.ButtonEnableBiometricAuthentication)
|
||||
Analytics.send(Settings.AppSettings.ButtonEnableBiometricAuthentication())
|
||||
store.inject(DaggerGraphState::settingsManager).openBiometricSettings()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ internal class AppSettingsItemsAnalyticsSender @Inject constructor(
|
|||
|
||||
private fun getEvent(item: AppSettingsScreenState.Item): AnalyticsEvent? {
|
||||
return when (item.id) {
|
||||
AppSettingsItemsFactory.ID_ENROLL_BIOMETRICS_CARD -> Settings.AppSettings.EnableBiometrics
|
||||
AppSettingsItemsFactory.ID_ENROLL_BIOMETRICS_CARD -> Settings.AppSettings.EnableBiometrics()
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,12 +18,12 @@ object UnfinishedBackupFoundDialog {
|
|||
setTitle(R.string.common_warning)
|
||||
setMessage(R.string.welcome_interrupted_backup_alert_message)
|
||||
setPositiveButton(R.string.welcome_interrupted_backup_alert_resume) { _, _ ->
|
||||
Analytics.send(OnboardingEvent.Backup.ResumeInterruptedBackup)
|
||||
Analytics.send(OnboardingEvent.Backup.ResumeInterruptedBackup())
|
||||
store.dispatch(GlobalAction.HideDialog)
|
||||
store.dispatch(BackupAction.ResumeFoundUnfinishedBackup(scanResponse))
|
||||
}
|
||||
setNegativeButton(R.string.welcome_interrupted_backup_alert_discard) { _, _ ->
|
||||
Analytics.send(OnboardingEvent.Backup.CancelInterruptedBackup)
|
||||
Analytics.send(OnboardingEvent.Backup.CancelInterruptedBackup())
|
||||
store.dispatch(GlobalAction.HideDialog)
|
||||
store.dispatch(GlobalAction.ShowDialog(BackupDialog.ConfirmDiscardingBackup(scanResponse)))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,23 +36,23 @@ sealed class MainScreenAnalyticsEvent(
|
|||
},
|
||||
)
|
||||
|
||||
data object ButtonReceive : MainScreenAnalyticsEvent(
|
||||
class ButtonReceive : MainScreenAnalyticsEvent(
|
||||
event = "Button - Receive",
|
||||
)
|
||||
|
||||
data object LimitsClicked : MainScreenAnalyticsEvent(
|
||||
class LimitsClicked : MainScreenAnalyticsEvent(
|
||||
event = "Limits Clicked",
|
||||
)
|
||||
|
||||
data object NoticeBalancesInfo : MainScreenAnalyticsEvent(
|
||||
class NoticeBalancesInfo : MainScreenAnalyticsEvent(
|
||||
event = "Notice - Balances Info",
|
||||
)
|
||||
|
||||
data object NoticeLimitsInfo : MainScreenAnalyticsEvent(
|
||||
class NoticeLimitsInfo : MainScreenAnalyticsEvent(
|
||||
event = "Notice - Limits Info",
|
||||
)
|
||||
|
||||
data object ButtonExplore : MainScreenAnalyticsEvent(
|
||||
class ButtonExplore : MainScreenAnalyticsEvent(
|
||||
event = "Button - Explore",
|
||||
)
|
||||
|
||||
|
|
@ -66,11 +66,11 @@ sealed class MainScreenAnalyticsEvent(
|
|||
params = mapOf(AnalyticsParam.STATUS to status.value),
|
||||
)
|
||||
|
||||
data object BuyScreenOpened : MainScreenAnalyticsEvent(event = "Buy Screen Opened")
|
||||
class BuyScreenOpened : MainScreenAnalyticsEvent(event = "Buy Screen Opened")
|
||||
|
||||
data object SwapScreenOpened : MainScreenAnalyticsEvent(event = "Swap Screen Opened")
|
||||
class SwapScreenOpened : MainScreenAnalyticsEvent(event = "Swap Screen Opened")
|
||||
|
||||
data object SellScreenOpened : MainScreenAnalyticsEvent(event = "Sell Screen Opened")
|
||||
class SellScreenOpened : MainScreenAnalyticsEvent(event = "Sell Screen Opened")
|
||||
|
||||
data class BuyTokenClicked(val currencySymbol: String) : MainScreenAnalyticsEvent(
|
||||
event = "Buy Token Clicked",
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ internal class DefaultWcPairUseCase @AssistedInject constructor(
|
|||
}
|
||||
|
||||
override fun approve(sessionForApprove: WcSessionApprove) {
|
||||
analytics.send(WcAnalyticEvents.PairButtonConnect)
|
||||
analytics.send(WcAnalyticEvents.PairButtonConnect())
|
||||
onCallTerminalAction.trySend(TerminalAction.Approve(sessionForApprove))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ sealed class IntroductionProcess(
|
|||
params: Map<String, String> = emptyMap(),
|
||||
) : AnalyticsEvent("Introduction Process", event, params) {
|
||||
|
||||
object ScreenOpened : IntroductionProcess("Introduction Process Screen Opened")
|
||||
object ButtonTokensList : IntroductionProcess("Button - Tokens List")
|
||||
object ButtonBuyCards : IntroductionProcess("Button - Buy Cards")
|
||||
object ButtonScanCardLegacy : IntroductionProcess("Button - Scan Card")
|
||||
class ScreenOpened : IntroductionProcess("Introduction Process Screen Opened")
|
||||
class ButtonTokensList : IntroductionProcess("Button - Tokens List")
|
||||
class ButtonBuyCards : IntroductionProcess("Button - Buy Cards")
|
||||
class ButtonScanCardLegacy : IntroductionProcess("Button - Scan Card")
|
||||
|
||||
class ButtonScanCard(
|
||||
val source: AnalyticsParam.ScreensSources,
|
||||
|
|
|
|||
|
|
@ -7,5 +7,5 @@ sealed class Shop(
|
|||
params: Map<String, String> = emptyMap(),
|
||||
) : AnalyticsEvent("Shop", event, params) {
|
||||
|
||||
object ScreenOpened : Shop("Shop Screen Opened")
|
||||
class ScreenOpened : Shop("Shop Screen Opened")
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ sealed class NFTAnalyticsEvent(
|
|||
)
|
||||
|
||||
object Receive {
|
||||
data object ScreenOpened : NFTAnalyticsEvent(event = "Receive NFT Screen Opened")
|
||||
class ScreenOpened : NFTAnalyticsEvent(event = "Receive NFT Screen Opened")
|
||||
|
||||
data class BlockchainChosen(
|
||||
private val blockchain: String,
|
||||
|
|
@ -63,9 +63,9 @@ sealed class NFTAnalyticsEvent(
|
|||
},
|
||||
)
|
||||
|
||||
data object ButtonReadMore : NFTAnalyticsEvent(event = "Button - Read More")
|
||||
data object ButtonSeeAll : NFTAnalyticsEvent(event = "Button - See All")
|
||||
data object ButtonExplore : NFTAnalyticsEvent(event = "Button - Explore")
|
||||
data object ButtonSend : NFTAnalyticsEvent(event = "Button - Send")
|
||||
class ButtonReadMore : NFTAnalyticsEvent(event = "Button - Read More")
|
||||
class ButtonSeeAll : NFTAnalyticsEvent(event = "Button - See All")
|
||||
class ButtonExplore : NFTAnalyticsEvent(event = "Button - Explore")
|
||||
class ButtonSend : NFTAnalyticsEvent(event = "Button - Send")
|
||||
}
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object SelectCurrencyScreenOpened : OnrampAnalyticsEvent(event = "Currency Screen Opened")
|
||||
class SelectCurrencyScreenOpened : OnrampAnalyticsEvent(event = "Currency Screen Opened")
|
||||
|
||||
data class FiatCurrencyChosen(
|
||||
private val currency: String,
|
||||
|
|
@ -39,11 +39,11 @@ sealed class OnrampAnalyticsEvent(
|
|||
params = mapOf("Currency Type" to currency),
|
||||
)
|
||||
|
||||
data object CloseOnramp : OnrampAnalyticsEvent(event = "Button - Close")
|
||||
class CloseOnramp : OnrampAnalyticsEvent(event = "Button - Close")
|
||||
|
||||
data object SettingsOpened : OnrampAnalyticsEvent(event = "Onramp Settings Screen Opened")
|
||||
class SettingsOpened : OnrampAnalyticsEvent(event = "Onramp Settings Screen Opened")
|
||||
|
||||
data object SelectResidenceOpened : OnrampAnalyticsEvent(event = "Residence Screen Opened")
|
||||
class SelectResidenceOpened : OnrampAnalyticsEvent(event = "Residence Screen Opened")
|
||||
|
||||
data class OnResidenceChosen(
|
||||
private val residence: String,
|
||||
|
|
@ -59,7 +59,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
params = mapOf(RESIDENCE to residence),
|
||||
)
|
||||
|
||||
data object OnResidenceChange : OnrampAnalyticsEvent(event = "Button - Change")
|
||||
class OnResidenceChange : OnrampAnalyticsEvent(event = "Button - Change")
|
||||
|
||||
data class OnResidenceConfirm(
|
||||
private val residence: String,
|
||||
|
|
@ -68,7 +68,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
params = mapOf(RESIDENCE to residence),
|
||||
)
|
||||
|
||||
data object ProvidersScreenOpened : OnrampAnalyticsEvent(event = "Providers Screen Opened")
|
||||
class ProvidersScreenOpened : OnrampAnalyticsEvent(event = "Providers Screen Opened")
|
||||
|
||||
data class ProviderCalculated(
|
||||
private val providerName: String,
|
||||
|
|
@ -83,7 +83,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object PaymentMethodsScreenOpened : OnrampAnalyticsEvent(event = "Payment Method Screen Opened")
|
||||
class PaymentMethodsScreenOpened : OnrampAnalyticsEvent(event = "Payment Method Screen Opened")
|
||||
|
||||
data class OnPaymentMethodChosen(
|
||||
private val paymentMethod: String,
|
||||
|
|
@ -135,8 +135,8 @@ sealed class OnrampAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object MinAmountError : OnrampAnalyticsEvent(event = "Error - Min Amount")
|
||||
data object MaxAmountError : OnrampAnalyticsEvent(event = "Error - Max Amount")
|
||||
class MinAmountError : OnrampAnalyticsEvent(event = "Error - Min Amount")
|
||||
class MaxAmountError : OnrampAnalyticsEvent(event = "Error - Max Amount")
|
||||
|
||||
data class Errors(
|
||||
private val tokenSymbol: String,
|
||||
|
|
@ -203,7 +203,7 @@ sealed class OnrampAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object AllOffersClicked : OnrampAnalyticsEvent(
|
||||
class AllOffersClicked : OnrampAnalyticsEvent(
|
||||
event = "Button - All Offers",
|
||||
params = emptyMap(),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.tangem.domain.staking.analytics
|
|||
|
||||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.domain.staking.analytics.StakingAnalyticsEvent.ButtonRewards.addIfValueIsNotNull
|
||||
import com.tangem.domain.staking.model.stakekit.StakingError
|
||||
import com.tangem.domain.models.staking.action.StakingActionType
|
||||
|
||||
|
|
@ -24,11 +23,11 @@ sealed class StakingAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object WhatIsStaking : StakingAnalyticsEvent(
|
||||
class WhatIsStaking : StakingAnalyticsEvent(
|
||||
event = "Link - What Is Staking",
|
||||
)
|
||||
|
||||
data object AmountScreenOpened : StakingAnalyticsEvent(
|
||||
class AmountScreenOpened : StakingAnalyticsEvent(
|
||||
event = "Amount Screen Opened",
|
||||
)
|
||||
|
||||
|
|
@ -54,7 +53,7 @@ sealed class StakingAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object RewardScreenOpened : StakingAnalyticsEvent(
|
||||
class RewardScreenOpened : StakingAnalyticsEvent(
|
||||
event = "Reward Screen Opened",
|
||||
)
|
||||
|
||||
|
|
@ -67,7 +66,7 @@ sealed class StakingAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object ButtonMax : StakingAnalyticsEvent(
|
||||
class ButtonMax : StakingAnalyticsEvent(
|
||||
event = "Button - Max",
|
||||
)
|
||||
|
||||
|
|
@ -98,7 +97,7 @@ sealed class StakingAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object ButtonRewards : StakingAnalyticsEvent(
|
||||
class ButtonRewards : StakingAnalyticsEvent(
|
||||
event = "Button - Rewards",
|
||||
)
|
||||
|
||||
|
|
@ -112,9 +111,9 @@ sealed class StakingAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object ButtonShare : StakingAnalyticsEvent(event = "Button - Share")
|
||||
class ButtonShare : StakingAnalyticsEvent(event = "Button - Share")
|
||||
|
||||
data object ButtonExplore : StakingAnalyticsEvent(event = "Button - Explore")
|
||||
class ButtonExplore : StakingAnalyticsEvent(event = "Button - Explore")
|
||||
|
||||
data class StakeKitApiError(
|
||||
val stakingError: StakingError.StakeKitApiError,
|
||||
|
|
@ -145,12 +144,6 @@ sealed class StakingAnalyticsEvent(
|
|||
},
|
||||
)
|
||||
|
||||
fun MutableMap<String, String>.addIfValueIsNotNull(key: String, value: Any?) {
|
||||
if (value != null) {
|
||||
put(key, value.toString())
|
||||
}
|
||||
}
|
||||
|
||||
data class TransactionError(
|
||||
val errorCode: String,
|
||||
) : StakingAnalyticsEvent(
|
||||
|
|
@ -178,4 +171,11 @@ sealed class StakingAnalyticsEvent(
|
|||
|
||||
enum class StakeScreenSource {
|
||||
Info, Amount, Confirmation, Validators,
|
||||
}
|
||||
|
||||
@Suppress("CanBeNonNullable")
|
||||
fun MutableMap<String, String>.addIfValueIsNotNull(key: String, value: Any?) {
|
||||
if (value != null) {
|
||||
put(key, value.toString())
|
||||
}
|
||||
}
|
||||
|
|
@ -31,22 +31,22 @@ sealed class PromoAnalyticsEvent(
|
|||
),
|
||||
) {
|
||||
sealed class BannerAction(val action: String) {
|
||||
data object Clicked : BannerAction(action = "Clicked")
|
||||
data object Closed : BannerAction(action = "Closed")
|
||||
class Clicked : BannerAction(action = "Clicked")
|
||||
class Closed : BannerAction(action = "Closed")
|
||||
}
|
||||
}
|
||||
|
||||
// region visa waitlist promo
|
||||
data object VisaWaitlistPromo : PromoAnalyticsEvent(event = "Visa Waitlist")
|
||||
class VisaWaitlistPromo : PromoAnalyticsEvent(event = "Visa Waitlist")
|
||||
|
||||
data object VisaWaitlistPromoJoin : PromoAnalyticsEvent(
|
||||
class VisaWaitlistPromoJoin : PromoAnalyticsEvent(
|
||||
event = "Button - Join Now",
|
||||
params = mapOf(
|
||||
"Program Name" to "Visa Waitlist",
|
||||
),
|
||||
)
|
||||
|
||||
data object VisaWaitlistPromoDismiss : PromoAnalyticsEvent(
|
||||
class VisaWaitlistPromoDismiss : PromoAnalyticsEvent(
|
||||
event = "Button - Close",
|
||||
params = mapOf(
|
||||
"Program Name" to "Visa Waitlist",
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ sealed class TokenOnrampAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object GoToProvider : TokenOnrampAnalyticsEvent(event = "Button - Go To Provider")
|
||||
class GoToProvider : TokenOnrampAnalyticsEvent(event = "Button - Go To Provider")
|
||||
|
||||
data class NoticeKYC(
|
||||
val tokenSymbol: String,
|
||||
|
|
|
|||
|
|
@ -8,42 +8,42 @@ sealed class TangemPayAnalyticsEvents(
|
|||
params: Map<String, String> = emptyMap(),
|
||||
) : AnalyticsEvent(category = categoryName, event = event, params = params) {
|
||||
|
||||
data object ActivationScreenOpened : TangemPayAnalyticsEvents(
|
||||
class ActivationScreenOpened : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Onboarding",
|
||||
event = "Activation Screen Opened",
|
||||
)
|
||||
|
||||
data object ViewTermsClicked : TangemPayAnalyticsEvents(
|
||||
class ViewTermsClicked : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Onboarding",
|
||||
event = "Button - Visa View Terms",
|
||||
)
|
||||
|
||||
data object GetCardClicked : TangemPayAnalyticsEvents(
|
||||
class GetCardClicked : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Onboarding",
|
||||
event = "Button - Visa Get Card",
|
||||
)
|
||||
|
||||
data object KycFlowOpened : TangemPayAnalyticsEvents(
|
||||
class KycFlowOpened : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Onboarding",
|
||||
event = "Visa KYC Flow Opened",
|
||||
)
|
||||
|
||||
data object IssuingBannerDisplayed : TangemPayAnalyticsEvents(
|
||||
class IssuingBannerDisplayed : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Onboarding",
|
||||
event = "Visa Issuing Banner Displayed",
|
||||
)
|
||||
|
||||
data object MainScreenOpened : TangemPayAnalyticsEvents(
|
||||
class MainScreenOpened : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Screen",
|
||||
event = "Visa Main Screen Opened",
|
||||
)
|
||||
|
||||
data object ReceiveFundsClicked : TangemPayAnalyticsEvents(
|
||||
class ReceiveFundsClicked : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Screen",
|
||||
event = "Button - Visa Receive",
|
||||
)
|
||||
|
||||
data object SwapClicked : TangemPayAnalyticsEvents(
|
||||
class SwapClicked : TangemPayAnalyticsEvents(
|
||||
categoryName = "Visa Screen",
|
||||
event = "Button - Visa Swap",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.domain.blockaid.models.dapp.CheckDAppResult.*
|
|||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.walletconnect.WcAnalyticEvents.ButtonDisconnectAll.toAnalyticVerificationStatus
|
||||
import com.tangem.domain.walletconnect.WcAnalyticEvents.DAppVerificationStatus
|
||||
import com.tangem.domain.walletconnect.model.WcPairRequest
|
||||
import com.tangem.domain.walletconnect.model.WcSession
|
||||
import com.tangem.domain.walletconnect.model.WcSessionApprove
|
||||
|
|
@ -19,7 +19,7 @@ sealed class WcAnalyticEvents(
|
|||
params: Map<String, String> = emptyMap(),
|
||||
) : AnalyticsEvent(category = WC_CATEGORY_NAME, event = event, params = params) {
|
||||
|
||||
object ScreenOpened : WcAnalyticEvents(event = "WC Screen Opened")
|
||||
class ScreenOpened : WcAnalyticEvents(event = "WC Screen Opened")
|
||||
class NewPairInitiated(source: WcPairRequest.Source) : WcAnalyticEvents(
|
||||
event = "Session Initiated",
|
||||
params = mapOf(
|
||||
|
|
@ -32,7 +32,7 @@ sealed class WcAnalyticEvents(
|
|||
),
|
||||
)
|
||||
|
||||
data object PairButtonConnect : WcAnalyticEvents(
|
||||
class PairButtonConnect : WcAnalyticEvents(
|
||||
event = "Button - Connect",
|
||||
)
|
||||
|
||||
|
|
@ -203,7 +203,7 @@ sealed class WcAnalyticEvents(
|
|||
}
|
||||
}
|
||||
|
||||
data object ButtonDisconnectAll : WcAnalyticEvents(
|
||||
class ButtonDisconnectAll : WcAnalyticEvents(
|
||||
event = "Button - Disconnect All",
|
||||
)
|
||||
|
||||
|
|
@ -265,16 +265,16 @@ sealed class WcAnalyticEvents(
|
|||
Unknown("Unknown"),
|
||||
}
|
||||
|
||||
fun CheckDAppResult.toAnalyticVerificationStatus(): String = when (this) {
|
||||
SAFE -> DAppVerificationStatus.Verified
|
||||
UNSAFE -> DAppVerificationStatus.Risky
|
||||
FAILED_TO_VERIFY -> DAppVerificationStatus.Unknown
|
||||
}.status
|
||||
|
||||
companion object {
|
||||
|
||||
const val NETWORKS = "Networks"
|
||||
const val DOMAIN_VERIFICATION = "Domain Verification"
|
||||
const val WC_CATEGORY_NAME = "Wallet Connect"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun CheckDAppResult.toAnalyticVerificationStatus(): String = when (this) {
|
||||
SAFE -> DAppVerificationStatus.Verified
|
||||
UNSAFE -> DAppVerificationStatus.Risky
|
||||
FAILED_TO_VERIFY -> DAppVerificationStatus.Unknown
|
||||
}.status
|
||||
|
|
@ -15,7 +15,7 @@ class WcDisconnectUseCase(
|
|||
) {
|
||||
|
||||
suspend fun disconnectAll() {
|
||||
analytics.send(WcAnalyticEvents.ButtonDisconnectAll)
|
||||
analytics.send(WcAnalyticEvents.ButtonDisconnectAll())
|
||||
sessionsManager.sessions.first()
|
||||
.flatMap { it.value }
|
||||
.map { session -> flow { emit(internalDisconnect(session)) } }
|
||||
|
|
|
|||
|
|
@ -8,7 +8,5 @@ sealed class Settings(
|
|||
params: Map<String, String> = emptyMap(),
|
||||
) : AnalyticsEvent(category, event, params) {
|
||||
|
||||
data object ButtonCreateBackup : Settings(event = "Button - Create Backup")
|
||||
|
||||
data object ButtonManageTokens : Settings(event = "Button - Manage Tokens")
|
||||
class ButtonManageTokens : Settings(event = "Button - Manage Tokens")
|
||||
}
|
||||
|
|
@ -93,7 +93,7 @@ internal class HomeModel @Inject constructor(
|
|||
val uiState = _uiState.asStateFlow()
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(IntroductionProcess.ScreenOpened)
|
||||
analyticsEventHandler.send(IntroductionProcess.ScreenOpened())
|
||||
observeUserCountryChanges()
|
||||
|
||||
when (params.launchMode) {
|
||||
|
|
@ -127,20 +127,20 @@ internal class HomeModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onScanClick() {
|
||||
analyticsEventHandler.send(IntroductionProcess.ButtonScanCardLegacy)
|
||||
analyticsEventHandler.send(IntroductionProcess.ButtonScanCardLegacy())
|
||||
scanCard()
|
||||
}
|
||||
|
||||
private fun onShopClick() {
|
||||
analyticsEventHandler.send(IntroductionProcess.ButtonBuyCards)
|
||||
analyticsEventHandler.send(Shop.ScreenOpened)
|
||||
analyticsEventHandler.send(IntroductionProcess.ButtonBuyCards())
|
||||
analyticsEventHandler.send(Shop.ScreenOpened())
|
||||
modelScope.launch {
|
||||
generateBuyTangemCardLinkUseCase.invoke().let { urlOpener.openUrl(it) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun onSearchTokensClick() {
|
||||
analyticsEventHandler.send(IntroductionProcess.ButtonTokensList)
|
||||
analyticsEventHandler.send(IntroductionProcess.ButtonTokensList())
|
||||
router.push(AppRoute.ManageTokens(Source.STORIES))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ class DefaultKycModel @Inject constructor(
|
|||
val uiState = _uiState.asStateFlow()
|
||||
|
||||
init {
|
||||
analytics.send(TangemPayAnalyticsEvents.KycFlowOpened)
|
||||
analytics.send(TangemPayAnalyticsEvents.KycFlowOpened())
|
||||
modelScope.launch {
|
||||
try {
|
||||
kycRepository.getKycStartInfo(params.userWalletId).getOrNull()?.let { _uiState.emit(it) }
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ internal sealed class ManageTokensAnalyticEvent(
|
|||
AnalyticsParam.Key.SOURCE to source.analyticsName,
|
||||
),
|
||||
)
|
||||
data object ButtonLater : ManageTokensAnalyticEvent(
|
||||
class ButtonLater : ManageTokensAnalyticEvent(
|
||||
event = "Button - Later",
|
||||
params = mapOf(AnalyticsParam.SOURCE to ManageTokensSource.ONBOARDING.analyticsName),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ internal class OnboardingManageTokensModel @Inject constructor(
|
|||
}
|
||||
},
|
||||
) {
|
||||
analyticsEventHandler.send(ManageTokensAnalyticEvent.ButtonLater)
|
||||
analyticsEventHandler.send(ManageTokensAnalyticEvent.ButtonLater())
|
||||
|
||||
useCasesFacade.saveManagedTokensUseCase(
|
||||
currenciesToAdd = manageTokensListManager.currenciesToAdd.value,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ internal sealed class MarketsListAnalyticsEvent(
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent(category = "Markets", event = event, params = params) {
|
||||
|
||||
data object BottomSheetOpened : MarketsListAnalyticsEvent(event = "Markets Screen Opened")
|
||||
class BottomSheetOpened : MarketsListAnalyticsEvent(event = "Markets Screen Opened")
|
||||
|
||||
data class SortBy(
|
||||
val sortByTypeUM: SortByTypeUM,
|
||||
|
|
@ -33,11 +33,11 @@ internal sealed class MarketsListAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object StakingPromoShown : MarketsListAnalyticsEvent(event = "Notice - Staking Promo")
|
||||
class StakingPromoShown : MarketsListAnalyticsEvent(event = "Notice - Staking Promo")
|
||||
|
||||
data object StakingPromoClosed : MarketsListAnalyticsEvent(event = "Staking Promo Closed")
|
||||
class StakingPromoClosed : MarketsListAnalyticsEvent(event = "Staking Promo Closed")
|
||||
|
||||
data object StakingMoreInfoClicked : MarketsListAnalyticsEvent(event = "Staking More Info")
|
||||
class StakingMoreInfoClicked : MarketsListAnalyticsEvent(event = "Staking More Info")
|
||||
|
||||
data class TokenSearched(val tokenFound: Boolean) : MarketsListAnalyticsEvent(
|
||||
event = "Token Searched",
|
||||
|
|
@ -46,5 +46,5 @@ internal sealed class MarketsListAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
data object ShowTokens : MarketsListAnalyticsEvent(event = "Button - Show Tokens")
|
||||
class ShowTokens : MarketsListAnalyticsEvent(event = "Button - Show Tokens")
|
||||
}
|
||||
|
|
@ -69,9 +69,9 @@ internal class MarketsListModel @Inject constructor(
|
|||
visibleItemsChanged = { visibleItemIds.value = it },
|
||||
onRetryButtonClicked = { activeListManager.reload() },
|
||||
onTokenClick = { onTokenUIClicked(it) },
|
||||
onStakingNotificationClick = { analyticsEventHandler.send(MarketsListAnalyticsEvent.StakingMoreInfoClicked) },
|
||||
onStakingNotificationClick = { analyticsEventHandler.send(MarketsListAnalyticsEvent.StakingMoreInfoClicked()) },
|
||||
onStakingNotificationCloseClick = { onStakingNotificationCloseClick() },
|
||||
onShowTokensUnder100kClicked = { analyticsEventHandler.send(MarketsListAnalyticsEvent.ShowTokens) },
|
||||
onShowTokensUnder100kClicked = { analyticsEventHandler.send(MarketsListAnalyticsEvent.ShowTokens()) },
|
||||
)
|
||||
|
||||
private val mainMarketsListManager = MarketsListBatchFlowManager(
|
||||
|
|
@ -150,7 +150,7 @@ internal class MarketsListModel @Inject constructor(
|
|||
if (marketsListUMStateManager.state.value.stakingNotificationMaxApy == null &&
|
||||
stakingNotificationMaxApy != null
|
||||
) {
|
||||
analyticsEventHandler.send(MarketsListAnalyticsEvent.StakingPromoShown)
|
||||
analyticsEventHandler.send(MarketsListAnalyticsEvent.StakingPromoShown())
|
||||
}
|
||||
|
||||
marketsListUMStateManager.onUiItemsChanged(
|
||||
|
|
@ -267,9 +267,9 @@ internal class MarketsListModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun initAnalytics() {
|
||||
containerBottomSheetState.onEach {
|
||||
if (it == BottomSheetState.EXPANDED) {
|
||||
analyticsEventHandler.send(MarketsListAnalyticsEvent.BottomSheetOpened)
|
||||
containerBottomSheetState.onEach { bottomSheetState ->
|
||||
if (bottomSheetState == BottomSheetState.EXPANDED) {
|
||||
analyticsEventHandler.send(MarketsListAnalyticsEvent.BottomSheetOpened())
|
||||
}
|
||||
}.launchIn(modelScope)
|
||||
|
||||
|
|
@ -303,7 +303,7 @@ internal class MarketsListModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onStakingNotificationCloseClick() {
|
||||
analyticsEventHandler.send(MarketsListAnalyticsEvent.StakingPromoClosed)
|
||||
analyticsEventHandler.send(MarketsListAnalyticsEvent.StakingPromoClosed())
|
||||
modelScope.launch {
|
||||
promoRepository.setMarketsStakingNotificationHideClicked()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ internal class NFTDetailsModel @Inject constructor(
|
|||
onBackClick = { params.onBackClick() },
|
||||
onReadMoreClick = ::onReadMoreClick,
|
||||
onSeeAllTraitsClick = {
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonSeeAll)
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonSeeAll())
|
||||
params.onAllTraitsClick()
|
||||
},
|
||||
onExploreClick = ::onExploreClick,
|
||||
|
|
@ -161,7 +161,7 @@ internal class NFTDetailsModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onInfoBlockClick(title: TextReference, text: TextReference) {
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonReadMore)
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonReadMore())
|
||||
bottomSheetNavigation.activate(
|
||||
NFTDetailsBottomSheetConfig.Info(
|
||||
title = title,
|
||||
|
|
@ -171,7 +171,7 @@ internal class NFTDetailsModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onReadMoreClick() {
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonReadMore)
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonReadMore())
|
||||
when (val topInfo = _state.value.nftAsset.topInfo) {
|
||||
is NFTAssetUM.TopInfo.Empty -> Unit
|
||||
is NFTAssetUM.TopInfo.Content -> {
|
||||
|
|
@ -186,7 +186,7 @@ internal class NFTDetailsModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onExploreClick() {
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonExplore)
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonExplore())
|
||||
modelScope.launch {
|
||||
val url = getNFTExploreUrlUseCase.invoke(
|
||||
network = params.nftAsset.network,
|
||||
|
|
@ -199,7 +199,7 @@ internal class NFTDetailsModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onSendClick() {
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonSend)
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Details.ButtonSend())
|
||||
router.push(
|
||||
AppRoute.NFTSend(
|
||||
userWalletId = params.userWalletId,
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ internal class NFTReceiveModel @Inject constructor(
|
|||
val state: StateFlow<NFTReceiveUM> get() = _state
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Receive.ScreenOpened)
|
||||
analyticsEventHandler.send(NFTAnalyticsEvent.Receive.ScreenOpened())
|
||||
subscribeToNFTAvailableNetworks()
|
||||
loadPortfolioName()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.tangem.features.onboarding.v2.common.analytics
|
|||
|
||||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
|
||||
sealed class OnboardingEvent(
|
||||
category: String,
|
||||
|
|
@ -10,16 +9,16 @@ sealed class OnboardingEvent(
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent(category, event, params) {
|
||||
|
||||
data object Started : OnboardingEvent("Onboarding", "Onboarding Started")
|
||||
data object Finished : OnboardingEvent("Onboarding", "Onboarding Finished")
|
||||
class Started : OnboardingEvent("Onboarding", "Onboarding Started")
|
||||
class Finished : OnboardingEvent("Onboarding", "Onboarding Finished")
|
||||
|
||||
sealed class CreateWallet(
|
||||
event: String,
|
||||
params: Map<String, String> = mapOf(),
|
||||
) : OnboardingEvent("Onboarding / Create Wallet", event, params) {
|
||||
|
||||
data object ScreenOpened : CreateWallet("Create Wallet Screen Opened")
|
||||
data object ButtonCreateWallet : CreateWallet("Button - Create Wallet")
|
||||
class ScreenOpened : CreateWallet("Create Wallet Screen Opened")
|
||||
class ButtonCreateWallet : CreateWallet("Button - Create Wallet")
|
||||
class WalletCreatedSuccessfully(
|
||||
creationType: WalletCreationType = WalletCreationType.PrivateKey,
|
||||
seedPhraseLength: Int? = null,
|
||||
|
|
@ -40,54 +39,39 @@ sealed class OnboardingEvent(
|
|||
}
|
||||
}
|
||||
|
||||
sealed class Topup(
|
||||
event: String,
|
||||
params: Map<String, String> = mapOf(),
|
||||
) : OnboardingEvent("Onboarding / Top Up", event, params) {
|
||||
|
||||
object ScreenOpened : Topup("Activation Screen Opened")
|
||||
|
||||
object ButtonShowWalletAddress : Topup("Button - Show the Wallet Address")
|
||||
|
||||
class ButtonBuyCrypto(currency: CryptoCurrency) : Topup(
|
||||
event = "Button - Buy Crypto",
|
||||
params = mapOf(AnalyticsParam.CURRENCY to currency.symbol),
|
||||
)
|
||||
}
|
||||
|
||||
sealed class Backup(
|
||||
event: String,
|
||||
params: Map<String, String> = mapOf(),
|
||||
) : OnboardingEvent("Onboarding / Backup", event, params) {
|
||||
|
||||
data object ScreenOpened : Backup("Backup Screen Opened")
|
||||
data object Started : Backup("Backup Started")
|
||||
data object Skipped : Backup("Backup Skipped")
|
||||
data object SettingAccessCodeStarted : Backup("Setting Access Code Started")
|
||||
data object AccessCodeEntered : Backup("Access Code Entered")
|
||||
data object AccessCodeReEntered : Backup("Access Code Re-entered")
|
||||
class ScreenOpened : Backup("Backup Screen Opened")
|
||||
class Started : Backup("Backup Started")
|
||||
class Skipped : Backup("Backup Skipped")
|
||||
class SettingAccessCodeStarted : Backup("Setting Access Code Started")
|
||||
class AccessCodeEntered : Backup("Access Code Entered")
|
||||
class AccessCodeReEntered : Backup("Access Code Re-entered")
|
||||
|
||||
class Finished(cardsCount: Int) : Backup(
|
||||
event = "Backup Finished",
|
||||
params = mapOf("Cards count" to "$cardsCount"),
|
||||
)
|
||||
|
||||
data object ResetCancelEvent : Backup(
|
||||
class ResetCancelEvent : Backup(
|
||||
event = "Reset Card Notification",
|
||||
params = mapOf("Option" to "Cancel"),
|
||||
)
|
||||
|
||||
data object ResetPerformEvent : Backup(
|
||||
class ResetPerformEvent : Backup(
|
||||
event = "Reset Card Notification",
|
||||
params = mapOf("Option" to "Reset"),
|
||||
)
|
||||
|
||||
data object ResumeInterruptedBackup : Backup(
|
||||
class ResumeInterruptedBackup : Backup(
|
||||
event = "Notice - Backup Canceled",
|
||||
params = mapOf("Action" to "Resume"),
|
||||
)
|
||||
|
||||
data object CancelInterruptedBackup : Backup(
|
||||
class CancelInterruptedBackup : Backup(
|
||||
event = "Notice - Backup Canceled",
|
||||
params = mapOf("Action" to "Cancel"),
|
||||
)
|
||||
|
|
@ -98,9 +82,9 @@ sealed class OnboardingEvent(
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : OnboardingEvent("Onboarding / Twins", event, params) {
|
||||
|
||||
data object ScreenOpened : Twins("Twinning Screen Opened")
|
||||
data object SetupStarted : Twins("Twin Setup Started")
|
||||
data object SetupFinished : Twins("Twin Setup Finished")
|
||||
class ScreenOpened : Twins("Twinning Screen Opened")
|
||||
class SetupStarted : Twins("Twin Setup Started")
|
||||
class SetupFinished : Twins("Twin Setup Finished")
|
||||
}
|
||||
|
||||
data class OfflineAttestationFailed(
|
||||
|
|
|
|||
|
|
@ -157,14 +157,14 @@ internal class OnboardingEntryModel @Inject constructor(
|
|||
modelScope.launch {
|
||||
if (tangemSdkManager.checkCanUseBiometry() && settingsRepository.shouldShowAskBiometry()) {
|
||||
doIfVisa {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.BiometricScreenOpened)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.BiometricScreenOpened())
|
||||
}
|
||||
stackNavigation.replaceAll(
|
||||
OnboardingRoute.AskBiometry(modelCallbacks = AskBiometryModelCallbacks(doneMode)),
|
||||
)
|
||||
} else {
|
||||
doIfVisa {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.SuccessScreenOpened)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.SuccessScreenOpened())
|
||||
}
|
||||
stackNavigation.replaceAll(
|
||||
OnboardingRoute.Done(
|
||||
|
|
@ -182,7 +182,7 @@ internal class OnboardingEntryModel @Inject constructor(
|
|||
override fun onAllowed() {
|
||||
analyticsEventHandler.send(OnboardingEntryEvent.Biometric(OnboardingEntryEvent.Biometric.State.On))
|
||||
doIfVisa {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.SuccessScreenOpened)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.SuccessScreenOpened())
|
||||
}
|
||||
stackNavigation.replaceAll(
|
||||
OnboardingRoute.Done(
|
||||
|
|
@ -195,7 +195,7 @@ internal class OnboardingEntryModel @Inject constructor(
|
|||
override fun onDenied() {
|
||||
analyticsEventHandler.send(OnboardingEntryEvent.Biometric(OnboardingEntryEvent.Biometric.State.Off))
|
||||
doIfVisa {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.SuccessScreenOpened)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.SuccessScreenOpened())
|
||||
}
|
||||
stackNavigation.replaceAll(
|
||||
OnboardingRoute.Done(
|
||||
|
|
|
|||
|
|
@ -209,7 +209,7 @@ internal class DefaultOnboardingMultiWalletComponent @AssistedInject constructor
|
|||
}
|
||||
Done -> {
|
||||
// final step - navigate to parent
|
||||
analyticsHandler.send(OnboardingEvent.Finished)
|
||||
analyticsHandler.send(OnboardingEvent.Finished())
|
||||
val userWallet = childParams.multiWalletState.value.resultUserWallet ?: return
|
||||
params.onDone(userWallet)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ internal class MultiWalletAccessCodeModel @Inject constructor(
|
|||
val onDismiss = MutableSharedFlow<Unit>()
|
||||
|
||||
init {
|
||||
analyticsHandler.send(OnboardingEvent.Backup.SettingAccessCodeStarted)
|
||||
analyticsHandler.send(OnboardingEvent.Backup.SettingAccessCodeStarted())
|
||||
|
||||
params.multiWalletState.update {
|
||||
it.copy(accessCode = null)
|
||||
|
|
@ -112,7 +112,7 @@ internal class MultiWalletAccessCodeModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
analyticsHandler.send(OnboardingEvent.Backup.AccessCodeEntered)
|
||||
analyticsHandler.send(OnboardingEvent.Backup.AccessCodeEntered())
|
||||
}
|
||||
MultiWalletAccessCodeUM.Step.ConfirmAccessCode -> {
|
||||
if (checkAccessCode()) {
|
||||
|
|
@ -125,7 +125,7 @@ internal class MultiWalletAccessCodeModel @Inject constructor(
|
|||
modelScope.launch { onDismiss.emit(Unit) }
|
||||
}
|
||||
|
||||
analyticsHandler.send(OnboardingEvent.Backup.AccessCodeReEntered)
|
||||
analyticsHandler.send(OnboardingEvent.Backup.AccessCodeReEntered())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,10 +80,10 @@ class MultiWalletBackupModel @Inject constructor(
|
|||
init {
|
||||
// for wallet 1 this event is sent in Wallet1ChooseOptionModel
|
||||
if (scanResponse.productType == ProductType.Wallet2 || scanResponse.productType == ProductType.Ring) {
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.ScreenOpened)
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.ScreenOpened())
|
||||
}
|
||||
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.Started)
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.Started())
|
||||
|
||||
// Clear any saved backup before starting the backup process
|
||||
// also clears the primary card if it was set
|
||||
|
|
@ -226,7 +226,7 @@ class MultiWalletBackupModel @Inject constructor(
|
|||
_uiState.update { it.copy(dialog = null) }
|
||||
},
|
||||
onDismissClick = {
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.ResetCancelEvent)
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.ResetCancelEvent())
|
||||
},
|
||||
),
|
||||
)
|
||||
|
|
@ -270,7 +270,7 @@ class MultiWalletBackupModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun resetBackupCard(cardId: String) {
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.ResetPerformEvent)
|
||||
analyticsEventHandler.send(OnboardingEvent.Backup.ResetPerformEvent())
|
||||
|
||||
modelScope.launch {
|
||||
tangemSdkManager.resetToFactorySettings(
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ internal class Wallet1ChooseOptionModel @Inject constructor(
|
|||
val returnToParentFlow = MutableSharedFlow<Unit>()
|
||||
|
||||
init {
|
||||
analyticsHandler.send(OnboardingEvent.Backup.ScreenOpened)
|
||||
analyticsHandler.send(OnboardingEvent.Backup.ScreenOpened())
|
||||
}
|
||||
|
||||
val canSkipBackup = params.multiWalletState.value.currentScanResponse.card.canSkipBackup
|
||||
|
|
@ -44,7 +44,7 @@ internal class Wallet1ChooseOptionModel @Inject constructor(
|
|||
if (skipClicked) return
|
||||
skipClicked = true
|
||||
|
||||
analyticsHandler.send(OnboardingEvent.Backup.Skipped)
|
||||
analyticsHandler.send(OnboardingEvent.Backup.Skipped())
|
||||
|
||||
modelScope.launch {
|
||||
val scanResponse = params.multiWalletState.value.currentScanResponse
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ internal class MultiWalletCreateWalletModel @Inject constructor(
|
|||
resourceReference(R.string.onboarding_create_wallet_body)
|
||||
},
|
||||
onCreateWalletClick = {
|
||||
analyticsHandler.send(OnboardingEvent.CreateWallet.ButtonCreateWallet)
|
||||
analyticsHandler.send(OnboardingEvent.CreateWallet.ButtonCreateWallet())
|
||||
createWallet(false)
|
||||
},
|
||||
showOtherOptionsButton = params.parentParams.withSeedPhraseFlow,
|
||||
|
|
@ -80,7 +80,7 @@ internal class MultiWalletCreateWalletModel @Inject constructor(
|
|||
val onDone = MutableSharedFlow<Step>()
|
||||
|
||||
init {
|
||||
analyticsHandler.send(OnboardingEvent.CreateWallet.ScreenOpened)
|
||||
analyticsHandler.send(OnboardingEvent.CreateWallet.ScreenOpened())
|
||||
}
|
||||
|
||||
private fun createWallet(shouldReset: Boolean) {
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ internal class OnboardingMultiWalletModel @Inject constructor(
|
|||
val uiState = _uiState.asStateFlow()
|
||||
|
||||
init {
|
||||
analyticsHandler.send(OnboardingEvent.Started)
|
||||
analyticsHandler.send(OnboardingEvent.Started())
|
||||
initScreenTitle()
|
||||
loadCardArtwork()
|
||||
subscribeToBackups()
|
||||
|
|
|
|||
|
|
@ -41,11 +41,11 @@ internal class OnboardingNoteCreateWalletModel @Inject constructor(
|
|||
)
|
||||
|
||||
init {
|
||||
Analytics.send(OnboardingEvent.CreateWallet.ScreenOpened)
|
||||
Analytics.send(OnboardingEvent.CreateWallet.ScreenOpened())
|
||||
modelScope.launch {
|
||||
val scanResponse = params.childParams.commonState.value.scanResponse ?: return@launch
|
||||
if (!cardRepository.isActivationStarted(scanResponse.card.cardId)) {
|
||||
Analytics.send(OnboardingEvent.Started)
|
||||
Analytics.send(OnboardingEvent.Started())
|
||||
}
|
||||
}
|
||||
observeArtwork()
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ internal class OnboardingTwinModel @Inject constructor(
|
|||
init {
|
||||
when (_uiState.value) {
|
||||
is OnboardingTwinUM.Welcome -> {
|
||||
analyticsEventHandler.send(OnboardingEvent.Twins.ScreenOpened)
|
||||
analyticsEventHandler.send(OnboardingEvent.Twins.ScreenOpened())
|
||||
modelScope.launch {
|
||||
saveTwinsOnboardingShownUseCase()
|
||||
}
|
||||
|
|
@ -272,7 +272,7 @@ internal class OnboardingTwinModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun scanComplete(scanResponse: ScanResponse) {
|
||||
analyticsEventHandler.send(OnboardingEvent.Twins.SetupFinished)
|
||||
analyticsEventHandler.send(OnboardingEvent.Twins.SetupFinished())
|
||||
|
||||
when (params.mode) {
|
||||
Mode.WelcomeOnly -> saveWalletAndDone()
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ internal class OnboardingVisaAccessCodeModel @Inject constructor(
|
|||
val onDone = MutableSharedFlow<ActivationReadyEvent>()
|
||||
|
||||
init {
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.SettingAccessCodeStarted)
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.SettingAccessCodeStarted())
|
||||
}
|
||||
|
||||
fun onBack() {
|
||||
|
|
@ -115,14 +115,14 @@ internal class OnboardingVisaAccessCodeModel @Inject constructor(
|
|||
private fun onContinue() {
|
||||
when (uiState.value.step) {
|
||||
OnboardingVisaAccessCodeUM.Step.Enter -> {
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.AccessCodeEntered)
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.AccessCodeEntered())
|
||||
if (checkAccessCodeMinChars().not()) return
|
||||
_uiState.update { it.copy(step = OnboardingVisaAccessCodeUM.Step.ReEnter) }
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.AccessCodeReenterScreen)
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.AccessCodeReenterScreen())
|
||||
}
|
||||
OnboardingVisaAccessCodeUM.Step.ReEnter -> {
|
||||
if (checkAccessCodesMatch().not()) return
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.OnboardingVisa)
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.OnboardingVisa())
|
||||
startActivationProcess(accessCode = uiState.value.accessCodeFirst.text)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ internal class OnboardingVisaApproveModel @Inject constructor(
|
|||
val onDone = MutableSharedFlow<Unit>()
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.WalletPrepare)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.WalletPrepare())
|
||||
}
|
||||
|
||||
private fun getInitialState(): OnboardingVisaApproveUM {
|
||||
|
|
@ -67,7 +67,7 @@ internal class OnboardingVisaApproveModel @Inject constructor(
|
|||
private fun onApproveClick() {
|
||||
loading(true)
|
||||
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ButtonApprove)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ButtonApprove())
|
||||
|
||||
modelScope.launch {
|
||||
val dataToSign =
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ internal class OnboardingVisaInProgressModel @Inject constructor(
|
|||
val onDone = MutableSharedFlow<Params.DoneEvent>()
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ActivationInProgressScreen)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ActivationInProgressScreen())
|
||||
runShortPolling()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ internal class OnboardingVisaOtherWalletModel @Inject constructor(
|
|||
val onDone = MutableSharedFlow<VisaActivationOrderInfo>()
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.GoToWebsiteOpened)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.GoToWebsiteOpened())
|
||||
modelScope.launch {
|
||||
while (true) {
|
||||
visaActivationRepository.getActivationRemoteState()
|
||||
|
|
@ -81,12 +81,12 @@ internal class OnboardingVisaOtherWalletModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onShareClicked() {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ButtonShareLink)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ButtonShareLink())
|
||||
shareManager.shareText("https://tangem.com/") // TODO
|
||||
}
|
||||
|
||||
private fun onOpenInBrowserClicked() {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ButtonBrowser)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ButtonBrowser())
|
||||
urlOpener.openUrl("https://tangem.com/") // TODO
|
||||
}
|
||||
}
|
||||
|
|
@ -47,7 +47,7 @@ internal class OnboardingVisaPinCodeModel @Inject constructor(
|
|||
val onDone = MutableSharedFlow<Unit>()
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.PinCodeScreenOpened)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.PinCodeScreenOpened())
|
||||
}
|
||||
|
||||
private fun getInitialState(): OnboardingVisaPinCodeUM {
|
||||
|
|
@ -67,12 +67,12 @@ internal class OnboardingVisaPinCodeModel @Inject constructor(
|
|||
if (PinCodeValidation.validateAllDigits(pin)) {
|
||||
val isError = PinCodeValidation.validateLength(pin) && PinCodeValidation.validate(pin).not()
|
||||
|
||||
_uiState.update {
|
||||
it.copy(
|
||||
_uiState.update { currentState ->
|
||||
currentState.copy(
|
||||
pinCode = pin,
|
||||
submitButtonEnabled = PinCodeValidation.validate(pin),
|
||||
error = if (isError) {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ErrorPinValidation)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.ErrorPinValidation())
|
||||
resourceReference(R.string.visa_onboarding_pin_validation_error_message)
|
||||
} else {
|
||||
null
|
||||
|
|
@ -83,7 +83,7 @@ internal class OnboardingVisaPinCodeModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onSubmitClick() {
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.PinEntered)
|
||||
analyticsEventHandler.send(OnboardingVisaAnalyticsEvent.PinEntered())
|
||||
val pinCode = _uiState.value.pinCode
|
||||
if (PinCodeValidation.validate(pinCode).not()) return
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ internal class OnboardingVisaWelcomeModel @Inject constructor(
|
|||
val onDone = MutableSharedFlow<DoneEvent>()
|
||||
|
||||
init {
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.ActivationScreenOpened)
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.ActivationScreenOpened())
|
||||
}
|
||||
|
||||
private fun getInitialState(): OnboardingVisaWelcomeUM {
|
||||
|
|
@ -65,7 +65,7 @@ internal class OnboardingVisaWelcomeModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onContinueClick() {
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.ButtonActivate)
|
||||
analyticsEventsHandler.send(OnboardingVisaAnalyticsEvent.ButtonActivate())
|
||||
if (params !is Config.WelcomeBack) {
|
||||
modelScope.launch { onDone.emit(DoneEvent.WelcomeDone) }
|
||||
return
|
||||
|
|
|
|||
|
|
@ -7,27 +7,27 @@ internal sealed class OnboardingVisaAnalyticsEvent(
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent("Onboarding / Visa", event, params) {
|
||||
|
||||
data object ActivationScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
class ActivationScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
event = "Activation Screen Opened",
|
||||
)
|
||||
|
||||
data object ButtonActivate : OnboardingVisaAnalyticsEvent(
|
||||
class ButtonActivate : OnboardingVisaAnalyticsEvent(
|
||||
event = "Button - Activate",
|
||||
)
|
||||
|
||||
data object SettingAccessCodeStarted : OnboardingVisaAnalyticsEvent(
|
||||
class SettingAccessCodeStarted : OnboardingVisaAnalyticsEvent(
|
||||
event = "Setting Access Code Started",
|
||||
)
|
||||
|
||||
data object AccessCodeEntered : OnboardingVisaAnalyticsEvent(
|
||||
class AccessCodeEntered : OnboardingVisaAnalyticsEvent(
|
||||
event = "Access Code Entered",
|
||||
)
|
||||
|
||||
data object AccessCodeReenterScreen : OnboardingVisaAnalyticsEvent(
|
||||
class AccessCodeReenterScreen : OnboardingVisaAnalyticsEvent(
|
||||
event = "Access Code Re-enter Screen",
|
||||
)
|
||||
|
||||
data object OnboardingVisa : OnboardingVisaAnalyticsEvent(
|
||||
class OnboardingVisa : OnboardingVisaAnalyticsEvent(
|
||||
event = "Onboarding / Visa",
|
||||
)
|
||||
|
||||
|
|
@ -38,48 +38,48 @@ internal sealed class OnboardingVisaAnalyticsEvent(
|
|||
params = mapOf("Type" to type),
|
||||
)
|
||||
|
||||
data object WalletPrepare : OnboardingVisaAnalyticsEvent(
|
||||
class WalletPrepare : OnboardingVisaAnalyticsEvent(
|
||||
event = "Wallet Prepare",
|
||||
)
|
||||
|
||||
data object ButtonApprove : OnboardingVisaAnalyticsEvent(
|
||||
class ButtonApprove : OnboardingVisaAnalyticsEvent(
|
||||
event = "Button - Approve",
|
||||
)
|
||||
|
||||
data object GoToWebsiteOpened : OnboardingVisaAnalyticsEvent(
|
||||
class GoToWebsiteOpened : OnboardingVisaAnalyticsEvent(
|
||||
event = "Go To Website Opened",
|
||||
)
|
||||
|
||||
data object ButtonBrowser : OnboardingVisaAnalyticsEvent(
|
||||
class ButtonBrowser : OnboardingVisaAnalyticsEvent(
|
||||
event = "Button - Browser",
|
||||
)
|
||||
|
||||
data object ButtonShareLink : OnboardingVisaAnalyticsEvent(
|
||||
class ButtonShareLink : OnboardingVisaAnalyticsEvent(
|
||||
event = "Button - Share Link",
|
||||
)
|
||||
|
||||
data object ActivationInProgressScreen : OnboardingVisaAnalyticsEvent(
|
||||
class ActivationInProgressScreen : OnboardingVisaAnalyticsEvent(
|
||||
event = "Activation In Progress Screen",
|
||||
)
|
||||
|
||||
data object PinCodeScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
class PinCodeScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
event = "PIN Code Screen Opened",
|
||||
)
|
||||
|
||||
data object PinEntered : OnboardingVisaAnalyticsEvent(
|
||||
class PinEntered : OnboardingVisaAnalyticsEvent(
|
||||
event = "PIN Entered",
|
||||
params = mapOf("Type" to "Visa"),
|
||||
)
|
||||
|
||||
data object BiometricScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
class BiometricScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
event = "Biometric Screen Opened",
|
||||
)
|
||||
|
||||
data object SuccessScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
class SuccessScreenOpened : OnboardingVisaAnalyticsEvent(
|
||||
event = "Success Screen Opened",
|
||||
)
|
||||
|
||||
data object ErrorPinValidation : OnboardingVisaAnalyticsEvent(
|
||||
class ErrorPinValidation : OnboardingVisaAnalyticsEvent(
|
||||
event = "Error - Pin Validation",
|
||||
)
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ internal class AllOffersStateFactory(
|
|||
fun getPaymentsState(): AllOffersStateUM {
|
||||
return when (val currentState = currentStateProvider.invoke()) {
|
||||
is AllOffersStateUM.Content -> {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.PaymentMethodsScreenOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.PaymentMethodsScreenOpened())
|
||||
currentState.copy(currentMethod = null)
|
||||
}
|
||||
AllOffersStateUM.Loading,
|
||||
|
|
|
|||
|
|
@ -48,8 +48,8 @@ internal class AllOffersModel @Inject constructor(
|
|||
|
||||
init {
|
||||
subscribeOnAllOffers()
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.PaymentMethodsScreenOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.AllOffersClicked)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.PaymentMethodsScreenOpened())
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.AllOffersClicked())
|
||||
}
|
||||
|
||||
fun dismiss() {
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ internal class ConfirmResidencyModel @Inject constructor(
|
|||
} else {
|
||||
ConfirmResidencyUM.ActionButtonConfig(
|
||||
onClick = {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.CloseOnramp)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.CloseOnramp())
|
||||
router.pop()
|
||||
},
|
||||
text = resourceReference(R.string.common_close),
|
||||
|
|
@ -77,7 +77,7 @@ internal class ConfirmResidencyModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onChangeClick() {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.OnResidenceChange)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.OnResidenceChange())
|
||||
bottomSheetNavigation.activate(ConfirmResidencyBottomSheetConfig.SelectCountry(params.onDismiss))
|
||||
}
|
||||
}
|
||||
|
|
@ -240,11 +240,11 @@ internal class OnrampAmountStateFactory(
|
|||
|
||||
val errorTextRes = when (error) {
|
||||
is OnrampError.AmountError.TooBigError -> {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MaxAmountError)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MaxAmountError())
|
||||
R.string.onramp_max_amount_restriction
|
||||
}
|
||||
is OnrampError.AmountError.TooSmallError -> {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MinAmountError)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MinAmountError())
|
||||
R.string.onramp_min_amount_restriction
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -288,7 +288,7 @@ internal class OnrampMainComponentModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun openCurrenciesList() {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SelectCurrencyScreenOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SelectCurrencyScreenOpened())
|
||||
bottomSheetNavigation.activate(OnrampMainBottomSheetConfig.CurrenciesList)
|
||||
}
|
||||
|
||||
|
|
@ -333,7 +333,7 @@ internal class OnrampMainComponentModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onCloseClick() {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.CloseOnramp)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.CloseOnramp())
|
||||
router.pop()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,11 +112,11 @@ internal class OnrampV2AmountStateFactory(
|
|||
|
||||
val errorTextRes = when (error) {
|
||||
is OnrampError.AmountError.TooBigError -> {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MaxAmountError)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MaxAmountError())
|
||||
R.string.onramp_max_amount_restriction
|
||||
}
|
||||
is OnrampError.AmountError.TooSmallError -> {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MinAmountError)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.MinAmountError())
|
||||
R.string.onramp_min_amount_restriction
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ internal class OnrampV2MainComponentModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun openCurrenciesList() {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SelectCurrencyScreenOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SelectCurrencyScreenOpened())
|
||||
bottomSheetNavigation.activate(OnrampV2MainBottomSheetConfig.CurrenciesList)
|
||||
}
|
||||
|
||||
|
|
@ -225,7 +225,7 @@ internal class OnrampV2MainComponentModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onCloseClick() {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.CloseOnramp)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.CloseOnramp())
|
||||
router.pop()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ internal class SelectProviderModel @Inject constructor(
|
|||
userCountry = getUserCountryUseCase.invokeSync().getOrNull()
|
||||
?: UserCountry.Other(Locale.getDefault().country)
|
||||
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.ProvidersScreenOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.ProvidersScreenOpened())
|
||||
getPaymentMethods()
|
||||
getProviders(params.selectedPaymentMethod)
|
||||
}
|
||||
|
|
@ -140,7 +140,7 @@ internal class SelectProviderModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun openPaymentMethods() {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.PaymentMethodsScreenOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.PaymentMethodsScreenOpened())
|
||||
bottomSheetNavigation.activate(
|
||||
ProviderListBottomSheetConfig.PaymentMethods(
|
||||
selectedMethodId = state.value.selectedPaymentMethod.paymentMethod.id,
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ internal class OnrampSelectCountryModel @Inject constructor(
|
|||
val state: StateFlow<CountryListUM> get() = controller.state
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SelectResidenceOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SelectResidenceOpened())
|
||||
updateCountriesList()
|
||||
modelScope.launch { subscribeOnUpdateState() }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,8 +60,8 @@ internal class OnrampOperationModel @Inject constructor(
|
|||
init {
|
||||
analyticsEventHandler.send(
|
||||
event = when (params) {
|
||||
is Params.Buy -> MainScreenAnalyticsEvent.BuyScreenOpened
|
||||
is Params.Sell -> MainScreenAnalyticsEvent.SellScreenOpened
|
||||
is Params.Buy -> MainScreenAnalyticsEvent.BuyScreenOpened()
|
||||
is Params.Sell -> MainScreenAnalyticsEvent.SellScreenOpened()
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ internal class OnrampSettingsModel @Inject constructor(
|
|||
val bottomSheetNavigation: SlotNavigation<OnrampSettingsConfig> = SlotNavigation()
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SettingsOpened)
|
||||
analyticsEventHandler.send(OnrampAnalyticsEvent.SettingsOpened())
|
||||
subscribeOnUpdateState()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ internal class OnrampSuccessComponentModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun goToProviderClick(providerLink: String) {
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider)
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider())
|
||||
urlOpener.openUrl(providerLink)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ internal class DefaultSwapSelectTokensComponent @AssistedInject constructor(
|
|||
)
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(event = MainScreenAnalyticsEvent.SwapScreenOpened)
|
||||
analyticsEventHandler.send(event = MainScreenAnalyticsEvent.SwapScreenOpened())
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -4,12 +4,12 @@ import com.tangem.core.analytics.models.AnalyticsEvent
|
|||
|
||||
sealed class ReferralEvents(event: String) : AnalyticsEvent(REFERRAL_PROGRAM_CATEGORY, event) {
|
||||
|
||||
data object ReferralScreenOpened : ReferralEvents(event = "Referral Screen Opened")
|
||||
data object ClickParticipate : ReferralEvents(event = "Button - Participate")
|
||||
data object ClickCopy : ReferralEvents(event = "Button - Copy")
|
||||
data object ClickShare : ReferralEvents(event = "Button - Share")
|
||||
data object ClickTaC : ReferralEvents(event = "Link - TaC")
|
||||
data object ParticipateSuccessful : ReferralEvents(event = "Participate Successful")
|
||||
class ReferralScreenOpened : ReferralEvents(event = "Referral Screen Opened")
|
||||
class ClickParticipate : ReferralEvents(event = "Button - Participate")
|
||||
class ClickCopy : ReferralEvents(event = "Button - Copy")
|
||||
class ClickShare : ReferralEvents(event = "Button - Share")
|
||||
class ClickTaC : ReferralEvents(event = "Link - TaC")
|
||||
class ParticipateSuccessful : ReferralEvents(event = "Participate Successful")
|
||||
}
|
||||
|
||||
private const val REFERRAL_PROGRAM_CATEGORY = "Referral Program"
|
||||
|
|
@ -90,7 +90,7 @@ internal class ReferralModel @Inject constructor(
|
|||
}
|
||||
|
||||
init {
|
||||
analyticsEventHandler.send(ReferralEvents.ReferralScreenOpened)
|
||||
analyticsEventHandler.send(ReferralEvents.ReferralScreenOpened())
|
||||
if (accountsFeatureToggles.isFeatureEnabled) {
|
||||
combine(
|
||||
flow = referralData.filterNotNull().onEach(::selectAccount),
|
||||
|
|
@ -178,7 +178,7 @@ internal class ReferralModel @Inject constructor(
|
|||
if (userWallet is UserWallet.Cold && isDemoCardUseCase(cardId = userWallet.cardId)) {
|
||||
showErrorSnackbar(DemoModeException())
|
||||
} else {
|
||||
analyticsEventHandler.send(ReferralEvents.ClickParticipate)
|
||||
analyticsEventHandler.send(ReferralEvents.ClickParticipate())
|
||||
val lastInfoState = uiState.referralInfoState
|
||||
uiState = uiState.copy(referralInfoState = ReferralInfoState.Loading)
|
||||
modelScope.launch {
|
||||
|
|
@ -187,9 +187,9 @@ internal class ReferralModel @Inject constructor(
|
|||
false -> PortfolioId(params.userWalletId)
|
||||
}
|
||||
runCatching { referralInteractor.startReferral(portfolioId) }
|
||||
.onSuccess {
|
||||
analyticsEventHandler.send(ReferralEvents.ParticipateSuccessful)
|
||||
referralData.value = it
|
||||
.onSuccess { referral ->
|
||||
analyticsEventHandler.send(ReferralEvents.ParticipateSuccessful())
|
||||
referralData.value = referral
|
||||
}
|
||||
.onFailure { throwable ->
|
||||
if (throwable is ReferralError.UserCancelledException) {
|
||||
|
|
@ -213,17 +213,17 @@ internal class ReferralModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onAgreementClicked() {
|
||||
analyticsEventHandler.send(ReferralEvents.ClickTaC)
|
||||
analyticsEventHandler.send(ReferralEvents.ClickTaC())
|
||||
|
||||
lastReferralData?.tosLink?.let(urlOpener::openUrl)
|
||||
}
|
||||
|
||||
private fun onCopyClicked() {
|
||||
analyticsEventHandler.send(ReferralEvents.ClickCopy)
|
||||
analyticsEventHandler.send(ReferralEvents.ClickCopy())
|
||||
}
|
||||
|
||||
private fun onShareClicked(text: String) {
|
||||
analyticsEventHandler.send(ReferralEvents.ClickShare)
|
||||
analyticsEventHandler.send(ReferralEvents.ClickShare())
|
||||
|
||||
shareManager.shareText(text = text)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -466,7 +466,7 @@ internal class StakingModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onInitialInfoBannerClick() {
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.WhatIsStaking)
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.WhatIsStaking())
|
||||
innerRouter.openUrl(WHAT_IS_STAKING_ARTICLE_URL)
|
||||
}
|
||||
|
||||
|
|
@ -512,7 +512,7 @@ internal class StakingModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onMaxValueClick() {
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonMax)
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonMax())
|
||||
stateController.update(
|
||||
AmountMaxValueStateTransformer(
|
||||
cryptoCurrencyStatus = cryptoCurrencyStatus,
|
||||
|
|
@ -554,7 +554,7 @@ internal class StakingModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun openRewardsValidators() {
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonRewards)
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonRewards())
|
||||
val rewardsValidators =
|
||||
stateController.value.rewardsValidatorsState as? StakingStates.RewardsValidatorsState.Data
|
||||
|
||||
|
|
@ -878,7 +878,7 @@ internal class StakingModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onExploreClick() {
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonExplore)
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonExplore())
|
||||
val confirmationDataState = uiState.value.confirmationState as? StakingStates.ConfirmationState.Data
|
||||
val transactionDoneState = confirmationDataState?.transactionDoneState as? TransactionDoneState.Content
|
||||
val txUrl = transactionDoneState?.txUrl
|
||||
|
|
@ -892,7 +892,7 @@ internal class StakingModel @Inject constructor(
|
|||
val transactionDoneState = confirmationDataState?.transactionDoneState as? TransactionDoneState.Content
|
||||
val txUrl = transactionDoneState?.txUrl
|
||||
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonShare)
|
||||
analyticsEventHandler.send(StakingAnalyticsEvent.ButtonShare())
|
||||
if (txUrl != null) {
|
||||
vibratorHapticManager.performOneTime(TangemHapticEffect.OneTime.Click)
|
||||
shareManager.shareText(txUrl)
|
||||
|
|
|
|||
|
|
@ -81,12 +81,12 @@ internal class StakingStateRouter(
|
|||
}
|
||||
|
||||
fun showRewardsValidators() {
|
||||
analyticsEventsHandler.send(StakingAnalyticsEvent.RewardScreenOpened)
|
||||
analyticsEventsHandler.send(StakingAnalyticsEvent.RewardScreenOpened())
|
||||
stateController.update { it.copy(currentStep = StakingStep.RewardsValidators) }
|
||||
}
|
||||
|
||||
private fun showAmount() {
|
||||
analyticsEventsHandler.send(StakingAnalyticsEvent.AmountScreenOpened)
|
||||
analyticsEventsHandler.send(StakingAnalyticsEvent.AmountScreenOpened())
|
||||
stateController.update { it.copy(currentStep = StakingStep.Amount) }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ sealed class SwapEvents(
|
|||
params = mapOf("Token" to token),
|
||||
)
|
||||
|
||||
data object SendTokenBalanceClicked : SwapEvents(event = "Send Token Balance Clicked")
|
||||
class SendTokenBalanceClicked : SwapEvents(event = "Send Token Balance Clicked")
|
||||
|
||||
data class ChooseTokenScreenOpened(val availableTokens: Boolean) : SwapEvents(
|
||||
event = "Choose Token Screen Opened",
|
||||
|
|
@ -43,7 +43,7 @@ sealed class SwapEvents(
|
|||
params = mapOf("Send Token" to sendToken, "Receive Token" to receiveToken),
|
||||
)
|
||||
|
||||
data object ButtonGivePermissionClicked : SwapEvents(event = "Button - Give permission")
|
||||
class ButtonGivePermissionClicked : SwapEvents(event = "Button - Give permission")
|
||||
|
||||
data class ButtonPermissionApproveClicked(
|
||||
val sendToken: String,
|
||||
|
|
@ -58,9 +58,9 @@ sealed class SwapEvents(
|
|||
),
|
||||
)
|
||||
|
||||
data object ButtonPermissionCancelClicked : SwapEvents(event = "Button - Permission Cancel")
|
||||
class ButtonPermissionCancelClicked : SwapEvents(event = "Button - Permission Cancel")
|
||||
|
||||
data object ButtonSwipeClicked : SwapEvents(event = "Button - Swipe")
|
||||
class ButtonSwipeClicked : SwapEvents(event = "Button - Swipe")
|
||||
|
||||
data class SwapInProgressScreen(
|
||||
val provider: SwapProvider,
|
||||
|
|
@ -81,7 +81,7 @@ sealed class SwapEvents(
|
|||
),
|
||||
)
|
||||
|
||||
data object ProviderClicked : SwapEvents("Provider Clicked")
|
||||
class ProviderClicked : SwapEvents("Provider Clicked")
|
||||
|
||||
data class ProviderChosen(val provider: SwapProvider) : SwapEvents(
|
||||
event = "Provider Chosen",
|
||||
|
|
@ -98,7 +98,7 @@ sealed class SwapEvents(
|
|||
params = mapOf("Token" to token),
|
||||
)
|
||||
|
||||
data object NoticeNoAvailableTokensToSwap : SwapEvents("Notice - No Available Tokens To Swap")
|
||||
class NoticeNoAvailableTokensToSwap : SwapEvents("Notice - No Available Tokens To Swap")
|
||||
|
||||
data class NoticeNotEnoughFee(val token: String, val blockchain: String) : SwapEvents(
|
||||
event = "Notice - Not Enough Fee",
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@ internal class SwapModel @Inject constructor(
|
|||
) {
|
||||
// exceptional case
|
||||
if (selectedCurrency == null) {
|
||||
analyticsEventHandler.send(SwapEvents.NoticeNoAvailableTokensToSwap)
|
||||
analyticsEventHandler.send(SwapEvents.NoticeNoAvailableTokensToSwap())
|
||||
uiState = stateBuilder.createNoAvailableTokensToSwapState(
|
||||
uiStateHolder = uiState,
|
||||
fromToken = initialFromStatus,
|
||||
|
|
@ -1271,7 +1271,7 @@ internal class SwapModel @Inject constructor(
|
|||
|
||||
private fun onAmountSelected(selected: Boolean) {
|
||||
if (selected) {
|
||||
analyticsEventHandler.send(SwapEvents.SendTokenBalanceClicked)
|
||||
analyticsEventHandler.send(SwapEvents.SendTokenBalanceClicked())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1312,7 +1312,7 @@ internal class SwapModel @Inject constructor(
|
|||
},
|
||||
onChangeCardsClicked = {
|
||||
onChangeCardsClicked()
|
||||
analyticsEventHandler.send(SwapEvents.ButtonSwipeClicked)
|
||||
analyticsEventHandler.send(SwapEvents.ButtonSwipeClicked())
|
||||
},
|
||||
onBackClicked = {
|
||||
val bottomSheet = uiState.bottomSheetConfig
|
||||
|
|
@ -1331,10 +1331,10 @@ internal class SwapModel @Inject constructor(
|
|||
onReduceByAmount = ::onReduceAmountClicked,
|
||||
openPermissionBottomSheet = {
|
||||
singleTaskScheduler.cancelTask()
|
||||
analyticsEventHandler.send(SwapEvents.ButtonGivePermissionClicked)
|
||||
analyticsEventHandler.send(SwapEvents.ButtonGivePermissionClicked())
|
||||
uiState = stateBuilder.showPermissionBottomSheet(uiState) {
|
||||
startLoadingQuotesFromLastState(isSilent = true)
|
||||
analyticsEventHandler.send(SwapEvents.ButtonPermissionCancelClicked)
|
||||
analyticsEventHandler.send(SwapEvents.ButtonPermissionCancelClicked())
|
||||
uiState = stateBuilder.dismissBottomSheet(uiState)
|
||||
}
|
||||
},
|
||||
|
|
@ -1362,7 +1362,7 @@ internal class SwapModel @Inject constructor(
|
|||
}
|
||||
},
|
||||
onProviderClick = { providerId ->
|
||||
analyticsEventHandler.send(SwapEvents.ProviderClicked)
|
||||
analyticsEventHandler.send(SwapEvents.ProviderClicked())
|
||||
val states = dataState.lastLoadedSwapStates.getLastLoadedSuccessStates()
|
||||
val pricesLowerBest = getPricesLowerBest(providerId, states)
|
||||
uiState = stateBuilder.showSelectProviderBottomSheet(
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@ internal class TangemPayDetailsModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onClickSwap(data: TangemPayTopUpData) {
|
||||
analytics.send(TangemPayAnalyticsEvents.SwapClicked)
|
||||
analytics.send(TangemPayAnalyticsEvents.SwapClicked())
|
||||
bottomSheetNavigation.dismiss()
|
||||
router.push(
|
||||
AppRoute.Swap(
|
||||
|
|
@ -356,7 +356,7 @@ internal class TangemPayDetailsModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onClickReceive(data: TangemPayTopUpData) {
|
||||
analytics.send(TangemPayAnalyticsEvents.ReceiveFundsClicked)
|
||||
analytics.send(TangemPayAnalyticsEvents.ReceiveFundsClicked())
|
||||
bottomSheetNavigation.dismiss()
|
||||
val config = TokenReceiveConfig(
|
||||
shouldShowWarning = false,
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ internal class TangemPayOnboardingModel @Inject constructor(
|
|||
field = MutableStateFlow(getInitialState())
|
||||
|
||||
init {
|
||||
analytics.send(TangemPayAnalyticsEvents.ActivationScreenOpened)
|
||||
analytics.send(TangemPayAnalyticsEvents.ActivationScreenOpened())
|
||||
modelScope.launch {
|
||||
when (params) {
|
||||
is TangemPayOnboardingComponent.Params.ContinueOnboarding -> {
|
||||
|
|
@ -118,13 +118,13 @@ internal class TangemPayOnboardingModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun onTermsClick() {
|
||||
analytics.send(TangemPayAnalyticsEvents.ViewTermsClicked)
|
||||
analytics.send(TangemPayAnalyticsEvents.ViewTermsClicked())
|
||||
urlOpener.openUrl(TangemPayConstants.TERMS_AND_LIMITS_LINK)
|
||||
}
|
||||
|
||||
@Suppress("NullableToStringCall")
|
||||
private fun onGetCardClick() {
|
||||
analytics.send(TangemPayAnalyticsEvents.GetCardClicked)
|
||||
analytics.send(TangemPayAnalyticsEvents.GetCardClicked())
|
||||
uiState.transformerUpdate(TangemPayOnboardingButtonLoadingTransformer(isLoading = true))
|
||||
modelScope.launch {
|
||||
// TODO implement selector
|
||||
|
|
|
|||
|
|
@ -878,7 +878,7 @@ internal class TokenDetailsModel @Inject constructor(
|
|||
PromoAnalyticsEvent.PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Token,
|
||||
program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed,
|
||||
action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
@ -891,7 +891,7 @@ internal class TokenDetailsModel @Inject constructor(
|
|||
PromoAnalyticsEvent.PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Token,
|
||||
program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked,
|
||||
action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked(),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,9 +83,9 @@ internal class TokenDetailsOnrampTransactionStateConverter(
|
|||
fallbackResId = R.drawable.ic_currency_24,
|
||||
),
|
||||
iconState = getIconState(value.status),
|
||||
onGoToProviderClick = {
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider)
|
||||
clickIntents.onGoToProviderClick(it)
|
||||
onGoToProviderClick = { url ->
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider())
|
||||
clickIntents.onGoToProviderClick(url)
|
||||
},
|
||||
onClick = { clickIntents.onExpressTransactionClick(value.txId) },
|
||||
onDisposeExpressStatus = clickIntents::onConfirmDisposeExpressStatus,
|
||||
|
|
@ -117,7 +117,7 @@ internal class TokenDetailsOnrampTransactionStateConverter(
|
|||
|
||||
private fun onProviderClick(externalTxUrl: String?) = if (externalTxUrl != null) {
|
||||
{
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider)
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider())
|
||||
clickIntents.onGoToProviderClick(externalTxUrl)
|
||||
}
|
||||
} else {
|
||||
|
|
@ -269,7 +269,7 @@ internal class TokenDetailsOnrampTransactionStateConverter(
|
|||
icon = R.drawable.ic_arrow_top_right_24,
|
||||
text = resourceReference(R.string.common_go_to_provider),
|
||||
onClick = {
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider)
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider())
|
||||
clickIntents.onGoToProviderClick(externalTxUrl)
|
||||
},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ internal class WalletSettingsModel @Inject constructor(
|
|||
},
|
||||
onReferralClick = { onReferralClick(userWallet) },
|
||||
onManageTokensClick = {
|
||||
analyticsEventHandler.send(Settings.ButtonManageTokens)
|
||||
analyticsEventHandler.send(Settings.ButtonManageTokens())
|
||||
router.push(
|
||||
AppRoute.ManageTokens(
|
||||
source = Source.SETTINGS,
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ internal class OrganizeTokensModel @Inject constructor(
|
|||
val onBack = MutableSharedFlow<Unit>()
|
||||
|
||||
init {
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.ScreenOpened)
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.ScreenOpened())
|
||||
|
||||
getBalanceHidingSettingsUseCase()
|
||||
.onEach {
|
||||
|
|
@ -117,7 +117,7 @@ internal class OrganizeTokensModel @Inject constructor(
|
|||
val list = cachedAccountStatusList ?: return
|
||||
if (list.sortType == TokensSortType.BALANCE) return
|
||||
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.ByBalance)
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.ByBalance())
|
||||
|
||||
modelScope.launch {
|
||||
toggleTokenListSortingUseCaseV2(list).fold(
|
||||
|
|
@ -132,7 +132,7 @@ internal class OrganizeTokensModel @Inject constructor(
|
|||
val list = cachedTokenList ?: return
|
||||
if (list.sortedBy == TokensSortType.BALANCE) return
|
||||
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.ByBalance)
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.ByBalance())
|
||||
|
||||
modelScope.launch {
|
||||
toggleTokenListSortingUseCase(list).fold(
|
||||
|
|
@ -150,7 +150,7 @@ internal class OrganizeTokensModel @Inject constructor(
|
|||
if (accountsFeatureToggles.isFeatureEnabled) {
|
||||
val list = cachedAccountStatusList ?: return
|
||||
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.Group)
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.Group())
|
||||
|
||||
modelScope.launch {
|
||||
toggleTokenListGroupingUseCaseV2(list).fold(
|
||||
|
|
@ -164,7 +164,7 @@ internal class OrganizeTokensModel @Inject constructor(
|
|||
} else {
|
||||
val list = cachedTokenList ?: return
|
||||
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.Group)
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.Group())
|
||||
|
||||
modelScope.launch {
|
||||
toggleTokenListGroupingUseCase(list).fold(
|
||||
|
|
@ -228,7 +228,7 @@ internal class OrganizeTokensModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onCancelClick() {
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.Cancel)
|
||||
analyticsEventsHandler.send(PortfolioOrganizeTokensAnalyticsEvent.Cancel())
|
||||
|
||||
modelScope.launch { onBack.emit(Unit) }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ internal class WalletModel @Inject constructor(
|
|||
|
||||
init {
|
||||
if (!hotWalletFeatureToggles.isHotWalletEnabled) {
|
||||
analyticsEventsHandler.send(WalletScreenAnalyticsEvent.MainScreen.ScreenOpenedLegacy)
|
||||
analyticsEventsHandler.send(WalletScreenAnalyticsEvent.MainScreen.ScreenOpenedLegacy())
|
||||
}
|
||||
|
||||
suggestToOpenMarkets()
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ internal class VisaWalletIntentsImplementor @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onBalancesAndLimitsClick() {
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.LimitsClicked)
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.LimitsClicked())
|
||||
modelScope.launch(dispatchers.main) {
|
||||
val userWalletId = stateController.getSelectedWalletId()
|
||||
val balancesAndLimits = getVisaCurrencyUseCase(userWalletId)
|
||||
|
|
@ -92,7 +92,7 @@ internal class VisaWalletIntentsImplementor @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onExploreClick(exploreUrl: String) {
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.ButtonExplore)
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.ButtonExplore())
|
||||
router.openUrl(exploreUrl)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ internal class WalletCardClickIntentsImplementor @Inject constructor(
|
|||
) : BaseWalletClickIntents(), WalletCardClickIntents {
|
||||
|
||||
override fun onRenameBeforeConfirmationClick(userWalletId: UserWalletId) {
|
||||
analyticsEventHandler.send(MainScreen.EditWalletTapped)
|
||||
analyticsEventHandler.send(MainScreen.EditWalletTapped())
|
||||
|
||||
router.dialogNavigation.activate(
|
||||
configuration = WalletDialogConfig.RenameWallet(
|
||||
|
|
@ -65,7 +65,7 @@ internal class WalletCardClickIntentsImplementor @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onDeleteBeforeConfirmationClick(userWalletId: UserWalletId) {
|
||||
analyticsEventHandler.send(MainScreen.DeleteWalletTapped)
|
||||
analyticsEventHandler.send(MainScreen.DeleteWalletTapped())
|
||||
|
||||
walletEventSender.send(
|
||||
event = WalletEvent.ShowAlert(
|
||||
|
|
|
|||
|
|
@ -141,7 +141,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
) : BaseWalletClickIntents(), WalletWarningsClickIntents {
|
||||
|
||||
override fun onAddBackupCardClick() {
|
||||
analyticsEventHandler.send(MainScreen.NoticeBackupYourWalletTapped)
|
||||
analyticsEventHandler.send(MainScreen.NoticeBackupYourWalletTapped())
|
||||
|
||||
prepareAndStartOnboardingProcess()
|
||||
}
|
||||
|
|
@ -169,7 +169,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
|
||||
override fun onGenerateMissedAddressesClick(missedAddressCurrencies: List<CryptoCurrency>) {
|
||||
analyticsEventHandler.send(Basic.CardWasScanned(AnalyticsParam.ScreensSources.Main))
|
||||
analyticsEventHandler.send(MainScreen.NoticeScanYourCardTapped)
|
||||
analyticsEventHandler.send(MainScreen.NoticeScanYourCardTapped())
|
||||
|
||||
modelScope.launch {
|
||||
val userWallet = getSelectedUserWallet() ?: return@launch
|
||||
|
|
@ -187,7 +187,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onOpenUnlockWalletsBottomSheetClick() {
|
||||
analyticsEventHandler.send(MainScreen.WalletUnlockTapped)
|
||||
analyticsEventHandler.send(MainScreen.WalletUnlockTapped())
|
||||
|
||||
if (hotWalletFeatureToggles.isHotWalletEnabled) {
|
||||
modelScope.launch {
|
||||
|
|
@ -218,7 +218,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
|
||||
@Deprecated("Will be removed with hot wallet release")
|
||||
override fun onUnlockWalletClick() {
|
||||
analyticsEventHandler.send(MainScreen.UnlockAllWithBiometrics)
|
||||
analyticsEventHandler.send(MainScreen.UnlockAllWithBiometrics())
|
||||
|
||||
modelScope.launch(dispatchers.main) {
|
||||
unlockWalletsUseCase(type = UnlockType.ALL_WITHOUT_SELECT)
|
||||
|
|
@ -246,7 +246,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
|
||||
@Deprecated("Will be removed with hot wallet release")
|
||||
override fun onScanToUnlockWalletClick() {
|
||||
analyticsEventHandler.send(MainScreen.UnlockWithCardScan)
|
||||
analyticsEventHandler.send(MainScreen.UnlockWithCardScan())
|
||||
openScanCardDialog()
|
||||
}
|
||||
|
||||
|
|
@ -304,17 +304,17 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
override fun onClosePromoClick(promoId: PromoId) {
|
||||
analyticsEventHandler.send(
|
||||
when (promoId) {
|
||||
PromoId.Referral -> MainScreen.ReferralPromoButtonDismiss
|
||||
PromoId.Referral -> MainScreen.ReferralPromoButtonDismiss()
|
||||
PromoId.Sepa -> PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.Sepa,
|
||||
action = PromotionBannerClicked.BannerAction.Closed,
|
||||
action = PromotionBannerClicked.BannerAction.Closed(),
|
||||
)
|
||||
PromoId.VisaPresale -> PromoAnalyticsEvent.VisaWaitlistPromoDismiss
|
||||
PromoId.VisaPresale -> PromoAnalyticsEvent.VisaWaitlistPromoDismiss()
|
||||
PromoId.BlackFriday -> PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.BlackFriday,
|
||||
action = PromotionBannerClicked.BannerAction.Closed,
|
||||
action = PromotionBannerClicked.BannerAction.Closed(),
|
||||
)
|
||||
},
|
||||
|
||||
|
|
@ -328,7 +328,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
val userWallet = getSelectedUserWallet() ?: return
|
||||
when (promoId) {
|
||||
PromoId.Referral -> {
|
||||
analyticsEventHandler.send(MainScreen.ReferralPromoButtonParticipate)
|
||||
analyticsEventHandler.send(MainScreen.ReferralPromoButtonParticipate())
|
||||
appRouter.push(ReferralProgram(userWalletId = userWallet.walletId))
|
||||
}
|
||||
PromoId.Sepa -> {
|
||||
|
|
@ -336,7 +336,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.Sepa,
|
||||
action = PromotionBannerClicked.BannerAction.Clicked,
|
||||
action = PromotionBannerClicked.BannerAction.Clicked(),
|
||||
),
|
||||
)
|
||||
cryptoCurrency ?: return
|
||||
|
|
@ -350,7 +350,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
)
|
||||
}
|
||||
PromoId.VisaPresale -> {
|
||||
analyticsEventHandler.send(PromoAnalyticsEvent.VisaWaitlistPromoJoin)
|
||||
analyticsEventHandler.send(PromoAnalyticsEvent.VisaWaitlistPromoJoin())
|
||||
urlOpener.openUrl(VISA_PROMO_LINK)
|
||||
}
|
||||
PromoId.BlackFriday -> {
|
||||
|
|
@ -358,7 +358,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.BlackFriday,
|
||||
action = PromotionBannerClicked.BannerAction.Clicked,
|
||||
action = PromotionBannerClicked.BannerAction.Clicked(),
|
||||
),
|
||||
)
|
||||
urlOpener.openUrl(BLACK_FRIDAY_PROMO_LINK)
|
||||
|
|
@ -376,7 +376,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onNoteMigrationButtonClick(url: String) {
|
||||
analyticsEventHandler.send(MainScreen.NotePromoButton)
|
||||
analyticsEventHandler.send(MainScreen.NotePromoButton())
|
||||
modelScope.launch(dispatchers.main) {
|
||||
router.openUrl(url)
|
||||
}
|
||||
|
|
@ -385,7 +385,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
override fun onSeedPhraseNotificationConfirm() {
|
||||
val userWallet = getSelectedUserWallet() ?: return
|
||||
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonYes)
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonYes())
|
||||
|
||||
walletEventSender.send(
|
||||
event = WalletEvent.ShowAlert(
|
||||
|
|
@ -408,7 +408,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
override fun onSeedPhraseNotificationDecline() {
|
||||
val userWallet = getSelectedUserWallet() ?: return
|
||||
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonNo)
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonNo())
|
||||
|
||||
walletEventSender.send(
|
||||
event = WalletEvent.ShowAlert(
|
||||
|
|
@ -427,7 +427,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
override fun onSeedPhraseSecondNotificationAccept() {
|
||||
val userWallet = getSelectedUserWallet() ?: return
|
||||
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonUsed)
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonUsed())
|
||||
|
||||
walletEventSender.send(
|
||||
event = WalletEvent.ShowAlert(
|
||||
|
|
@ -450,7 +450,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
override fun onSeedPhraseSecondNotificationReject() {
|
||||
val userWallet = getSelectedUserWallet() ?: return
|
||||
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonDeclined)
|
||||
analyticsEventHandler.send(MainScreen.NoticeSeedPhraseSupportButtonDeclined())
|
||||
|
||||
modelScope.launch {
|
||||
seedPhraseNotificationUseCase.rejectSecond(userWalletId = userWallet.walletId)
|
||||
|
|
@ -458,13 +458,13 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onFinishWalletActivationClick(isBackupExists: Boolean) {
|
||||
analyticsEventHandler.send(MainScreen.ButtonFinalizeActivation)
|
||||
analyticsEventHandler.send(MainScreen.ButtonFinalizeActivation())
|
||||
val userWalletId = stateHolder.getSelectedWalletId()
|
||||
appRouter.push(WalletActivation(userWalletId, isBackupExists))
|
||||
}
|
||||
|
||||
override fun onAllowPermissions() {
|
||||
analyticsEventHandler.send(WalletScreenAnalyticsEvent.PushBannerPromo.ButtonAllowPush)
|
||||
analyticsEventHandler.send(WalletScreenAnalyticsEvent.PushBannerPromo.ButtonAllowPush())
|
||||
walletEventSender.send(
|
||||
event = WalletEvent.RequestPushPermissions(
|
||||
onAllow = {
|
||||
|
|
@ -490,7 +490,7 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
|
||||
override fun onDenyPermissions() {
|
||||
modelScope.launch {
|
||||
analyticsEventHandler.send(WalletScreenAnalyticsEvent.PushBannerPromo.ButtonLaterPush)
|
||||
analyticsEventHandler.send(WalletScreenAnalyticsEvent.PushBannerPromo.ButtonLaterPush())
|
||||
updateSubscribeOnPushPermissions(false)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ internal class DefaultPromoDeeplinkHandler @AssistedInject constructor(
|
|||
) : PromoDeeplinkHandler {
|
||||
|
||||
init {
|
||||
analyticsEventsHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart)
|
||||
analyticsEventsHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart())
|
||||
val promoCode = queryParams[PROMO_CODE_KEY].orEmpty()
|
||||
if (promoCode.isEmpty()) {
|
||||
showAlert(InvalidPromoCode)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ sealed class PromoActivationAnalytics(
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent(category = "Promotion", event = event, params = params) {
|
||||
|
||||
data object PromoDeepLinkActivationStart : PromoActivationAnalytics(
|
||||
class PromoDeepLinkActivationStart : PromoActivationAnalytics(
|
||||
event = "Bitcoin Promo Deep Link Activation",
|
||||
params = emptyMap(),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@ sealed class PortfolioOrganizeTokensAnalyticsEvent(
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent("Portfolio / Organize Tokens", event, params) {
|
||||
|
||||
object ScreenOpened : PortfolioOrganizeTokensAnalyticsEvent("Organize Tokens Screen Opened")
|
||||
class ScreenOpened : PortfolioOrganizeTokensAnalyticsEvent("Organize Tokens Screen Opened")
|
||||
|
||||
object ByBalance : PortfolioOrganizeTokensAnalyticsEvent("Button - By Balance")
|
||||
class ByBalance : PortfolioOrganizeTokensAnalyticsEvent("Button - By Balance")
|
||||
|
||||
object Group : PortfolioOrganizeTokensAnalyticsEvent("Button - Group")
|
||||
class Group : PortfolioOrganizeTokensAnalyticsEvent("Button - Group")
|
||||
|
||||
class Apply(
|
||||
grouping: AnalyticsParam.OnOffState,
|
||||
|
|
@ -25,5 +25,5 @@ sealed class PortfolioOrganizeTokensAnalyticsEvent(
|
|||
),
|
||||
)
|
||||
|
||||
object Cancel : PortfolioOrganizeTokensAnalyticsEvent("Button - Cancel")
|
||||
class Cancel : PortfolioOrganizeTokensAnalyticsEvent("Button - Cancel")
|
||||
}
|
||||
|
|
@ -51,7 +51,7 @@ sealed class WalletScreenAnalyticsEvent {
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent(category = "Main Screen", event = event, params = params) {
|
||||
|
||||
data object ScreenOpenedLegacy : MainScreen(
|
||||
class ScreenOpenedLegacy : MainScreen(
|
||||
event = "Screen opened",
|
||||
)
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ sealed class WalletScreenAnalyticsEvent {
|
|||
}
|
||||
}
|
||||
|
||||
data object ButtonFinalizeActivation : MainScreen(
|
||||
class ButtonFinalizeActivation : MainScreen(
|
||||
event = "Button - Finalize Activation",
|
||||
)
|
||||
|
||||
|
|
@ -93,9 +93,9 @@ sealed class WalletScreenAnalyticsEvent {
|
|||
params = mapOf("Result" to result.value),
|
||||
)
|
||||
|
||||
data object NoticeBackupYourWalletTapped : MainScreen(event = "Notice - Backup Your Wallet Tapped")
|
||||
data object NoticeScanYourCardTapped : MainScreen(event = "Notice - Scan Your Card Tapped")
|
||||
data object WalletUnlockTapped : MainScreen(event = "Notice - Wallet Unlock Tapped")
|
||||
class NoticeBackupYourWalletTapped : MainScreen(event = "Notice - Backup Your Wallet Tapped")
|
||||
class NoticeScanYourCardTapped : MainScreen(event = "Notice - Scan Your Card Tapped")
|
||||
class WalletUnlockTapped : MainScreen(event = "Notice - Wallet Unlock Tapped")
|
||||
|
||||
class NetworksUnreachable(
|
||||
tokens: List<String>,
|
||||
|
|
@ -104,54 +104,54 @@ sealed class WalletScreenAnalyticsEvent {
|
|||
params = mapOf("Tokens" to tokens.joinToString()),
|
||||
)
|
||||
|
||||
data object MissingAddresses : MainScreen(event = "Notice - Missing Addresses")
|
||||
class MissingAddresses : MainScreen(event = "Notice - Missing Addresses")
|
||||
|
||||
data object CardSignedTransactions : MainScreen(event = "Notice - Card Signed Transactions")
|
||||
class CardSignedTransactions : MainScreen(event = "Notice - Card Signed Transactions")
|
||||
|
||||
data object HowDoYouLikeTangem : MainScreen(event = "Notice - How Do You Like Tangem")
|
||||
class HowDoYouLikeTangem : MainScreen(event = "Notice - How Do You Like Tangem")
|
||||
|
||||
data object ProductSampleCard : MainScreen(event = "Notice - Product Sample Card")
|
||||
class ProductSampleCard : MainScreen(event = "Notice - Product Sample Card")
|
||||
|
||||
data object TestnetCard : MainScreen(event = "Notice - Testnet Card")
|
||||
class TestnetCard : MainScreen(event = "Notice - Testnet Card")
|
||||
|
||||
data object DemoCard : MainScreen(event = "Notice - Demo Card")
|
||||
class DemoCard : MainScreen(event = "Notice - Demo Card")
|
||||
|
||||
data object DevelopmentCard : MainScreen(event = "Notice - Development Card")
|
||||
class DevelopmentCard : MainScreen(event = "Notice - Development Card")
|
||||
|
||||
data object WalletUnlock : MainScreen(event = "Notice - Wallet Unlock")
|
||||
class WalletUnlock : MainScreen(event = "Notice - Wallet Unlock")
|
||||
|
||||
data object BackupYourWallet : MainScreen(event = "Notice - Backup Your Wallet")
|
||||
class BackupYourWallet : MainScreen(event = "Notice - Backup Your Wallet")
|
||||
|
||||
data object BackupError : MainScreen(event = "Notice - Backup Error")
|
||||
class BackupError : MainScreen(event = "Notice - Backup Error")
|
||||
|
||||
data object NotePromo : MainScreen(event = "Notice - Note Promo")
|
||||
class NotePromo : MainScreen(event = "Notice - Note Promo")
|
||||
|
||||
data object NotePromoButton : MainScreen(event = "Note Promo Button")
|
||||
class NotePromoButton : MainScreen(event = "Note Promo Button")
|
||||
|
||||
data object UnlockAllWithBiometrics : MainScreen(event = "Button - Unlock All With Biometrics")
|
||||
class UnlockAllWithBiometrics : MainScreen(event = "Button - Unlock All With Biometrics")
|
||||
|
||||
data object UnlockWithCardScan : MainScreen(event = "Button - Unlock With Card Scan")
|
||||
class UnlockWithCardScan : MainScreen(event = "Button - Unlock With Card Scan")
|
||||
|
||||
data object EditWalletTapped : MainScreen(event = "Button - Edit Wallet Tapped")
|
||||
class EditWalletTapped : MainScreen(event = "Button - Edit Wallet Tapped")
|
||||
|
||||
data object DeleteWalletTapped : MainScreen(event = "Button - Delete Wallet Tapped")
|
||||
class DeleteWalletTapped : MainScreen(event = "Button - Delete Wallet Tapped")
|
||||
|
||||
data object NoticeSeedPhraseSupport : MainScreen(event = "Notice - Seed Phrase Support")
|
||||
class NoticeSeedPhraseSupport : MainScreen(event = "Notice - Seed Phrase Support")
|
||||
|
||||
data object NoticeSeedPhraseSupportSecond : MainScreen(event = "Notice - Seed Phrase Support2")
|
||||
class NoticeSeedPhraseSupportSecond : MainScreen(event = "Notice - Seed Phrase Support2")
|
||||
|
||||
data object NoticeSeedPhraseSupportButtonNo : MainScreen(event = "Button - Support No")
|
||||
class NoticeSeedPhraseSupportButtonNo : MainScreen(event = "Button - Support No")
|
||||
|
||||
data object NoticeSeedPhraseSupportButtonYes : MainScreen(event = "Button - Support Yes")
|
||||
class NoticeSeedPhraseSupportButtonYes : MainScreen(event = "Button - Support Yes")
|
||||
|
||||
data object NoticeSeedPhraseSupportButtonUsed : MainScreen(event = "Button - Support Used")
|
||||
class NoticeSeedPhraseSupportButtonUsed : MainScreen(event = "Button - Support Used")
|
||||
|
||||
data object NoticeSeedPhraseSupportButtonDeclined : MainScreen(event = "Button - Support Declined")
|
||||
class NoticeSeedPhraseSupportButtonDeclined : MainScreen(event = "Button - Support Declined")
|
||||
|
||||
// region Referral Promo
|
||||
data object ReferralPromo : MainScreen(event = "Referral Banner")
|
||||
data object ReferralPromoButtonParticipate : MainScreen(event = "Button - Referral Participate")
|
||||
data object ReferralPromoButtonDismiss : MainScreen(event = "Button - Referral Dismiss")
|
||||
class ReferralPromo : MainScreen(event = "Referral Banner")
|
||||
class ReferralPromoButtonParticipate : MainScreen(event = "Button - Referral Participate")
|
||||
class ReferralPromoButtonDismiss : MainScreen(event = "Button - Referral Dismiss")
|
||||
//endregion
|
||||
}
|
||||
|
||||
|
|
@ -160,8 +160,8 @@ sealed class WalletScreenAnalyticsEvent {
|
|||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent(category = "Promo", event = event, params = params) {
|
||||
|
||||
data object PushBanner : PushBannerPromo(event = "Push Banner")
|
||||
data object ButtonAllowPush : PushBannerPromo(event = "Button - Allow Push")
|
||||
data object ButtonLaterPush : PushBannerPromo(event = "Button - Later Push")
|
||||
class PushBanner : PushBannerPromo(event = "Push Banner")
|
||||
class ButtonAllowPush : PushBannerPromo(event = "Button - Allow Push")
|
||||
class ButtonLaterPush : PushBannerPromo(event = "Button - Later Push")
|
||||
}
|
||||
}
|
||||
|
|
@ -28,7 +28,7 @@ internal class SelectedWalletAnalyticsSender @Inject constructor(
|
|||
* that cannot be processed in [WalletWarningsAnalyticsSender].
|
||||
* */
|
||||
private fun getEvent(userWallet: UserWallet): AnalyticsEvent? = when {
|
||||
userWallet.isLocked -> WalletScreenAnalyticsEvent.MainScreen.WalletUnlock
|
||||
userWallet.isLocked -> WalletScreenAnalyticsEvent.MainScreen.WalletUnlock()
|
||||
|
||||
else -> WalletScreenAnalyticsEvent.MainScreen.WalletSelected(userWallet.isImported())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ internal class WalletTangemPayAnalyticsEventSender @Inject constructor(
|
|||
val event = when {
|
||||
customerInfo.orderStatus == OrderStatus.CANCELED -> return // ignore cancelled state on analytics
|
||||
!customerInfo.info.isKycApproved -> return // ignore kyc not approved state on analytics
|
||||
cardInfo != null && productInstance != null -> TangemPayAnalyticsEvents.MainScreenOpened
|
||||
else -> TangemPayAnalyticsEvents.IssuingBannerDisplayed
|
||||
cardInfo != null && productInstance != null -> TangemPayAnalyticsEvents.MainScreenOpened()
|
||||
else -> TangemPayAnalyticsEvents.IssuingBannerDisplayed()
|
||||
}
|
||||
|
||||
if (sentEvents.add(event)) {
|
||||
|
|
|
|||
|
|
@ -39,16 +39,16 @@ internal class WalletWarningsAnalyticsSender @Inject constructor(
|
|||
@Suppress("CyclomaticComplexMethod")
|
||||
private fun getEvent(warning: WalletNotification): AnalyticsEvent? {
|
||||
return when (warning) {
|
||||
is WalletNotification.Critical.DevCard -> MainScreen.DevelopmentCard
|
||||
is WalletNotification.Critical.FailedCardValidation -> MainScreen.ProductSampleCard
|
||||
is WalletNotification.Warning.MissingBackup -> MainScreen.BackupYourWallet
|
||||
is WalletNotification.Warning.NumberOfSignedHashesIncorrect -> MainScreen.CardSignedTransactions
|
||||
is WalletNotification.Warning.TestNetCard -> MainScreen.TestnetCard
|
||||
is WalletNotification.Informational.DemoCard -> MainScreen.DemoCard
|
||||
is WalletNotification.Informational.MissingAddresses -> MainScreen.MissingAddresses
|
||||
is WalletNotification.RateApp -> MainScreen.HowDoYouLikeTangem
|
||||
is WalletNotification.Critical.BackupError -> MainScreen.BackupError
|
||||
is WalletNotification.NoteMigration -> MainScreen.NotePromo
|
||||
is WalletNotification.Critical.DevCard -> MainScreen.DevelopmentCard()
|
||||
is WalletNotification.Critical.FailedCardValidation -> MainScreen.ProductSampleCard()
|
||||
is WalletNotification.Warning.MissingBackup -> MainScreen.BackupYourWallet()
|
||||
is WalletNotification.Warning.NumberOfSignedHashesIncorrect -> MainScreen.CardSignedTransactions()
|
||||
is WalletNotification.Warning.TestNetCard -> MainScreen.TestnetCard()
|
||||
is WalletNotification.Informational.DemoCard -> MainScreen.DemoCard()
|
||||
is WalletNotification.Informational.MissingAddresses -> MainScreen.MissingAddresses()
|
||||
is WalletNotification.RateApp -> MainScreen.HowDoYouLikeTangem()
|
||||
is WalletNotification.Critical.BackupError -> MainScreen.BackupError()
|
||||
is WalletNotification.NoteMigration -> MainScreen.NotePromo()
|
||||
is WalletNotification.SwapPromo -> NoticePromotionBanner(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.Empty, // Use it on new promo action
|
||||
|
|
@ -61,8 +61,8 @@ internal class WalletWarningsAnalyticsSender @Inject constructor(
|
|||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.BlackFriday,
|
||||
)
|
||||
is WalletNotification.ReferralPromo -> MainScreen.ReferralPromo
|
||||
is WalletNotification.VisaPresalePromo -> VisaWaitlistPromo
|
||||
is WalletNotification.ReferralPromo -> MainScreen.ReferralPromo()
|
||||
is WalletNotification.VisaPresalePromo -> VisaWaitlistPromo()
|
||||
is WalletNotification.UnlockWallets -> null // See [SelectedWalletAnalyticsSender]
|
||||
is WalletNotification.Informational.NoAccount,
|
||||
is WalletNotification.Warning.LowSignatures,
|
||||
|
|
@ -80,9 +80,9 @@ internal class WalletWarningsAnalyticsSender @Inject constructor(
|
|||
}
|
||||
MainScreen.NoticeFinishActivation(activationState)
|
||||
}
|
||||
is WalletNotification.Critical.SeedPhraseNotification -> MainScreen.NoticeSeedPhraseSupport
|
||||
is WalletNotification.Critical.SeedPhraseSecondNotification -> MainScreen.NoticeSeedPhraseSupportSecond
|
||||
is WalletNotification.PushNotifications -> WalletScreenAnalyticsEvent.PushBannerPromo.PushBanner
|
||||
is WalletNotification.Critical.SeedPhraseNotification -> MainScreen.NoticeSeedPhraseSupport()
|
||||
is WalletNotification.Critical.SeedPhraseSecondNotification -> MainScreen.NoticeSeedPhraseSupportSecond()
|
||||
is WalletNotification.PushNotifications -> WalletScreenAnalyticsEvent.PushBannerPromo.PushBanner()
|
||||
is WalletNotification.Warning.TangemPayRefreshNeeded -> null
|
||||
WalletNotification.Warning.TangemPayUnreachable -> null
|
||||
}
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ internal class SetVisaInfoTransformer(
|
|||
clickIntents.onReceiveClick(
|
||||
userWalletId = userWalletId,
|
||||
cryptoCurrencyStatus = cryptoCurrencyStatus,
|
||||
event = MainScreenAnalyticsEvent.ButtonReceive,
|
||||
event = MainScreenAnalyticsEvent.ButtonReceive(),
|
||||
)
|
||||
},
|
||||
onLongClick = {
|
||||
|
|
|
|||
|
|
@ -44,12 +44,12 @@ internal class BalancesAndLimitsBottomSheetConverter(
|
|||
}
|
||||
|
||||
private fun balanceInfoOnClick() {
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.NoticeBalancesInfo)
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.NoticeBalancesInfo())
|
||||
eventSender.send(WalletEvent.ShowAlert(WalletAlertState.VisaBalancesInfo))
|
||||
}
|
||||
|
||||
private fun limitInfoOnClick(totalLimit: String, otherLimit: String) {
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.NoticeLimitsInfo)
|
||||
analyticsEventHandler.send(MainScreenAnalyticsEvent.NoticeLimitsInfo())
|
||||
eventSender.send(WalletEvent.ShowAlert(WalletAlertState.VisaLimitsInfo(totalLimit, otherLimit)))
|
||||
}
|
||||
}
|
||||
|
|
@ -82,9 +82,9 @@ internal class SingleWalletOnrampTransactionConverter(
|
|||
fallbackResId = R.drawable.ic_currency_24,
|
||||
),
|
||||
iconState = getIconState(value.status),
|
||||
onGoToProviderClick = {
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider)
|
||||
clickIntents.onGoToProviderClick(it)
|
||||
onGoToProviderClick = { url ->
|
||||
analyticsEventHandler.send(TokenOnrampAnalyticsEvent.GoToProvider())
|
||||
clickIntents.onGoToProviderClick(url)
|
||||
},
|
||||
onDisposeExpressStatus = clickIntents::onConfirmDisposeExpressStatus,
|
||||
onClick = {
|
||||
|
|
|
|||
|
|
@ -115,7 +115,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
Truth.assertThat(sent.title).isEqualTo(resourceReference(R.string.bitcoin_promo_activation_success_title))
|
||||
Truth.assertThat(sent.message).isEqualTo(resourceReference(R.string.bitcoin_promo_activation_success))
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.Activated),
|
||||
|
|
@ -143,7 +145,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
Truth.assertThat(sent.title).isEqualTo(resourceReference(R.string.bitcoin_promo_invalid_code_title))
|
||||
Truth.assertThat(sent.message).isEqualTo(resourceReference(R.string.bitcoin_promo_invalid_code))
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.InvalidPromoCode),
|
||||
|
|
@ -172,7 +176,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
Truth.assertThat(sent.title).isEqualTo(resourceReference(R.string.bitcoin_promo_activation_error_title))
|
||||
Truth.assertThat(sent.message).isEqualTo(resourceReference(R.string.bitcoin_promo_activation_error))
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.Failed),
|
||||
|
|
@ -209,7 +215,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
Truth.assertThat(sent.title).isEqualTo(resourceReference(R.string.bitcoin_promo_no_address_title))
|
||||
Truth.assertThat(sent.message).isEqualTo(resourceReference(R.string.bitcoin_promo_no_address))
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.NoBitcoinAddress),
|
||||
|
|
@ -248,7 +256,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
Truth.assertThat(sent.title).isEqualTo(resourceReference(R.string.bitcoin_promo_activation_success_title))
|
||||
Truth.assertThat(sent.message).isEqualTo(resourceReference(R.string.bitcoin_promo_activation_success))
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.Activated),
|
||||
|
|
@ -264,7 +274,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
expectedMessage = resourceReference(R.string.bitcoin_promo_invalid_code),
|
||||
)
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.InvalidPromoCode),
|
||||
|
|
@ -280,7 +292,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
expectedMessage = resourceReference(R.string.bitcoin_promo_activation_error),
|
||||
)
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.Failed),
|
||||
|
|
@ -296,7 +310,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
expectedMessage = resourceReference(R.string.bitcoin_promo_no_address),
|
||||
)
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.NoBitcoinAddress),
|
||||
|
|
@ -312,7 +328,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
expectedMessage = resourceReference(R.string.bitcoin_promo_already_activated),
|
||||
)
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.PromoCodeAlreadyUsed),
|
||||
|
|
@ -425,7 +443,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
Truth.assertThat(sent.title).isEqualTo(resourceReference(R.string.bitcoin_promo_no_address_title))
|
||||
Truth.assertThat(sent.message).isEqualTo(resourceReference(R.string.bitcoin_promo_no_address))
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.NoBitcoinAddress),
|
||||
|
|
@ -539,7 +559,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
coVerify(exactly = 1) { activateBitcoinPromocodeUseCase.invoke("bc1qcard", promoCode) }
|
||||
coVerify(exactly = 0) { activateBitcoinPromocodeUseCase.invoke("bc1qcustom", promoCode) }
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.Activated),
|
||||
|
|
@ -594,7 +616,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
|
||||
coVerify(exactly = 0) { activateBitcoinPromocodeUseCase.invoke(any(), any()) }
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.NoBitcoinAddress),
|
||||
|
|
@ -649,7 +673,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
|
||||
coVerify(exactly = 0) { activateBitcoinPromocodeUseCase.invoke(any(), any()) }
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.NoBitcoinAddress),
|
||||
|
|
@ -700,7 +726,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
|
||||
coVerify(exactly = 0) { activateBitcoinPromocodeUseCase.invoke(any(), any()) }
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.NoBitcoinAddress),
|
||||
|
|
@ -751,7 +779,9 @@ class DefaultPromoDeeplinkHandlerTest {
|
|||
|
||||
coVerify(exactly = 0) { activateBitcoinPromocodeUseCase.invoke(any(), any()) }
|
||||
|
||||
verify(exactly = 1) { analyticsEventHandler.send(PromoActivationAnalytics.PromoDeepLinkActivationStart) }
|
||||
verify(
|
||||
exactly = 1,
|
||||
) { analyticsEventHandler.send(ofType<PromoActivationAnalytics.PromoDeepLinkActivationStart>()) }
|
||||
verify(exactly = 1) {
|
||||
analyticsEventHandler.send(
|
||||
PromoActivationAnalytics.PromoActivation(PromoCodeActivationResult.NoBitcoinAddress),
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ internal class WcConnectionsModel @Inject constructor(
|
|||
val bottomSheetNavigation: SlotNavigation<WcConnectionsBottomSheetConfig> = SlotNavigation()
|
||||
|
||||
init {
|
||||
analytics.send(WcAnalyticEvents.ScreenOpened)
|
||||
analytics.send(WcAnalyticEvents.ScreenOpened())
|
||||
listenQrUpdates()
|
||||
if (accountsFeatureToggles.isFeatureEnabled) {
|
||||
listenWcSessions()
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ sealed class YieldSupplyAnalytics(
|
|||
),
|
||||
)
|
||||
|
||||
data object ApyChartViewed : YieldSupplyAnalytics(
|
||||
class ApyChartViewed : YieldSupplyAnalytics(
|
||||
event = "APY Chart",
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ internal class YieldSupplyPromoModel @Inject constructor(
|
|||
}
|
||||
|
||||
override fun onApyInfoClick() {
|
||||
analytics.send(YieldSupplyAnalytics.ApyChartViewed)
|
||||
analytics.send(YieldSupplyAnalytics.ApyChartViewed())
|
||||
bottomSheetNavigation.activate(YieldSupplyPromoConfig.Apy)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue