Updated on 2026-08-14
This commit is contained in:
commit
737db57d0e
20 changed files with 130 additions and 38 deletions
|
|
@ -1 +1 @@
|
|||
Subproject commit 4272136431c3629230803e70c4d2cf412365418d
|
||||
Subproject commit 16c0de5855d0a75e285a9c84e616dd020f7da4d1
|
||||
|
|
@ -760,6 +760,8 @@
|
|||
<string name="notification_sepa_button">Krypto kaufen</string>
|
||||
<string name="notification_sepa_text">Profitiere von **0 % Gebühren** beim Kauf von Kryptowährungen per SEPA-Überweisung.</string>
|
||||
<string name="notification_sepa_title">Krypto mit SEPA kaufen</string>
|
||||
<string name="notification_visa_waitlist_promo_text">Trage dich in die Warteliste ein und erhalte eine Zahlungskarte, die es so noch nie gab.</string>
|
||||
<string name="notification_visa_waitlist_promo_title">Tangem Visa Card</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Du musst einen einzigen Zugangscode einrichten, um alle deine Geräte zu schützen</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Schützen</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Du kannst später auf jeder Karte oder Ring einen individuellen Zugangscode einrichten</string>
|
||||
|
|
|
|||
|
|
@ -653,6 +653,8 @@
|
|||
<string name="notification_sepa_button">Comprar cripto</string>
|
||||
<string name="notification_sepa_text">Disfrute de unas comisiones del **0%** al comprar criptomonedas mediante transferencias SEPA.</string>
|
||||
<string name="notification_sepa_title">Comprar criptomonedas con SEPA</string>
|
||||
<string name="notification_visa_waitlist_promo_text">Únete a la lista de espera y consigue una tarjeta de pago como ninguna otra.</string>
|
||||
<string name="notification_visa_waitlist_promo_title">Tangem Visa Card</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Configure un código de acceso único para proteger todos sus dispositivos.</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Proteger</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Puede configurar un código de acceso individual en cada tarjeta más adelante</string>
|
||||
|
|
|
|||
|
|
@ -626,6 +626,8 @@
|
|||
<string name="notification_sepa_button">Acheter crypto</string>
|
||||
<string name="notification_sepa_text">Profitez de **0% de frais** lors de l\'achat de cryptomonnaies via des virements SEPA.</string>
|
||||
<string name="notification_sepa_title">Acheter des cryptomonnaies avec SEPA</string>
|
||||
<string name="notification_visa_waitlist_promo_text">Rejoignez la liste d’attente et obtenez une carte de paiement pas comme les autres.</string>
|
||||
<string name="notification_visa_waitlist_promo_title">Tangem Visa Card</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Vous devez définir un seul code d\'accès pour protéger tous vos appareils.</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Protéger</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Vous pourrez définir un code d\'accès individuel sur chaque carte plus tard</string>
|
||||
|
|
@ -1523,9 +1525,11 @@
|
|||
<string name="yield_module_stop_earning_sheet_fee_note">Les frais de réseau seront déduits du montant que vous retirez.</string>
|
||||
<string name="yield_module_supply_apr">Rendement annuel brut (APY)</string>
|
||||
<string name="yield_module_token_details_earn_notification_apy">APY</string>
|
||||
<string name="yield_module_token_details_earn_notification_description">Les intérêts sont cumulés automatiquement.</string>
|
||||
<string name="yield_module_token_details_earn_notification_earning_on_your_balance_subtitle">Les intérêts sont cumulés automatiquement.</string>
|
||||
<string name="yield_module_token_details_earn_notification_earning_on_your_balance_title">Mode de rendement</string>
|
||||
<string name="yield_module_token_details_earn_notification_processing">Traitement de votre dépôt</string>
|
||||
<string name="yield_module_token_details_earn_notification_title">Mode Rendement</string>
|
||||
<string name="yield_module_transfer_mode_automatic">Automatique</string>
|
||||
<string name="yield_module_unable_to_cover_fee_description">Déposez %1$s %2$s pour couvrir les frais de réseau liés aux transactions.</string>
|
||||
<string name="yield_module_unable_to_cover_fee_title">Impossible de couvrir les frais %s</string>
|
||||
|
|
|
|||
|
|
@ -701,6 +701,8 @@
|
|||
<string name="notification_sepa_button">Купить криптовалюту</string>
|
||||
<string name="notification_sepa_text">Наслаждайтесь **нулевой комиссией** при покупке криптовалюты через SEPA-переводы.</string>
|
||||
<string name="notification_sepa_title">Покупайте крипту через SEPA</string>
|
||||
<string name="notification_visa_waitlist_promo_text">Присоединяйтесь к списку ожидания и получите уникальную платёжную карту, не похожую ни на одну другую.</string>
|
||||
<string name="notification_visa_waitlist_promo_title">Tangem Visa Card</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Установите единый код доступа для защиты всех ваших карт или колец</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Защита</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Установите индивидуальный код доступа для каждой карты или кольца позже.</string>
|
||||
|
|
|
|||
|
|
@ -629,6 +629,8 @@
|
|||
<string name="notification_sepa_button">Купити криптовалюту</string>
|
||||
<string name="notification_sepa_text">Насолоджуйтесь **нульовою комісією** при купівлі криптовалюти через перекази SEPA.</string>
|
||||
<string name="notification_sepa_title">Купуйте криптовалюту через SEPA</string>
|
||||
<string name="notification_visa_waitlist_promo_text">Приєднуйтесь до списку очікування та отримайте унікальну платіжну картку, якої ще не було.</string>
|
||||
<string name="notification_visa_waitlist_promo_title">Tangem Visa Card</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Налаштуйте єдиний код доступу для захисту всіх ваших карток або кілець</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Захист</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Встановіть індивідуальний код доступу для кожної картки або кільця пізніше.</string>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
<string name="account_details_archive">Archive account</string>
|
||||
<string name="account_details_archive_action">Archive</string>
|
||||
<string name="account_details_archive_description">You are archiving this account, but you can always get it back.</string>
|
||||
<string name="account_details_archiving">Archiving...</string>
|
||||
<string name="account_details_title">Account</string>
|
||||
<string name="account_edit_success_message">Account saved</string>
|
||||
<string name="account_for_rewards">Account for rewards</string>
|
||||
|
|
@ -431,6 +432,7 @@
|
|||
<string name="email_subject_wc_error">WalletConnect error</string>
|
||||
<string name="error_wrong_wallet_tapped">You have used a card or ring from another wallet. Tap the card or ring associated with this wallet</string>
|
||||
<string name="eth_gas_required_exceeds_allowance">Not enough funds for the transaction. Please top up your account.</string>
|
||||
<string name="exchange_token_description">Swap any asset in your portfolio for this token</string>
|
||||
<string name="exchange_tokens_available_tokens_header">My tokens</string>
|
||||
<string name="exchange_tokens_empty_tokens">You haven\'t added any tokens yet. Add tokens via Market to swap</string>
|
||||
<string name="exchange_tokens_unavailable_tokens_header">Cannot be swapped for %s</string>
|
||||
|
|
@ -795,6 +797,8 @@
|
|||
<string name="notification_sepa_button">Buy crypto</string>
|
||||
<string name="notification_sepa_text">Enjoy **0% fees** when purchasing crypto via SEPA transfers.</string>
|
||||
<string name="notification_sepa_title">Buy Crypto with SEPA</string>
|
||||
<string name="notification_visa_waitlist_promo_text">Join the waitlist and get a payment card unlike any other</string>
|
||||
<string name="notification_visa_waitlist_promo_title">Tangem Visa Card</string>
|
||||
<string name="onboarding_access_code_feature_1_description">Set up a single access code to protect all your devices.</string>
|
||||
<string name="onboarding_access_code_feature_1_title">Protect</string>
|
||||
<string name="onboarding_access_code_feature_2_description">Set an individual access code for each card or ring later.</string>
|
||||
|
|
@ -1338,6 +1342,15 @@
|
|||
<string name="tangempay_card_details_error_text">Failed to load data. Try again later.</string>
|
||||
<string name="tangempay_card_details_freeze_card">Freeze Card</string>
|
||||
<string name="tangempay_card_details_hide_text">Hide</string>
|
||||
<string name="tangempay_card_details_open_wallet_button">Open Google Wallet</string>
|
||||
<string name="tangempay_card_details_open_wallet_notification_subtitle">Set up Tangem Pay in a few taps and start paying with Google Pay.</string>
|
||||
<string name="tangempay_card_details_open_wallet_notification_title">Add your card to Google Pay</string>
|
||||
<string name="tangempay_card_details_open_wallet_step_1">Open Google Wallet</string>
|
||||
<string name="tangempay_card_details_open_wallet_step_2">Tap “Add a card”</string>
|
||||
<string name="tangempay_card_details_open_wallet_step_3">Enter the card details manually</string>
|
||||
<string name="tangempay_card_details_open_wallet_step_4">Verify card using the OTP sent to your device.</string>
|
||||
<string name="tangempay_card_details_open_wallet_step_5">All set! Your card is ready to use.</string>
|
||||
<string name="tangempay_card_details_open_wallet_title">Add card to Google Pay</string>
|
||||
<string name="tangempay_card_details_receive_error_description">Technical issues detected. Please try again later or contact support.</string>
|
||||
<string name="tangempay_card_details_receive_error_title">Receive unavailable now</string>
|
||||
<string name="tangempay_card_details_reveal_text">Reveal</string>
|
||||
|
|
@ -1859,7 +1872,7 @@
|
|||
<string name="yield_module_promo_screen_cash_out_subtitle">Send, swap, or sell your funds instantly, anytime you want.</string>
|
||||
<string name="yield_module_promo_screen_cash_out_title">Access your funds anytime</string>
|
||||
<string name="yield_module_promo_screen_how_it_works_button_title">How it works?</string>
|
||||
<string name="yield_module_promo_screen_self_custodial_subtitle">Aave is a decentralized protocol managing over $61 billion in total value.</string>
|
||||
<string name="yield_module_promo_screen_self_custodial_subtitle">Aave is a decentralized protocol managing over $61 billion in total value.</string>
|
||||
<string name="yield_module_promo_screen_self_custodial_title">Decentralized and self-custodial</string>
|
||||
<string name="yield_module_promo_screen_terms_disclaimer">By using this service, you agree with provider\n%1$s and %2$s</string>
|
||||
<string name="yield_module_promo_screen_title">Connect Aave</string>
|
||||
|
|
|
|||
BIN
core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp
Normal file
BIN
core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -18,13 +18,13 @@ import com.tangem.domain.promo.models.PromoId
|
|||
import com.tangem.domain.promo.models.StoryContent
|
||||
import com.tangem.feature.referral.domain.ReferralRepository
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.coroutines.runCatching
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.mapLatest
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.coroutines.withTimeoutOrNull
|
||||
import com.tangem.utils.coroutines.runCatching
|
||||
|
||||
internal class DefaultPromoRepository(
|
||||
private val tangemApi: TangemTechApi,
|
||||
|
|
@ -49,6 +49,11 @@ internal class DefaultPromoRepository(
|
|||
PromoId.Sepa -> {
|
||||
val isActive = getSepaPromoBanner()?.isActive ?: false
|
||||
|
||||
isActive && shouldShow
|
||||
}
|
||||
PromoId.VisaPresale -> {
|
||||
val isActive = getVisaPromoBanner()?.isActive ?: false
|
||||
|
||||
isActive && shouldShow
|
||||
}
|
||||
}
|
||||
|
|
@ -59,6 +64,7 @@ internal class DefaultPromoRepository(
|
|||
return when (promoId) {
|
||||
PromoId.Referral -> flowOf(false)
|
||||
PromoId.Sepa -> flowOf(false)
|
||||
PromoId.VisaPresale -> flowOf(false)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -134,8 +140,17 @@ internal class DefaultPromoRepository(
|
|||
}.getOrNull()
|
||||
}
|
||||
|
||||
private suspend fun getVisaPromoBanner(): PromoBanner? {
|
||||
return runCatching(dispatchers.io) {
|
||||
promoBannerConverter.convert(
|
||||
tangemApi.getPromoBanner(VISA_NAME).getOrThrow(),
|
||||
)
|
||||
}.getOrNull()
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val SEPA_NAME = "sepa"
|
||||
const val VISA_NAME = "visa-waitlist"
|
||||
const val STORIES_LOAD_DELAY = 1000L
|
||||
}
|
||||
}
|
||||
|
|
@ -28,4 +28,5 @@ data class PromoBanner(
|
|||
enum class PromoId {
|
||||
Referral,
|
||||
Sepa,
|
||||
VisaPresale,
|
||||
}
|
||||
|
|
@ -29,7 +29,9 @@ class ShouldShowPromoWalletUseCase(
|
|||
if (!isReady) return false
|
||||
|
||||
return when (promoId) {
|
||||
PromoId.Referral -> true
|
||||
PromoId.Referral,
|
||||
PromoId.VisaPresale,
|
||||
-> true
|
||||
PromoId.Sepa -> {
|
||||
val walletFirstUsageDate = settingsRepository.getWalletFirstUsageDate()
|
||||
if (walletFirstUsageDate == 0L) return false
|
||||
|
|
@ -39,6 +41,7 @@ class ShouldShowPromoWalletUseCase(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun neverToShow(promoId: PromoId) = promoRepository.setNeverToShowWalletPromo(promoId)
|
||||
|
||||
private companion object {
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@ package com.tangem.domain.tokens.model.analytics
|
|||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
|
||||
sealed class TokenSwapPromoAnalyticsEvent(
|
||||
sealed class PromoAnalyticsEvent(
|
||||
event: String,
|
||||
params: Map<String, String> = mapOf(),
|
||||
) : AnalyticsEvent(category = "Promotion", event = event, params = params) {
|
||||
class NoticePromotionBanner(
|
||||
source: AnalyticsParam.ScreensSources,
|
||||
program: Program,
|
||||
) : TokenSwapPromoAnalyticsEvent(
|
||||
) : PromoAnalyticsEvent(
|
||||
event = "Notice - Promotion Banner",
|
||||
params = mapOf(
|
||||
AnalyticsParam.SOURCE to source.value,
|
||||
|
|
@ -22,7 +22,7 @@ sealed class TokenSwapPromoAnalyticsEvent(
|
|||
source: AnalyticsParam.ScreensSources,
|
||||
program: Program,
|
||||
action: BannerAction,
|
||||
) : TokenSwapPromoAnalyticsEvent(
|
||||
) : PromoAnalyticsEvent(
|
||||
event = "Promo Banner Clicked",
|
||||
params = mapOf(
|
||||
AnalyticsParam.SOURCE to source.value,
|
||||
|
|
@ -36,6 +36,24 @@ sealed class TokenSwapPromoAnalyticsEvent(
|
|||
}
|
||||
}
|
||||
|
||||
// region visa waitlist promo
|
||||
data object VisaWaitlistPromo : PromoAnalyticsEvent(event = "Visa Waitlist")
|
||||
|
||||
data object VisaWaitlistPromoJoin : PromoAnalyticsEvent(
|
||||
event = "Button - Join Now",
|
||||
params = mapOf(
|
||||
"Program Name" to "Visa Waitlist",
|
||||
),
|
||||
)
|
||||
|
||||
data object VisaWaitlistPromoDismiss : PromoAnalyticsEvent(
|
||||
event = "Button - Close",
|
||||
params = mapOf(
|
||||
"Program Name" to "Visa Waitlist",
|
||||
),
|
||||
)
|
||||
//endregion
|
||||
|
||||
// Use it on new promo action
|
||||
enum class Program(val programName: String) {
|
||||
Empty("Empty"),
|
||||
|
|
@ -4,7 +4,7 @@ import com.tangem.core.analytics.api.AnalyticsEventHandler
|
|||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent
|
||||
import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent
|
||||
import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsState
|
||||
import com.tangem.feature.tokendetails.presentation.tokendetails.state.components.TokenDetailsNotification
|
||||
import com.tangem.features.yield.supply.api.analytics.YieldSupplyAnalytics
|
||||
|
|
@ -38,8 +38,8 @@ internal class TokenDetailsNotificationsAnalyticsSender(
|
|||
-> TokenDetailsAnalyticsEvent.Notice.NotEnoughFee(
|
||||
currency = cryptoCurrency,
|
||||
)
|
||||
is TokenDetailsNotification.SwapPromo -> TokenSwapPromoAnalyticsEvent.NoticePromotionBanner(
|
||||
program = TokenSwapPromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
is TokenDetailsNotification.SwapPromo -> PromoAnalyticsEvent.NoticePromotionBanner(
|
||||
program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
source = AnalyticsParam.ScreensSources.Token,
|
||||
)
|
||||
is TokenDetailsNotification.KaspaIncompleteTransactionWarning -> TokenDetailsAnalyticsEvent.Notice.Reveal(
|
||||
|
|
|
|||
|
|
@ -847,10 +847,10 @@ internal class TokenDetailsModel @Inject constructor(
|
|||
modelScope.launch(dispatchers.main) {
|
||||
shouldShowPromoTokenUseCase.neverToShow(promoId)
|
||||
analyticsEventsHandler.send(
|
||||
TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
|
||||
PromoAnalyticsEvent.PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Token,
|
||||
program = TokenSwapPromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed,
|
||||
program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
@ -860,10 +860,10 @@ internal class TokenDetailsModel @Inject constructor(
|
|||
modelScope.launch(dispatchers.main) {
|
||||
shouldShowPromoTokenUseCase.neverToShow(promoId)
|
||||
analyticsEventsHandler.send(
|
||||
TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
|
||||
PromoAnalyticsEvent.PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Token,
|
||||
program = TokenSwapPromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked,
|
||||
program = PromoAnalyticsEvent.Program.Empty, // Use it on new promo action
|
||||
action = PromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ import com.tangem.domain.settings.NeverToSuggestRateAppUseCase
|
|||
import com.tangem.domain.settings.RemindToRateAppLaterUseCase
|
||||
import com.tangem.domain.staking.StakingIdFactory
|
||||
import com.tangem.domain.staking.multi.MultiYieldBalanceFetcher
|
||||
import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent
|
||||
import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent
|
||||
import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent.Program
|
||||
import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent.PromotionBannerClicked
|
||||
import com.tangem.domain.wallets.legacy.UserWalletsListManager.Lockable.UnlockType
|
||||
import com.tangem.domain.wallets.models.UnlockWalletsError
|
||||
import com.tangem.domain.wallets.usecase.*
|
||||
|
|
@ -327,11 +329,12 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
analyticsEventHandler.send(
|
||||
when (promoId) {
|
||||
PromoId.Referral -> MainScreen.ReferralPromoButtonDismiss
|
||||
PromoId.Sepa -> TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
|
||||
PromoId.Sepa -> PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = TokenSwapPromoAnalyticsEvent.Program.Sepa,
|
||||
action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Closed,
|
||||
program = Program.Sepa,
|
||||
action = PromotionBannerClicked.BannerAction.Closed,
|
||||
)
|
||||
PromoId.VisaPresale -> PromoAnalyticsEvent.VisaWaitlistPromoDismiss
|
||||
},
|
||||
|
||||
)
|
||||
|
|
@ -349,10 +352,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
}
|
||||
PromoId.Sepa -> {
|
||||
analyticsEventHandler.send(
|
||||
TokenSwapPromoAnalyticsEvent.PromotionBannerClicked(
|
||||
PromotionBannerClicked(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = TokenSwapPromoAnalyticsEvent.Program.Sepa,
|
||||
action = TokenSwapPromoAnalyticsEvent.PromotionBannerClicked.BannerAction.Clicked,
|
||||
program = Program.Sepa,
|
||||
action = PromotionBannerClicked.BannerAction.Clicked,
|
||||
),
|
||||
)
|
||||
cryptoCurrency ?: return
|
||||
|
|
@ -365,6 +368,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
),
|
||||
)
|
||||
}
|
||||
PromoId.VisaPresale -> {
|
||||
analyticsEventHandler.send(PromoAnalyticsEvent.VisaWaitlistPromoJoin)
|
||||
urlOpener.openUrl(VISA_PROMO_LINK)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -575,4 +582,10 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val VISA_PROMO_LINK = "https://tangem.com/en/cardwaitlist/?utm_source=tangem-app-banner" +
|
||||
"&utm_medium=banner" +
|
||||
"&utm_campaign=tangempaywaitlist"
|
||||
}
|
||||
}
|
||||
|
|
@ -4,8 +4,8 @@ import com.tangem.core.analytics.api.AnalyticsEventHandler
|
|||
import com.tangem.core.analytics.models.AnalyticsEvent
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.core.decompose.di.ModelScoped
|
||||
import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent.*
|
||||
import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent.Program
|
||||
import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent
|
||||
import com.tangem.domain.tokens.model.analytics.PromoAnalyticsEvent.Program
|
||||
import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent
|
||||
import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent.MainScreen
|
||||
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotification
|
||||
|
|
@ -50,15 +50,16 @@ internal class WalletWarningsAnalyticsSender @Inject constructor(
|
|||
is WalletNotification.RateApp -> MainScreen.HowDoYouLikeTangem
|
||||
is WalletNotification.Critical.BackupError -> MainScreen.BackupError
|
||||
is WalletNotification.NoteMigration -> MainScreen.NotePromo
|
||||
is WalletNotification.SwapPromo -> NoticePromotionBanner(
|
||||
is WalletNotification.SwapPromo -> PromoAnalyticsEvent.NoticePromotionBanner(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.Empty, // Use it on new promo action
|
||||
)
|
||||
is WalletNotification.Sepa -> NoticePromotionBanner(
|
||||
is WalletNotification.Sepa -> PromoAnalyticsEvent.NoticePromotionBanner(
|
||||
source = AnalyticsParam.ScreensSources.Main,
|
||||
program = Program.Sepa,
|
||||
)
|
||||
is WalletNotification.ReferralPromo -> MainScreen.ReferralPromo
|
||||
is WalletNotification.VisaPresalePromo -> PromoAnalyticsEvent.VisaWaitlistPromo
|
||||
is WalletNotification.UnlockWallets -> null // See [SelectedWalletAnalyticsSender]
|
||||
is WalletNotification.Informational.NoAccount,
|
||||
is WalletNotification.Warning.LowSignatures,
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
|
|||
isReadyToShowRateAppUseCase(),
|
||||
isNeedToBackupUseCase(userWallet.walletId),
|
||||
seedPhraseNotificationUseCase(userWalletId = userWallet.walletId),
|
||||
shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.Referral),
|
||||
shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.VisaPresale),
|
||||
shouldShowPromoWalletUseCase(userWalletId = userWallet.walletId, promoId = PromoId.Sepa),
|
||||
notificationsRepository.getShouldShowNotification(NotificationId.EnablePushesReminderNotification.key),
|
||||
) { array -> array }
|
||||
|
|
@ -109,7 +109,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
|
|||
val isReadyToShowRating = array[1] as Boolean
|
||||
val isNeedToBackup = array[2] as Boolean
|
||||
val seedPhraseIssueStatus = array[3] as SeedPhraseNotificationsStatus
|
||||
val shouldShowReferralPromo = array[4] as Boolean
|
||||
val shouldShowVisaPromo = array[4] as Boolean
|
||||
val shouldShowSepaBanner = array[5] as Boolean
|
||||
val shouldShowEnablePushesReminderNotification = array[6] as Boolean
|
||||
|
||||
|
|
@ -120,7 +120,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
|
|||
|
||||
addFinishWalletActivationNotification(userWallet, totalFiatBalance, clickIntents)
|
||||
|
||||
addReferralPromoNotification(cardTypesResolver, clickIntents, shouldShowReferralPromo)
|
||||
addVisaPresalePromoNotification(clickIntents, shouldShowVisaPromo)
|
||||
|
||||
addSepaPromoNotification(userWallet, clickIntents, shouldShowSepaBanner)
|
||||
|
||||
|
|
@ -274,17 +274,16 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
|
|||
.map(CryptoCurrencyStatus::currency)
|
||||
}
|
||||
|
||||
private fun MutableList<WalletNotification>.addReferralPromoNotification(
|
||||
cardTypesResolver: CardTypesResolver?,
|
||||
private fun MutableList<WalletNotification>.addVisaPresalePromoNotification(
|
||||
clickIntents: WalletClickIntents,
|
||||
shouldShowPromo: Boolean,
|
||||
) {
|
||||
addIf(
|
||||
element = WalletNotification.ReferralPromo(
|
||||
onCloseClick = { clickIntents.onClosePromoClick(promoId = PromoId.Referral) },
|
||||
onClick = { clickIntents.onPromoClick(promoId = PromoId.Referral) },
|
||||
element = WalletNotification.VisaPresalePromo(
|
||||
onCloseClick = { clickIntents.onClosePromoClick(promoId = PromoId.VisaPresale) },
|
||||
onClick = { clickIntents.onPromoClick(promoId = PromoId.VisaPresale) },
|
||||
),
|
||||
condition = shouldShowPromo && (cardTypesResolver == null || cardTypesResolver.isTangemWallet()),
|
||||
condition = shouldShowPromo,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -298,6 +298,23 @@ sealed class WalletNotification(val config: NotificationConfig) {
|
|||
),
|
||||
)
|
||||
|
||||
data class VisaPresalePromo(
|
||||
val onCloseClick: () -> Unit,
|
||||
val onClick: () -> Unit,
|
||||
) : WalletNotification(
|
||||
config = NotificationConfig(
|
||||
title = resourceReference(R.string.notification_visa_waitlist_promo_title),
|
||||
subtitle = resourceReference(R.string.notification_visa_waitlist_promo_text),
|
||||
iconResId = R.drawable.img_visa_waitlist_promo,
|
||||
onCloseClick = onCloseClick,
|
||||
buttonsState = NotificationConfig.ButtonsState.SecondaryButtonConfig(
|
||||
text = resourceReference(R.string.notification_referral_promo_button),
|
||||
onClick = onClick,
|
||||
),
|
||||
iconSize = 54.dp,
|
||||
),
|
||||
)
|
||||
|
||||
data class Sepa(
|
||||
val onCloseClick: () -> Unit,
|
||||
val onClick: () -> Unit,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
# https://github.com/tangem/tangem-sdk-android/
|
||||
# https://github.com/tangem/vico
|
||||
|
||||
tangemBlockchainSdk = "releases-5.30-1293"
|
||||
tangemBlockchainSdk = "releases-5.30-1298"
|
||||
#tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds
|
||||
tangemCardSdk = "releases-5.30-567"
|
||||
#tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^
|
||||
|
|
|
|||
|
|
@ -26,5 +26,5 @@ internal enum class ProviderTypeIdMapping(val id: String, val providerType: Prov
|
|||
KoinosPro(id = "koinospro", providerType = ProviderType.Koinos.KoinosPro),
|
||||
AlephiumTangem(id = "tangemAlephium", providerType = ProviderType.Alephium.Tangem),
|
||||
Blink(id = "blink", providerType = ProviderType.Blink),
|
||||
Tatum(id = "tatum", providerType = ProviderType.Kusama.Tatum),
|
||||
Tatum(id = "tatum", providerType = ProviderType.PolkadotLike.Tatum),
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue