diff --git a/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenActionsUtils.kt b/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenActionsUtils.kt index d33e9330f1..f5d2e66df6 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenActionsUtils.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/tokens/TokenActionsUtils.kt @@ -14,28 +14,8 @@ fun ScenarioUnavailabilityReason.getUnavailabilityReasonText(): TextReference { formatArgs = wrappedList(unavailabilityReason.cryptoCurrencyName), ) } - is ScenarioUnavailabilityReason.PendingTransaction -> { - when (unavailabilityReason.withdrawalScenario) { - ScenarioUnavailabilityReason.WithdrawalScenario.SEND -> resourceReference( - id = R.string.token_button_unavailability_reason_pending_transaction_send, - formatArgs = wrappedList(unavailabilityReason.networkName), - ) - ScenarioUnavailabilityReason.WithdrawalScenario.SELL -> resourceReference( - id = R.string.token_button_unavailability_reason_pending_transaction_sell, - formatArgs = wrappedList(unavailabilityReason.networkName), - ) - } - } - is ScenarioUnavailabilityReason.EmptyBalance -> { - when (unavailabilityReason.withdrawalScenario) { - ScenarioUnavailabilityReason.WithdrawalScenario.SEND -> resourceReference( - id = R.string.token_button_unavailability_reason_empty_balance_send, - ) - ScenarioUnavailabilityReason.WithdrawalScenario.SELL -> resourceReference( - id = R.string.token_button_unavailability_reason_empty_balance_sell, - ) - } - } + is ScenarioUnavailabilityReason.PendingTransaction -> unavailabilityReason.getDescription() + is ScenarioUnavailabilityReason.EmptyBalance -> unavailabilityReason.getDescription() is ScenarioUnavailabilityReason.BuyUnavailable -> { resourceReference( id = R.string.token_button_unavailability_reason_buy_unavailable, @@ -62,8 +42,38 @@ fun ScenarioUnavailabilityReason.getUnavailabilityReasonText(): TextReference { ScenarioUnavailabilityReason.UnassociatedAsset -> resourceReference( id = R.string.warning_receive_blocked_hedera_token_association_required_message, ) + ScenarioUnavailabilityReason.UsedOutdatedData -> { + resourceReference(id = R.string.token_button_unavailability_reason_out_od_date_balance) + } ScenarioUnavailabilityReason.None -> { throw IllegalArgumentException("The unavailability reason must be other than None") } } +} + +private fun ScenarioUnavailabilityReason.PendingTransaction.getDescription(): TextReference { + return resourceReference( + id = when (withdrawalScenario) { + ScenarioUnavailabilityReason.WithdrawalScenario.SEND -> { + R.string.token_button_unavailability_reason_pending_transaction_send + } + ScenarioUnavailabilityReason.WithdrawalScenario.SELL -> { + R.string.token_button_unavailability_reason_pending_transaction_sell + } + }, + formatArgs = wrappedList(networkName), + ) +} + +private fun ScenarioUnavailabilityReason.EmptyBalance.getDescription(): TextReference { + return resourceReference( + id = when (withdrawalScenario) { + ScenarioUnavailabilityReason.WithdrawalScenario.SEND -> { + R.string.token_button_unavailability_reason_empty_balance_send + } + ScenarioUnavailabilityReason.WithdrawalScenario.SELL -> { + R.string.token_button_unavailability_reason_empty_balance_sell + } + }, + ) } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/network/DefaultNetworksStatusesStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/network/DefaultNetworksStatusesStore.kt index c98d04ca29..b31620f4a4 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/network/DefaultNetworksStatusesStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/network/DefaultNetworksStatusesStore.kt @@ -62,7 +62,28 @@ internal class DefaultNetworksStatusesStore( } override suspend fun getSyncOrNull(key: UserWalletId): Set? { - return runtimeDataStore.getSyncOrNull(key = provideStringKey(key)) + val runtimeStatuses = runtimeDataStore.getSyncOrNull(key = provideStringKey(key)) ?: return null + + val networks = runtimeStatuses.map(NetworkStatus::network).toSet() + + val cachedStatuses = persistenceDataStore.data.firstOrNull() + ?.get(key.stringValue) + ?.mapNotNullTo(mutableSetOf()) { cached -> + val network = networks.firstOrNull { + it.id == cached.networkId && + it.derivationPath == NetworkDerivationPathConverter.convert(cached.derivationPath) + } + ?: return@mapNotNullTo null + + NetworkStatusConverter(network = network, isCached = true).convert(value = cached) + } + .orEmpty() + + return mergeStatuses( + networks = networks, + cachedStatuses = cachedStatuses, + runtimeStatuses = runtimeStatuses, + ) } override suspend fun store(key: UserWalletId, value: NetworkStatus) { diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 277b47bbf2..ecef79cb21 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -674,6 +674,8 @@ Scanne die Karte oder Ring, um ihre Einstellungen zu ändern. Die Änderungen wirken sich nur auf die von dir gescannte Karte oder Ring aus und haben keine Auswirkungen auf andere mit deiner Wallet verknüpften Geräte. Halte deine Karte oder Ring bereit! Sicherheitswarnung + Nein, habe ich nicht + Ja, leite mich Dein Konto verfügt nicht über ausreichend Guthaben, um Kryptowährungen zu verkaufen. Bitte zahle den gewünschten Vermögenswert ein, um fortzufahren. Unzureichendes Guthaben Der Verkauf von Kryptowährung ist in Deiner Region derzeit nicht möglich. Wir arbeiten aktiv daran, Ihnen diese Option bald anzubieten – bleib dran! @@ -881,16 +883,16 @@ Das Netzwerk erhebt eine Token-Genehmigungsgebühr, um zu überprüfen, ob Sie die Verwendung Ihres Tokens für den Swap genehmigen. Tausche mehr Token zu besseren Kursen direkt in deiner Brieftasche. Neuer Swap-Anbieter verfügbar! - Du kannst Dich darauf verlassen, dass Deine Transaktionen jederzeit reibungslos ablaufen, da Sie ständig geprüft werden - Hilfe rund um die Uhr - Mit vertrauenswürdigen Börsenanbietern kannst Du mühelos Vermögenswerte tauschen, wobei alles sicher in Deiner Wallet verbleibt - Tausche sich mit uns - Höchste Sicherheit und geprüfte Anbieter gewährleisten, dass Deine Vermögenswerte bei jedem Swap geschützt sind - Sicherer denn je + Vertraue auf den rund um die Uhr verfügbaren Support bei allen Problemen + Immer für Dich da + Mehrere vertrauenswürdige Anbieter an einem Ort – tausche mühelos alle Vermögenswerte in Deiner Wallet + Tausche mit uns + Keine Fummeleien, keine Umsätze, keine blinden Flecken – Deine Transaktion ist immer geschützt + Undurchdringliche Verteidigung Maximiere Deine Wert mit Tarifen aus einem breiten Netzwerk vertrauenswürdiger Anbieter und wähle immer den Besten aus - Bester Preis + Unschlagbare Preise Problemlos und intuitiv, sodass Deine Token mit nur wenigen Handgriffen getauscht werden können - Einfacher als je zuvor + Einfach bequem Der Betrag umfasst:\n- Gebühr des Dienstanbieters\n- Netzgebühr für die Rücksendung von %s von der Vermittlungsstelle an die Adresse des Nutzers. Der Betrag beinhaltet:\n• Honorar des Dienstleisters\n• Netzwerkgebühr für das Senden %1$s von der Börse zurück an die Adresse des Benutzers. \n\n Provider-Slippage kann bis zu %2$s Der Betrag enthält die Gebühren des Dienstleisters. @@ -1089,6 +1091,8 @@ Gefällt dir Tangem? Du musst deinen Token zuordnen, bevor du Token erhalten kannst Netzmietgebühr erforderlich + Handlungsbedarf + Hast Du innerhalb von 7 Tagen nach dem Erstellen einer Wallet per App oder E-Mail Kontakt zum Support aufgenommen? Wenn ja oder wenn Du Dir nicht sicher bist, befolge die Anweisungen und führe diese vollständig aus. Vielen Dank! Alles erledigt! Keine weiteren Maßnahmen erforderlich. Sie werden jetzt auf die offizielle Tangem-Website weitergeleitet. Bitte lesen und befolgen Sie dort die Anweisungen. Hast Du das Tangem-Supportteam schon einmal direkt über diese Anwendung kontaktiert? diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index e8f5fd1f79..ada8a5bd4d 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -674,6 +674,8 @@ Escanee la tarjeta o el anillo para cambiar su configuración. Los cambios afectarán solo a la tarjeta o el anillo que haya escaneado y no afectarán a otros dispositivos vinculados a su billetera. ¡Prepare su tarjeta/anillo! Alerta de seguridad + No, no lo hice + Sí, guíame No tiene fondos suficientes en su saldo para vender esta criptomoneda. Deposite el activo deseado para continuar. Saldo insuficiente La venta de criptomonedas no está disponible en su región en este momento. Estamos trabajando activamente para ofrecerle esta opción pronto. ¡Manténgase conectado! @@ -881,16 +883,16 @@ La red cobrará una tarifa de aprobación de token para verificar que está autorizando el uso de su token para el swap. Intercambie más tokens a mejores tasas directamente en su billetera. ¡Nuevo proveedor de intercambio disponible! - Siéntase seguro con un soporte constante, lo que garantiza que sus transacciones se realicen sin problemas en cualquier momento - Asistencia 24 horas al día - Los proveedores de intercambio de confianza le permiten intercambiar activos sin esfuerzo, manteniendo todo seguro en su billetera + Siéntase seguro con una asistencia permanente que le ayudará con cualquier problema + Siempre aquí + Múltiples proveedores de confianza en un solo lugar: intercambie cualquier activo sin esfuerzo en su billetera Intercambie con nosotros - La seguridad de alto nivel y los proveedores verificados garantizan la protección de sus activos en cada intercambio - Más seguro que nunca + Sin cuelgues, sin pérdidas, sin puntos ciegos - su transacción siempre está protegida + Defensa impenetrable Maximice su valor con tarifas de una amplia red de proveedores de confianza, eligiendo siempre la mejor - Las mejores tarifas + Tarifas inmejorables Sencillo e intuitivo, permite cambiar tokens con solo unos cuantos toques - Más fácil que nunca + Simplemente cómodo La cantidad incluye:\n• Tarifas del proveedor de servicios\n• Tarifas de red por enviar %s desde el intercambio a la dirección del usuario. El monto incluye:\n• tarifas del proveedor de servicios\n• tarifas de red por enviar %1$s desde el intercambio a la dirección del usuario. \n\nEl slippage del proveedor puede alcanzar el %2$s El importe incluye los honorarios del proveedor de servicios. @@ -978,7 +980,7 @@ Desbloquear todo con %s La blockchain está Inaccesible. Inténtelo más tarde Escanee la tarjeta o el anillo - Esta billetera ya ha sido activada anteriormente.\nSi no fue usted quien lo hizo, comuníquese con el servicio de asistencia.\nTangem nunca vende billeteras junto con un código de acceso generado previamente. + Esta billetera ya ha sido activada anteriormente.\nSi no fue usted quien lo hizo, comuníquese con el servicio de asistencia.\nTangem nunca vende billeteras con un código de acceso pre generado. Solicitud para firmar un mensaje.\n\n%s Dapp %1$s, solicitando\nfirmar transacción BNB.\n\n%2$s Orden de intercambio por %1$s\nPrecio: %2$s\nCantidad a recibir: %3$s\nCantidad a pagar: %4$s @@ -1089,6 +1091,8 @@ ¿Disfrutando de Tangem? Deba asociar su token antes de recibir tokens Se requiere tarifa de alquiler de red + Acción requerida + ¿Te pusiste en contacto con el servicio de asistencia a través de la aplicación o por correo electrónico en los 7 días posteriores a la creación de la billetera? Si lo hiciste o no estás seguro, sigue y completa las instrucciones. ¡Gracias! ¡Todo listo! No se requieren más acciones. Ahora será redirigido al sitio web oficial de Tangem. Por favor, lea y siga las instrucciones allí indicadas. ¿Alguna vez contactó al equipo de soporte de Tangem directamente desde esta aplicación? diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index fd85f80b66..529de205c8 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -271,6 +271,8 @@ Échange par %s Visitez le site Web du fournisseur pour obtenir un remboursement Opération échouée par le fournisseur + Votre échange prend plus de temps que prévu. Veuillez contacter le support du fournisseur pour obtenir de l\'aide. + Longue durée des transactions Le montant de la transaction a été remboursé en %1$s sur votre portefeuille en raison des règles OKX ou du pont. %2$s Le montant a été remboursé en %1$s (réseau %2$s) Visitez le site Web du fournisseur pour la vérification @@ -674,6 +676,8 @@ Scannez la carte pour modifier ses paramètres. Les modifications n\'affecteront que la carte que vous avez scannée et n\'affecteront pas les autres cartes liées à votre portefeuille. Préparez votre carte ! Alerte de sécurité + Non + Oui, guidez-moi Vous n\'avez pas assez de fonds sur votre solde pour vendre cette cryptomonnaie. Veuillez déposer l\'actif souhaité pour continuer. Solde insuffisant La vente de cryptomonnaies n\'est pas disponible dans votre région pour le moment. Nous travaillons activement pour vous proposer cette option prochainement. Restez connecté ! @@ -1089,6 +1093,8 @@ Vous appréciez Tangem ? Vous devez associer votre jeton avant de recevoir des jetons Frais de location de réseau requis + Action requise + Avez-vous contacté l\'assistance via l\'application ou par e-mail dans les 7 jours suivant la création d\'un portefeuille ? Si vous l\'avez fait ou si vous n\'êtes pas sûr, suivez et complétez les instructions. Merci ! Tout est en ordre ! Aucune autre action n\'est requise. Vous allez être redirigé vers le site officiel de Tangem. Veuillez lire et suivre les instructions qui y sont indiquées. Avez-vous déjà contacté l\'équipe de support Tangem directement depuis cette application ? @@ -1103,6 +1109,7 @@ Certains soldes de jetons n\'ont pas pu être mis à jour Il s\'agit d\'une carte Testnet. Elle ne peut pas traiter les transactions et ne doit être utilisée qu\'à des fins de test et de développement. À des fins de test uniquement + Le solde peut être obsolète. Rafraîchissez la page. Ignorer Vous avez une sauvegarde interrompue. Voulez-vous la reprendre ? Oui, reprendre diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 931cb0fd78..9535f46439 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -268,6 +268,8 @@ %sによる交換 返金を受けるには、プロバイダーのウェブサイトにアクセスしてください。 プロバイダーによる操作が失敗しました。 + スワップに予想以上の時間がかかっています。プロバイダーサポートにお問い合わせください。 + 長い取引時間 OKXまたはブリッジのルールにより、取引金額は%1$sでウォレットに返金されました。%2$s 金額は %1$s(%2$sネットワーク)で返金されました 確認するには、プロバイダーのウェブサイトにアクセスしてください。 @@ -664,6 +666,8 @@ カードまたはリングをスキャンして設定を変更します。変更はスキャンしたカードまたはリングにのみ影響し、ウォレットに関連付けられている他のデバイスには影響しません。 Tangemを準備してください! セキュリティ警告 + いいえ、しませんでした + はい、案内してください 暗号通貨を売却するための十分な資金が残高にありません。続行するには希望の資産を入金してください。 残高不足 現在、お住まいの地域では暗号資産の売却はご利用いただけません。このオプションをすぐにご利用いただけるよう積極的に取り組んでいますので、お楽しみに! @@ -1078,6 +1082,8 @@ Tangemを楽しんでいますか? トークンを受け取る前に、トークンを関連付ける必要があります。 ネットワーク使用料が必要です + 対応が必要です + ウォレットを作成してから7日以内にアプリまたはEメール経由でサポートに連絡しましたか?連絡したか不明な場合は、手順に従って完了してください。 ありがとうございます。準備完了です。これ以上の操作は必要ありません。 Tangemの公式ウェブサイトに移動します。そちらの指示に従ってください。 このアプリ経由でTangemサポートチームに直接連絡したことがありますか? @@ -1092,6 +1098,7 @@ 一部のトークン残高を更新できませんでした これはテストネットカードです。取引処理はできませんので、テストおよび開発目的でのみご利用ください。 テスト目的のみ + 残高が古い可能性があります。ページを更新してください。 破棄 バックアップが中断されました。再開しますか? はい、再開します diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index b463199a6f..15e6dcf94d 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -271,6 +271,8 @@ Exchange by %s Visit provider’s website to refund your money Operation failed by provider + Your swap is taking longer than expected. Please go to provider support for assistance. + Long transaction time The transaction amount was refunded in %1$s to your wallet due to OKX or bridge rules. %2$s The amount was refunded in %1$s (%2$s network) Visit provider’s website for verification @@ -813,6 +815,10 @@ Low staked balance A minimum of %1$s %2$s is required for restaking. Please top up your balance. Not enough %s + Insufficient Balance for Staking + A minimum of 3 ADA is required for restaking. Please top up your balance. + Not enough ADA + The minimum amount required for staking must exceed 5 ADA. Please top up your balance to start staking. Staking is currently unavailable due to network conditions. Please try again later. Staking on the %1$s network with a new validator will automatically transfer all previously staked funds to this validator. Reinvests your earned rewards in your staked amount, increasing potential earnings. @@ -918,6 +924,7 @@ You do not have funds to sell. Top up your account to be able to sell funds from it. You do not have funds to send. Top up your account to be able to send funds from it. Swapping %s is not supported by current providers, but we are working to add more options. + The displayed balance might be outdated due to caching. Selling funds will be available once the pending transaction(s) on the %s network is complete. Sending funds will be available once the pending transaction(s) in network %s is complete Selling %s is not supported by current providers, but we are working to add more options. @@ -1107,6 +1114,7 @@ Some token balances could not be updated This is a Testnet card. It cannot process transactions and should only be used for testing and development purposes. For testing purposes only + Balance may be outdated. Refresh the page. Discard You have an interrupted backup. Do you want to resume? Yes, resume diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/ScenarioUnavailabilityReason.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/ScenarioUnavailabilityReason.kt index 340ca7d60d..adc1a8e4ca 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/ScenarioUnavailabilityReason.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/ScenarioUnavailabilityReason.kt @@ -3,6 +3,8 @@ package com.tangem.domain.tokens.model sealed class ScenarioUnavailabilityReason { data object None : ScenarioUnavailabilityReason() + data object UsedOutdatedData : ScenarioUnavailabilityReason() + // staking-specific data class StakingUnavailable(val cryptoCurrencyName: String) : ScenarioUnavailabilityReason() diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt index 804f5d06c5..767dfd45ab 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt @@ -115,15 +115,18 @@ sealed class TokenScreenAnalyticsEvent( fun ScenarioUnavailabilityReason.toReasonAnalyticsText(): String { return when (this) { - is ScenarioUnavailabilityReason.BuyUnavailable -> UNAVAILABLE + is ScenarioUnavailabilityReason.BuyUnavailable, + is ScenarioUnavailabilityReason.NotExchangeable, + is ScenarioUnavailabilityReason.NotSupportedBySellService, + is ScenarioUnavailabilityReason.StakingUnavailable, + ScenarioUnavailabilityReason.UnassociatedAsset, + -> UNAVAILABLE is ScenarioUnavailabilityReason.EmptyBalance -> EMPTY - ScenarioUnavailabilityReason.None -> "" - is ScenarioUnavailabilityReason.NotExchangeable -> UNAVAILABLE - is ScenarioUnavailabilityReason.NotSupportedBySellService -> UNAVAILABLE is ScenarioUnavailabilityReason.PendingTransaction -> PENDING - is ScenarioUnavailabilityReason.StakingUnavailable -> UNAVAILABLE - ScenarioUnavailabilityReason.UnassociatedAsset -> UNAVAILABLE - ScenarioUnavailabilityReason.Unreachable -> "" + ScenarioUnavailabilityReason.None, + ScenarioUnavailabilityReason.Unreachable, + ScenarioUnavailabilityReason.UsedOutdatedData, + -> "" } } } diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt index e12cfd529e..c01b86587d 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt @@ -2,6 +2,7 @@ package com.tangem.domain.tokens import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.exchange.RampStateManager +import com.tangem.domain.models.StatusSource import com.tangem.domain.promo.PromoRepository import com.tangem.domain.promo.models.StoryContentIds import com.tangem.domain.staking.model.StakingAvailability @@ -50,7 +51,7 @@ class GetCryptoCurrencyActionsUseCase( currencyStatusOperations.getPrimaryCurrencyStatusFlow(userWallet.walletId, includeQuotes = false) } else { currencyStatusOperations.getNetworkCoinFlow( - userWallet.walletId, + userWalletId = userWallet.walletId, networkId = networkId, derivationPath = cryptoCurrencyStatus.currency.network.derivationPath, includeQuotes = false, @@ -113,6 +114,10 @@ class GetCryptoCurrencyActionsUseCase( return getActionsForUnreachableCurrency(userWallet, cryptoCurrencyStatus, requirements) } + if (cryptoCurrencyStatus.value.source != StatusSource.ACTUAL) { + return getActionsForOutdatedData(userWallet, cryptoCurrencyStatus, requirements) + } + val activeList = mutableListOf() val disabledList = mutableListOf() @@ -257,6 +262,61 @@ class GetCryptoCurrencyActionsUseCase( return actionsList } + private suspend fun getActionsForOutdatedData( + userWallet: UserWallet, + cryptoCurrencyStatus: CryptoCurrencyStatus, + requirements: AssetRequirementsCondition?, + ): List { + val activeList = mutableListOf() + + // copy address + if (isAddressAvailable(cryptoCurrencyStatus.value.networkAddress)) { + activeList.add(TokenActionsState.ActionState.CopyAddress(ScenarioUnavailabilityReason.None)) + } + + // receive + if (isAddressAvailable(cryptoCurrencyStatus.value.networkAddress)) { + val scenario = getReceiveScenario(requirements) + activeList.add(TokenActionsState.ActionState.Receive(scenario)) + } + + // swap + activeList.add( + TokenActionsState.ActionState.Swap( + unavailabilityReason = ScenarioUnavailabilityReason.UsedOutdatedData, + showBadge = false, + ), + ) + + // buy + if (rampManager.availableForBuy(userWallet.scanResponse, userWallet.walletId, cryptoCurrencyStatus.currency)) { + activeList.add(TokenActionsState.ActionState.Buy(ScenarioUnavailabilityReason.None)) + } else { + activeList.add( + TokenActionsState.ActionState.Buy( + ScenarioUnavailabilityReason.BuyUnavailable( + cryptoCurrencyName = cryptoCurrencyStatus.currency.name, + ), + ), + ) + } + + // staking + activeList.add(TokenActionsState.ActionState.Stake(ScenarioUnavailabilityReason.UsedOutdatedData, null)) + + // send + activeList.add(TokenActionsState.ActionState.Send(ScenarioUnavailabilityReason.UsedOutdatedData)) + + // region sell + activeList.add(TokenActionsState.ActionState.Sell(ScenarioUnavailabilityReason.UsedOutdatedData)) + // endregion + + // hide + activeList.add(TokenActionsState.ActionState.HideToken(ScenarioUnavailabilityReason.None)) + + return activeList + } + private fun getReceiveScenario(requirements: AssetRequirementsCondition?): ScenarioUnavailabilityReason { return if (requirements is AssetRequirementsCondition.PaidTransaction || requirements is AssetRequirementsCondition.PaidTransactionWithFee