diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 4272136431..16c0de5855 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 4272136431c3629230803e70c4d2cf412365418d +Subproject commit 16c0de5855d0a75e285a9c84e616dd020f7da4d1 diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 6960013a5c..cec83f8e76 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -760,6 +760,8 @@ Krypto kaufen Profitiere von **0 % Gebühren** beim Kauf von Kryptowährungen per SEPA-Überweisung. Krypto mit SEPA kaufen + Trage dich in die Warteliste ein und erhalte eine Zahlungskarte, die es so noch nie gab. + Tangem Visa Card Du musst einen einzigen Zugangscode einrichten, um alle deine Geräte zu schützen Schützen Du kannst später auf jeder Karte oder Ring einen individuellen Zugangscode einrichten diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 1a93e0147b..a9f9168d50 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -653,6 +653,8 @@ Comprar cripto Disfrute de unas comisiones del **0%** al comprar criptomonedas mediante transferencias SEPA. Comprar criptomonedas con SEPA + Únete a la lista de espera y consigue una tarjeta de pago como ninguna otra. + Tangem Visa Card Configure un código de acceso único para proteger todos sus dispositivos. Proteger Puede configurar un código de acceso individual en cada tarjeta más adelante diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 8c6ab60718..ef9f1f5500 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -626,6 +626,8 @@ Acheter crypto Profitez de **0% de frais** lors de l\'achat de cryptomonnaies via des virements SEPA. Acheter des cryptomonnaies avec SEPA + Rejoignez la liste d’attente et obtenez une carte de paiement pas comme les autres. + Tangem Visa Card Vous devez définir un seul code d\'accès pour protéger tous vos appareils. Protéger Vous pourrez définir un code d\'accès individuel sur chaque carte plus tard @@ -1523,9 +1525,11 @@ Les frais de réseau seront déduits du montant que vous retirez. Rendement annuel brut (APY) APY + Les intérêts sont cumulés automatiquement. Les intérêts sont cumulés automatiquement. Mode de rendement Traitement de votre dépôt + Mode Rendement Automatique Déposez %1$s %2$s pour couvrir les frais de réseau liés aux transactions. Impossible de couvrir les frais %s diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 481e539277..393f0891ea 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -701,6 +701,8 @@ Купить криптовалюту Наслаждайтесь **нулевой комиссией** при покупке криптовалюты через SEPA-переводы. Покупайте крипту через SEPA + Присоединяйтесь к списку ожидания и получите уникальную платёжную карту, не похожую ни на одну другую. + Tangem Visa Card Установите единый код доступа для защиты всех ваших карт или колец Защита Установите индивидуальный код доступа для каждой карты или кольца позже. diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 6812790144..936f193cce 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -629,6 +629,8 @@ Купити криптовалюту Насолоджуйтесь **нульовою комісією** при купівлі криптовалюти через перекази SEPA. Купуйте криптовалюту через SEPA + Приєднуйтесь до списку очікування та отримайте унікальну платіжну картку, якої ще не було. + Tangem Visa Card Налаштуйте єдиний код доступу для захисту всіх ваших карток або кілець Захист Встановіть індивідуальний код доступу для кожної картки або кільця пізніше. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 51c96443a0..8b5e486e5f 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -30,6 +30,7 @@ Archive account Archive You are archiving this account, but you can always get it back. + Archiving... Account Account saved Account for rewards @@ -431,6 +432,7 @@ WalletConnect error You have used a card or ring from another wallet. Tap the card or ring associated with this wallet Not enough funds for the transaction. Please top up your account. + Swap any asset in your portfolio for this token My tokens You haven\'t added any tokens yet. Add tokens via Market to swap Cannot be swapped for %s @@ -795,6 +797,8 @@ Buy crypto Enjoy **0% fees** when purchasing crypto via SEPA transfers. Buy Crypto with SEPA + Join the waitlist and get a payment card unlike any other + Tangem Visa Card Set up a single access code to protect all your devices. Protect Set an individual access code for each card or ring later. @@ -1338,6 +1342,15 @@ Failed to load data. Try again later. Freeze Card Hide + Open Google Wallet + Set up Tangem Pay in a few taps and start paying with Google Pay. + Add your card to Google Pay + Open Google Wallet + Tap “Add a card” + Enter the card details manually + Verify card using the OTP sent to your device. + All set! Your card is ready to use. + Add card to Google Pay Technical issues detected. Please try again later or contact support. Receive unavailable now Reveal @@ -1859,7 +1872,7 @@ Send, swap, or sell your funds instantly, anytime you want. Access your funds anytime How it works? - Aave is a decentralized protocol managing over $61  billion in total value. + Aave is a decentralized protocol managing over $61 billion in total value. Decentralized and self-custodial By using this service, you agree with provider\n%1$s and %2$s Connect Aave diff --git a/core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp b/core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp new file mode 100644 index 0000000000..6da4590058 Binary files /dev/null and b/core/ui/src/main/res/drawable/img_visa_waitlist_promo.webp differ diff --git a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt index 09b1d25af8..a0dada9a61 100644 --- a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt +++ b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt @@ -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 } } \ No newline at end of file diff --git a/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt b/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt index 7605016350..452445b991 100644 --- a/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt +++ b/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt @@ -28,4 +28,5 @@ data class PromoBanner( enum class PromoId { Referral, Sepa, + VisaPresale, } \ No newline at end of file diff --git a/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt index 0fd7070d88..396e1d8e90 100644 --- a/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowPromoWalletUseCase.kt @@ -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 { diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenSwapPromoAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt similarity index 68% rename from domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenSwapPromoAnalyticsEvent.kt rename to domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt index f460d229ff..1dcd4490f4 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenSwapPromoAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt @@ -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 = 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"), diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt index ad3fcd0c4e..3bef7418c8 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/analytics/TokenDetailsNotificationsAnalyticsSender.kt @@ -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( diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt index 46d7427763..f89bc25347 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt @@ -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, ), ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt index 739be22276..945d0dff0c 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/child/wallet/model/intents/WalletWarningsClickIntents.kt @@ -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" + } } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt index 9eaaa739ba..1f136f0dc3 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/analytics/utils/WalletWarningsAnalyticsSender.kt @@ -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, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt index be35057603..108d706b1d 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt @@ -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.addReferralPromoNotification( - cardTypesResolver: CardTypesResolver?, + private fun MutableList.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, ) } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt index 1479c155dd..62e29d2cac 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/model/WalletNotification.kt @@ -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, diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index d3e4e9688c..96290bd78f 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -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 ^ diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt index 35b1248da3..f41adae599 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/providers/ProviderTypeIdMapping.kt @@ -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), } \ No newline at end of file