From 58e611012175a75c6570537918b217cc81f0128e Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 31 Oct 2024 12:27:23 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../models/response/ExchangeProvider.kt | 3 ++ core/res/src/main/res/values-de/strings.xml | 3 ++ core/res/src/main/res/values-es/strings.xml | 1 + core/res/src/main/res/values-fr/strings.xml | 1 + core/res/src/main/res/values-ja/strings.xml | 3 ++ core/res/src/main/res/values-ru/strings.xml | 3 +- core/res/src/main/res/values/strings.xml | 3 +- .../java/com/tangem/utils/StringsSigns.kt | 1 + .../swap/converters/SwapPairInfoConverter.kt | 2 ++ .../domain/models/domain/SwapPairLeast.kt | 1 + .../tangem/feature/swap/models/SwapAlertUM.kt | 4 +-- .../tangem/feature/swap/ui/StateBuilder.kt | 30 +++++++++++++------ .../feature/swap/viewmodels/SwapViewModel.kt | 2 +- 13 files changed, 43 insertions(+), 14 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt index bda2f0e17f..b4ffbd4506 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt @@ -26,6 +26,9 @@ data class ExchangeProvider( @Json(name = "recommended") val isRecommended: Boolean = false, + + @Json(name = "slippage") + val slippage: Int?, ) enum class ExchangeProviderType { diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 745138a008..7fdccc468b 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -551,9 +551,11 @@ Zugangscode wiederherstellen Identische Karten oder Ring Zugangscode + Bezahlen mit Unsere Dienstleistungen sind in diesem Land nicht verfügbar Änder oder bestätige bitte Dein Wohnsitz wurde identifiziert als + Über Gruppe erstellen Nach Guthaben Token organisieren @@ -742,6 +744,7 @@ Beim Staking im %1$s -Netzwerk mit einem neuen Validator werden alle zuvor eingesetzten Kryptos automatisch an diesen Validator übertragen Reinvestiert Deine verdienten Prämien in Deinen Einsatzbetrag und erhöht so den potenziellen Gewinn. Mit Restake kannst Du Dein Guthaben von einem Validator zu einem anderen verschieben, ohne dass Du den Stake aufheben musst. + Du bist dabei, Dein gesamtes Guthaben zu staken. Wir empfehlen, einen kleinen Betrag übrig zu lassen, um die Netzwerkgebühren für die Aufhebung des Stakes oder das Einfordern von Prämien abzudecken. Entsperre dein Geld, um es aus dem Staking-Prozess abzuheben. Das Freischalten nimmt %s. Nach Ablauf der 21-tägigen Bindungsfrist kannst Du über Dein Guthaben verfügen. Die Prämie wird zusammen mit dem ungestaketen Guthaben abgehoben. Deine Assets steht Dir nach Ablauf der Frist für die Aufhebung der Bindung %s zur Verfügung. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 6703130663..03a98284df 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -742,6 +742,7 @@ El staking en la red %1$s con un nuevo validador transferirá automáticamente todos los fondos previamente en staking a este validador. Reinvierta las recompensas obtenidas en el monto apostado, aumentando las ganancias potenciales. La opción de volver a staking le permite mover sus fondos de un validador a otro sin necesidad de retirarlos. + Está a punto de hacer staking con todo su saldo. Recomendamos dejar una cantidad para cubrir las tarifas de la red por unstaking o reclamo de recompensas. Desbloquee su dinero para retirarlo del proceso de staking. El desbloqueo demora %s minuto. Sus fondos estarán disponibles para su uso después del período de desvinculación de 21 días. La recompensa se retirará junto con los fondos de desvinculación. Sus fondos estarán disponibles para su uso después del período de desvinculación de %s. diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 80f7d2e337..7882e38152 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -742,6 +742,7 @@ Le staking dans le réseau %1$s avec un nouveau validateur transférera automatiquement tous les fonds précédemment stakés vers ce validateur Réinvestissez vos récompenses gagnées dans le montant que vous avez staké, augmentant ainsi vos gains potentiels. L\'option de restaker vous permet de déplacer vos fonds d\'un validateur à un autre sans avoir besoin de les déstaker. + Vous êtes sur le point de staker l\'intégralité de votre solde. Nous vous recommandons de laisser un petit montant pour couvrir les frais de réseau pour unstaking ou la réclamation des récompenses. Débloquez votre argent pour le retirer du processus de staking. Le déverrouillage prend %s. Vos fonds seront disponibles à l\'utilisation après la période de déblocage de 21 jours. La récompense sera retirée en même temps que vos fonds de déblocage. Vos fonds seront disponibles pour utilisation après la période de désengagement %s. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index d5ae3921d5..de3d33b7d2 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -543,9 +543,11 @@ アクセスコードの復元 同一のカード アクセスコード + 支払う この国では当社のサービスはご利用いただけません 変更または確認 あなたの住居は次のように識別されています + 経由 グループ 残高順 トークンを整理する @@ -732,6 +734,7 @@ 新しいバリデーターで%1$sネットワークにステーキングすると、以前にステーキングされた資金はすべてこのバリデーターに自動的に転送されます。 獲得した報酬をステーキングに再投資し、潜在的な収益を増やします。 再ステーキングを使うと、ステーキングを解除することなく、あるバリデータから別のバリデータに資金を移動できます。 + 残高のすべてをステーキングしようとしています。ステーキング解除や報酬請求にかかるネットワーク手数料をカバーするために、少額を残しておくことをお勧めします。 資金をステーキングから引き出すには、ロックを解除してください。ロック解除には%sかかります。 資金は、21日間のロック解除期間後に使用可能になります。報酬は、ロック解除後の資金とともに引き出されます。 %sのステーキング解除期間後、資金はすぐ利用可能となります。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 884e4e6cc6..ba6d9c4db6 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -825,7 +825,8 @@ Новый провайдер обмена! В сумму включено: \n• комиссия провайдера сервиса\n• комиссия сети за отправку %s от биржи обратно на адрес пользователя. В сумму включена комиссия провайдера сервиса. - Комиссии + Проскальзывание провайдера составляет до %s. + Информация Подтверждения считаются отраслевым стандартом для всех децентрализованных бирж и защищают ваш кошелек от доступа со стороны смарт-контракта без вашего разрешения. По замыслу смарт-контракты не могут получить доступ к вашим токенам, если вы не одобрите доступ со своей стороны. «Разблокируя» свои токены, вы даете смарт-контракту 1inch разрешение тратить ваши активы. Майнеры сети получают компенсацию за газ (оплачиваемый вами) за запись этого действия в блокчейне. Как только разрешение будет предоставлено, вы сможете обменять свой токен. Подтвердить Ошибка расчета комиссии. Пожалуйста, отправьте информацию в поддержку. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 486f321553..0e98aa2383 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -810,7 +810,8 @@ New Swap Provider Available! The amount includes:\n• service provider\'s fee\n• network fee for sending %s from the exchange back to the user\'s address. The amount includes the service provider\'s fee. - Fees + Provider slippage is up to %s. + Information All decentralized exchanges require approvals to prevent smart contracts from accessing your wallet without your permission. By design, smart contracts can\'t access your tokens unless you approve. By \"unlocking\" your tokens, you authorize the 1-inch smart contract to spend them. The network\'s miners receive a gas fee (paid by you) to record this action on the blockchain. You can swap your token after giving approval. Approve Fee estimation error. Please send feedback to support. diff --git a/core/utils/src/main/java/com/tangem/utils/StringsSigns.kt b/core/utils/src/main/java/com/tangem/utils/StringsSigns.kt index 991f77b883..b47160124d 100644 --- a/core/utils/src/main/java/com/tangem/utils/StringsSigns.kt +++ b/core/utils/src/main/java/com/tangem/utils/StringsSigns.kt @@ -10,4 +10,5 @@ object StringsSigns { const val TILDE_SIGN = "~" const val INFINITY_SIGN = "∞" const val NON_BREAKING_SPACE = '\u00A0' + const val PERCENT = "%" } \ No newline at end of file diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt index ec5a88e56e..17850cb1ba 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapPairInfoConverter.kt @@ -46,6 +46,7 @@ class SwapPairInfoConverter : Converter Unit), ) : SwapAlertUM() { override val title: TextReference = resourceReference( - com.tangem.feature.swap.presentation.R.string.swapping_alert_title, + R.string.swapping_alert_title, ) override val confirmButtonText: TextReference = resourceReference(id = R.string.common_ok) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index d6f9cf8bc5..8176ed64cf 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -34,6 +34,7 @@ import com.tangem.feature.swap.utils.getExpressErrorTitle import com.tangem.feature.swap.viewmodels.SwapProcessDataState import com.tangem.utils.Provider import com.tangem.utils.StringsSigns.DASH_SIGN +import com.tangem.utils.StringsSigns.PERCENT import com.tangem.utils.StringsSigns.TILDE_SIGN import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList @@ -1089,28 +1090,39 @@ internal class StateBuilder( uiState: SwapStateHolder, isPriceImpact: Boolean, token: String, - providerType: ExchangeProviderType, + provider: SwapProvider, onDismiss: () -> Unit, ): SwapStateHolder { - val message = when (providerType) { - ExchangeProviderType.CEX -> resourceReference(R.string.swapping_alert_cex_description, wrappedList(token)) - ExchangeProviderType.DEX, ExchangeProviderType.DEX_BRIDGE -> { - val refs = buildList { + val combinedMessage = buildList { + when (provider.type) { + ExchangeProviderType.CEX -> { + add(resourceReference(R.string.swapping_alert_cex_description, wrappedList(token))) + } + ExchangeProviderType.DEX, + ExchangeProviderType.DEX_BRIDGE, + -> { if (isPriceImpact) { add(resourceReference(R.string.swapping_high_price_impact_description)) add(stringReference("\n\n")) } add(resourceReference(R.string.swapping_alert_dex_description)) } - - combinedReference(refs.toWrappedList()) + } + provider.slippage?.let { slippage -> + add(stringReference("\n\n")) + add( + resourceReference( + R.string.swapping_alert_slippage_description, + wrappedList("$slippage$PERCENT"), + ), + ) } } return uiState.copy( event = triggeredEvent( SwapEvent.ShowAlert( - SwapAlertUM.FeesAlert( - message = message, + SwapAlertUM.InformationAlert( + message = combinedReference(combinedMessage.toWrappedList()), onConfirmClick = onDismiss, ), ), diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index 0003e45237..c4854ddb29 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -1067,7 +1067,7 @@ internal class SwapViewModel @Inject constructor( uiState = uiState, isPriceImpact = isPriceImpact, token = currencySymbol, - providerType = selectedProvider.type, + provider = selectedProvider, ) { uiState = stateBuilder.clearAlert(uiState) }