Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-22 18:08:16 +01:00
parent 9238a7ca66
commit a670ab02aa
9 changed files with 41 additions and 13 deletions

View file

@ -7,10 +7,14 @@ import javax.inject.Inject
class BackupValidator @Inject constructor() {
fun isValid(cardDTO: CardDTO): Boolean {
fun isValidFull(cardDTO: CardDTO): Boolean {
return validateBackupStatus(cardDTO) && validateCurves(cardDTO)
}
fun isValidBackupStatus(cardDTO: CardDTO): Boolean {
return validateBackupStatus(cardDTO)
}
private fun validateCurves(cardDTO: CardDTO): Boolean {
val config = CardConfig.createConfig(cardDTO)
// / Since the curve `bls12381_G2_AUG` was added later into first generation of wallets,

View file

@ -58,7 +58,7 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
buildList {
addSwapPromoNotification(shouldShowPromo, promoBanner, clickIntents)
addCriticalNotifications(userWallet)
addCriticalNotifications(userWallet, clickIntents)
addInformationalNotifications(cardTypesResolver, maybeTokenList, clickIntents)
@ -86,11 +86,14 @@ internal class GetMultiWalletWarningsFactory @Inject constructor(
)
}
private fun MutableList<WalletNotification>.addCriticalNotifications(userWallet: UserWallet) {
private fun MutableList<WalletNotification>.addCriticalNotifications(
userWallet: UserWallet,
clickIntents: WalletClickIntents,
) {
val cardTypesResolver = userWallet.scanResponse.cardTypesResolver
addIf(
element = WalletNotification.Critical.BackupError,
condition = !backupValidator.isValid(userWallet.scanResponse.card) || userWallet.hasBackupError,
element = WalletNotification.Critical.BackupError { clickIntents.onSupportClick() },
condition = !backupValidator.isValidBackupStatus(userWallet.scanResponse.card) || userWallet.hasBackupError,
)
addIf(

View file

@ -20,11 +20,16 @@ import org.joda.time.DateTime
@Immutable
sealed class WalletNotification(val config: NotificationConfig) {
sealed class Critical(title: TextReference, subtitle: TextReference) : WalletNotification(
sealed class Critical(
title: TextReference,
subtitle: TextReference,
buttonsState: NotificationConfig.ButtonsState? = null,
) : WalletNotification(
config = NotificationConfig(
title = title,
subtitle = subtitle,
iconResId = R.drawable.ic_alert_circle_24,
buttonsState = buttonsState,
),
) {
@ -38,9 +43,13 @@ sealed class WalletNotification(val config: NotificationConfig) {
subtitle = resourceReference(id = R.string.warning_failed_to_verify_card_message),
)
data object BackupError : Critical(
data class BackupError(val onSupportClick: () -> Unit) : Critical(
title = resourceReference(R.string.warning_backup_errors_title),
subtitle = resourceReference(R.string.warning_backup_errors_message),
buttonsState = NotificationConfig.ButtonsState.PrimaryButtonConfig(
text = resourceReference(id = R.string.details_row_title_contact_to_support),
onClick = onSupportClick,
),
)
}

View file

@ -62,6 +62,8 @@ internal interface WalletWarningsClickIntents {
fun onTravalaPromoClick(link: String?)
fun onCloseTravalaPromoClick()
fun onSupportClick()
}
@Suppress("LongParameterList")
@ -254,7 +256,11 @@ internal class WalletWarningsClickIntentsImplementor @Inject constructor(
}
}
private suspend fun getSelectedUserWallet(): UserWallet? {
override fun onSupportClick() {
reduxStateHolder.dispatch(LegacyAction.SendEmailSupport)
}
private fun getSelectedUserWallet(): UserWallet? {
val userWalletId = stateHolder.getSelectedWalletId()
return getUserWalletUseCase(userWalletId).getOrElse {
Timber.e(