From 87f642a653501b94fef393a25da268934ae87aa5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 1 Dec 2025 17:59:49 +0300 Subject: [PATCH] Updated on 2026-08-14 --- core/config-toggles/detekt-baseline-debug.xml | 2 - .../impl/DevExcludedBlockchainsManager.kt | 2 + .../feature/impl/DevFeatureTogglesManager.kt | 2 + .../fetcher/DefaultWalletAccountsFetcher.kt | 21 ++++-- .../DefaultMainAccountTokensMigration.kt | 2 +- .../data/common/network/NetworkFactory.kt | 4 +- data/feedback/detekt-baseline-debug.xml | 2 - .../feedback/DefaultFeedbackRepository.kt | 6 +- .../converters/BlockchainInfoConverter.kt | 4 +- data/promo/detekt-baseline-debug.xml | 2 - detekt_baseline_report.txt | 66 +++++++++---------- domain/card/detekt-baseline-debug.xml | 9 --- .../domain/card/TangemCardTypesResolver.kt | 23 ++++--- .../domain/card/common/TapWorkarounds.kt | 1 + domain/demo/models/detekt-baseline-debug.xml | 9 --- .../tangem/domain/demo/models/DemoConfig.kt | 5 +- .../swap/domain/detekt-baseline-debug.xml | 2 - features/swap/impl/detekt-baseline-debug.xml | 2 - .../DefaultTokenDetailsComponent.kt | 2 +- .../wallet/impl/detekt-baseline-debug.xml | 3 - .../api/detekt-baseline-debug.xml | 8 --- .../yield/supply/api/YieldSupplyComponent.kt | 2 +- .../api/analytics/YieldSupplyAnalytics.kt | 2 +- .../impl/main/model/YieldSupplyModel.kt | 9 +-- 24 files changed, 81 insertions(+), 109 deletions(-) delete mode 100644 domain/card/detekt-baseline-debug.xml delete mode 100644 domain/demo/models/detekt-baseline-debug.xml delete mode 100644 features/yield-supply/api/detekt-baseline-debug.xml diff --git a/core/config-toggles/detekt-baseline-debug.xml b/core/config-toggles/detekt-baseline-debug.xml index b0e03ef827..274a75d8d4 100644 --- a/core/config-toggles/detekt-baseline-debug.xml +++ b/core/config-toggles/detekt-baseline-debug.xml @@ -2,8 +2,6 @@ - DoubleMutabilityForCollection:DevExcludedBlockchainsManager.kt$DevExcludedBlockchainsManager$private var blockchainTogglesMap: MutableMap<String, Boolean> by Delegates.notNull() - DoubleMutabilityForCollection:DevFeatureTogglesManager.kt$DevFeatureTogglesManager$private var featureTogglesMap: MutableMap<String, Boolean> by Delegates.notNull() Indentation:ExcludedBlockchainToggles.kt$ExcludedBlockchainToggles$ Indentation:FeatureToggles.kt$FeatureToggles$ diff --git a/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DevExcludedBlockchainsManager.kt b/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DevExcludedBlockchainsManager.kt index 6f6645c865..98311b8d7a 100644 --- a/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DevExcludedBlockchainsManager.kt +++ b/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/blockchain/impl/DevExcludedBlockchainsManager.kt @@ -21,6 +21,8 @@ internal class DevExcludedBlockchainsManager( ) : MutableExcludedBlockchainsManager { private val fileBlockchainToggles: Map = getFileBlockchainToggles() + + @Suppress("DoubleMutabilityForCollection") private var blockchainTogglesMap: MutableMap by Delegates.notNull() override val excludedBlockchainsIds: Set diff --git a/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/feature/impl/DevFeatureTogglesManager.kt b/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/feature/impl/DevFeatureTogglesManager.kt index 79d78151b7..d59bac9d71 100644 --- a/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/feature/impl/DevFeatureTogglesManager.kt +++ b/core/config-toggles/src/main/kotlin/com/tangem/core/configtoggle/feature/impl/DevFeatureTogglesManager.kt @@ -22,6 +22,8 @@ internal class DevFeatureTogglesManager( ) : MutableFeatureTogglesManager { private val fileFeatureTogglesMap: Map = getFileFeatureToggles() + + @Suppress("DoubleMutabilityForCollection") private var featureTogglesMap: MutableMap by Delegates.notNull() init { diff --git a/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt b/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt index 99d4ac7ff6..3bc99dc784 100644 --- a/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt +++ b/data/account/src/main/kotlin/com/tangem/data/account/fetcher/DefaultWalletAccountsFetcher.kt @@ -115,7 +115,7 @@ internal class DefaultWalletAccountsFetcher @Inject constructor( saveETag(userWalletId, apiResponse) - apiResponse.bind() + apiResponse.bind().enrichByAccountId() }, onError = { error -> if (error.isNetworkError(code = Code.PRECONDITION_FAILED)) { @@ -142,10 +142,11 @@ internal class DefaultWalletAccountsFetcher @Inject constructor( saveETag(userWalletId, apiResponse) - val responseBody = apiResponse.bind() - store(userWalletId = userWalletId, response = responseBody) + val response = apiResponse.bind().enrichByAccountId() - FetchResult(responseBody) + store(userWalletId = userWalletId, response = response) + + FetchResult(response) }, onError = { throwable -> // pushWalletAccounts and storeWalletAccounts help to avoid cyclic dependency @@ -215,6 +216,18 @@ internal class DefaultWalletAccountsFetcher @Inject constructor( } } + private fun GetWalletAccountsResponse.enrichByAccountId(): GetWalletAccountsResponse { + return copy( + accounts = accounts.map { accountDTO -> + accountDTO.copy( + tokens = accountDTO.tokens?.map { token -> + token.copy(accountId = accountDTO.id) + }, + ) + }, + ) + } + private fun getAccountsResponseStore(userWalletId: UserWalletId): AccountsResponseStore { return accountsResponseStoreFactory.create(userWalletId = userWalletId) } diff --git a/data/account/src/main/kotlin/com/tangem/data/account/tokens/DefaultMainAccountTokensMigration.kt b/data/account/src/main/kotlin/com/tangem/data/account/tokens/DefaultMainAccountTokensMigration.kt index d1a0449ebc..d4e9d0325f 100644 --- a/data/account/src/main/kotlin/com/tangem/data/account/tokens/DefaultMainAccountTokensMigration.kt +++ b/data/account/src/main/kotlin/com/tangem/data/account/tokens/DefaultMainAccountTokensMigration.kt @@ -61,7 +61,7 @@ internal class DefaultMainAccountTokensMigration( val unassignedTokens = mainAccount.findUnassignedTokens(derivationIndex) - if (unassignedTokens == null) { + if (unassignedTokens.isNullOrEmpty()) { Timber.i("No unassigned tokens found for migration") return@either } diff --git a/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt b/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt index 4ffb1c9210..265418339e 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt @@ -74,6 +74,7 @@ class NetworkFactory @Inject constructor( blockchain = blockchain, excludedBlockchains = excludedBlockchains, ), + shouldCheckChia = false, ) } @@ -128,9 +129,10 @@ class NetworkFactory @Inject constructor( derivationPath: Network.DerivationPath, canHandleTokens: Boolean, accountIndex: DerivationIndex? = null, + shouldCheckChia: Boolean = true, ): Network? { if (!blockchain.isBlockchainSupported()) return null - if (blockchain == Blockchain.Chia && accountIndex != DerivationIndex.Main) return null + if (shouldCheckChia && blockchain == Blockchain.Chia && accountIndex != DerivationIndex.Main) return null return runCatching { Network( diff --git a/data/feedback/detekt-baseline-debug.xml b/data/feedback/detekt-baseline-debug.xml index 596e50e191..d10388bff4 100644 --- a/data/feedback/detekt-baseline-debug.xml +++ b/data/feedback/detekt-baseline-debug.xml @@ -3,7 +3,5 @@ BooleanPropertyNaming:DefaultFeedbackRepository.kt$DefaultFeedbackRepository$private val useNewUserWalletsRepository: Boolean - MultilineLambdaItParameter:DefaultFeedbackRepository.kt$DefaultFeedbackRepository${ it.toMutableMap().apply { put(userWallet.walletId, error) } } - UseOrEmpty:BlockchainInfoConverter.kt$BlockchainInfoConverter$value.wallet.publicKey.derivationPath?.rawPath ?: "" diff --git a/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt b/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt index 10bb463509..dcadace780 100644 --- a/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt +++ b/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt @@ -97,9 +97,9 @@ internal class DefaultFeedbackRepository( override fun saveBlockchainErrorInfo(error: BlockchainErrorInfo) { val userWallet = getSelectedWalletUseCase.sync().getOrNull() ?: error("UserWallet is not selected") - blockchainsErrors.update { - it.toMutableMap().apply { - put(userWallet.walletId, error) + blockchainsErrors.update { map -> + map.toMutableMap().apply { + this[userWallet.walletId] = error } } } diff --git a/data/feedback/src/main/java/com/tangem/data/feedback/converters/BlockchainInfoConverter.kt b/data/feedback/src/main/java/com/tangem/data/feedback/converters/BlockchainInfoConverter.kt index 686cec71dd..8c430ced24 100644 --- a/data/feedback/src/main/java/com/tangem/data/feedback/converters/BlockchainInfoConverter.kt +++ b/data/feedback/src/main/java/com/tangem/data/feedback/converters/BlockchainInfoConverter.kt @@ -16,9 +16,11 @@ import com.tangem.domain.feedback.models.BlockchainInfo.Addresses as BlockchainA internal object BlockchainInfoConverter : Converter { override fun convert(value: WalletManager): BlockchainInfo { + val derivationPath = value.wallet.publicKey.derivationPath + return BlockchainInfo( blockchain = value.wallet.blockchain.fullName, - derivationPath = value.wallet.publicKey.derivationPath?.rawPath ?: "", + derivationPath = derivationPath?.rawPath.orEmpty(), outputsCount = value.outputsCount?.toString(), host = value.currentHost, addresses = value.wallet.mapAddresses(Address::value), diff --git a/data/promo/detekt-baseline-debug.xml b/data/promo/detekt-baseline-debug.xml index 0f6f378450..7ac3d42cb4 100644 --- a/data/promo/detekt-baseline-debug.xml +++ b/data/promo/detekt-baseline-debug.xml @@ -2,8 +2,6 @@ - NullableBooleanCheck:DefaultPromoRepository.kt$DefaultPromoRepository$getSepaPromoBanner()?.isActive ?: false - NullableBooleanCheck:DefaultPromoRepository.kt$DefaultPromoRepository$getVisaPromoBanner()?.isActive ?: false SuspendFunSwallowedCancellation:DefaultPromoRepository.kt$DefaultPromoRepository$runCatching SuspendFunWithFlowReturnType:DefaultPromoRepository.kt$DefaultPromoRepository$suspend diff --git a/detekt_baseline_report.txt b/detekt_baseline_report.txt index 3a9f9a9044..6e74d6e47d 100644 --- a/detekt_baseline_report.txt +++ b/detekt_baseline_report.txt @@ -1,7 +1,7 @@ ========================================== Detekt Baseline Updater & Issue Counter ========================================== -Date: 2025-11-27 14:13:20 +Date: 2025-12-01 16:30:16 Step 1: Running detekt to check for new issues... @@ -17,13 +17,13 @@ Counting issues in baseline files... ========================================== Summary: - Total Issues: 1593 - Modules with Issues: 68 + Total Issues: 1453 + Modules with Issues: 62 Average Issues per Module: 23 Progress: - Fixed: 209 out of 1802 (11%) - Remaining: 1593 + Fixed: 349 out of 1802 (19%) + Remaining: 1453 ========================================== All Modules with Issues (sorted by count) @@ -31,28 +31,28 @@ All Modules with Issues (sorted by count) Module Issues ──────────────────────────────────────────────────────────────── -features/wallet/impl 169 -features/markets/impl 155 -features/onboarding-v2/impl 131 -features/send-v2/impl 80 -features/swap/impl 73 -features/hot-wallet/impl 57 -features/staking/impl 56 +features/wallet/impl 148 +features/markets/impl 148 +features/onboarding-v2/impl 130 +features/swap/impl 67 +features/send-v2/impl 57 data/wallet-connect 55 -features/swap-v2/impl 53 -features/walletconnect/impl 51 -features/tokendetails/impl 49 +features/hot-wallet/impl 53 +features/tokendetails/impl 48 +features/staking/impl 48 +features/walletconnect/impl 47 features/manage-tokens/impl 45 -domain/wallets 39 -features/nft/impl 36 +features/swap-v2/impl 40 +domain/wallets 37 +features/nft/impl 34 features/tester/impl 31 domain/tokens 28 -features/swap/domain 27 core/ui 27 -features/yield-supply/impl 26 common/ui 26 -data/visa 23 -features/tangempay/details/impl 22 +features/swap/domain 25 +data/visa 22 +features/yield-supply/impl 21 +features/tangempay/details/impl 21 data/nft 20 data/wallets 18 features/swap/data 15 @@ -63,40 +63,34 @@ domain/account/status 11 data/onramp 11 data/manage-tokens 11 core/datasource 11 -features/referral/impl 10 -features/details/impl 10 data/markets 10 +features/details/impl 9 domain/staking 9 data/yield-supply 9 data/networks 9 -features/welcome/impl 8 -features/home/impl 8 +features/referral/impl 8 domain/transaction 8 libs/tangem-sdk-api 7 -features/onramp/impl 7 data/txhistory 7 data/tokens 7 data/account 7 -features/send-v2/api 6 +features/welcome/impl 6 domain/markets 6 data/wallet-manager 6 libs/visa 5 +features/send-v2/api 5 +features/home/impl 5 domain/legacy 5 data/transaction 5 features/referral/domain 4 features/biometry/impl 4 -features/account/impl 4 -features/account/api 4 -data/promo 4 -core/config-toggles 4 -features/wallet-settings/impl 3 features/txhistory/impl 3 features/tangempay/onboarding/impl 3 features/create-wallet-start/impl 3 domain/manage-tokens 3 -domain/demo/models 3 -domain/card 3 -data/feedback 3 common/routing 3 -features/yield-supply/api 2 +features/account/api 2 +data/promo 2 +core/config-toggles 2 +data/feedback 1 ──────────────────────────────────────────────────────────────── \ No newline at end of file diff --git a/domain/card/detekt-baseline-debug.xml b/domain/card/detekt-baseline-debug.xml deleted file mode 100644 index 277a01c1fe..0000000000 --- a/domain/card/detekt-baseline-debug.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - NamedArguments:TangemCardTypesResolver.kt$TangemCardTypesResolver$Token( cardToken.name, cardToken.symbol, cardToken.contractAddress, cardToken.decimals, ) - PropertyUsedBeforeDeclaration:TapWorkarounds.kt$TapWorkarounds$excludedBatches - PropertyUsedBeforeDeclaration:TapWorkarounds.kt$TapWorkarounds$excludedIssuers - - diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/TangemCardTypesResolver.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/TangemCardTypesResolver.kt index db4b0973cb..3e6943f724 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/TangemCardTypesResolver.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/TangemCardTypesResolver.kt @@ -36,15 +36,15 @@ internal class TangemCardTypesResolver( override fun isTangemWallet(): Boolean { return card.settings.isBackupAllowed && card.settings.isHDWalletAllowed && - card.firmwareVersion >= FirmwareVersion.Companion.MultiWalletAvailable + card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable } override fun isShibaWallet(): Boolean { - return card.firmwareVersion.compareTo(FirmwareVersion.Companion.KeysImportAvailable) == 0 + return card.firmwareVersion.compareTo(FirmwareVersion.KeysImportAvailable) == 0 } override fun isWhiteWallet(): Boolean { - return walletData == null && card.firmwareVersion <= FirmwareVersion.Companion.HDWalletAvailable + return walletData == null && card.firmwareVersion <= FirmwareVersion.HDWalletAvailable } override fun isWallet2(): Boolean = card.isWallet2 @@ -73,7 +73,7 @@ internal class TangemCardTypesResolver( (multiWalletAvailable() || card.wallets.firstOrNull()?.curve == EllipticCurve.Secp256k1) } - private fun multiWalletAvailable() = card.firmwareVersion >= FirmwareVersion.Companion.MultiWalletAvailable + private fun multiWalletAvailable() = card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable override fun getBlockchain(): Blockchain { return when (productType) { @@ -93,12 +93,15 @@ internal class TangemCardTypesResolver( override fun getPrimaryToken(): Token? { val cardToken = walletData?.token ?: return null - return Token( - cardToken.name, - cardToken.symbol, - cardToken.contractAddress, - cardToken.decimals, - ) + + return with(cardToken) { + Token( + name = name, + symbol = symbol, + contractAddress = contractAddress, + decimals = decimals, + ) + } } override fun isReleaseFirmwareType(): Boolean = card.firmwareVersion.type == FirmwareVersion.FirmwareType.Release diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/common/TapWorkarounds.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/common/TapWorkarounds.kt index 550ddd0749..f012a0bfaf 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/common/TapWorkarounds.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/common/TapWorkarounds.kt @@ -38,6 +38,7 @@ object TapWorkarounds { val CardDTO.hasOldStyleDerivation: Boolean get() = batchId == "AC01" || batchId == "AC02" || batchId == "CB95" + @Suppress("PropertyUsedBeforeDeclaration") val CardDTO.isExcluded: Boolean get() { val isBatchExcluded = excludedBatches.contains(batchId) diff --git a/domain/demo/models/detekt-baseline-debug.xml b/domain/demo/models/detekt-baseline-debug.xml deleted file mode 100644 index 638c5c1870..0000000000 --- a/domain/demo/models/detekt-baseline-debug.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - PropertyUsedBeforeDeclaration:DemoConfig.kt$DemoConfig$debugTestDemoCardIds - PropertyUsedBeforeDeclaration:DemoConfig.kt$DemoConfig$releaseDemoCardIds - PropertyUsedBeforeDeclaration:DemoConfig.kt$DemoConfig$testDemoCardIds - - diff --git a/domain/demo/models/src/main/kotlin/com/tangem/domain/demo/models/DemoConfig.kt b/domain/demo/models/src/main/kotlin/com/tangem/domain/demo/models/DemoConfig.kt index 0ec194c730..5ed3b8e893 100644 --- a/domain/demo/models/src/main/kotlin/com/tangem/domain/demo/models/DemoConfig.kt +++ b/domain/demo/models/src/main/kotlin/com/tangem/domain/demo/models/DemoConfig.kt @@ -4,7 +4,7 @@ import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.Blockchain import java.math.BigDecimal -@Suppress("LargeClass") +@Suppress("LargeClass", "ClassOrdering", "PropertyUsedBeforeDeclaration") object DemoConfig { /** @@ -65,7 +65,6 @@ object DemoConfig { return (releaseDemoCardIds + testDemoCardIds).distinct() } - @Suppress("ClassOrdering") private val releaseDemoCardIds = mutableListOf( // === Not from the Google Sheet table === "AC01000000041225", @@ -449,7 +448,6 @@ object DemoConfig { "AF10100000000084", ) - @Suppress("ClassOrdering") private val testDemoCardIds = listOf( "FB20000000000186", // Note ETH "FB10000000000196", // Note BTC @@ -457,6 +455,5 @@ object DemoConfig { "FB04000000000152", // Wallet 2 ) - @Suppress("ClassOrdering") private val debugTestDemoCardIds = emptyList() } \ No newline at end of file diff --git a/features/swap/domain/detekt-baseline-debug.xml b/features/swap/domain/detekt-baseline-debug.xml index 02326b7307..e1d3527ea0 100644 --- a/features/swap/domain/detekt-baseline-debug.xml +++ b/features/swap/domain/detekt-baseline-debug.xml @@ -25,8 +25,6 @@ NamedArguments:SwapInteractorImpl.kt$SwapInteractorImpl$tryGetFromCacheV2(userWallet, initialCryptoCurrency, state, isReverseFromTo) NoNameShadowing:SwapInteractorImpl.kt$SwapInteractorImpl$account NoNameShadowing:SwapInteractorImpl.kt$SwapInteractorImpl${ it.isAvailable } - NonBooleanPropertyPrefixedWithIs:SwapInteractorImpl.kt$SwapInteractorImpl$private val isDemoCardUseCase: IsDemoCardUseCase - NullableToStringCall:SwapInteractorImpl.kt$SwapInteractorImpl$$swapData NullableToStringCall:SwapInteractorImpl.kt$SwapInteractorImpl$${e.message} SuspendFunSwallowedCancellation:SwapInteractorImpl.kt$SwapInteractorImpl$runCatching diff --git a/features/swap/impl/detekt-baseline-debug.xml b/features/swap/impl/detekt-baseline-debug.xml index e7ed3b9972..44b4ff0d46 100644 --- a/features/swap/impl/detekt-baseline-debug.xml +++ b/features/swap/impl/detekt-baseline-debug.xml @@ -48,8 +48,6 @@ MultilineLambdaItParameter:SwapModel.kt$SwapModel${ uiState = stateBuilder.dismissBottomSheet(uiState) dataState = dataState.copy(selectedFee = it) modelScope.launch(dispatchers.io) { startLoadingQuotesFromLastState(false) } } MultilineLambdaItParameter:SwapModel.kt$SwapModel${ val balance = swapInteractor.getTokenBalance(it) onAmountChanged(balance.formatToUIRepresentation()) } MultilineLambdaItParameter:SwapModel.kt$SwapModel${ val provider = findAndSelectProvider(it) val swapState = dataState.lastLoadedSwapStates[provider] val fromToken = dataState.fromCryptoCurrency if (provider != null && swapState != null && fromToken != null) { analyticsEventHandler.send(SwapEvents.ProviderChosen(provider)) uiState = stateBuilder.dismissBottomSheet(uiState) setupLoadedState( provider = provider, state = swapState, fromToken = fromToken, ) } } - MultilineLambdaItParameter:SwapModel.kt$SwapModel${ when (it) { is SwapTransactionState.TxSent -> { sendApproveSuccessEvent(fromToken, feeForPermission.feeType, approveType) updateWalletBalance() uiState = stateBuilder.loadingPermissionState(uiState) uiState = stateBuilder.dismissBottomSheet(uiState) startLoadingQuotesFromLastState(isSilent = true) } is SwapTransactionState.Error -> { uiState = stateBuilder.createErrorTransactionAlert( uiState = uiState, error = it, onDismiss = { uiState = stateBuilder.clearAlert(uiState) }, onSupportClick = ::onFailedTxEmailClick, isReverseSwapPossible = isReverseSwapPossible(), ) } SwapTransactionState.DemoMode -> { uiState = stateBuilder.createDemoModeAlert( uiState = uiState, onDismiss = { uiState = stateBuilder.clearAlert(uiState) }, isReverseSwapPossible = isReverseSwapPossible(), ) } } } - MultilineLambdaItParameter:SwapModel.kt$SwapModel${ when (it) { is SwapTransactionState.TxSent -> { sendSuccessSwapEvent(fromCurrency.currency, fee.feeType) val url = getExplorerTransactionUrlUseCase( txHash = it.txHash, networkId = fromCurrency.currency.network.id, ).getOrElse { Timber.i("tx hash explore not supported") "" } updateWalletBalance() uiState = stateBuilder.createSuccessState( uiState = uiState, swapTransactionState = it, dataState = dataState, txUrl = url, onExploreClick = { if (it.txHash.isNotEmpty()) { urlOpener.openUrl(url) } analyticsEventHandler.send( event = SwapEvents.ButtonExplore(initialCurrencyFrom.symbol), ) }, onStatusClick = { val txExternalUrl = it.txExternalUrl if (!txExternalUrl.isNullOrBlank()) { urlOpener.openUrl(txExternalUrl) analyticsEventHandler.send( event = SwapEvents.ButtonStatus(initialCurrencyFrom.symbol), ) } }, ) sendSuccessEvent() swapRouter.openScreen(SwapNavScreen.Success) } SwapTransactionState.DemoMode -> { uiState = stateBuilder.createDemoModeAlert( uiState = uiState, onDismiss = { uiState = stateBuilder.clearAlert(uiState) }, isReverseSwapPossible = isReverseSwapPossible(), ) } is SwapTransactionState.Error -> { startLoadingQuotesFromLastState() uiState = stateBuilder.createErrorTransactionAlert( uiState = uiState, error = it, onDismiss = { uiState = stateBuilder.clearAlert(uiState) }, onSupportClick = ::onFailedTxEmailClick, isReverseSwapPossible = isReverseSwapPossible(), ) } } } MultilineLambdaItParameter:TransactionCard.kt${ Text( text = it, color = TangemTheme.colors.text.tertiary, style = TangemTheme.typography.body2, ) } MultilineLambdaItParameter:TransactionCard.kt${ Text( text = it, color = TangemTheme.colors.text.tertiary, style = TangemTheme.typography.body2, modifier = Modifier .align(Alignment.CenterVertically) .testTag(SwapTokenScreenTestTags.BALANCE), ) } MultilineLambdaItParameter:TransactionCard.kt${ Text( text = it, color = TangemTheme.colors.text.tertiary, style = TangemTheme.typography.body2, modifier = Modifier.defaultMinSize(minHeight = TangemTheme.dimens.size20), ) } diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt index 4f4dbe32e0..8c3ca7e009 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/DefaultTokenDetailsComponent.kt @@ -77,7 +77,7 @@ internal class DefaultTokenDetailsComponent @AssistedInject constructor( params = YieldSupplyComponent.Params( userWalletId = params.userWalletId, cryptoCurrency = params.currency, - handleNavigation = (params.navigationAction as? NavigationAction.YieldSupply) + shouldHandleNavigation = (params.navigationAction as? NavigationAction.YieldSupply) ?.isActive, ), ) diff --git a/features/wallet/impl/detekt-baseline-debug.xml b/features/wallet/impl/detekt-baseline-debug.xml index cf87ca958c..f13bc25643 100644 --- a/features/wallet/impl/detekt-baseline-debug.xml +++ b/features/wallet/impl/detekt-baseline-debug.xml @@ -5,7 +5,6 @@ BooleanPropertyNaming:DefaultUserWalletsFetcher.kt$DefaultUserWalletsFetcher$@Assisted("onlyMultiCurrency") private val onlyMultiCurrency: Boolean BooleanPropertyNaming:DraggableItem.kt$DraggableItem$abstract val showShadow: Boolean BooleanPropertyNaming:DraggableItem.kt$DraggableItem.RoundingMode$abstract val showGap: Boolean - BooleanPropertyNaming:GetMultiWalletWarningsFactory.kt$GetMultiWalletWarningsFactory$val accessCodeSkipped = array[7] as Boolean BooleanPropertyNaming:GetSingleWalletWarningsFactory.kt$GetSingleWalletWarningsFactory$private var readyForRateAppNotification = false BooleanPropertyNaming:GetSingleWalletWarningsFactory.kt$GetSingleWalletWarningsFactory$val userHasWalletOrWallet2 = userWallets.filterIsInstance<UserWallet.Cold>().any { val typesResolver = it.scanResponse.cardTypesResolver typesResolver.isTangemWallet() || typesResolver.isWallet2() } BooleanPropertyNaming:OrganizeTokensState.kt$OrganizeTokensState.ActionsConfig$val showApplyProgress: Boolean = false @@ -78,7 +77,6 @@ MultilineLambdaItParameter:WalletModel.kt$WalletModel${ walletsUpdateActionResolver.resolve( wallets = it, currentState = stateHolder.value, ) } MultilineLambdaItParameter:WalletNFTListSubscriber.kt$WalletNFTListSubscriber${ stateHolder.update( SetNFTCollectionsTransformer( userWalletId = userWallet.walletId, nftCollections = it, onItemClick = { clickIntents.onNFTClick(userWallet) }, ), ) } MultilineLambdaItParameter:WalletNameMigrationUseCase.kt$WalletNameMigrationUseCase${ val defaultName = it.name val suggestedWalletName = suggestedWalletName(defaultName, existingNames) if (defaultName != suggestedWalletName) { userWalletsListRepository.saveWithoutLock(it.copy(name = suggestedWalletName), canOverride = true) } Timber.tag("Migrated names").e(it.walletId.toString() + " " + suggestedWalletName) } - MultilineLambdaItParameter:WalletNotifications.kt${ // TODO develop promo banner general component when (it) { is WalletNotification.SwapPromo -> { // Use it on new promo action } is WalletNotification.NoteMigration -> { NoteMigrationNotification( config = it.config, modifier = modifier.animateItem(fadeInSpec = null, fadeOutSpec = null), ) } is WalletNotification.FinishWalletActivation -> { Notification( config = it.config, modifier = modifier.animateItem(fadeInSpec = null, fadeOutSpec = null), ) } else -> { Notification( config = it.config, modifier = modifier.animateItem(fadeInSpec = null, fadeOutSpec = null), iconTint = when (it) { is WalletNotification.Critical -> TangemTheme.colors.icon.warning is WalletNotification.Informational -> TangemTheme.colors.icon.accent is WalletNotification.RateApp -> TangemTheme.colors.icon.attention is WalletNotification.UnlockWallets -> TangemTheme.colors.icon.primary1 is WalletNotification.UsedOutdatedData -> TangemTheme.colors.text.attention else -> null }, ) } } } MultilineLambdaItParameter:WalletScreen.kt${ PaddingValues( bottom = it.calculateBottomPadding() + marketHintAproxHeight + 52.dp, ) } MultilineLambdaItParameter:WalletScreen.kt${ WalletSnackbarHost( snackbarHostState = it, event = state.event, modifier = Modifier .padding(bottom = TangemTheme.dimens.spacing4) .navigationBarsPadding(), ) } MultilineLambdaItParameter:WalletScreen.kt${ balancesAndLimitsBlock( modifier = itemModifier, state = it.balancesAndLimitBlockState, ) } @@ -91,7 +89,6 @@ MultilineLambdaItParameter:WalletWithFundsChecker.kt$WalletWithFundsChecker${ val amount = it.value.amount ?: return@any false !amount.isZero() } MultilineLambdaItParameter:WalletsUpdateActionResolver.kt$WalletsUpdateActionResolver${ if (it.warnings.any { it is WalletNotification.FinishWalletActivation }) { it.walletCardState.id } else { null } } NamedArguments:BasicAccountListSubscriber.kt$BasicAccountListSubscriber$updateContent(convertParams, appCurrency, yieldSupplyApyMap, stakingApyMap) - NamedArguments:GetMultiWalletWarningsFactory.kt$GetMultiWalletWarningsFactory$addFinishWalletActivationNotification(userWallet, totalFiatBalance, clickIntents, accessCodeSkipped) NamedArguments:GetMultiWalletWarningsFactory.kt$GetMultiWalletWarningsFactory$addInformationalNotifications(userWallet, cardTypesResolver, flattenCurrencies, clickIntents) NamedArguments:GetMultiWalletWarningsFactory.kt$GetMultiWalletWarningsFactory$addWarningNotifications(cardTypesResolver, flattenCurrencies, isNeedToBackup, clickIntents) NamedArguments:TangemSnapFlingBehavior.kt$HighVelocityApproachAnimation$animateDecay(offset, animationState, decayAnimationSpec, onAnimationStep) diff --git a/features/yield-supply/api/detekt-baseline-debug.xml b/features/yield-supply/api/detekt-baseline-debug.xml deleted file mode 100644 index 2c1d5f69ba..0000000000 --- a/features/yield-supply/api/detekt-baseline-debug.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - BooleanPropertyNaming:YieldSupplyComponent.kt$YieldSupplyComponent.Params$val handleNavigation: Boolean? = null - UseEmptyCounterpart:YieldSupplyAnalytics.kt$YieldSupplyAnalytics$mapOf() - - diff --git a/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/YieldSupplyComponent.kt b/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/YieldSupplyComponent.kt index c2f5cf26f0..d1919f0781 100644 --- a/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/YieldSupplyComponent.kt +++ b/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/YieldSupplyComponent.kt @@ -10,7 +10,7 @@ interface YieldSupplyComponent : ComposableContentComponent { data class Params( val userWalletId: UserWalletId, val cryptoCurrency: CryptoCurrency, - val handleNavigation: Boolean? = null, + val shouldHandleNavigation: Boolean? = null, ) interface Factory : ComponentFactory diff --git a/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/analytics/YieldSupplyAnalytics.kt b/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/analytics/YieldSupplyAnalytics.kt index 942e3a3d8a..37b00d61b2 100644 --- a/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/analytics/YieldSupplyAnalytics.kt +++ b/features/yield-supply/api/src/main/java/com/tangem/features/yield/supply/api/analytics/YieldSupplyAnalytics.kt @@ -8,7 +8,7 @@ import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM sealed class YieldSupplyAnalytics( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent(category = "Earning", event = event, params = params) { data class EarningScreenInfoOpened( diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt index 95f483022e..621430c377 100644 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt +++ b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt @@ -24,11 +24,7 @@ import com.tangem.domain.tokens.GetSingleCryptoCurrencyStatusUseCase import com.tangem.domain.wallets.usecase.GetUserWalletUseCase import com.tangem.domain.yield.supply.YieldSupplyRepository import com.tangem.domain.yield.supply.models.YieldSupplyEnterStatus -import com.tangem.domain.yield.supply.usecase.YieldSupplyActivateUseCase -import com.tangem.domain.yield.supply.usecase.YieldSupplyDeactivateUseCase -import com.tangem.domain.yield.supply.usecase.YieldSupplyGetTokenStatusUseCase -import com.tangem.domain.yield.supply.usecase.YieldSupplyIsAvailableUseCase -import com.tangem.domain.yield.supply.usecase.YieldSupplyMinAmountUseCase +import com.tangem.domain.yield.supply.usecase.* import com.tangem.features.yield.supply.api.YieldSupplyComponent import com.tangem.features.yield.supply.api.analytics.YieldSupplyAnalytics import com.tangem.features.yield.supply.impl.R @@ -274,8 +270,7 @@ internal class YieldSupplyModel @Inject constructor( private fun loadActiveState(cryptoCurrencyStatus: CryptoCurrencyStatus, yieldSupplyStatus: YieldSupplyStatus) { val cryptoCurrencyToken = cryptoCurrency as? CryptoCurrency.Token ?: return val showWarningIcon = !yieldSupplyStatus.isAllowedToSpend - val state = uiState.value - val isShowInfoIconPrevState = when (state) { + val isShowInfoIconPrevState = when (val state = uiState.value) { is YieldSupplyUM.Content -> state.showInfoIcon else -> false }