From b3fba3594f78977f7422b2b8c370b192f1d046fe Mon Sep 17 00:00:00 2001 From: abdrasulov Date: Fri, 27 Sep 2024 16:08:11 +0600 Subject: [PATCH] Handle sending max available TON --- .../bankwallet/core/adapters/TonAdapter.kt | 14 +++++++------- .../bankwallet/modules/send/ton/SendTonModule.kt | 8 +++++++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/core/adapters/TonAdapter.kt b/app/src/main/java/io/horizontalsystems/bankwallet/core/adapters/TonAdapter.kt index 2d274e51434..cb2eab77763 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/core/adapters/TonAdapter.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/core/adapters/TonAdapter.kt @@ -73,17 +73,17 @@ class TonAdapter(tonKitWrapper: TonKitWrapper) : BaseTonAdapter(tonKitWrapper, 9 override val availableBalance: BigDecimal get() = balance + private fun getSendAmount(amount: BigDecimal) = when { + amount.compareTo(availableBalance) == 0 -> SendAmount.Max + else -> SendAmount.Amount(amount.movePointRight(decimals).toBigInteger()) + } + override suspend fun send(amount: BigDecimal, address: FriendlyAddress, memo: String?) { - tonKit.send(address, SendAmount.Amount(amount.movePointRight(decimals).toBigInteger()), memo) + tonKit.send(address, getSendAmount(amount), memo) } override suspend fun estimateFee(amount: BigDecimal, address: FriendlyAddress, memo: String?): BigDecimal { - val estimateFee = tonKit.estimateFee( - address, - SendAmount.Amount(amount.movePointRight(decimals).toBigInteger()), - memo - ) - + val estimateFee = tonKit.estimateFee(address, getSendAmount(amount), memo) return estimateFee.toBigDecimal(decimals).stripTrailingZeros() } diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/ton/SendTonModule.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/ton/SendTonModule.kt index 81710a54215..e3768c425c8 100644 --- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/ton/SendTonModule.kt +++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/send/ton/SendTonModule.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import io.horizontalsystems.bankwallet.core.App import io.horizontalsystems.bankwallet.core.ISendTonAdapter +import io.horizontalsystems.bankwallet.core.isNative import io.horizontalsystems.bankwallet.entities.Wallet import io.horizontalsystems.bankwallet.modules.amount.AmountValidator import io.horizontalsystems.bankwallet.modules.xrate.XRateService @@ -25,7 +26,12 @@ object SendTonModule { val amountValidator = AmountValidator() val coinMaxAllowedDecimals = wallet.token.decimals - val amountService = SendTonAmountService(amountValidator, wallet.coin.code, adapter.availableBalance) + val amountService = SendTonAmountService( + amountValidator = amountValidator, + coinCode = wallet.coin.code, + availableBalance = adapter.availableBalance, + leaveSomeBalanceForFee = wallet.token.type.isNative + ) val addressService = SendTonAddressService(predefinedAddress) val feeService = SendTonFeeService(adapter) val xRateService = XRateService(App.marketKit, App.currencyManager.baseCurrency)