From 18ef37d290ecd92d81bb16dd6c79ddf952638d98 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Feb 2026 11:46:57 +0300 Subject: [PATCH 1/7] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 4 ++++ core/res/src/main/res/values-es/strings.xml | 2 ++ core/res/src/main/res/values-fr/strings.xml | 4 ++++ core/res/src/main/res/values-ru/strings.xml | 2 ++ core/res/src/main/res/values-uk-rUA/strings.xml | 2 ++ core/res/src/main/res/values/strings.xml | 2 +- 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 9903332ae6..4cc165f633 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -1431,6 +1431,8 @@ 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! + Suchen Sie nach einem beliebigen Token, auch wenn es noch nicht in Ihrer Liste ist. + Nutzen Sie die Suche, um zu finden, was Sie benötigen. 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 @@ -1888,6 +1890,8 @@ Service vorübergehend nicht verfügbar Die Menge der zu tauschenden Token darf folgende Werte nicht überschreiten %s Der zu tauschende Betrag muss mindestens %s betragen + Der Tausch ist für dieses Paar nicht verfügbar. Bitte wählen Sie ein anderes Token und versuchen Sie es erneut. + Nicht unterstütztes Swap-Paar. Bitte änder den zu tauschenden Betrag Bei dieser Karte oder Ring kann es sich um ein Produktionsmuster oder eine Fälschung handeln Echtheitsprüfung fehlgeschlagen diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 462fd75c00..0ec38e3506 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -1896,6 +1896,8 @@ Servicio no disponible temporalmente La cantidad de tokens a intercambiar no debe exceder %s El monto a cambiar debe ser de al menos %s + El intercambio no está disponible para este par. Por favor, seleccione otro token e inténtelo de nuevo. + Par de intercambio no compatible. Por favor cambie la cantidad a cambiar Esta tarjeta podría ser una muestra de producción o una falsificación La verificación de autenticidad falló diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index fcdf84f726..41913d6515 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -1434,6 +1434,8 @@ Le réseau facturera des frais d\'approbation de jeton pour vérifier que vous autorisez l\'utilisation de votre jeton pour l\'échange. Échangez plus de jetons à de meilleurs taux directement dans votre portefeuille. Nouveau fournisseur d\'échange disponible ! + Recherchez n’importe quel token, même s’il ne figure pas encore dans votre liste. + Utilisez la recherche pour trouver ce dont vous avez besoin. Ayez confiance en notre assistance 24 heures sur 24 pour vous aider à résoudre tous vos problèmes Assistance 24 heures sur 24 Plusieurs fournisseurs de confiance en un seul endroit : échangez n\'importe quel actif facilement @@ -1891,6 +1893,8 @@ Service temporairement indisponible Le nombre de jetons à échanger ne doit pas dépasser %s Le montant à échanger doit être d\'au moins %s + L’échange n’est pas disponible pour cette paire. Veuillez sélectionner un autre token et réessayer. + Paire d’échange non prise en charge. Veuillez modifier le montant à échanger Cette carte pourrait être un échantillon de production ou une contrefaçon Échec de la vérification d\'authenticité diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 5a0683d679..350f3c2c43 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -1864,6 +1864,8 @@ Сервис временно недоступен Сумма для обмена должна быть не более %s Сумма для обмена должна быть не менее %s + Обмен для этой пары недоступен. Пожалуйста, выберите другой токен и попробуйте снова. + Неподдерживаемая для обмена пара Пожалуйста, измените сумму для обмена Возможно, данная карта является образцом или подделкой Ошибка проверки подлинности 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 94cc71f5db..297d8310dc 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -1894,6 +1894,8 @@ Сервіс тимчасово недоступний Сума до обміну не повинна перевищувати %s Сума для обміну має бути не менше %s + Обмін для цієї пари недоступний. Будь ласка, виберіть інший токен і спробуйте знову. + Непідтримувана пара для обміну. Будь ласка, змініть суму для обміну Ця картка може бути виробничим зразком або підробкою Перевірка автентичності не вдалася diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index dbc8f644d4..f40c33cb35 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1898,7 +1898,7 @@ The amount of tokens to be swapped must not exceed %s The amount to swap must be at least %s Swapping isn\'t available for this pair. Please select a different token and try again. - Unsupported token pair + Unsupported swap pair Please change the amount to swap This card might be a production sample or counterfeit Authenticity check failed From a6a5d5e1452a8f266983189e4ee1fc58fe166702 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Feb 2026 15:14:05 +0500 Subject: [PATCH 2/7] Updated on 2026-08-14 --- .../SwapTransactionErrorStateConverter.kt | 6 +++--- .../tangem/feature/swap/model/SwapModel.kt | 20 +++++++++++-------- .../tangem/feature/swap/models/SwapAlertUM.kt | 11 +++++++++- .../tangem/feature/swap/ui/StateBuilder.kt | 20 +++++++++++++++++-- 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/converters/SwapTransactionErrorStateConverter.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/converters/SwapTransactionErrorStateConverter.kt index 646e3a3218..dc6c9cfbb0 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/converters/SwapTransactionErrorStateConverter.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/converters/SwapTransactionErrorStateConverter.kt @@ -17,7 +17,7 @@ internal class SwapTransactionErrorStateConverter( is SwapTransactionState.Error.TransactionError -> { when (val error = value.error) { is SendTransactionError.UserCancelledError -> return null - null -> SwapAlertUM.GenericError(onDismiss) + null -> SwapAlertUM.DefaultError(onDismiss) else -> TransactionErrorAlertConverter(onDismiss, onSupportClick).convert(error) } } @@ -27,8 +27,8 @@ internal class SwapTransactionErrorStateConverter( onConfirmClick = { onSupportClick(value.error.code.toString()) }, ) } - SwapTransactionState.Error.UnknownError -> SwapAlertUM.GenericError(onDismiss) - is SwapTransactionState.Error.TangemPayWithdrawalError -> SwapAlertUM.GenericError( + SwapTransactionState.Error.UnknownError -> SwapAlertUM.DefaultError(onDismiss) + is SwapTransactionState.Error.TangemPayWithdrawalError -> SwapAlertUM.SupportError( onConfirmClick = { onSupportClick(value.txId) }, ) } diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt index 2727fa50c7..64a9dc67b1 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt @@ -342,7 +342,7 @@ internal class SwapModel @Inject constructor( } if (fromAccountStatus == null) { - uiState = stateBuilder.addAlert(uiState = uiState, onDismiss = swapRouter::back) + uiState = stateBuilder.addDefaultAlert(uiState = uiState, onDismiss = swapRouter::back) } else { fromAccountCurrencyStatus = fromAccountStatus toAccountCurrencyStatus = toAccountStatus @@ -360,7 +360,7 @@ internal class SwapModel @Inject constructor( } if (fromStatus == null) { - uiState = stateBuilder.addAlert(uiState = uiState, onDismiss = swapRouter::back) + uiState = stateBuilder.addDefaultAlert(uiState = uiState, onDismiss = swapRouter::back) } else { initialFromStatus = fromStatus initialToStatus = toStatus @@ -1020,7 +1020,7 @@ internal class SwapModel @Inject constructor( val fee = getSelectedFee() if (fee == null && tangemPayInput?.isWithdrawal != true) { - makeDefaultAlert(resourceReference(R.string.swapping_fee_estimation_error_text)) + makeSupportAlert(resourceReference(R.string.swapping_fee_estimation_error_text)) modelScope.launch { delay(SWAP_IN_PROGRESS_DELAY) startLoadingQuotesFromLastState() @@ -1046,7 +1046,7 @@ internal class SwapModel @Inject constructor( when (swapTransactionState) { is SwapTransactionState.TxSent -> { if (fee == null) { - makeDefaultAlert(resourceReference(R.string.swapping_fee_estimation_error_text)) + makeSupportAlert(resourceReference(R.string.swapping_fee_estimation_error_text)) return@onSuccess } sendSuccessSwapEvent( @@ -1205,7 +1205,7 @@ internal class SwapModel @Inject constructor( } val feeForPermission = when (val fee = approveDataModel.fee) { TxFeeState.Empty -> { - makeDefaultAlert(resourceReference(R.string.swapping_fee_estimation_error_text)) + makeSupportAlert(resourceReference(R.string.swapping_fee_estimation_error_text)) Timber.e("Fee should not be Empty") return@launch } @@ -1658,11 +1658,15 @@ internal class SwapModel @Inject constructor( } private fun makeDefaultAlert() { - uiState = stateBuilder.addAlert(uiState) + uiState = stateBuilder.addDefaultAlert(uiState = uiState) } - private fun makeDefaultAlert(message: TextReference) { - uiState = stateBuilder.addAlert(uiState, message) + private fun makeSupportAlert(message: TextReference) { + uiState = stateBuilder.addSupportAlert( + uiState = uiState, + message = message, + onSupportClick = { onFailedTxEmailClick("Fee calculation error") }, + ) } @Suppress("LongMethod", "CyclomaticComplexMethod") diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/models/SwapAlertUM.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/models/SwapAlertUM.kt index bb84996732..bb7763f928 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/models/SwapAlertUM.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/models/SwapAlertUM.kt @@ -7,7 +7,16 @@ import com.tangem.core.ui.extensions.resourceReference sealed class SwapAlertUM : AlertUM { - data class GenericError( + data class DefaultError( + override val onConfirmClick: (() -> Unit), + override val message: TextReference = resourceReference(R.string.common_unknown_error), + ) : SwapAlertUM() { + override val title: TextReference? = null + override val confirmButtonText: TextReference = + resourceReference(id = R.string.common_ok) + } + + data class SupportError( override val onConfirmClick: (() -> Unit), override val message: TextReference = resourceReference(R.string.common_unknown_error), ) : SwapAlertUM() { diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index 52bc5915e7..6e0f5f520a 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -1069,7 +1069,7 @@ internal class StateBuilder( ) } - fun addAlert( + fun addDefaultAlert( uiState: SwapStateHolder, message: TextReference = resourceReference(R.string.common_unknown_error), onDismiss: () -> Unit = { clearAlert(uiState) }, @@ -1077,7 +1077,23 @@ internal class StateBuilder( return uiState.copy( event = triggeredEvent( SwapEvent.ShowAlert( - SwapAlertUM.GenericError(onDismiss, message), + SwapAlertUM.DefaultError(onDismiss, message), + ), + onConsume = onDismiss, + ), + ) + } + + fun addSupportAlert( + uiState: SwapStateHolder, + message: TextReference = resourceReference(R.string.common_unknown_error), + onDismiss: () -> Unit = { clearAlert(uiState) }, + onSupportClick: () -> Unit, + ): SwapStateHolder { + return uiState.copy( + event = triggeredEvent( + SwapEvent.ShowAlert( + SwapAlertUM.SupportError(onSupportClick, message), ), onConsume = onDismiss, ), From 76b718672c80a93d2a2f48e73f38f5028c5528b2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Feb 2026 13:22:15 +0300 Subject: [PATCH 3/7] Updated on 2026-08-14 --- app/src/main/AndroidManifest.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 97a76b6ac8..2ef3c24014 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -313,6 +313,16 @@ + + + + + + + + Date: Fri, 27 Feb 2026 14:14:36 +0300 Subject: [PATCH 4/7] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index b1002f2997..a3bc5cab8e 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -7,7 +7,7 @@ tangemBlockchainSdk = "releases-5.34-1430" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "releases-5.34-584" +tangemCardSdk = "releases-5.34-587" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem12" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ From 720759fb1ac94c75da527a656b2cf87237f98376 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Feb 2026 17:40:42 +0500 Subject: [PATCH 5/7] Updated on 2026-08-14 --- .../send/v2/common/SendConfirmAlertFactory.kt | 11 +++++++---- .../supply/impl/common/YieldSupplyAlertFactory.kt | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendConfirmAlertFactory.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendConfirmAlertFactory.kt index 78b805b69a..d066f0da3a 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendConfirmAlertFactory.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/common/SendConfirmAlertFactory.kt @@ -22,10 +22,13 @@ internal class SendConfirmAlertFactory @Inject constructor( title = resourceReference(id = R.string.send_alert_transaction_failed_title), message = resourceReference(id = R.string.common_unknown_error), onDismissRequest = popBack, - firstAction = EventMessageAction( - title = resourceReference(R.string.common_support), - onClick = onFailedTxEmailClick, - ), + firstActionBuilder = { + EventMessageAction( + title = resourceReference(R.string.common_support), + onClick = onFailedTxEmailClick, + ) + }, + secondActionBuilder = { cancelAction { } }, ), ) } diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/common/YieldSupplyAlertFactory.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/common/YieldSupplyAlertFactory.kt index 00958d2ec1..e5f5e68cca 100644 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/common/YieldSupplyAlertFactory.kt +++ b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/common/YieldSupplyAlertFactory.kt @@ -32,10 +32,13 @@ class YieldSupplyAlertFactory @Inject constructor( title = resourceReference(id = R.string.send_alert_transaction_failed_title), message = resourceReference(id = R.string.common_unknown_error), onDismissRequest = popBack, - firstAction = EventMessageAction( - title = resourceReference(R.string.common_support), - onClick = onFailedTxEmailClick, - ), + firstActionBuilder = { + EventMessageAction( + title = resourceReference(R.string.common_support), + onClick = onFailedTxEmailClick, + ) + }, + secondActionBuilder = { cancelAction { } }, ), ) } From 5d204c2bf09bcead01a767c57b00cf58941bf47f Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Feb 2026 19:46:42 +0700 Subject: [PATCH 6/7] Updated on 2026-08-14 --- .../src/main/java/com/tangem/feature/swap/model/SwapModel.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt index 64a9dc67b1..ab7b88c30d 100644 --- a/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt +++ b/features/swap/impl/src/main/java/com/tangem/feature/swap/model/SwapModel.kt @@ -2397,6 +2397,8 @@ internal class SwapModel @Inject constructor( } override fun onResult(newState: FeeSelectorUM) { + state.value = newState + if (newState is FeeSelectorUM.Error) { modelScope.launch { forceUpdateState.emit(newState.copy(isHidden = true)) From c3f7d4ebcb831d96f6d48b9f3032f42bacce236b Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 27 Feb 2026 12:47:02 +0000 Subject: [PATCH 7/7] Updated on 2026-08-14 --- gradle/tangem_dependencies.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index a3bc5cab8e..6934faad61 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -5,9 +5,9 @@ # https://github.com/tangem/tangem-sdk-android/ # https://github.com/tangem/vico -tangemBlockchainSdk = "releases-5.34-1430" +tangemBlockchainSdk = "develop-1437" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "releases-5.34-587" +tangemCardSdk = "develop-582" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem12" #tangemVico = "0.0.1" # Keep it! - used for local builds ^