diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AmountMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AmountMiddleware.kt index 69bdcc3166..15522e87d2 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AmountMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/AmountMiddleware.kt @@ -82,7 +82,7 @@ class AmountMiddleware { val sendState = appState?.sendState ?: return dispatch(AmountAction.SetAmount(sendState.amountState.balanceCrypto, false)) - if (sendState.amountState.isCoinAmount()) { + if (sendState.amountState.canIncludeFee()) { dispatch(FeeAction.ChangeLayoutVisibility(main = true, controls = true)) dispatch(FeeActionUi.ChangeIncludeFee(true)) } diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt index a26e390555..48eafac40f 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/SendScreenReducer.kt @@ -1,20 +1,10 @@ package com.tangem.tap.features.send.redux.reducers import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.common.Blockchain import com.tangem.tap.common.CurrencyConverter import com.tangem.tap.common.entities.IndeterminateProgressButton -import com.tangem.tap.features.send.redux.AddressPayIdActionUi -import com.tangem.tap.features.send.redux.AddressPayIdVerifyAction -import com.tangem.tap.features.send.redux.AmountAction -import com.tangem.tap.features.send.redux.AmountActionUi -import com.tangem.tap.features.send.redux.FeeAction -import com.tangem.tap.features.send.redux.FeeActionUi -import com.tangem.tap.features.send.redux.PrepareSendScreen -import com.tangem.tap.features.send.redux.ReceiptAction -import com.tangem.tap.features.send.redux.ReleaseSendState -import com.tangem.tap.features.send.redux.SendAction -import com.tangem.tap.features.send.redux.SendScreenAction -import com.tangem.tap.features.send.redux.TransactionExtrasAction +import com.tangem.tap.features.send.redux.* import com.tangem.tap.features.send.redux.states.ExternalTransactionData import com.tangem.tap.features.send.redux.states.IdStateHolder import com.tangem.tap.features.send.redux.states.SendState @@ -98,21 +88,28 @@ private class PrepareSendScreenStatesReducer : SendInternalReducer { val walletManager = action.walletManager!! val amountToExtract = prepareAction.tokenAmount ?: prepareAction.coinAmount!! val decimals = amountToExtract.decimals + val feePaidInNetworkCurrency = isFeePaidInNetworkCurrency(walletManager.wallet.blockchain) return sendState.copy( walletManager = walletManager, coinConverter = action.coinRate?.let { CurrencyConverter(it, decimals) }, tokenConverter = action.tokenRate?.let { CurrencyConverter(it, decimals) }, amountState = sendState.amountState.copy( + feePaidInCurrencyNetworkCurrency = feePaidInNetworkCurrency, amountToExtract = amountToExtract, typeOfAmount = amountToExtract.type, balanceCrypto = amountToExtract.value ?: BigDecimal.ZERO, ), feeState = sendState.feeState.copy( - includeFeeSwitcherIsEnabled = amountToExtract.type == AmountType.Coin, + includeFeeSwitcherIsEnabled = feePaidInNetworkCurrency || isCoinAmount(amountToExtract.type), ), ) } + + private fun isFeePaidInNetworkCurrency(blockchain: Blockchain): Boolean = + blockchain.tokenTransactionFeePaidInNetworkCurrency() + + private fun isCoinAmount(typeOfAmount: AmountType): Boolean = typeOfAmount == AmountType.Coin } internal fun updateLastState(sendState: SendState, lastChangedState: IdStateHolder): SendState { diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt b/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt index 6e7d3596d6..6a47e2d342 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/states/SendState.kt @@ -91,7 +91,7 @@ data class SendState( fun getButtonState(): ButtonState = if (isReadyToSend()) ButtonState.ENABLED else ButtonState.DISABLED fun getTotalAmountToSend(value: BigDecimal = amountState.amountToSendCrypto): BigDecimal { - val needToExtractFee = amountState.isCoinAmount() && feeState.feeIsIncluded + val needToExtractFee = amountState.canIncludeFee() && feeState.feeIsIncluded return if (needToExtractFee) value.minus(feeState.getCurrentFeeValue()) else value } @@ -135,13 +135,16 @@ data class AmountState( val decimalSeparator: String = ".", val error: TapError? = null, val inputIsEnabled: Boolean = true, + private val feePaidInCurrencyNetworkCurrency: Boolean = false, ) : SendScreenState { override val stateId: StateId = StateId.AMOUNT fun isReady(): Boolean = error == null && !amountToSendCrypto.isZero() - fun isCoinAmount(): Boolean = typeOfAmount == AmountType.Coin + private fun isCoinAmount(): Boolean = typeOfAmount == AmountType.Coin + + fun canIncludeFee(): Boolean = isCoinAmount() || feePaidInCurrencyNetworkCurrency fun createMainCurrency(type: MainCurrencyType, canSwitched: Boolean): MainCurrency { return if (!canSwitched) { diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index d52657f938..1ad8e1ccca 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -73,7 +73,7 @@ reactiveNetwork = "3.0.8" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "develop-224" +tangemBlockchainSdk = "develop-225" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-249" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds