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(