diff --git a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt index 24039a6bb3..779640e32c 100644 --- a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt +++ b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt @@ -2,7 +2,6 @@ package com.tangem.data.staking import android.util.Base64 import arrow.core.raise.catch -import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.TransactionData @@ -108,8 +107,7 @@ internal class DefaultStakingRepository( value = emptyMap(), ) - private val tronStakeKitTransactionAdapter: JsonAdapter = - moshi.adapter(TronStakeKitTransaction::class.java) + private val tronStakeKitTransactionAdapter by lazy { moshi.adapter(TronStakeKitTransaction::class.java) } override fun getIntegrationKey(cryptoCurrencyId: CryptoCurrency.ID): String = with(cryptoCurrencyId) { rawNetworkId.plus(rawCurrencyId) @@ -537,6 +535,7 @@ internal class DefaultStakingRepository( args = ActionRequestBodyArgs( amount = params.amount.toPlainString(), validatorAddress = params.validatorAddress, + validatorAddresses = listOf(params.validatorAddress), ), ) } diff --git a/data/staking/src/main/java/com/tangem/data/staking/converters/YieldBalanceConverter.kt b/data/staking/src/main/java/com/tangem/data/staking/converters/YieldBalanceConverter.kt index ec86b52e73..c171ba5acd 100644 --- a/data/staking/src/main/java/com/tangem/data/staking/converters/YieldBalanceConverter.kt +++ b/data/staking/src/main/java/com/tangem/data/staking/converters/YieldBalanceConverter.kt @@ -25,7 +25,8 @@ internal class YieldBalanceConverter : Converter true AVAILABLE, UNSTAKING, PREPARING, REWARDS, - LOCKED, UNLOCKING, UNKNOWN, -> false diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt index 17c6e659d7..098483c942 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt @@ -85,7 +85,7 @@ internal class YieldBalancesConverter( .mapNotNull { balance -> val validator = yield.validators.firstOrNull { balance.validatorAddress?.contains(it.address, ignoreCase = true) == true - } + } ?: mockedValidator val cryptoAmount = balance.amount val fiatAmount = cryptoCurrencyStatus.value.fiatRate?.times(cryptoAmount) val unbonding = getUnbondingDate(balance.date) @@ -130,10 +130,10 @@ internal class YieldBalancesConverter( BalanceType.UNSTAKED -> resourceReference(R.string.staking_unstaked) to resourceReference(R.string.staking_unstaked_footer) BalanceType.UNSTAKING -> resourceReference(R.string.staking_unstaking) to null + BalanceType.LOCKED -> resourceReference(R.string.staking_locked) to null BalanceType.AVAILABLE -> null to null BalanceType.PREPARING -> resourceReference(R.string.staking_preparing) to null BalanceType.REWARDS -> null to null - BalanceType.LOCKED -> null to null BalanceType.UNLOCKING -> null to null BalanceType.UNKNOWN -> null to null } @@ -164,5 +164,12 @@ internal class YieldBalancesConverter( private companion object { const val DAY_IN_MILLIS = 24 * 60 * 60 * 1000 + + private val mockedValidator = Yield.Validator( + address = "", + status = "", + name = "Mocked validator", + preferred = true, + ) } } \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt index b2edad1892..4697e7fe88 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt @@ -15,7 +15,7 @@ internal object StakingClickIntentsStub : StakingClickIntents { override fun onBackClick() {} - override fun onNextClick(actionType: StakingActionCommonType?, pendingAction: PendingAction?) {} + override fun onNextClick(actionTypeToOverwrite: StakingActionCommonType?, pendingAction: PendingAction?) {} override fun onActionClick() {} diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/ActionTypeActiveStakeTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/ActionTypeActiveStakeTransformer.kt new file mode 100644 index 0000000000..1e451a27c2 --- /dev/null +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/ActionTypeActiveStakeTransformer.kt @@ -0,0 +1,24 @@ +package com.tangem.features.staking.impl.presentation.state.transformers + +import com.tangem.domain.staking.model.stakekit.action.StakingActionCommonType +import com.tangem.domain.tokens.model.CryptoCurrencyStatus +import com.tangem.features.staking.impl.presentation.state.* +import com.tangem.lib.crypto.BlockchainUtils.isTron +import com.tangem.utils.transformer.Transformer + +internal class ActionTypeActiveStakeTransformer( + private val cryptoCurrencyStatus: CryptoCurrencyStatus, + private val activeStake: BalanceState, +) : Transformer { + + override fun transform(prevState: StakingUiState): StakingUiState { + val isTron = isTron(cryptoCurrencyStatus.currency.network.id.value) + val actionType = if (activeStake.pendingActions.isEmpty() || isTron) { + StakingActionCommonType.EXIT + } else { + StakingActionCommonType.PENDING_OTHER + } + + return prevState.copy(actionType = actionType) + } +} \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt index b18c96f147..5ad39ad9be 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt @@ -137,9 +137,8 @@ internal class SetButtonsStateTransformer : Transformer { private fun StakingUiState.onPrimaryClick() { when (currentStep) { StakingStep.InitialInfo -> { - val actionType = StakingActionCommonType.ENTER clickIntents.onAmountValueChange("") // reset amount state - clickIntents.onNextClick(actionType) + clickIntents.onNextClick(StakingActionCommonType.ENTER) } StakingStep.Validators, StakingStep.Amount, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt index 11910f51df..076d61b47d 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingClickIntents.kt @@ -15,7 +15,7 @@ internal interface StakingClickIntents : AmountScreenClickIntents { fun onBackClick() - fun onNextClick(actionType: StakingActionCommonType? = null, pendingAction: PendingAction? = null) + fun onNextClick(actionTypeToOverwrite: StakingActionCommonType? = null, pendingAction: PendingAction? = null) fun onActionClick() @@ -27,7 +27,7 @@ internal interface StakingClickIntents : AmountScreenClickIntents { fun getFee(pendingAction: PendingAction?) - override fun onAmountNext() = onNextClick(actionType = null) + override fun onAmountNext() = onNextClick(actionTypeToOverwrite = null) fun openValidators() diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt index 4eba6fabde..a79ffd5875 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt @@ -159,9 +159,9 @@ internal class StakingViewModel @Inject constructor( stakingStateRouter.onBackClick() } - override fun onNextClick(actionType: StakingActionCommonType?, pendingAction: PendingAction?) { - if (actionType != null) { - stateController.update { it.copy(actionType = actionType) } + override fun onNextClick(actionTypeToOverwrite: StakingActionCommonType?, pendingAction: PendingAction?) { + if (actionTypeToOverwrite != null) { + stateController.update { it.copy(actionType = actionTypeToOverwrite) } } stakingStateRouter.onNextClick() when { @@ -395,7 +395,7 @@ internal class StakingViewModel @Inject constructor( if (rewards != null && rewards.isSingleItem()) { onActiveStake(rewards.first()) } else { - onNextClick(actionType = StakingActionCommonType.PENDING_REWARDS) + onNextClick(actionTypeToOverwrite = StakingActionCommonType.PENDING_REWARDS) } } @@ -405,7 +405,7 @@ internal class StakingViewModel @Inject constructor( ShowActionSelectorBottomSheetTransformer( pendingActions = activeStake.pendingActions, onActionSelect = { - onNextClick(actionType = StakingActionCommonType.PENDING_OTHER, pendingAction = it) + onNextClick(actionTypeToOverwrite = StakingActionCommonType.PENDING_OTHER, pendingAction = it) stateController.update(DismissBottomSheetStateTransformer()) }, onDismiss = { @@ -414,14 +414,10 @@ internal class StakingViewModel @Inject constructor( ), ) } else { - val actionType = if (activeStake.pendingActions.isEmpty()) { - StakingActionCommonType.EXIT - } else { - StakingActionCommonType.PENDING_OTHER - } + stateController.update(ActionTypeActiveStakeTransformer(cryptoCurrencyStatus, activeStake)) stateController.update(ValidatorSelectChangeTransformer(activeStake.validator)) stateController.update(AmountChangeStateTransformer(cryptoCurrencyStatus, activeStake.cryptoValue, yield)) - onNextClick(actionType, activeStake.pendingActions.firstOrNull()) + onNextClick(null, activeStake.pendingActions.firstOrNull()) } } diff --git a/libs/crypto/src/main/java/com/tangem/lib/crypto/BlockchainUtils.kt b/libs/crypto/src/main/java/com/tangem/lib/crypto/BlockchainUtils.kt index 89f796a6b7..bc53484728 100644 --- a/libs/crypto/src/main/java/com/tangem/lib/crypto/BlockchainUtils.kt +++ b/libs/crypto/src/main/java/com/tangem/lib/crypto/BlockchainUtils.kt @@ -52,6 +52,11 @@ object BlockchainUtils { return blockchain == Blockchain.Binance || blockchain == Blockchain.BinanceTestnet } + fun isTron(networkId: String): Boolean { + val blockchain = Blockchain.fromId(networkId) + return blockchain == Blockchain.Tron || blockchain == Blockchain.TronTestnet + } + fun isSupportedNetworkId(networkId: String): Boolean { return Blockchain.fromNetworkId(networkId)?.isSupportedInApp() ?: false }