diff --git a/detekt_baseline_report.txt b/detekt_baseline_report.txt
index 1f11fd1571..ce40f10ef0 100644
--- a/detekt_baseline_report.txt
+++ b/detekt_baseline_report.txt
@@ -1,7 +1,7 @@
==========================================
Detekt Baseline Updater & Issue Counter
==========================================
-Date: 2025-11-26 11:32:37
+Date: 2025-11-26 17:43:14
Step 1: Running detekt to check for new issues...
@@ -17,13 +17,13 @@ Counting issues in baseline files...
==========================================
Summary:
- Total Issues: 1685
- Modules with Issues: 73
- Average Issues per Module: 23
+ Total Issues: 1675
+ Modules with Issues: 68
+ Average Issues per Module: 24
Progress:
- Fixed: 117 out of 1802 (6%)
- Remaining: 1685
+ Fixed: 127 out of 1802 (7%)
+ Remaining: 1675
==========================================
All Modules with Issues (sorted by count)
@@ -99,9 +99,4 @@ domain/card 3
data/feedback 3
common/routing 3
features/yield-supply/api 2
-features/swap/domain/models 2
-features/stories/impl 2
-features/create-wallet-selection/impl 2
-domain/yield-supply 2
-domain/swap 2
────────────────────────────────────────────────────────────────
\ No newline at end of file
diff --git a/domain/swap/detekt-baseline-debug.xml b/domain/swap/detekt-baseline-debug.xml
deleted file mode 100644
index 950588cc6a..0000000000
--- a/domain/swap/detekt-baseline-debug.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- CouldBeSequence:GetSwapPairsUseCase.kt$GetSwapPairsUseCase$filter { pair -> filteringCurrency(pair).currency.id.rawCurrencyId == initialCurrency.id.rawCurrencyId }
- CouldBeSequence:GetSwapSupportedPairsUseCase.kt$GetSwapSupportedPairsUseCase$filter { pair -> filteringCurrency(pair).currency.id.rawCurrencyId == initialCurrency.id.rawCurrencyId }
-
-
diff --git a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt
index c45209f0ad..09bd863c48 100644
--- a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt
+++ b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapPairsUseCase.kt
@@ -63,14 +63,18 @@ class GetSwapPairsUseCase(
groupingCurrency: (SwapPairModel) -> CryptoCurrencyStatus,
cryptoCurrencyStatusList: List,
): SwapCurrenciesGroup {
- val availableCryptoCurrencies = filter { pair ->
- filteringCurrency(pair).currency.id.rawCurrencyId == initialCurrency.id.rawCurrencyId
- }.filter { pair ->
- // Search available to swap currency
- cryptoCurrencyStatusList.any { currencyStatus ->
- currencyStatus.currency.id == pair.to.currency.id
+ val availableCryptoCurrencies = asSequence()
+ .filter { pair ->
+ filteringCurrency(pair).currency.id.rawCurrencyId == initialCurrency.id.rawCurrencyId
}
- }.map { pair -> SwapCryptoCurrency(groupingCurrency(pair), pair.providers) }
+ .filter { pair ->
+ // Search available to swap currency
+ cryptoCurrencyStatusList.any { currencyStatus ->
+ currencyStatus.currency.id == pair.to.currency.id
+ }
+ }
+ .map { pair -> SwapCryptoCurrency(groupingCurrency(pair), pair.providers) }
+ .toList()
val unavailableCryptoCurrencies =
cryptoCurrencyStatusList - availableCryptoCurrencies.map { it.currencyStatus }.toSet()
diff --git a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt
index f2d6c9a4c4..7cd009b31b 100644
--- a/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt
+++ b/domain/swap/src/main/java/com/tangem/domain/swap/usecase/GetSwapSupportedPairsUseCase.kt
@@ -59,16 +59,20 @@ class GetSwapSupportedPairsUseCase(
groupingCurrency: (SwapPairModel) -> CryptoCurrencyStatus,
cryptoCurrencyList: List,
): SwapCurrenciesGroup {
- val availableCryptoCurrencies = filter { pair ->
- filteringCurrency(pair).currency.id.rawCurrencyId == initialCurrency.id.rawCurrencyId
- }.filter { pair ->
- // Search available to swap currency
- cryptoCurrencyList.any { currencyStatus ->
- // Allowed only on networks without tx extras (e.i. memo and destination tag)
- val isExtrasSupported = currencyStatus.network.transactionExtrasType.isTxExtrasSupported()
- currencyStatus.id == pair.to.currency.id && !isExtrasSupported
+ val availableCryptoCurrencies = asSequence()
+ .filter { pair ->
+ filteringCurrency(pair).currency.id.rawCurrencyId == initialCurrency.id.rawCurrencyId
}
- }.map { pair -> SwapCryptoCurrency(groupingCurrency(pair), pair.providers) }
+ .filter { pair ->
+ // Search available to swap currency
+ cryptoCurrencyList.any { currencyStatus ->
+ // Allowed only on networks without tx extras (e.i. memo and destination tag)
+ val isExtrasSupported = currencyStatus.network.transactionExtrasType.isTxExtrasSupported()
+ currencyStatus.id == pair.to.currency.id && !isExtrasSupported
+ }
+ }
+ .map { pair -> SwapCryptoCurrency(groupingCurrency(pair), pair.providers) }
+ .toList()
val unavailableCryptoCurrencies =
cryptoCurrencyList - availableCryptoCurrencies.map { it.currencyStatus.currency }.toSet()
diff --git a/domain/yield-supply/detekt-baseline-debug.xml b/domain/yield-supply/detekt-baseline-debug.xml
deleted file mode 100644
index 7bb0bea0e1..0000000000
--- a/domain/yield-supply/detekt-baseline-debug.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- NestedScopeFunctions:YieldSupplyGetRewardsBalanceUseCase.kt$YieldSupplyGetRewardsBalanceUseCase$let { rate -> amt.multiply(rate) }
- UnnecessaryNotNullCheck:YieldSupplyGetProtocolBalanceUseCase.kt$YieldSupplyGetProtocolBalanceUseCase$requireNotNull(cryptoCurrency as CryptoCurrency.Token)
-
-
diff --git a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetProtocolBalanceUseCase.kt b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetProtocolBalanceUseCase.kt
index 3bc5de3b71..ea8b134aa2 100644
--- a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetProtocolBalanceUseCase.kt
+++ b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetProtocolBalanceUseCase.kt
@@ -17,7 +17,7 @@ class YieldSupplyGetProtocolBalanceUseCase(
userWalletId: UserWalletId,
cryptoCurrency: CryptoCurrency,
): Either = Either.catch {
- requireNotNull(cryptoCurrency as CryptoCurrency.Token)
+ requireNotNull(cryptoCurrency as? CryptoCurrency.Token)
yieldSupplyTransactionRepository.getEffectiveProtocolBalance(
userWalletId = userWalletId,
diff --git a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetRewardsBalanceUseCase.kt b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetRewardsBalanceUseCase.kt
index fb055caf3f..775081fd02 100644
--- a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetRewardsBalanceUseCase.kt
+++ b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetRewardsBalanceUseCase.kt
@@ -1,8 +1,8 @@
package com.tangem.domain.yield.supply.usecase
-import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.core.ui.format.bigdecimal.anyDecimals
import com.tangem.core.ui.format.bigdecimal.fiat
+import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
@@ -23,10 +23,14 @@ class YieldSupplyGetRewardsBalanceUseCase(
) {
operator fun invoke(status: CryptoCurrencyStatus, appCurrency: AppCurrency): Flow = flow {
- val amount: BigDecimal? = status.value.amount?.let { amt ->
- status.value.fiatRate?.let { rate -> amt.multiply(rate) }
+ val cryptoAmount = status.value.amount
+ val fiatRate = status.value.fiatRate
+
+ val amount = if (cryptoAmount != null && fiatRate != null) {
+ cryptoAmount.multiply(fiatRate)
+ } else {
+ return@flow
}
- if (amount == null) return@flow
val tokenAddress = (status.currency as? CryptoCurrency.Token)?.contractAddress ?: return@flow
val apy = try {
diff --git a/features/create-wallet-selection/impl/detekt-baseline-debug.xml b/features/create-wallet-selection/impl/detekt-baseline-debug.xml
deleted file mode 100644
index 5cabd0af5c..0000000000
--- a/features/create-wallet-selection/impl/detekt-baseline-debug.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- BooleanPropertyNaming:CreateWalletSelectionUM.kt$CreateWalletSelectionUM$val showAlreadyHaveWallet: Boolean = false
- MultilineLambdaItParameter:CreateWalletSelectionContent.kt${ Feature( feature = it, modifier = Modifier .padding(top = 12.dp), ) }
-
-
diff --git a/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/CreateWalletSelectionModel.kt b/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/CreateWalletSelectionModel.kt
index f8eff897d9..bc586d7d95 100644
--- a/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/CreateWalletSelectionModel.kt
+++ b/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/CreateWalletSelectionModel.kt
@@ -75,7 +75,7 @@ internal class CreateWalletSelectionModel @Inject constructor(
),
),
onBuyClick = ::onBuyClick,
- showAlreadyHaveWallet = true,
+ shouldShowAlreadyHaveWallet = true,
),
)
@@ -88,7 +88,7 @@ internal class CreateWalletSelectionModel @Inject constructor(
private fun showAlreadyHaveWalletWithDelay() {
modelScope.launch {
delay(SHOW_ALREADY_HAVE_WALLET_DELAY)
- uiState.update { it.copy(showAlreadyHaveWallet = true) }
+ uiState.update { it.copy(shouldShowAlreadyHaveWallet = true) }
}
}
diff --git a/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/entity/CreateWalletSelectionUM.kt b/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/entity/CreateWalletSelectionUM.kt
index 1d76d78bac..98cbe9a90b 100644
--- a/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/entity/CreateWalletSelectionUM.kt
+++ b/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/entity/CreateWalletSelectionUM.kt
@@ -6,7 +6,7 @@ import kotlinx.collections.immutable.ImmutableList
internal data class CreateWalletSelectionUM(
val isScanInProgress: Boolean = false,
- val showAlreadyHaveWallet: Boolean = false,
+ val shouldShowAlreadyHaveWallet: Boolean = false,
val blocks: ImmutableList,
val onBackClick: () -> Unit,
val onBuyClick: () -> Unit,
diff --git a/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/ui/CreateWalletSelectionContent.kt b/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/ui/CreateWalletSelectionContent.kt
index 1a953f008d..7fde4ee3ac 100644
--- a/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/ui/CreateWalletSelectionContent.kt
+++ b/features/create-wallet-selection/impl/src/main/kotlin/com/tangem/features/createwalletselection/ui/CreateWalletSelectionContent.kt
@@ -6,7 +6,7 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
-import androidx.compose.runtime.*
+import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
@@ -104,7 +104,7 @@ internal fun CreateWalletSelectionContent(state: CreateWalletSelectionUM, modifi
)
}
}
- AnimatedVisibility(state.showAlreadyHaveWallet) {
+ AnimatedVisibility(state.shouldShowAlreadyHaveWallet) {
AlreadyHaveTangemWalletBlock(
onBuyClick = state.onBuyClick,
isScanInProgress = state.isScanInProgress,
@@ -161,9 +161,9 @@ private fun WalletBlock(
thickness = 0.5.dp,
color = TangemTheme.colors.stroke.primary,
)
- features.forEach {
+ features.forEach { feature ->
Feature(
- feature = it,
+ feature = feature,
modifier = Modifier
.padding(top = 12.dp),
)
diff --git a/features/stories/impl/detekt-baseline-debug.xml b/features/stories/impl/detekt-baseline-debug.xml
deleted file mode 100644
index 15299582b8..0000000000
--- a/features/stories/impl/detekt-baseline-debug.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- PropertyUsedBeforeDeclaration:StoriesModel.kt$StoriesModel$_state
- UseEmptyCounterpart:StoriesEvents.kt$StoriesEvents$mapOf()
-
-
diff --git a/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/analytics/StoriesEvents.kt b/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/analytics/StoriesEvents.kt
index 54644cf01f..962d4cd6c5 100644
--- a/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/analytics/StoriesEvents.kt
+++ b/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/analytics/StoriesEvents.kt
@@ -6,7 +6,7 @@ import com.tangem.core.analytics.models.AnalyticsParam.Key.WATCHED
sealed class StoriesEvents(
event: String,
- params: Map = mapOf(),
+ params: Map = emptyMap(),
) : AnalyticsEvent("Stories", event, params) {
data class SwapStories(
diff --git a/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/model/StoriesModel.kt b/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/model/StoriesModel.kt
index 1d3c2f06b6..700e81d255 100644
--- a/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/model/StoriesModel.kt
+++ b/features/stories/impl/src/main/java/com/tangem/feature/stories/impl/model/StoriesModel.kt
@@ -27,12 +27,11 @@ internal class StoriesModel @Inject constructor(
private val shouldShowStoriesUseCase: ShouldShowStoriesUseCase,
private val analyticsEventHandler: AnalyticsEventHandler,
) : Model() {
- val state: StateFlow get() = _state
+
+ val state: StateFlow
+ field = MutableStateFlow(value = SwapStoriesUM.Empty)
private val params = paramsContainer.require()
- private val _state: MutableStateFlow = MutableStateFlow(
- value = SwapStoriesUM.Empty,
- )
init {
initStories()
@@ -59,7 +58,7 @@ internal class StoriesModel @Inject constructor(
if (swapStory == null) {
openScreen(hideStories = false) // Fallback to target screen
} else {
- _state.update {
+ state.update {
SwapStoriesFactory.createStoriesState(
swapStory = swapStory,
onStoriesClose = { watchCount ->
diff --git a/features/swap/domain/models/detekt-baseline-debug.xml b/features/swap/domain/models/detekt-baseline-debug.xml
deleted file mode 100644
index 04b765b070..0000000000
--- a/features/swap/domain/models/detekt-baseline-debug.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- NamedArguments:TokensDataStateExpress.kt$TokensDataStateExpress.Companion$CurrenciesGroup(emptyList(), emptyList(), emptyList(), false)
- NullableBooleanCheck:ExchangeStatus.kt$ExchangeStatusModel$createdAt?.isBefore(DateTime.now().minusMinutes(FIFTEEN_MINUTES)) ?: false
-
-
diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt
index 69300406c2..d066e86fe7 100644
--- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt
+++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt
@@ -32,7 +32,7 @@ data class ExchangeStatusModel(
val averageDuration: Int? = null,
) {
val hasLongTime: Boolean
- get() = createdAt?.isBefore(DateTime.now().minusMinutes(FIFTEEN_MINUTES)) ?: false
+ get() = createdAt?.isBefore(DateTime.now().minusMinutes(FIFTEEN_MINUTES)) == true
private companion object {
const val FIFTEEN_MINUTES = 15
diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt
index f67c4a5801..f0587337d6 100644
--- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt
+++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ui/TokensDataStateExpress.kt
@@ -12,8 +12,18 @@ data class TokensDataStateExpress(
) {
companion object {
val EMPTY = TokensDataStateExpress(
- fromGroup = CurrenciesGroup(emptyList(), emptyList(), emptyList(), false),
- toGroup = CurrenciesGroup(emptyList(), emptyList(), emptyList(), false),
+ fromGroup = CurrenciesGroup(
+ available = emptyList(),
+ unavailable = emptyList(),
+ accountCurrencyList = emptyList(),
+ isAfterSearch = false,
+ ),
+ toGroup = CurrenciesGroup(
+ available = emptyList(),
+ unavailable = emptyList(),
+ accountCurrencyList = emptyList(),
+ isAfterSearch = false,
+ ),
allProviders = emptyList(),
)
}