Updated on 2026-08-14

This commit is contained in:
Tangem 2026-01-30 13:55:43 +04:00
parent e5a5d5ef97
commit 2e59b7e116
28 changed files with 802 additions and 38 deletions

View file

@ -202,6 +202,7 @@ internal class WalletContentClickIntentsImplementor @Inject constructor(
navigationAction = navigationAction,
apy = apy,
)
is NavigationAction.CloreMigration -> Unit
}
}
@ -298,6 +299,7 @@ internal class WalletContentClickIntentsImplementor @Inject constructor(
},
)
}
is NavigationAction.CloreMigration -> return
}
analyticsEventHandler.send(event)
}

View file

@ -18,6 +18,7 @@ import com.tangem.domain.feedback.GetWalletMetaInfoUseCase
import com.tangem.domain.feedback.SendFeedbackEmailUseCase
import com.tangem.domain.feedback.models.FeedbackEmailType
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.domain.models.wallet.requireColdWallet
@ -35,6 +36,7 @@ import com.tangem.domain.staking.multi.MultiStakingBalanceFetcher
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.tokens.model.details.NavigationAction
import com.tangem.domain.wallets.legacy.UserWalletsListManager.Lockable.UnlockType
import com.tangem.domain.wallets.models.UnlockWalletsError
import com.tangem.domain.wallets.usecase.*
@ -65,6 +67,8 @@ internal interface WalletWarningsClickIntents {
fun onAddBackupCardClick()
fun onCloreMigrationClick(cryptoCurrencyStatus: CryptoCurrencyStatus)
fun onCloseAlreadySignedHashesWarningClick()
fun onGenerateMissedAddressesClick(missedAddressCurrencies: List<CryptoCurrency>)
@ -146,6 +150,16 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
prepareAndStartOnboardingProcess()
}
override fun onCloreMigrationClick(cryptoCurrencyStatus: CryptoCurrencyStatus) {
val userWallet = getSelectedUserWallet() ?: return
router.openTokenDetails(
userWalletId = userWallet.walletId,
currencyStatus = cryptoCurrencyStatus,
navigationAction = NavigationAction.CloreMigration,
)
}
private fun prepareAndStartOnboardingProcess() {
modelScope.launch(dispatchers.main) {
getSelectedUserWallet()?.requireColdWallet()?.let {

View file

@ -76,6 +76,7 @@ internal class WalletWarningsAnalyticsSender @Inject constructor(
is WalletNotification.UsedOutdatedData,
is WalletNotification.UnlockVisaAccess,
is WalletNotification.Warning.YeildSupplyApprove, // TODO apply correct event
is WalletNotification.CloreMigration,
-> null
is WalletNotification.FinishWalletActivation -> {
val activationState = if (warning.isBackupExists) {

View file

@ -33,6 +33,7 @@ import com.tangem.feature.wallet.impl.R
import com.tangem.feature.wallet.presentation.account.AccountDependencies
import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotification
import com.tangem.hot.sdk.model.HotWalletId
import com.tangem.lib.crypto.BlockchainUtils
import com.tangem.utils.extensions.addIf
import com.tangem.utils.extensions.isPositive
import com.tangem.utils.extensions.orZero
@ -317,6 +318,29 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
element = WalletNotification.Warning.SomeNetworksUnreachable,
condition = flattenCurrencies.hasUnreachableNetworks(),
)
addCloreMigrationNotification(flattenCurrencies, clickIntents)
}
private fun MutableList<WalletNotification>.addCloreMigrationNotification(
flattenCurrencies: Lce<TokenListError, List<CryptoCurrencyStatus>>,
clickIntents: WalletClickIntents,
) {
val cloreCurrency = flattenCurrencies.findCloreCurrency() ?: return
add(
WalletNotification.CloreMigration(
onStartMigrationClick = { clickIntents.onCloreMigrationClick(cloreCurrency) },
),
)
}
private fun Lce<TokenListError, List<CryptoCurrencyStatus>>.findCloreCurrency(): CryptoCurrencyStatus? {
val currencies = getOrNull(isPartialContentAccepted = true) ?: return null
return currencies.find { currencyStatus ->
BlockchainUtils.isClore(currencyStatus.currency.network.rawId)
}
}
private fun MutableList<WalletNotification>.addPushReminderNotification(

View file

@ -414,4 +414,18 @@ sealed class WalletNotification(val config: NotificationConfig) {
iconSize = 54.dp,
),
)
data class CloreMigration(
val onStartMigrationClick: () -> Unit,
) : WalletNotification(
config = NotificationConfig(
title = resourceReference(com.tangem.core.res.R.string.warning_clore_migration_title),
subtitle = resourceReference(com.tangem.core.res.R.string.warning_clore_migration_sheet_description),
iconResId = R.drawable.img_attention_20,
buttonsState = NotificationConfig.ButtonsState.SecondaryButtonConfig(
text = resourceReference(com.tangem.core.res.R.string.warning_clore_migration_button),
onClick = onStartMigrationClick,
),
),
)
}