Updated on 2026-08-14

This commit is contained in:
Tangem 2025-11-03 22:05:59 +03:00
commit 737db57d0e
20 changed files with 130 additions and 38 deletions

@ -1 +1 @@
Subproject commit 4272136431c3629230803e70c4d2cf412365418d
Subproject commit 16c0de5855d0a75e285a9c84e616dd020f7da4d1

View file

@ -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>

View file

@ -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>

View file

@ -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 dattente 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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -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
}
}

View file

@ -28,4 +28,5 @@ data class PromoBanner(
enum class PromoId {
Referral,
Sepa,
VisaPresale,
}

View file

@ -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 {

View file

@ -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"),

View file

@ -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(

View file

@ -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,
),
)
}

View file

@ -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"
}
}

View file

@ -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,

View file

@ -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,
)
}

View file

@ -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,

View file

@ -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 ^

View file

@ -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),
}