diff --git a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt
index 8b1bebbcd4..182696bedf 100644
--- a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt
+++ b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsState.kt
@@ -1,8 +1,10 @@
package com.tangem.common.ui.navigationButtons
import androidx.annotation.DrawableRes
+import androidx.compose.runtime.Immutable
import com.tangem.core.ui.extensions.TextReference
+@Immutable
sealed class NavigationButtonsState {
data object Empty : NavigationButtonsState()
diff --git a/data/staking/src/main/java/com/tangem/data/staking/di/StakingBalanceSupplierModule.kt b/data/staking/src/main/java/com/tangem/data/staking/di/StakingBalanceSupplierModule.kt
index 4ddab5988c..8937c4ec40 100644
--- a/data/staking/src/main/java/com/tangem/data/staking/di/StakingBalanceSupplierModule.kt
+++ b/data/staking/src/main/java/com/tangem/data/staking/di/StakingBalanceSupplierModule.kt
@@ -8,11 +8,11 @@ import com.tangem.data.staking.store.StakeKitBalancesStore
import com.tangem.datasource.api.ethpool.models.response.P2PEthPoolAccountResponse
import com.tangem.datasource.api.stakekit.models.response.model.YieldBalanceWrapperDTO
import com.tangem.datasource.local.datastore.RuntimeSharedStore
-import com.tangem.utils.coroutines.AppCoroutineScope
import com.tangem.domain.staking.multi.MultiStakingBalanceProducer
import com.tangem.domain.staking.multi.MultiStakingBalanceSupplier
import com.tangem.domain.staking.single.SingleStakingBalanceProducer
import com.tangem.domain.staking.single.SingleStakingBalanceSupplier
+import com.tangem.utils.coroutines.AppCoroutineScope
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
@@ -54,7 +54,7 @@ internal object StakingBalanceSupplierModule {
fun provideSingleStakingBalanceSupplier(
factory: SingleStakingBalanceProducer.Factory,
): SingleStakingBalanceSupplier {
- return object : SingleStakingBalanceSupplier(
+ return SingleStakingBalanceSupplier(
factory = factory,
keyCreator = { params ->
listOf(
@@ -65,15 +65,15 @@ internal object StakingBalanceSupplierModule {
)
.joinToString(separator = "_")
},
- ) {}
+ )
}
@Provides
@Singleton
fun provideMultiStakingBalanceSupplier(factory: MultiStakingBalanceProducer.Factory): MultiStakingBalanceSupplier {
- return object : MultiStakingBalanceSupplier(
+ return MultiStakingBalanceSupplier(
factory = factory,
keyCreator = { "multi_staking_balances_${it.userWalletId.stringValue}" },
- ) {}
+ )
}
}
\ No newline at end of file
diff --git a/domain/staking/detekt-baseline-debug.xml b/domain/staking/detekt-baseline-debug.xml
deleted file mode 100644
index f52428665c..0000000000
--- a/domain/staking/detekt-baseline-debug.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- MultilineLambdaItParameter:FetchStakingYieldBalanceUseCase.kt$FetchStakingYieldBalanceUseCase${ when (it) { is StakingIdFactory.Error.UnableToGetAddress -> raise(StakingError.DomainError("$it")) StakingIdFactory.Error.UnsupportedCurrency -> Unit.right() } return@either }
- MultilineLambdaItParameter:InvalidatePendingTransactionsUseCase.kt$InvalidatePendingTransactionsUseCase${ !it.isPending && action.amount < it.amount && it.type == BalanceType.STAKED && it.validatorAddress == action.validatorAddress }
- NamedArguments:GetConstructedStakingTransactionUseCase.kt$GetConstructedStakingTransactionUseCase$constructTransaction(networkId, fee, amount, transactionId)
- UnnecessaryAbstractClass:MultiStakingBalanceSupplier.kt$MultiStakingBalanceSupplier$MultiStakingBalanceSupplier
- UnnecessaryAbstractClass:SingleStakingBalanceSupplier.kt$SingleStakingBalanceSupplier$SingleStakingBalanceSupplier
- UseEmptyCounterpart:StakingAnalyticsEvent.kt$StakingAnalyticsEvent$mapOf()
- UseOrEmpty:InvalidatePendingTransactionsUseCase.kt$InvalidatePendingTransactionsUseCase$action.validatorAddress ?: action.validatorAddresses?.getOrNull(0) ?: ""
-
-
diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt b/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt
index a438d88cef..2e4836733e 100644
--- a/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt
+++ b/domain/staking/src/main/java/com/tangem/domain/staking/FetchStakingYieldBalanceUseCase.kt
@@ -23,9 +23,9 @@ class FetchStakingYieldBalanceUseCase(
currencyId = cryptoCurrency.id,
network = cryptoCurrency.network,
)
- .getOrElse {
- when (it) {
- is StakingIdFactory.Error.UnableToGetAddress -> raise(StakingError.DomainError("$it"))
+ .getOrElse { error ->
+ when (error) {
+ is StakingIdFactory.Error.UnableToGetAddress -> raise(StakingError.DomainError("$error"))
StakingIdFactory.Error.UnsupportedCurrency -> Unit.right()
}
diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/GetConstructedStakingTransactionUseCase.kt b/domain/staking/src/main/java/com/tangem/domain/staking/GetConstructedStakingTransactionUseCase.kt
index 3402b6bb03..7242d70f51 100644
--- a/domain/staking/src/main/java/com/tangem/domain/staking/GetConstructedStakingTransactionUseCase.kt
+++ b/domain/staking/src/main/java/com/tangem/domain/staking/GetConstructedStakingTransactionUseCase.kt
@@ -20,7 +20,12 @@ class GetConstructedStakingTransactionUseCase(
amount: Amount,
transactionId: String,
): Either> = Either.catch {
- stakeKitRepository.constructTransaction(networkId, fee, amount, transactionId)
+ stakeKitRepository.constructTransaction(
+ networkId = networkId,
+ fee = fee,
+ amount = amount,
+ transactionId = transactionId,
+ )
}.mapLeft {
stakingErrorResolver.resolve(it)
}
diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt b/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt
index f24cac1f74..a58ad4c346 100644
--- a/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt
+++ b/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt
@@ -100,7 +100,7 @@ class InvalidatePendingTransactionsUseCase(
type = BalanceType.STAKED,
amount = action.amount,
rawCurrencyId = null,
- validatorAddress = action.validatorAddress ?: action.validatorAddresses?.getOrNull(0) ?: "",
+ validatorAddress = action.validatorAddress ?: action.validatorAddresses?.getOrNull(0).orEmpty(),
date = null,
pendingActions = emptyList(),
pendingActionsConstraints = emptyList(),
@@ -149,10 +149,10 @@ class InvalidatePendingTransactionsUseCase(
}
private fun findPartialUnstake(balances: MutableList, action: StakingAction): Pair {
- val index = balances.indexOfFirst {
- !it.isPending && action.amount < it.amount &&
- it.type == BalanceType.STAKED &&
- it.validatorAddress == action.validatorAddress
+ val index = balances.indexOfFirst { balance ->
+ !balance.isPending && action.amount < balance.amount &&
+ balance.type == BalanceType.STAKED &&
+ balance.validatorAddress == action.validatorAddress
}
return index to action.amount
}
diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt b/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt
index cdf1a16bad..3b67c72c6f 100644
--- a/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt
+++ b/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt
@@ -8,7 +8,7 @@ import com.tangem.domain.models.staking.action.StakingActionType
sealed class StakingAnalyticsEvent(
event: String,
- params: Map = mapOf(),
+ params: Map = emptyMap(),
) : AnalyticsEvent(
category = "Staking",
event = event,
diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/multi/MultiStakingBalanceSupplier.kt b/domain/staking/src/main/java/com/tangem/domain/staking/multi/MultiStakingBalanceSupplier.kt
index 106e390f01..7932714729 100644
--- a/domain/staking/src/main/java/com/tangem/domain/staking/multi/MultiStakingBalanceSupplier.kt
+++ b/domain/staking/src/main/java/com/tangem/domain/staking/multi/MultiStakingBalanceSupplier.kt
@@ -12,7 +12,7 @@ import com.tangem.domain.models.staking.StakingBalance
*
[REDACTED_AUTHOR]
*/
-abstract class MultiStakingBalanceSupplier(
+open class MultiStakingBalanceSupplier(
override val factory: FlowProducer.Factory,
override val keyCreator: (MultiStakingBalanceProducer.Params) -> String,
) : FlowCachingSupplier>()
\ No newline at end of file
diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/single/SingleStakingBalanceSupplier.kt b/domain/staking/src/main/java/com/tangem/domain/staking/single/SingleStakingBalanceSupplier.kt
index 9474e0e172..a9050acd21 100644
--- a/domain/staking/src/main/java/com/tangem/domain/staking/single/SingleStakingBalanceSupplier.kt
+++ b/domain/staking/src/main/java/com/tangem/domain/staking/single/SingleStakingBalanceSupplier.kt
@@ -12,7 +12,7 @@ import com.tangem.domain.models.staking.StakingBalance
*
[REDACTED_AUTHOR]
*/
-abstract class SingleStakingBalanceSupplier(
+open class SingleStakingBalanceSupplier(
override val factory: FlowProducer.Factory,
override val keyCreator: (SingleStakingBalanceProducer.Params) -> String,
) : FlowCachingSupplier()
\ No newline at end of file
diff --git a/features/staking/impl/detekt-baseline-debug.xml b/features/staking/impl/detekt-baseline-debug.xml
deleted file mode 100644
index 8cd2dca55b..0000000000
--- a/features/staking/impl/detekt-baseline-debug.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
- BooleanPropertyNaming:AddStakingNotificationsTransformer.kt$AddStakingNotificationsTransformer$val showNotification = sendingAmount + feeAmount > balance
- BooleanPropertyNaming:AmountCurrencyChangeStateTransformer.kt$AmountCurrencyChangeStateTransformer$private val value: Boolean
- BooleanPropertyNaming:StakingUiState.kt$StakingStates.InitialInfoState.Data$val showBanner: Boolean
- BooleanPropertyNaming:StakingUiState.kt$StakingUiState$val showColdWalletInteractionIcon: Boolean
- CastNullableToNonNullableType:SetApprovalBottomSheetInProgressTransformer.kt$SetApprovalBottomSheetInProgressTransformer$as
- CastNullableToNonNullableType:SetApprovalBottomSheetTypeChangeTransformer.kt$SetApprovalBottomSheetTypeChangeTransformer$as
- MultilineLambdaItParameter:AddStakingNotificationsTransformer.kt$AddStakingNotificationsTransformer${ it is StakingNotification.Error || it is NotificationUM.Error || it is NotificationUM.Warning.NetworkFeeUnreachable || it is StakingNotification.Warning.TransactionInProgress || it is StakingNotification.Warning.InitializeTonAccount }
- MultilineLambdaItParameter:DefaultStakingDeepLinkHandler.kt$DefaultStakingDeepLinkHandler${ val isNetwork = it.network.backendId.equals(networkId, ignoreCase = true) val isCurrency = it.id.rawCurrencyId?.value?.equals(tokenId, ignoreCase = true) == true isNetwork && isCurrency }
- MultilineLambdaItParameter:StakingFeeBlock.kt${ if (it == FeeState.Error) { Text( text = DASH_SIGN, color = TangemTheme.colors.text.primary1, style = TangemTheme.typography.body1, ) } }
- MultilineLambdaItParameter:StakingFeeBlock.kt${ if (it == FeeState.Loading) { RectangleShimmer( radius = TangemTheme.dimens.radius3, modifier = Modifier.size( height = TangemTheme.dimens.size24, width = TangemTheme.dimens.size90, ), ) } }
- MultilineLambdaItParameter:StakingInfoNotificationsFactory.kt$StakingInfoNotificationsFactory${ it.type == BalanceType.PREPARING || it.type == BalanceType.STAKED || it.type == BalanceType.LOCKED }
- MultilineLambdaItParameter:StakingStateController.kt$StakingStateController${ it.copy( showColdWalletInteractionIcon = userWallet is UserWallet.Cold, ) }
- NullableToStringCall:DefaultStakingDeepLinkHandler.kt$DefaultStakingDeepLinkHandler$$networkId
- NullableToStringCall:DefaultStakingDeepLinkHandler.kt$DefaultStakingDeepLinkHandler$$tokenId
- PropertyUsedBeforeDeclaration:StakingFeeBlock.kt$FeeBlockPreviewProvider$contentState
- PropertyUsedBeforeDeclaration:StakingStateController.kt$StakingStateController$uiState
- UnnecessaryEventHandlerParameter:StakingInitialInfoContent.kt$onClick: (BalanceState) -> Unit
- UnnecessaryLet:StakingTosText.kt$let { onTextClick(PRIVACY_POLICY_URL) }
- UnnecessaryLet:StakingTosText.kt$let { onTextClick(TERMS_OF_USE_URL) }
-
-
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt
index c861dfb887..a12c16b790 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/deeplink/DefaultStakingDeepLinkHandler.kt
@@ -53,9 +53,9 @@ internal class DefaultStakingDeepLinkHandler @AssistedInject constructor(
params = MultiWalletCryptoCurrenciesProducer.Params(selectedUserWalletId),
)
.orEmpty()
- .firstOrNull {
- val isNetwork = it.network.backendId.equals(networkId, ignoreCase = true)
- val isCurrency = it.id.rawCurrencyId?.value?.equals(tokenId, ignoreCase = true) == true
+ .firstOrNull { currency ->
+ val isNetwork = currency.network.backendId.equals(networkId, ignoreCase = true)
+ val isCurrency = currency.id.rawCurrencyId?.value?.equals(tokenId, ignoreCase = true) == true
isNetwork && isCurrency
}
@@ -63,8 +63,8 @@ internal class DefaultStakingDeepLinkHandler @AssistedInject constructor(
TangemLogger.e(
"""
Could not get crypto currency for
- |- $NETWORK_ID_KEY: $networkId
- |- $TOKEN_ID_KEY: $tokenId
+ |- $NETWORK_ID_KEY: ${networkId.orEmpty()}
+ |- $TOKEN_ID_KEY: ${tokenId.orEmpty()}
""".trimIndent(),
)
return@launch
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingClickIntents.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingClickIntents.kt
index 66b3ccedc6..9ae89b73e3 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingClickIntents.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingClickIntents.kt
@@ -1,5 +1,6 @@
package com.tangem.features.staking.impl.presentation.model
+import androidx.compose.runtime.Immutable
import com.tangem.common.ui.amountScreen.AmountScreenClickIntents
import com.tangem.common.ui.bottomsheet.permission.state.ApproveType
import com.tangem.common.ui.notifications.NotificationUM
@@ -11,6 +12,7 @@ import java.math.BigDecimal
// TODO split this interface to click intents and other interaction events
@Suppress("TooManyFunctions")
+@Immutable
internal interface StakingClickIntents : AmountScreenClickIntents {
fun onBackClick()
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingStateController.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingStateController.kt
index 7a02bd36ef..32844ee371 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingStateController.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingStateController.kt
@@ -26,19 +26,19 @@ internal class StakingStateController @Inject constructor(
private val holdToConfirmButtonFeatureToggles: HoldToConfirmButtonFeatureToggles,
) {
- val value: StakingUiState get() = uiState.value
-
private val mutableUiState: MutableStateFlow = MutableStateFlow(value = getInitialState())
val uiState: StateFlow get() = mutableUiState.asStateFlow()
+ val value: StakingUiState get() = uiState.value
+
private val buttonsTransformer = SetButtonsStateTransformer(urlOpener)
private val titleTransformer = SetTitleTransformer
fun initializeWithUserWallet(userWallet: UserWallet) {
mutableUiState.update { state ->
state.copy(
- showColdWalletInteractionIcon = userWallet.isColdWallet,
+ isColdWalletInteractionIconVisible = userWallet.isColdWallet,
shouldShowHoldToConfirmButton = holdToConfirmButtonFeatureToggles.isHoldToConfirmEnabled &&
userWallet.isHotWallet,
)
@@ -89,7 +89,7 @@ internal class StakingStateController @Inject constructor(
actionType = StakingActionCommonType.Enter(skipEnterAmount = false),
buttonsState = NavigationButtonsState.Empty,
balanceState = null,
- showColdWalletInteractionIcon = true,
+ isColdWalletInteractionIconVisible = true,
shouldShowHoldToConfirmButton = false,
)
}
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt
index 8624ce9a72..f9a8b1cf23 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/StakingUiState.kt
@@ -39,22 +39,9 @@ internal data class StakingUiState(
val actionType: StakingActionCommonType,
val buttonsState: NavigationButtonsState,
val balanceState: BalanceState?,
- val showColdWalletInteractionIcon: Boolean,
+ val isColdWalletInteractionIconVisible: Boolean,
val shouldShowHoldToConfirmButton: Boolean,
-) {
-
- fun copyWrapped(
- initialInfoState: StakingStates.InitialInfoState = this.initialInfoState,
- amountState: AmountState = this.amountState,
- confirmationState: StakingStates.ConfirmationState = this.confirmationState,
- validatorState: StakingStates.ValidatorState = this.validatorState,
- ): StakingUiState = copy(
- initialInfoState = initialInfoState,
- amountState = amountState,
- confirmationState = confirmationState,
- validatorState = validatorState,
- )
-}
+)
internal sealed class StakingStates {
@@ -64,7 +51,7 @@ internal sealed class StakingStates {
sealed class InitialInfoState : StakingStates() {
data class Data(
override val isPrimaryButtonEnabled: Boolean,
- val showBanner: Boolean,
+ val isBannerVisible: Boolean,
val infoItems: ImmutableList,
val onInfoClick: (InfoType) -> Unit,
val yieldBalance: InnerYieldBalanceState,
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 c54d001d68..ba083ad159 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
@@ -18,7 +18,7 @@ import kotlinx.collections.immutable.persistentListOf
internal object InitialStakingStatePreview {
val defaultState = StakingStates.InitialInfoState.Data(
isPrimaryButtonEnabled = true,
- showBanner = true,
+ isBannerVisible = true,
infoItems = persistentListOf(
RoundedListWithDividersItemData(
id = R.string.staking_details_available,
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 725c5869e8..b67b009796 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
@@ -37,7 +37,7 @@ internal class SetButtonsStateTransformer(
return prevState.copy(buttonsState = buttonsState)
}
- private fun getPrimaryButton(prevState: StakingUiState): NavigationButton? {
+ private fun getPrimaryButton(prevState: StakingUiState): NavigationButton {
val confirmState = prevState.confirmationState as? StakingStates.ConfirmationState.Data
val innerConfirmState = confirmState?.innerState
@@ -52,7 +52,7 @@ internal class SetButtonsStateTransformer(
val isPrimaryButtonDisabled = prevState.isPrimaryButtonDisabled()
return NavigationButton(
textReference = prevState.getButtonText(),
- iconRes = R.drawable.ic_tangem_24.takeIf { prevState.showColdWalletInteractionIcon },
+ iconRes = R.drawable.ic_tangem_24.takeIf { prevState.isColdWalletInteractionIconVisible },
isDimmed = isPrimaryButtonDisabled,
isIconVisible = isIconVisible,
shouldShowProgress = isInProgress,
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt
index 1dbb49e096..c6c30d4bcb 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetInitialDataStateTransformer.kt
@@ -96,7 +96,7 @@ internal class SetInitialDataStateTransformer(
isPrimaryButtonEnabled = with(status) {
!amount.isNullOrZero() && sources.stakingBalanceSource.isActual() && sources.networkSource.isActual()
},
- showBanner = !isAnyTokenStaked && yieldBalance == InnerYieldBalanceState.Empty,
+ isBannerVisible = !isAnyTokenStaked && yieldBalance == InnerYieldBalanceState.Empty,
infoItems = getInfoItems(),
onInfoClick = clickIntents::onInfoClick,
yieldBalance = yieldBalance,
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/amount/AmountCurrencyChangeStateTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/amount/AmountCurrencyChangeStateTransformer.kt
index 9631543416..5c121f20e1 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/amount/AmountCurrencyChangeStateTransformer.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/amount/AmountCurrencyChangeStateTransformer.kt
@@ -7,11 +7,11 @@ import com.tangem.utils.transformer.Transformer
internal class AmountCurrencyChangeStateTransformer(
private val cryptoCurrencyStatus: CryptoCurrencyStatus,
- private val value: Boolean,
+ private val isFiatValue: Boolean,
) : Transformer {
override fun transform(prevState: StakingUiState): StakingUiState {
return prevState.copy(
- amountState = AmountCurrencyTransformer(cryptoCurrencyStatus, value).transform(prevState.amountState),
+ amountState = AmountCurrencyTransformer(cryptoCurrencyStatus, isFiatValue).transform(prevState.amountState),
)
}
}
\ No newline at end of file
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetInProgressTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetInProgressTransformer.kt
index 5221aba998..997a7e6743 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetInProgressTransformer.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetInProgressTransformer.kt
@@ -27,7 +27,7 @@ internal class SetApprovalBottomSheetInProgressTransformer(
),
onCancel = onDismiss,
)
- } as TangemBottomSheetConfigContent,
+ } as? TangemBottomSheetConfigContent ?: return prevState,
),
)
}
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetTypeChangeTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetTypeChangeTransformer.kt
index 0e58d0c7eb..099b77c51a 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetTypeChangeTransformer.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/approval/SetApprovalBottomSheetTypeChangeTransformer.kt
@@ -16,7 +16,7 @@ internal class SetApprovalBottomSheetTypeChangeTransformer(
bottomSheetConfig = prevState.bottomSheetConfig?.copy(
content = approvalBottomSheetConfig?.copy(
data = approvalBottomSheetConfig.data.copy(approveType = approveType),
- ) as TangemBottomSheetConfigContent,
+ ) as? TangemBottomSheetConfigContent ?: return prevState,
),
)
}
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/AddStakingNotificationsTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/AddStakingNotificationsTransformer.kt
index 7bb3f0630d..8849435172 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/AddStakingNotificationsTransformer.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/AddStakingNotificationsTransformer.kt
@@ -177,12 +177,12 @@ internal class AddStakingNotificationsTransformer(
}
private fun isPrimaryButtonEnabled(notifications: ImmutableList, isActualSources: Boolean) =
- notifications.none {
- it is StakingNotification.Error ||
- it is NotificationUM.Error ||
- it is NotificationUM.Warning.NetworkFeeUnreachable ||
- it is StakingNotification.Warning.TransactionInProgress ||
- it is StakingNotification.Warning.InitializeTonAccount
+ notifications.none { notification ->
+ notification is StakingNotification.Error ||
+ notification is NotificationUM.Error ||
+ notification is NotificationUM.Warning.NetworkFeeUnreachable ||
+ notification is StakingNotification.Warning.TransactionInProgress ||
+ notification is StakingNotification.Warning.InitializeTonAccount
} && isActualSources
private fun MutableList.addStakingErrorNotifications(
@@ -302,8 +302,8 @@ internal class AddStakingNotificationsTransformer(
val balance = cryptoCurrencyStatus.value.amount.orZero()
if (!isSubtractionAvailable) return
- val showNotification = sendingAmount + feeAmount > balance
- if (showNotification) {
+ val isExceedsBalance = sendingAmount + feeAmount > balance
+ if (isExceedsBalance) {
onNotEnoughFeeNotificationShow()
val notification = if (actionType is StakingActionCommonType.Enter) {
NotificationUM.Error.TotalExceedsBalance
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/StakingInfoNotificationsFactory.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/StakingInfoNotificationsFactory.kt
index 8628070ef4..02a41fe4a3 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/StakingInfoNotificationsFactory.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/notifications/StakingInfoNotificationsFactory.kt
@@ -150,10 +150,10 @@ internal class StakingInfoNotificationsFactory(
val cryptoCurrencyStatus = cryptoCurrencyStatusProvider()
val isTron = isTron(cryptoCurrencyStatus.currency.network.rawId)
val hasStakedBalance = (cryptoCurrencyStatus.value.stakingBalance as? StakingBalance.Data.StakeKit)?.balance
- ?.items?.any {
- it.type == BalanceType.PREPARING ||
- it.type == BalanceType.STAKED ||
- it.type == BalanceType.LOCKED
+ ?.items?.any { item ->
+ item.type == BalanceType.PREPARING ||
+ item.type == BalanceType.STAKED ||
+ item.type == BalanceType.LOCKED
} == true
if (isTron && hasStakedBalance) {
add(
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 eb514ea0ba..66cb40cb89 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
@@ -87,7 +87,7 @@ internal fun StakingInitialInfoContent(
.background(TangemTheme.colors.background.secondary)
.padding(horizontal = TangemTheme.dimens.spacing16),
) {
- if (state.showBanner) {
+ if (state.isBannerVisible) {
item(key = BANNER_BLOCK_KEY) {
Column(
modifier = Modifier.animateItem(),
@@ -175,7 +175,7 @@ private fun LazyListScope.activeStakingBlock(
ActiveStakingBlock(
balance = balance,
isBalanceHidden = isBalanceHidden,
- onClick = clickIntents::onActiveStake,
+ onClick = { clickIntents.onActiveStake(balance) },
onAnalytic = clickIntents::onActiveStakeAnalytic,
modifier = Modifier
.animateItem()
@@ -288,7 +288,7 @@ private fun StakingRewardBlock(
private fun ActiveStakingBlock(
balance: BalanceState,
isBalanceHidden: Boolean,
- onClick: (BalanceState) -> Unit,
+ onClick: () -> Unit,
onAnalytic: () -> Unit,
modifier: Modifier = Modifier,
) {
@@ -304,7 +304,7 @@ private fun ActiveStakingBlock(
enabled = balance.isClickable,
onClick = {
onAnalytic()
- onClick(balance)
+ onClick()
},
)
.padding(TangemTheme.dimens.spacing12),
@@ -351,20 +351,18 @@ private fun ActiveStakingBlock(
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.primary1,
)
- if (balance.formattedCryptoAmount != null) {
- Text(
- text = balance.formattedCryptoAmount.orMaskWithStars(isBalanceHidden).resolveReference(),
- style = TangemTheme.typography.caption2,
- color = TangemTheme.colors.text.tertiary,
- modifier = Modifier.padding(top = TangemTheme.dimens.spacing2),
- )
- }
+ Text(
+ text = balance.formattedCryptoAmount.orMaskWithStars(isBalanceHidden).resolveReference(),
+ style = TangemTheme.typography.caption2,
+ color = TangemTheme.colors.text.tertiary,
+ modifier = Modifier.padding(top = TangemTheme.dimens.spacing2),
+ )
}
}
}
@Composable
-private fun RowScope.StakingBalanceIcon(balance: BalanceState, icon: Int?, iconTint: Color) {
+private fun StakingBalanceIcon(balance: BalanceState, icon: Int?, iconTint: Color) {
if (balance.hasImage() || icon != null) {
StakingTargetIcon(
image = if (balance.hasImage()) balance.target?.image.toImageReference() else null,
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/StakingFeeBlock.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/StakingFeeBlock.kt
index 60ba58a048..8ad250c6d1 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/StakingFeeBlock.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/block/StakingFeeBlock.kt
@@ -109,8 +109,8 @@ private fun BoxScope.FeeLoading(feeState: FeeState) {
targetState = feeState,
label = "Fee Loading State Change",
modifier = Modifier.align(Alignment.CenterEnd),
- ) {
- if (it == FeeState.Loading) {
+ ) { state ->
+ if (state == FeeState.Loading) {
RectangleShimmer(
radius = TangemTheme.dimens.radius3,
modifier = Modifier.size(
@@ -128,8 +128,8 @@ private fun BoxScope.FeeError(feeState: FeeState) {
targetState = feeState,
label = "Fee Error State Change",
modifier = Modifier.align(Alignment.CenterEnd),
- ) {
- if (it == FeeState.Error) {
+ ) { state ->
+ if (state == FeeState.Error) {
Text(
text = DASH_SIGN,
color = TangemTheme.colors.text.primary1,
@@ -151,13 +151,6 @@ private fun FeeBlockPreview(@PreviewParameter(FeeBlockPreviewProvider::class) va
private class FeeBlockPreviewProvider : PreviewParameterProvider {
- override val values: Sequence
- get() = sequenceOf(
- contentState,
- FeeState.Loading,
- FeeState.Error,
- )
-
private val fee = Fee.Common(
amount = Amount(
currencySymbol = "MATIC",
@@ -174,6 +167,13 @@ private class FeeBlockPreviewProvider : PreviewParameterProvider {
isFeeApproximate = false,
isFeeConvertibleToFiat = true,
)
+
+ override val values: Sequence
+ get() = sequenceOf(
+ contentState,
+ FeeState.Loading,
+ FeeState.Error,
+ )
}
// endregion
\ No newline at end of file