Updated on 2026-08-14

This commit is contained in:
Tangem 2025-11-26 11:57:04 +04:00
parent b283f87b1b
commit bf7c1f2f62
13 changed files with 25 additions and 72 deletions

View file

@ -1,8 +0,0 @@
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues/>
<CurrentIssues>
<ID>CastNullableToNonNullableType:MockScanResponseFactory.kt$MockScanResponseFactory$as</ID>
<ID>MultilineLambdaItParameter:MockScanResponseFactory.kt$MockScanResponseFactory${ CardDTO.Wallet( CardWallet( publicKey = it.name.toByteArray(), // IMPORTANT: public key must equal to curve name chainCode = null, curve = it, settings = createSettings(), totalSignedHashes = null, remainingSignatures = null, index = 0, isImported = true, hasBackup = true, derivedKeys = emptyMap(), ), ) }</ID>
</CurrentIssues>
</SmellBaseline>

View file

@ -2,11 +2,7 @@ package com.tangem.common.test.domain.card
import com.tangem.common.card.CardWallet import com.tangem.common.card.CardWallet
import com.tangem.common.card.FirmwareVersion import com.tangem.common.card.FirmwareVersion
import com.tangem.domain.card.configs.CardConfig import com.tangem.domain.card.configs.*
import com.tangem.domain.card.configs.EdSingleCurrencyCardConfig
import com.tangem.domain.card.configs.GenericCardConfig
import com.tangem.domain.card.configs.MultiWalletCardConfig
import com.tangem.domain.card.configs.Wallet2CardConfig
import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.CardDTO
import com.tangem.domain.models.scan.KeyWalletPublicKey import com.tangem.domain.models.scan.KeyWalletPublicKey
import com.tangem.domain.models.scan.ProductType import com.tangem.domain.models.scan.ProductType
@ -73,12 +69,12 @@ object MockScanResponseFactory {
isAccessCodeSet = false, isAccessCodeSet = false,
isPasscodeSet = null, isPasscodeSet = null,
supportedCurves = emptyList(), supportedCurves = emptyList(),
wallets = cardConfig.mandatoryCurves.map { wallets = cardConfig.mandatoryCurves.map { curve ->
CardDTO.Wallet( CardDTO.Wallet(
CardWallet( CardWallet(
publicKey = it.name.toByteArray(), // IMPORTANT: public key must equal to curve name publicKey = curve.name.toByteArray(), // IMPORTANT: public key must equal to curve name
chainCode = null, chainCode = null,
curve = it, curve = curve,
settings = createSettings(), settings = createSettings(),
totalSignedHashes = null, totalSignedHashes = null,
remainingSignatures = null, remainingSignatures = null,
@ -106,6 +102,8 @@ object MockScanResponseFactory {
private fun createSettings(): CardWallet.Settings { private fun createSettings(): CardWallet.Settings {
val constructor = CardWallet.Settings::class.java.declaredConstructors[0] val constructor = CardWallet.Settings::class.java.declaredConstructors[0]
constructor.isAccessible = true constructor.isAccessible = true
return constructor.newInstance(false) as CardWallet.Settings
val instance = constructor.newInstance(false) as? CardWallet.Settings
return requireNotNull(instance)
} }
} }

View file

@ -1,8 +0,0 @@
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues/>
<CurrentIssues>
<ID>NullableToStringCall:AmplitudeABTestsManager.kt$AmplitudeABTestsManager$${variant.key}</ID>
<ID>NullableToStringCall:AmplitudeABTestsManager.kt$AmplitudeABTestsManager$${variant.payload}</ID>
</CurrentIssues>
</SmellBaseline>

View file

@ -80,8 +80,8 @@ internal class AmplitudeABTestsManager(
allVariants.entries.forEachIndexed { index, (key, variant) -> allVariants.entries.forEachIndexed { index, (key, variant) ->
Timber.d("[${index + 1}/${allVariants.size}] Key: $key") Timber.d("[${index + 1}/${allVariants.size}] Key: $key")
Timber.d(" → Value: ${variant.value ?: "null"}") Timber.d(" → Value: ${variant.value ?: "null"}")
Timber.d(" → Payload: ${variant.payload}") Timber.d(" → Payload: ${variant.payload ?: "null"}")
Timber.d(" → Key: ${variant.key}") Timber.d(" → Key: ${variant.key ?: "null"}")
Timber.d("-".repeat(SEPARATOR_LENGTH)) Timber.d("-".repeat(SEPARATOR_LENGTH))
} }
} }

View file

@ -1,8 +0,0 @@
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues/>
<CurrentIssues>
<ID>IgnoredReturnValue:DefaultExpressServiceFetcher.kt$DefaultExpressServiceFetcher$put(key = userWalletId, value = default)</ID>
<ID>MultilineLambdaItParameter:DefaultExpressRepository.kt$DefaultExpressRepository${ Timber.w(it, "Unable to fetch express providers") throw it }</ID>
</CurrentIssues>
</SmellBaseline>

View file

@ -35,9 +35,9 @@ internal class DefaultExpressRepository(
).getOrThrow().map(ExpressProviderConverter()::convert) ).getOrThrow().map(ExpressProviderConverter()::convert)
.filterIf(filterProviderTypes.isNotEmpty()) { it.type in filterProviderTypes } .filterIf(filterProviderTypes.isNotEmpty()) { it.type in filterProviderTypes }
}, },
onError = { onError = { error ->
Timber.w(it, "Unable to fetch express providers") Timber.w(error, "Unable to fetch express providers")
throw it throw error
}, },
) )
} }

View file

@ -104,7 +104,7 @@ internal class DefaultExpressServiceFetcher @Inject constructor(
initializationStatuses.update { statuses -> initializationStatuses.update { statuses ->
statuses.toMutableMap().apply { statuses.toMutableMap().apply {
put(key = userWalletId, value = default) this[userWalletId] = default
} }
} }

View file

@ -1,7 +1,7 @@
========================================== ==========================================
Detekt Baseline Updater & Issue Counter Detekt Baseline Updater & Issue Counter
========================================== ==========================================
Date: 2025-11-25 17:21:16 Date: 2025-11-26 11:32:37
Step 1: Running detekt to check for new issues... Step 1: Running detekt to check for new issues...
@ -17,13 +17,13 @@ Counting issues in baseline files...
========================================== ==========================================
Summary: Summary:
Total Issues: 1694 Total Issues: 1685
Modules with Issues: 78 Modules with Issues: 73
Average Issues per Module: 21 Average Issues per Module: 23
Progress: Progress:
Fixed: 108 out of 1802 (5%) Fixed: 117 out of 1802 (6%)
Remaining: 1694 Remaining: 1685
========================================== ==========================================
All Modules with Issues (sorted by count) All Modules with Issues (sorted by count)
@ -104,9 +104,4 @@ features/stories/impl 2
features/create-wallet-selection/impl 2 features/create-wallet-selection/impl 2
domain/yield-supply 2 domain/yield-supply 2
domain/swap 2 domain/swap 2
domain/nft 2
data/express 2
core/ab-tests 2
common/test 2
features/kyc/impl 1
──────────────────────────────────────────────────────────────── ────────────────────────────────────────────────────────────────

View file

@ -1,8 +0,0 @@
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues/>
<CurrentIssues>
<ID>MultilineLambdaItParameter:FilterNFTAvailableNetworksUseCase.kt$FilterNFTAvailableNetworksUseCase${ it.name.contains(searchQuery, ignoreCase = true) || it.currencySymbol.contains(searchQuery, ignoreCase = true) }</ID>
<ID>UseEmptyCounterpart:NFTAnalyticsEvent.kt$NFTAnalyticsEvent$mapOf()</ID>
</CurrentIssues>
</SmellBaseline>

View file

@ -16,8 +16,8 @@ class FilterNFTAvailableNetworksUseCase(
) )
} }
private fun List<Network>.filter(searchQuery: String) = filter { private fun List<Network>.filter(searchQuery: String) = filter { network ->
it.name.contains(searchQuery, ignoreCase = true) || network.name.contains(searchQuery, ignoreCase = true) ||
it.currencySymbol.contains(searchQuery, ignoreCase = true) network.currencySymbol.contains(searchQuery, ignoreCase = true)
} }
} }

