Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-05 19:53:16 +01:00
parent 66f0675058
commit 9331b0f7d7
2 changed files with 43 additions and 7 deletions

View file

@ -6,6 +6,7 @@ import com.tangem.feature.swap.domain.models.ui.FeeType
import com.tangem.feature.swap.models.ApproveType
private const val SWAP_CATEGORY = "Swap"
private const val PROMO_CATEGORY = "Promo"
sealed class SwapEvents(
event: String,
@ -17,7 +18,7 @@ sealed class SwapEvents(
params = mapOf("Token" to token),
)
object SendTokenBalanceClicked : SwapEvents(event = "Send Token Balance Clicked")
data object SendTokenBalanceClicked : SwapEvents(event = "Send Token Balance Clicked")
data class ChooseTokenScreenOpened(val availableTokens: Boolean) : SwapEvents(
event = "Choose Token Screen Opened",
@ -37,7 +38,7 @@ sealed class SwapEvents(
params = mapOf("Send Token" to sendToken, "Receive Token" to receiveToken),
)
object ButtonGivePermissionClicked : SwapEvents(event = "Button - Give permission")
data object ButtonGivePermissionClicked : SwapEvents(event = "Button - Give permission")
data class ButtonPermissionApproveClicked(
val sendToken: String,
@ -52,9 +53,9 @@ sealed class SwapEvents(
),
)
object ButtonPermissionCancelClicked : SwapEvents(event = "Button - Permission Cancel")
data object ButtonPermissionCancelClicked : SwapEvents(event = "Button - Permission Cancel")
object ButtonSwipeClicked : SwapEvents(event = "Button - Swipe")
data object ButtonSwipeClicked : SwapEvents(event = "Button - Swipe")
data class SwapInProgressScreen(
val provider: SwapProvider,
@ -71,7 +72,7 @@ sealed class SwapEvents(
),
)
object ProviderClicked : SwapEvents("Provider Clicked")
data object ProviderClicked : SwapEvents("Provider Clicked")
data class ProviderChosen(val provider: SwapProvider) : SwapEvents(
event = "Provider Chosen",
@ -88,7 +89,7 @@ sealed class SwapEvents(
params = mapOf("Token" to token),
)
object NoticeNoAvailableTokensToSwap : SwapEvents("Notice - No Available Tokens To Swap")
data object NoticeNoAvailableTokensToSwap : SwapEvents("Notice - No Available Tokens To Swap")
data class NoticeNotEnoughFee(val token: String, val blockchain: String) : SwapEvents(
event = "Notice - Not Enough Fee",
@ -110,4 +111,20 @@ sealed class SwapEvents(
"Error code" to errorCode.toString(),
),
)
// region Promo activity
data class ChangellyActivity(
val promoState: PromoState,
) : AnalyticsEvent(
category = PROMO_CATEGORY,
event = "Changelly Activity",
params = mapOf(
"State" to promoState.name,
),
) {
sealed class PromoState(val name: String) {
data object Native : PromoState("Native")
data object Recommended : PromoState("Recommended")
}
}
}

View file

@ -432,7 +432,9 @@ internal class SwapViewModel @Inject constructor(
} else {
val successLoadedData = consideredProviders.getLastLoadedSuccessStates()
val recommendedProvider = successLoadedData.keys.firstOrNull { it.isRecommended }
recommendedProvider ?: findBestQuoteProvider(successLoadedData) ?: consideredProviders.keys.first()
val bestQuotesProvider = findBestQuoteProvider(successLoadedData)
triggerPromoProviderEvent(recommendedProvider, bestQuotesProvider)
recommendedProvider ?: bestQuotesProvider ?: consideredProviders.keys.first()
}
} else {
state.keys.first()
@ -1170,11 +1172,28 @@ internal class SwapViewModel @Inject constructor(
)
}
private fun triggerPromoProviderEvent(recommendedProvider: SwapProvider?, bestQuotesProvider: SwapProvider?) {
// for now send event only for changelly
if (recommendedProvider == null ||
recommendedProvider.providerId != CHANGELLY_PROVIDER_ID ||
bestQuotesProvider == null
) {
return
}
val event = if (recommendedProvider.providerId == bestQuotesProvider.providerId) {
SwapEvents.ChangellyActivity(SwapEvents.ChangellyActivity.PromoState.Native)
} else {
SwapEvents.ChangellyActivity(SwapEvents.ChangellyActivity.PromoState.Recommended)
}
analyticsEventHandler.send(event = event)
}
private companion object {
const val loggingTag = "SwapViewModel"
const val INITIAL_AMOUNT = ""
const val UPDATE_DELAY = 10000L
const val DEBOUNCE_AMOUNT_DELAY = 1000L
const val UPDATE_BALANCE_DELAY_MILLIS = 11000L
const val CHANGELLY_PROVIDER_ID = "changelly"
}
}