diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index ffd86a9798..b9b65e3393 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1209,6 +1209,7 @@ Monthly Weekly Rewards + Rewards on Solana are automatically added to your staking balance and cannot be shown separately. Stake locked Stake more When staking %1$s, your entire %2$s balance is staked. Any additional %2$s you deposit to your Tangem Wallet will also be automatically staked. diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/staking/YieldBalanceItem.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/staking/YieldBalanceItem.kt index f5aef4acfa..c8dbe3b3d9 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/staking/YieldBalanceItem.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/staking/YieldBalanceItem.kt @@ -107,12 +107,14 @@ enum class BalanceType(val order: Int) { } @Serializable -enum class RewardBlockType { - NoRewards, - Rewards, - RewardsRequirementsError, - RewardUnavailable, - ; +sealed interface RewardBlockType { + data object NoRewards : RewardBlockType + data object Rewards : RewardBlockType + data object RewardsRequirementsError : RewardBlockType + sealed interface RewardUnavailable : RewardBlockType { + data object DefaultRewardUnavailable : RewardUnavailable + data object SolanaRewardUnavailable : RewardUnavailable + } /** * Indicated whether action can be performed on available reward @@ -120,11 +122,11 @@ enum class RewardBlockType { */ val isActionable: Boolean get() = when (this) { - NoRewards, - RewardUnavailable, + is NoRewards, + is RewardUnavailable, -> false - RewardsRequirementsError, - Rewards, + is RewardsRequirementsError, + is Rewards, -> true } } \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt index 539f5ee668..b4c31ec116 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt @@ -546,7 +546,7 @@ internal class StakingModel @Inject constructor( val rewardBlockType = yieldBalance?.reward?.rewardBlockType val rewardPendingActionConstraints = yieldBalance?.reward?.rewardConstraints - if (rewardBlockType == RewardBlockType.RewardsRequirementsError) { + if (rewardBlockType is RewardBlockType.RewardsRequirementsError) { val minimumAmount = rewardPendingActionConstraints?.amountArg?.minimum // Temporary fix, until StakeKit adds minimum requirement amount to balance response val minimumAmountValue = if (minimumAmount == null && yieldBalance.integrationId != null) { 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 4251a689ff..75c557eb38 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 @@ -15,6 +15,7 @@ import com.tangem.domain.staking.model.stakekit.Yield import com.tangem.domain.staking.utils.getRewardStakingBalance import com.tangem.features.staking.impl.presentation.state.InnerYieldBalanceState import com.tangem.features.staking.impl.presentation.state.YieldReward +import com.tangem.lib.crypto.BlockchainUtils import com.tangem.lib.crypto.BlockchainUtils.isStakingRewardUnavailable import com.tangem.utils.Provider import com.tangem.utils.converter.Converter @@ -91,7 +92,13 @@ internal class YieldBalancesConverter( val isRewardsClaimable = rewards?.isNotEmpty() == true return when { - isStakingRewardUnavailable(blockchainId) -> RewardBlockType.RewardUnavailable + isStakingRewardUnavailable(blockchainId) -> { + if (BlockchainUtils.isSolana(blockchainId)) { + RewardBlockType.RewardUnavailable.SolanaRewardUnavailable + } else { + RewardBlockType.RewardUnavailable.DefaultRewardUnavailable + } + } isRewardsClaimable && isActionable -> RewardBlockType.Rewards isRewardsClaimable && !isActionable -> RewardBlockType.RewardsRequirementsError else -> RewardBlockType.NoRewards diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt index 4deacdff09..e17cdf9abd 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt @@ -68,7 +68,7 @@ internal object InitialStakingStatePreview { reward = YieldReward( rewardsFiat = "100 $", rewardsCrypto = "100 SOL", - rewardBlockType = RewardBlockType.RewardUnavailable, + rewardBlockType = RewardBlockType.RewardUnavailable.DefaultRewardUnavailable, rewardConstraints = null, ), isActionable = true, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt index 27ba05eb91..f44efd8bdc 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt @@ -233,10 +233,14 @@ private fun StakingRewardBlock( append(reward.rewardsCrypto.orMaskWithStars(isBalanceHidden)) } to TangemTheme.colors.text.primary1 } - RewardBlockType.RewardUnavailable -> { + RewardBlockType.RewardUnavailable.DefaultRewardUnavailable -> { resourceReference(R.string.staking_details_auto_claiming_rewards_daily_text) to TangemTheme.colors.text.tertiary } + RewardBlockType.RewardUnavailable.SolanaRewardUnavailable -> { + resourceReference(R.string.staking_soloana_details_auto_claiming_rewards_daily_text) to + TangemTheme.colors.text.tertiary + } RewardBlockType.NoRewards -> { resourceReference(R.string.staking_details_no_rewards_to_claim) to TangemTheme.colors.text.tertiary } diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt index f6fb474788..b16d554602 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsStakingInfoConverter.kt @@ -156,14 +156,16 @@ internal class TokenDetailsStakingInfoConverter( private fun getRewardText(status: CryptoCurrencyStatus, stakingRewardAmount: BigDecimal?): TextReference { val blockchainId = status.currency.network.rawId val rewardBlockType = when { - isStakingRewardUnavailable(blockchainId) -> RewardBlockType.RewardUnavailable + isStakingRewardUnavailable(blockchainId) -> RewardBlockType.RewardUnavailable.DefaultRewardUnavailable stakingRewardAmount.isNullOrZero() -> RewardBlockType.NoRewards else -> RewardBlockType.Rewards } return when (rewardBlockType) { RewardBlockType.NoRewards -> resourceReference(R.string.staking_details_no_rewards_to_claim) - RewardBlockType.RewardUnavailable -> TextReference.EMPTY + RewardBlockType.RewardUnavailable.DefaultRewardUnavailable, + RewardBlockType.RewardUnavailable.SolanaRewardUnavailable, + -> TextReference.EMPTY RewardBlockType.RewardsRequirementsError, RewardBlockType.Rewards, -> resourceReference(