View file

@ -2,16 +2,15 @@ package com.tangem.domain.nft.analytics
import com.tangem.core.analytics.models.AnalyticsEvent import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam.Key.BLOCKCHAIN import com.tangem.core.analytics.models.AnalyticsParam.Key.BLOCKCHAIN
import com.tangem.core.analytics.models.AnalyticsParam.Key.STANDARD
import com.tangem.core.analytics.models.AnalyticsParam.Key.COLLECTIONS import com.tangem.core.analytics.models.AnalyticsParam.Key.COLLECTIONS
import com.tangem.core.analytics.models.AnalyticsParam.Key.NFT import com.tangem.core.analytics.models.AnalyticsParam.Key.NFT
import com.tangem.core.analytics.models.AnalyticsParam.Key.NO_COLLECTION import com.tangem.core.analytics.models.AnalyticsParam.Key.NO_COLLECTION
import com.tangem.core.analytics.models.AnalyticsParam.Key.STANDARD
import com.tangem.core.analytics.models.AnalyticsParam.Key.STATE import com.tangem.core.analytics.models.AnalyticsParam.Key.STATE
import kotlin.collections.buildMap
sealed class NFTAnalyticsEvent( sealed class NFTAnalyticsEvent(
event: String, event: String,
params: Map<String, String> = mapOf(), params: Map<String, String> = emptyMap(),
) : AnalyticsEvent( ) : AnalyticsEvent(
category = "NFT", category = "NFT",
event = event, event = event,

View file

@ -1,7 +0,0 @@
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues/>
<CurrentIssues>
<ID>UnnecessaryLet:DefaultKycComponent.kt$DefaultKycComponent$let { launchSdk(startInfo) }</ID>
</CurrentIssues>
</SmellBaseline>

View file

@ -27,7 +27,7 @@ class DefaultKycComponent @AssistedInject constructor(
init { init {
componentScope.launch { componentScope.launch {
model.uiState.drop(1).collectLatest { startInfo -> model.uiState.drop(1).collectLatest { startInfo ->
startInfo?.let { launchSdk(startInfo) } if (startInfo != null) launchSdk(startInfo)
router.pop() router.pop()
} }
} }