Updated on 2026-08-14

This commit is contained in:
Tangem 2024-03-13 13:35:47 +05:00
parent 742795d2d9
commit 0977f12e80
4 changed files with 18 additions and 47 deletions

View file

@ -23,12 +23,12 @@ internal sealed class SendNotification(val config: NotificationConfig) {
),
) {
object TotalExceedsBalance : Error(
data object TotalExceedsBalance : Error(
title = resourceReference(R.string.send_notification_exceed_balance_title),
subtitle = resourceReference(R.string.send_notification_exceed_balance_text),
)
object InvalidAmount : Error(
data object InvalidAmount : Error(
title = resourceReference(R.string.send_notification_invalid_amount_title),
subtitle = resourceReference(R.string.send_notification_invalid_amount_text),
)
@ -94,17 +94,6 @@ internal sealed class SendNotification(val config: NotificationConfig) {
subtitle = resourceReference(R.string.send_notification_existential_deposit_text, wrappedList(deposit)),
)
data class NetworkCoverage(
val amountReducedBy: String,
val amountReduced: String,
) : Warning(
title = resourceReference(id = R.string.send_network_fee_warning_title),
subtitle = resourceReference(
id = R.string.send_network_fee_warning_content,
formatArgs = wrappedList(amountReducedBy, amountReduced),
),
)
data object FeeTooLow : Warning(
title = resourceReference(id = R.string.send_notification_transaction_delay_title),
subtitle = resourceReference(id = R.string.send_notification_transaction_delay_text),

View file

@ -52,7 +52,6 @@ internal class SendNotificationFactory(
addDustWarningNotification(feeAmount, sendAmount)
addTransactionLimitErrorNotification(feeAmount, sendAmount)
// warnings
addFeeCoverageNotification(sendState.isSubtract, sendAmount)
addExistentialWarningNotification(feeAmount, sendAmount)
addHighFeeWarningNotification(sendAmount, sendState.ignoreAmountReduce)
addTooLowNotification(feeState)
@ -257,29 +256,6 @@ internal class SendNotificationFactory(
}
}
private fun MutableList<SendNotification>.addFeeCoverageNotification(
isSubtract: Boolean,
amountValue: BigDecimal,
) {
val state = currentStateProvider()
val cryptoCurrency = cryptoCurrencyStatusProvider().currency
val feeAmount = state.feeState?.fee?.amount?.value ?: BigDecimal.ZERO
val amountReducedValue = amountValue.minus(feeAmount)
val amountReducedByValue = amountValue.minus(amountReducedValue)
val amountReducedBy = BigDecimalFormatter.formatCryptoAmount(
cryptoAmount = amountReducedByValue,
cryptoCurrency = cryptoCurrency,
)
val amountReduced = BigDecimalFormatter.formatCryptoAmount(
cryptoAmount = amountReducedValue,
cryptoCurrency = cryptoCurrency,
)
if (isSubtract) {
add(SendNotification.Warning.NetworkCoverage(amountReducedBy, amountReduced))
}
}
private fun MutableList<SendNotification>.addTooLowNotification(feeState: SendStates.FeeState) {
val feeSelectorState = feeState.feeSelectorState as? FeeSelectorState.Content ?: return
val multipleFees = feeSelectorState.fees as? TransactionFee.Choosable ?: return

View file

@ -5,6 +5,7 @@ import com.tangem.blockchain.common.TransactionData
import com.tangem.core.ui.components.currency.tokenicon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.event.consumedEvent
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.utils.parseBigDecimal
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.txhistory.models.TxHistoryItem
@ -215,9 +216,20 @@ internal class SendStateFactory(
//endregion
//region send
fun onSubtractSelect(isSubtract: Boolean): SendUiState {
fun onSubtractSelect(isSubtract: Boolean, isAmountSubtractAvailable: Boolean): SendUiState {
val state = currentStateProvider()
val fee = state.feeState?.fee ?: return state
val amountState = state.amountState ?: return state
val amount = amountState.amountTextField.cryptoAmount
val amountValue = amount.value ?: return state
val amountToSend = if (isSubtract && isAmountSubtractAvailable) {
val feeValue = fee.amount.value ?: return state
amountValue.minus(feeValue)
} else {
amountValue
}
return state.copy(
amountState = amountStateConverter.convert(amountToSend.parseBigDecimal(amount.decimals)),
sendState = state.sendState.copy(isSubtract = isSubtract),
)
}

View file

@ -430,7 +430,7 @@ internal class SendViewModel @Inject constructor(
)
return
} else {
uiState = stateFactory.onSubtractSelect(false)
uiState = stateFactory.onSubtractSelect(false, isAmountSubtractAvailable)
analyticsEventHandler.send(SendAnalyticEvents.SubtractFromAmount(false))
}
if (checkIfFeeTooLow(uiState)) {
@ -569,7 +569,7 @@ internal class SendViewModel @Inject constructor(
}
override fun onSubtractSelect() {
uiState = stateFactory.onSubtractSelect(true)
uiState = stateFactory.onSubtractSelect(true, isAmountSubtractAvailable)
stateRouter.showSend()
analyticsEventHandler.send(SendAnalyticEvents.SubtractFromAmount(true))
}
@ -676,16 +676,10 @@ internal class SendViewModel @Inject constructor(
val fee = feeState.fee ?: return
val memo = uiState.recipientState?.memoTextField?.value
val amountValue = uiState.amountState?.amountTextField?.cryptoAmount?.value ?: return
val amountToSend = if (uiState.sendState.isSubtract && isAmountSubtractAvailable) {
val feeValue = fee.amount.value ?: return
amountValue.minus(feeValue)
} else {
amountValue
}
viewModelScope.launch(dispatchers.main) {
createTransactionUseCase(
amount = amountToSend.convertToAmount(cryptoCurrency),
amount = amountValue.convertToAmount(cryptoCurrency),
fee = fee,
memo = memo,
destination = recipient,