From 8aba7b07d18765c174226311e00567bc96f682e7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 2 Oct 2025 23:41:01 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../utils/ScanCardExceptionConverter.kt | 4 ++-- .../domain/tasks/product/DerivationsFinder.kt | 4 ++-- .../com/tangem/common/test/utils/TruthExt.kt | 6 +++--- .../ui/amountScreen/ui/AmountBlockV2.kt | 11 ++++++++--- .../GiveTxPermisssionBottomSheet.kt | 6 ++---- .../request/EvmTransactionScanRequest.kt | 1 + .../config/managers/DevApiConfigsManager.kt | 4 ++-- .../config/managers/MockApiConfigsManager.kt | 2 +- .../ConstructTransactionRequestBody.kt | 1 + .../datasource/asset/loader/AssetLoader.kt | 8 ++++---- .../swap/DefaultExpressServiceLoader.kt | 2 +- .../DefaultAvailableAppCurrenciesStore.kt | 8 ++++---- .../nft/converter/NFTSdkAssetConverter.kt | 12 ++++++------ .../converter/NFTSdkCollectionConverter.kt | 6 +++--- .../local/preferences/PreferencesDataStore.kt | 4 ++-- .../utils/AppPreferencesStoreExt.kt | 16 ++++++++-------- .../swap/DefaultSwapBestRateAnimationStore.kt | 2 +- .../local/token/DefaultExpressAssetsStore.kt | 4 ++-- .../token/converter/PendingActionConverter.kt | 14 +++++++------- .../DefaultWalletManagersStore.kt | 8 ++++---- .../core/ui/components/ResizableText.kt | 8 ++++---- .../tangem/core/ui/components/TextFields.kt | 4 ++-- .../ui/components/buttons/actions/Actions.kt | 12 ++++++++---- .../pullToRefresh/PullToRefreshConfig.kt | 1 + .../dropdownmenu/TangemDropdownMenu.kt | 7 ++++++- .../ui/components/fields/AmountTextField.kt | 7 ++++++- .../core/ui/components/fields/PinTextField.kt | 6 +++--- .../AmountVisualTransformation.kt | 13 +++++++++---- .../TangemLinearProgressIndicator.kt | 19 ++++++++++++------- .../stories/inner/StoriesProgressBar.kt | 8 ++++---- .../analytics/DefaultAnalyticsRepository.kt | 6 +++--- .../BlockAidEvmScanTransactionConverter.kt | 9 +++++---- .../tangem/data/blockaid/BlockAidMapper.kt | 8 ++++---- .../tangem/data/card/DefaultCardRepository.kt | 6 +++--- .../DefaultNotificationsRepository.kt | 8 +++++--- .../DefaultPushNotificationsRepository.kt | 6 ++++-- .../DefaultQrScanningEventsRepository.kt | 12 ++++++------ .../DefaultTangemPayTxHistoryRepository.kt | 2 +- .../extensions/WalletManagerFactory.kt | 4 ++-- .../DefaultDerivationsRepositoryTest.kt | 2 +- .../tangem/domain/card/ScanCardException.kt | 8 ++++---- .../domain/card/TangemCardTypesResolver.kt | 4 ++-- .../card/analytics/IntroductionProcess.kt | 2 +- .../analytics/ParamCardCurrencyConverter.kt | 4 +++- .../com/tangem/domain/card/analytics/Shop.kt | 2 +- .../domain/card/common/TapWorkarounds.kt | 8 ++++---- .../domain/card/configs/Wallet2CardConfig.kt | 1 + .../model/TangemPayTxHistoryListConfig.kt | 2 +- .../utils/TangemPayTxHistoryListManager.kt | 4 ++-- 49 files changed, 172 insertions(+), 134 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/scanCard/utils/ScanCardExceptionConverter.kt b/app/src/main/java/com/tangem/tap/domain/scanCard/utils/ScanCardExceptionConverter.kt index add75d87d0..a7fd680230 100644 --- a/app/src/main/java/com/tangem/tap/domain/scanCard/utils/ScanCardExceptionConverter.kt +++ b/app/src/main/java/com/tangem/tap/domain/scanCard/utils/ScanCardExceptionConverter.kt @@ -23,10 +23,10 @@ internal class ScanCardExceptionConverter : TwoWayConverter ScanCardException.UserCancelled + is TangemSdkError.UserCancelled -> ScanCardException.UserCancelled() is TangemSdkError.WrongAccessCode, is TangemSdkError.WrongPasscode, - -> ScanCardException.WrongAccessCode + -> ScanCardException.WrongAccessCode() is TangemSdkError.WrongCardNumber -> ScanCardException.WrongCardId(value.cardId) else -> ScanCardException.UnknownException(value) } diff --git a/app/src/main/java/com/tangem/tap/domain/tasks/product/DerivationsFinder.kt b/app/src/main/java/com/tangem/tap/domain/tasks/product/DerivationsFinder.kt index 54df91df2f..c1475265db 100644 --- a/app/src/main/java/com/tangem/tap/domain/tasks/product/DerivationsFinder.kt +++ b/app/src/main/java/com/tangem/tap/domain/tasks/product/DerivationsFinder.kt @@ -7,7 +7,7 @@ import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.datasource.local.token.UserTokensResponseStore import com.tangem.domain.wallets.derivations.DerivationStyleProvider -import com.tangem.domain.card.common.TapWorkarounds.useOldStyleDerivation +import com.tangem.domain.card.common.TapWorkarounds.hasOldStyleDerivation import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.wallets.builder.UserWalletIdBuilder @@ -54,7 +54,7 @@ internal class DerivationsFinder( } // pay attention to this - if (!card.useOldStyleDerivation) { + if (!card.hasOldStyleDerivation) { blockchains.removeUnnecessaryBlockchains() } diff --git a/common/test/src/main/java/com/tangem/common/test/utils/TruthExt.kt b/common/test/src/main/java/com/tangem/common/test/utils/TruthExt.kt index baf73d1243..b341dd3243 100644 --- a/common/test/src/main/java/com/tangem/common/test/utils/TruthExt.kt +++ b/common/test/src/main/java/com/tangem/common/test/utils/TruthExt.kt @@ -28,9 +28,9 @@ fun assertEitherRight(actual: Either) { fun assertEitherLeft(actual: Either, expected: Throwable) { actual .onRight { error("Actual is Either.Right: $it") } - .onLeft { - Truth.assertThat(it::class.java).isEqualTo(expected::class.java) - Truth.assertThat(it).hasMessageThat().isEqualTo(expected.message) + .onLeft { throwable -> + Truth.assertThat(throwable::class.java).isEqualTo(expected::class.java) + Truth.assertThat(throwable).hasMessageThat().isEqualTo(expected.message) } } diff --git a/common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt b/common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt index a3cfeca883..374ea3289c 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt @@ -77,7 +77,7 @@ fun AmountBlockV2( ) } -@Suppress("LongParameterList") +@Suppress("LongParameterList", "LongMethod") @Composable private fun AmountBlockV2( title: TextReference, @@ -97,7 +97,10 @@ private fun AmountBlockV2( .clip(TangemTheme.shapes.roundedCornersXMedium) .background(TangemTheme.colors.background.action) .conditional(onClick != null) { - clickable(enabled = !isClickDisabled && !isEditingDisabled, onClick = onClick!!) + clickable( + enabled = !isClickDisabled && !isEditingDisabled, + onClick = requireNotNull(onClick), + ) } .padding(TangemTheme.dimens.spacing16), ) { @@ -121,7 +124,9 @@ private fun AmountBlockV2( ) { Column( verticalArrangement = Arrangement.spacedBy(4.dp), - modifier = Modifier.padding(top = 8.dp).weight(1f), + modifier = Modifier + .padding(top = 8.dp) + .weight(1f), ) { ResizableText( text = firstAmount, diff --git a/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt b/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt index 48d962e377..4b4ca2eb11 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/bottomsheet/permission/GiveTxPermisssionBottomSheet.kt @@ -222,10 +222,8 @@ private fun AmountItem( isExpanded = isExpandSelector, onDismiss = { isExpandSelector = false }, onItemClick = { approveType -> - onChangeApproveType.let { - isExpandSelector = false - onChangeApproveType.invoke(approveType) - } + isExpandSelector = false + onChangeApproveType.invoke(approveType) }, items = approveItems, selectedType = approveType, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/blockaid/models/request/EvmTransactionScanRequest.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/blockaid/models/request/EvmTransactionScanRequest.kt index 82b699a611..e6cd7b0f0d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/blockaid/models/request/EvmTransactionScanRequest.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/blockaid/models/request/EvmTransactionScanRequest.kt @@ -15,6 +15,7 @@ data class EvmTransactionScanRequest( ) @JsonClass(generateAdapter = true) +@Suppress("BooleanPropertyNaming") data class EvmTransactionBulkScanRequest( @Json(name = "chain") val chain: String, @Json(name = "options") val options: List, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt index 4cb42ed9d0..3bbd41372d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/DevApiConfigsManager.kt @@ -39,8 +39,8 @@ internal class DevApiConfigsManager( .onEach { savedEnvironments -> val apiConfigs = configs.value - configs.value = apiConfigs.mapValues { - val (config, currentEnvironment) = it + configs.value = apiConfigs.mapValues { entry -> + val (config, currentEnvironment) = entry savedEnvironments[config.id.name] ?: currentEnvironment } diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MockApiConfigsManager.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MockApiConfigsManager.kt index 781b4dbf8c..10318bb1d7 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MockApiConfigsManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/managers/MockApiConfigsManager.kt @@ -63,7 +63,7 @@ internal class MockApiConfigsManager( super.addListener(listener) configs - .map { it.entries.firstOrNull { it.key.id == listener.id } } + .map { map -> map.entries.firstOrNull { it.key.id == listener.id } } .filterNotNull() .onEach { (apiConfig, currentEnvironment) -> listener.onChange( diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt index 55290861d3..d35f86ac9c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/stakekit/models/request/ConstructTransactionRequestBody.kt @@ -5,6 +5,7 @@ import com.squareup.moshi.JsonClass import java.math.BigDecimal @JsonClass(generateAdapter = true) +@Suppress("BooleanPropertyNaming") data class ConstructTransactionRequestBody( @Json(name = "gasArgs") val gasArgs: GasArgs? = null, diff --git a/core/datasource/src/main/java/com/tangem/datasource/asset/loader/AssetLoader.kt b/core/datasource/src/main/java/com/tangem/datasource/asset/loader/AssetLoader.kt index dc0a3f18bf..2bab1747cf 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/asset/loader/AssetLoader.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/asset/loader/AssetLoader.kt @@ -39,8 +39,8 @@ class AssetLoader @Inject constructor( if (parsedConfig == null) Timber.e(IllegalStateException("Parsed config [$fileName] is null")) parsedConfig }, - onFailure = { - Timber.e(it, "Failed to load config [$fileName] from assets") + onFailure = { throwable -> + Timber.e(throwable, "Failed to load config [$fileName] from assets") null }, ) @@ -79,8 +79,8 @@ class AssetLoader @Inject constructor( if (parsedConfig == null) Timber.e(IllegalStateException("Parsed config [$fileName] is null")) parsedConfig.orEmpty() }, - onFailure = { - Timber.e(it, "Failed to load config [$fileName] from assets") + onFailure = { throwable -> + Timber.e(throwable, "Failed to load config [$fileName] from assets") emptyMap() }, ) diff --git a/core/datasource/src/main/java/com/tangem/datasource/exchangeservice/swap/DefaultExpressServiceLoader.kt b/core/datasource/src/main/java/com/tangem/datasource/exchangeservice/swap/DefaultExpressServiceLoader.kt index 5af71f037e..11192e7af9 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/exchangeservice/swap/DefaultExpressServiceLoader.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/exchangeservice/swap/DefaultExpressServiceLoader.kt @@ -74,7 +74,7 @@ internal class DefaultExpressServiceLoader @Inject constructor( @Suppress("SuspendFunWithFlowReturnType") private suspend fun getInitializationStatusInternal(userWalletId: UserWalletId): InitializationStatusFlow { - val initializationStatus = initializationStatuses.value.get(key = userWalletId) + val initializationStatus = initializationStatuses.value[userWalletId] if (initializationStatus != null) return initializationStatus val cached = expressAssetsStore.getSyncOrNull(userWalletId) diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultAvailableAppCurrenciesStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultAvailableAppCurrenciesStore.kt index 6ee08097c5..01cc7edd09 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultAvailableAppCurrenciesStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultAvailableAppCurrenciesStore.kt @@ -16,10 +16,10 @@ internal class DefaultAvailableAppCurrenciesStore( override suspend fun store(response: CurrenciesResponse) { val currencies = response.currencies - .map { - it.copy( - iconSmallUrl = response.imageHost?.plus(IMAGE_SMALL)?.format(it.id), - iconMediumUrl = response.imageHost?.plus(IMAGE_MEDIUM)?.format(it.id), + .map { currency -> + currency.copy( + iconSmallUrl = response.imageHost?.plus(IMAGE_SMALL)?.format(currency.id), + iconMediumUrl = response.imageHost?.plus(IMAGE_MEDIUM)?.format(currency.id), ) } .associateBy(CurrenciesResponse.Currency::code) diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkAssetConverter.kt b/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkAssetConverter.kt index e6715dada8..6ab96a3930 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkAssetConverter.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkAssetConverter.kt @@ -32,16 +32,16 @@ object NFTSdkAssetConverter : TwoWayConverter, NFTAss label = rarity.label, ) }, - media = asset.media?.let { + media = asset.media?.let { media -> NFTAsset.Media( - animationUrl = it.animationUrl, - imageUrl = it.imageUrl, + animationUrl = media.animationUrl, + imageUrl = media.imageUrl, ) }, - traits = asset.traits.map { + traits = asset.traits.map { trait -> NFTAsset.Trait( - name = it.name, - value = it.value, + name = trait.name, + value = trait.value, ) }, source = StatusSource.CACHE, diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkCollectionConverter.kt b/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkCollectionConverter.kt index 0d21a6dd56..cd5fc2cb60 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkCollectionConverter.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/nft/converter/NFTSdkCollectionConverter.kt @@ -32,12 +32,12 @@ class NFTSdkCollectionConverter( .filter { it.id !is NFTAsset.Identifier.Unknown } - .let { - if (it.isEmpty()) { + .let { items -> + if (items.isEmpty()) { NFTCollection.Assets.Empty } else { NFTCollection.Assets.Value( - items = it, + items = items, source = StatusSource.CACHE, ) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt index daa20726ae..e91af36e84 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt @@ -50,8 +50,8 @@ internal object PreferencesDataStore { private fun createCorruptionHandler(): ReplaceFileCorruptionHandler { return ReplaceFileCorruptionHandler( - produceNewData = { - Timber.w(it) + produceNewData = { corruptionException -> + Timber.w(corruptionException) emptyPreferences() }, ) diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt index d0ca477e51..523eb486aa 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/AppPreferencesStoreExt.kt @@ -14,9 +14,9 @@ inline fun AppPreferencesStore.getObject(key: Preferences.Key - preferences[key]?.let { + preferences[key]?.let { value -> try { - adapter.fromJson(it) + adapter.fromJson(value) } catch (e: JsonDataException) { null } @@ -59,9 +59,9 @@ suspend inline fun AppPreferencesStore.getObjectSyncOrNull(key: Pref val adapter = moshi.adapter(T::class.java) // TODO: Support parameterized types data.firstOrNull() ?.get(key) - ?.let { + ?.let { value -> try { - adapter.fromJson(it) + adapter.fromJson(value) } catch (e: JsonDataException) { null } @@ -76,9 +76,9 @@ suspend inline fun AppPreferencesStore.getObjectSyncOrDefault( val adapter = moshi.adapter(T::class.java) data.firstOrNull() ?.get(key) - ?.let { + ?.let { value -> try { - adapter.fromJson(it) + adapter.fromJson(value) } catch (e: JsonDataException) { default } @@ -159,7 +159,7 @@ inline fun AppPreferencesStore.getObjectMap(key: Preferences.Key>(type) emitAll( - data.map { it[key]?.let(adapter::fromJson) ?: emptyMap() }, + data.map { it[key]?.let(adapter::fromJson).orEmpty() }, ) } } @@ -180,7 +180,7 @@ inline fun AppPreferencesStore.getObjectSet(key: Preferences.Key>(Types.newParameterizedType(Set::class.java, T::class.java)) emitAll( data.map { - it[key]?.let(adapter::fromJson) ?: emptySet() + it[key]?.let(adapter::fromJson).orEmpty() }, ) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/swap/DefaultSwapBestRateAnimationStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/swap/DefaultSwapBestRateAnimationStore.kt index 09221a9985..0c25e70a48 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/swap/DefaultSwapBestRateAnimationStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/swap/DefaultSwapBestRateAnimationStore.kt @@ -12,7 +12,7 @@ internal class DefaultSwapBestRateAnimationStore( * If true, reset flag to false */ override suspend fun getSyncOrNull(): Boolean { - val shouldShowBestRateAnimation = dataStore.getSyncOrNull() ?: true + val shouldShowBestRateAnimation = dataStore.getSyncOrNull() != false if (shouldShowBestRateAnimation) { dataStore.store(false) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultExpressAssetsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultExpressAssetsStore.kt index bc7e276e66..ea2d0c573b 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultExpressAssetsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/token/DefaultExpressAssetsStore.kt @@ -42,8 +42,8 @@ internal class DefaultExpressAssetsStore( runtimeStore.store(userWalletId.stringValue, item) } launch { - persistenceStore.updateData { - it.toMutableMap().apply { + persistenceStore.updateData { assetsByWalletId -> + assetsByWalletId.toMutableMap().apply { put(userWalletId.stringValue, item) } } diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/token/converter/PendingActionConverter.kt b/core/datasource/src/main/java/com/tangem/datasource/local/token/converter/PendingActionConverter.kt index 213fbf2fbc..b590036c5b 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/token/converter/PendingActionConverter.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/token/converter/PendingActionConverter.kt @@ -12,11 +12,11 @@ internal object PendingActionConverter : Converter PendingAction.PendingActionArgs.Amount( - required = it.required, - minimum = it.minimum, - maximum = it.maximum, + required = amount.required, + minimum = amount.minimum, + maximum = amount.maximum, ) }, duration = this?.duration?.let { duration -> @@ -28,10 +28,10 @@ internal object PendingActionConverter : Converter PendingAction.PendingActionArgs.TronResource( - required = it.required, - options = it.options, + required = tronResource.required, + options = tronResource.options, ) }, signatureVerification = this?.signatureVerification?.required, diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt index 351836e331..3dc700f5ba 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/walletmanager/DefaultWalletManagersStore.kt @@ -28,14 +28,14 @@ internal class DefaultWalletManagersStore( ): WalletManager? { val walletManagers = getSyncOrNull(userWalletId) - return walletManagers?.singleOrNull { - it.wallet.blockchain == blockchain && - it.wallet.publicKey.derivationPath?.rawPath == derivationPath + return walletManagers?.singleOrNull { walletManager -> + walletManager.wallet.blockchain == blockchain && + walletManager.wallet.publicKey.derivationPath?.rawPath == derivationPath } } override suspend fun getAllSync(userWalletId: UserWalletId): List { - return getSyncOrNull(userWalletId) ?: emptyList() + return getSyncOrNull(userWalletId).orEmpty() } override suspend fun store(userWalletId: UserWalletId, walletManager: WalletManager) { diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt b/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt index 8ef0050ac3..8fc62476fd 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt @@ -84,12 +84,12 @@ fun ResizableText( reduceFactor: Double = 0.9, ) { var fontSize by remember { mutableStateOf(style.fontSize) } - var readyToDraw by remember { mutableStateOf(value = false) } + var isReadyToDraw by remember { mutableStateOf(value = false) } Text( modifier = modifier .drawWithContent { - if (readyToDraw) drawContent() + if (isReadyToDraw) drawContent() } .wrapContentHeight(), text = text, @@ -106,7 +106,7 @@ fun ResizableText( if (minFontSize != TextUnit.Unspecified && reducedFontSize <= minFontSize) { fontSize = minFontSize - readyToDraw = true + isReadyToDraw = true } else { fontSize = reducedFontSize } @@ -115,7 +115,7 @@ fun ResizableText( if (result.hasVisualOverflow) { reduceFontSize() } else { - readyToDraw = true + isReadyToDraw = true } }, ) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt b/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt index 93db6bb7e5..9479ec1992 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt @@ -174,7 +174,7 @@ private fun TangemTextField( null }, ) - iconRes?.let { iconRes -> + iconRes?.let { resId -> IconButton( modifier = Modifier.size(32.dp), onClick = onClear, @@ -182,7 +182,7 @@ private fun TangemTextField( ) { Icon( modifier = Modifier.size(24.dp), - painter = painterResource(id = iconRes), + painter = painterResource(id = resId), tint = colors.trailingIconColor(enabled = enabled, isError = isError).value, contentDescription = "Clear input", ) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/buttons/actions/Actions.kt b/core/ui/src/main/java/com/tangem/core/ui/components/buttons/actions/Actions.kt index 64765e5c99..8a639e82bf 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/buttons/actions/Actions.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/buttons/actions/Actions.kt @@ -55,11 +55,11 @@ fun RoundedActionButton( ActionBaseButton( config = config, shape = RoundedCornerShape(size = TangemTheme.dimens.radius24), - content = { modifier -> + content = { contentModifier -> ActionButtonContent( config = config, text = { color -> Text(text = config.text, textColor = color) }, - modifier = modifier.padding( + modifier = contentModifier.padding( start = TangemTheme.dimens.spacing16, end = TangemTheme.dimens.spacing24, ), @@ -138,9 +138,13 @@ fun ActionBaseButton( onClick = config.onClick, onLongClick = { val toastReference = config.onLongClick?.invoke() - toastReference?.let { toastReference -> + if (toastReference != null) { Toast - .makeText(context, toastReference.resolveReference(context.resources), Toast.LENGTH_SHORT) + .makeText( + context, + toastReference.resolveReference(context.resources), + Toast.LENGTH_SHORT, + ) .show() } }, diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/containers/pullToRefresh/PullToRefreshConfig.kt b/core/ui/src/main/java/com/tangem/core/ui/components/containers/pullToRefresh/PullToRefreshConfig.kt index d2fcfad70f..64515c0146 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/containers/pullToRefresh/PullToRefreshConfig.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/containers/pullToRefresh/PullToRefreshConfig.kt @@ -9,6 +9,7 @@ package com.tangem.core.ui.components.containers.pullToRefresh data class PullToRefreshConfig(val isRefreshing: Boolean, val onRefresh: (ShowRefreshState) -> Unit) { @JvmInline + @Suppress("BooleanPropertyNaming") value class ShowRefreshState( val value: Boolean = true, ) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/dropdownmenu/TangemDropdownMenu.kt b/core/ui/src/main/java/com/tangem/core/ui/components/dropdownmenu/TangemDropdownMenu.kt index cbdae62d7e..fa6f78a262 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/dropdownmenu/TangemDropdownMenu.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/dropdownmenu/TangemDropdownMenu.kt @@ -228,7 +228,12 @@ internal data class DropdownMenuPositionProvider( onPositionCalculated( anchorBounds, - IntRect(x, y, x + popupContentSize.width, y + popupContentSize.height), + IntRect( + left = x, + top = y, + right = x + popupContentSize.width, + bottom = y + popupContentSize.height, + ), ) return IntOffset(x, y) } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt b/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt index 1a04519e27..0fd7e5f505 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/fields/AmountTextField.kt @@ -75,7 +75,12 @@ fun AmountTextField( val decimalFormat = rememberDecimalFormat() BoxWithConstraints(modifier = modifier) { val fontSize = if (isAutoResize) { - resizeFont(visualTransformation, value, textStyle, reduceFactor) + resizeFont( + visualTransformation = visualTransformation, + value = value, + textStyle = textStyle, + reduceFactor = reduceFactor, + ) } else { textStyle.fontSize } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/fields/PinTextField.kt b/core/ui/src/main/java/com/tangem/core/ui/components/fields/PinTextField.kt index 19f1af68a7..c348c0933f 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/fields/PinTextField.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/fields/PinTextField.kt @@ -108,9 +108,9 @@ private fun CellDecoration( modifier = modifier, horizontalArrangement = Arrangement.spacedBy(12.dp), ) { - repeat(length) { - val char = if (it < value.length) { - if (isPasswordVisual) PASSWORD_VISUAL_CHAR.toString() else value[it].toString() + repeat(length) { i -> + val char = if (i < value.length) { + if (isPasswordVisual) PASSWORD_VISUAL_CHAR.toString() else value[i].toString() } else { "" } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/fields/visualtransformations/AmountVisualTransformation.kt b/core/ui/src/main/java/com/tangem/core/ui/components/fields/visualtransformations/AmountVisualTransformation.kt index c16ed2e9f5..7dd6ee0767 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/fields/visualtransformations/AmountVisualTransformation.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/fields/visualtransformations/AmountVisualTransformation.kt @@ -55,7 +55,12 @@ class AmountVisualTransformation( val groupingSymbol = decimalFormat.decimalFormatSymbols.groupingSeparator return TransformedText( text = formattedText, - offsetMapping = OffsetMappingImpl(text.text, formattedText, symbol, groupingSymbol), + offsetMapping = OffsetMappingImpl( + text = text.text, + formattedText = formattedText, + currencySymbol = symbol, + groupingSymbol = groupingSymbol, + ), ) } @@ -93,7 +98,7 @@ class AmountVisualTransformation( private val text: String, private val formattedText: AnnotatedString, private val currencySymbol: String?, - private val gropingSymbol: Char, + private val groupingSymbol: Char, ) : OffsetMapping { override fun originalToTransformed(offset: Int): Int { var noneDigitCount = 0 @@ -101,7 +106,7 @@ class AmountVisualTransformation( val symbolOffset = currencySymbol?.let { formattedText.indexOf(it) } ?: -1 while (i < offset + noneDigitCount) { val char = formattedText.getOrNull(i++) - if (char == gropingSymbol) noneDigitCount++ + if (char == groupingSymbol) noneDigitCount++ if (symbolOffset == 0 && char?.isWhitespace() == true) noneDigitCount++ } var transformedOffset = if (symbolOffset == 0 && currencySymbol != null) { @@ -118,7 +123,7 @@ class AmountVisualTransformation( } override fun transformedToOriginal(offset: Int): Int { - val noneDigitCount = formattedText.take(offset).count { it == gropingSymbol } + val noneDigitCount = formattedText.take(offset).count { it == groupingSymbol } return (offset - noneDigitCount).coerceIn(0, text.length) } } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/progressbar/TangemLinearProgressIndicator.kt b/core/ui/src/main/java/com/tangem/core/ui/components/progressbar/TangemLinearProgressIndicator.kt index 8b97ce00c2..3e27fbe865 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/progressbar/TangemLinearProgressIndicator.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/progressbar/TangemLinearProgressIndicator.kt @@ -141,11 +141,11 @@ fun TangemLinearProgressIndicator( drawLinearIndicatorBackground(backgroundColor, strokeWidth, strokeCap) if (firstLineHead - firstLineTail > 0) { drawLinearIndicator( - firstLineHead, - firstLineTail, - color, - strokeWidth, - strokeCap, + startFraction = firstLineHead, + endFraction = firstLineTail, + color = color, + strokeWidth = strokeWidth, + strokeCap = strokeCap, ) } if ((secondLineHead - secondLineTail) > 0) { @@ -204,7 +204,12 @@ private fun DrawScope.drawLinearIndicator( // if there isn't enough space to draw the stroke caps, fall back to StrokeCap.Butt if (strokeCap == StrokeCap.Butt || height > width) { // Progress line - drawLine(color, Offset(barStart, yOffset), Offset(barEnd, yOffset), strokeWidth) + drawLine( + color = color, + start = Offset(barStart, yOffset), + end = Offset(barEnd, yOffset), + strokeWidth = strokeWidth, + ) } else { // need to adjust barStart and barEnd for the stroke caps val strokeCapOffset = strokeWidth / 2 @@ -253,7 +258,7 @@ private const val SECOND_LINE_TAIL_DELAY = 1267 private val FIRST_LINE_HEAD_EASING = CubicBezierEasing(a = 0.2f, b = 0f, c = 0.8f, d = 1f) private val FIRST_LINE_TAIL_EASING = CubicBezierEasing(a = 0.4f, b = 0f, c = 1f, d = 1f) private val SECOND_LINE_HEAD_EASING = CubicBezierEasing(a = 0f, b = 0f, c = 0.65f, d = 1f) -private val SECOND_LINE_TAIL_EASING = CubicBezierEasing(a = 0.1f, 0f, 0.45f, d = 1f) +private val SECOND_LINE_TAIL_EASING = CubicBezierEasing(a = 0.1f, b = 0f, c = 0.45f, d = 1f) // region Preview @Preview(showBackground = true, widthDp = 360) diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/stories/inner/StoriesProgressBar.kt b/core/ui/src/main/java/com/tangem/core/ui/components/stories/inner/StoriesProgressBar.kt index f2c504316e..05d61b51f0 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/stories/inner/StoriesProgressBar.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/stories/inner/StoriesProgressBar.kt @@ -99,11 +99,11 @@ fun StoriesProgressBar( .clip(RoundedCornerShape(2.dp)) .background(TangemColorPalette.White) .fillMaxHeight() - .let { + .let { modifier -> when (index) { - currentStep -> it.fillMaxWidth(progress.value) - in 0..currentStep -> it.fillMaxWidth(fraction = 1f) - else -> it + currentStep -> modifier.fillMaxWidth(progress.value) + in 0..currentStep -> modifier.fillMaxWidth(fraction = 1f) + else -> modifier } }, ) diff --git a/data/analytics/src/main/kotlin/com/tangem/data/analytics/DefaultAnalyticsRepository.kt b/data/analytics/src/main/kotlin/com/tangem/data/analytics/DefaultAnalyticsRepository.kt index db1f57f029..e11b00a841 100644 --- a/data/analytics/src/main/kotlin/com/tangem/data/analytics/DefaultAnalyticsRepository.kt +++ b/data/analytics/src/main/kotlin/com/tangem/data/analytics/DefaultAnalyticsRepository.kt @@ -37,14 +37,14 @@ internal class DefaultAnalyticsRepository( } override suspend fun setWalletBalanceState(userWalletId: UserWalletId, balanceState: WalletBalanceState) { - appPreferencesStore.editData { - val walletsBalanceState = it.getObjectMap( + appPreferencesStore.editData { preferences -> + val walletsBalanceState = preferences.getObjectMap( key = PreferencesKeys.WALLETS_BALANCES_STATES_KEY, ) val updatedWalletsBalanceState = walletsBalanceState .plus(pair = userWalletId.stringValue to balanceState) - it.setObjectMap(PreferencesKeys.WALLETS_BALANCES_STATES_KEY, updatedWalletsBalanceState) + preferences.setObjectMap(PreferencesKeys.WALLETS_BALANCES_STATES_KEY, updatedWalletsBalanceState) } } } \ No newline at end of file diff --git a/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidEvmScanTransactionConverter.kt b/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidEvmScanTransactionConverter.kt index 213e89f7f4..c167aa064e 100644 --- a/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidEvmScanTransactionConverter.kt +++ b/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidEvmScanTransactionConverter.kt @@ -13,16 +13,17 @@ internal class BlockAidEvmScanTransactionConverter( private val blockchain: Blockchain, ) : Converter, EvmTransactionBulkScanRequest> { + @Suppress("NullableToStringCall") override fun convert(value: List): EvmTransactionBulkScanRequest { return EvmTransactionBulkScanRequest( chain = blockchain.getChainId().toString(), options = listOf(BlockAidScanOptions.GasEstimation.value), metadata = TransactionMetadata(domain = "https://tangem.com"), - data = value.map { + data = value.map { transactionData -> Data( - from = it.sourceAddress, - to = it.destinationAddress, - data = (it.extras as? EthereumTransactionExtras)?.callData?.dataHex.orEmpty(), + from = transactionData.sourceAddress, + to = transactionData.destinationAddress, + data = (transactionData.extras as? EthereumTransactionExtras)?.callData?.dataHex.orEmpty(), ) }, aggregated = false, diff --git a/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidMapper.kt b/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidMapper.kt index 5334f1e066..b361fc3a86 100644 --- a/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidMapper.kt +++ b/data/blockaid/src/main/kotlin/com/tangem/data/blockaid/BlockAidMapper.kt @@ -169,7 +169,7 @@ internal object BlockAidMapper { val tokenInfo = TokenInfo( chainId = exposure.asset.chainId, logoUrl = exposure.asset.logoUrl, - symbol = exposure.asset.symbol ?: "", + symbol = exposure.asset.symbol.orEmpty(), decimals = exposure.asset.decimals ?: 0, ) return exposure.spenders.flatMap { (_, spender) -> @@ -188,8 +188,8 @@ internal object BlockAidMapper { private fun mapApproveNftTransaction(exposure: Exposure): ApproveInfo.NonFungibleToken { return ApproveInfo.NonFungibleToken( name = exposure.asset.name.orEmpty(), - logoUrl = exposure.spenders.values.firstOrNull()?.exposure?.firstOrNull()?.logoUrl - ?: exposure.asset.logoUrl, + logoUrl = exposure.spenders.values.firstOrNull() + ?.exposure?.firstOrNull()?.logoUrl ?: exposure.asset.logoUrl, ) } @@ -201,7 +201,7 @@ internal object BlockAidMapper { val token = TokenInfo( chainId = diff.asset.chainId, logoUrl = diff.asset.logoUrl, - symbol = diff.asset.symbol ?: "", + symbol = diff.asset.symbol.orEmpty(), decimals = diff.asset.decimals ?: 0, ) diff.outTransfer.orEmpty().forEach { transfer -> diff --git a/data/card/src/main/java/com/tangem/data/card/DefaultCardRepository.kt b/data/card/src/main/java/com/tangem/data/card/DefaultCardRepository.kt index 5241c8562b..db200bd7e9 100644 --- a/data/card/src/main/java/com/tangem/data/card/DefaultCardRepository.kt +++ b/data/card/src/main/java/com/tangem/data/card/DefaultCardRepository.kt @@ -20,7 +20,7 @@ internal class DefaultCardRepository( override fun wasCardScanned(cardId: String): Flow { return appPreferencesStore.getObjectList(key = PreferencesKeys.USED_CARDS_INFO_KEY) .map { savedCards -> - savedCards?.any { it.cardId == cardId } ?: false + savedCards?.any { it.cardId == cardId } == true } } @@ -63,11 +63,11 @@ internal class DefaultCardRepository( } override suspend fun isActivationStarted(cardId: String): Boolean { - return getUsedCardSync(cardId)?.isActivationStarted ?: false + return getUsedCardSync(cardId)?.isActivationStarted == true } override suspend fun isActivationFinished(cardId: String): Boolean { - return getUsedCardSync(cardId)?.isActivationFinished ?: false + return getUsedCardSync(cardId)?.isActivationFinished == true } override suspend fun isActivationInProgress(cardId: String): Boolean { diff --git a/data/notifications/src/main/java/com/tangem/data/notifications/DefaultNotificationsRepository.kt b/data/notifications/src/main/java/com/tangem/data/notifications/DefaultNotificationsRepository.kt index 7a9b4c6cbe..28d912b189 100644 --- a/data/notifications/src/main/java/com/tangem/data/notifications/DefaultNotificationsRepository.kt +++ b/data/notifications/src/main/java/com/tangem/data/notifications/DefaultNotificationsRepository.kt @@ -67,10 +67,12 @@ class DefaultNotificationsRepository @Inject constructor( } override suspend fun setNotificationsWasEnabledAutomatically(userWalletId: String) { - appPreferencesStore.editData { - it.setObjectMap( + appPreferencesStore.editData { preferences -> + preferences.setObjectMap( key = PreferencesKeys.NOTIFICATIONS_AUTOMATICALLY_ENABLED_STATES_KEY, - value = it.getObjectMap(PreferencesKeys.NOTIFICATIONS_AUTOMATICALLY_ENABLED_STATES_KEY) + value = preferences.getObjectMap( + PreferencesKeys.NOTIFICATIONS_AUTOMATICALLY_ENABLED_STATES_KEY, + ) .plus(userWalletId to true), ) } diff --git a/data/notifications/src/main/java/com/tangem/data/notifications/DefaultPushNotificationsRepository.kt b/data/notifications/src/main/java/com/tangem/data/notifications/DefaultPushNotificationsRepository.kt index b881aff0c5..f01830c332 100644 --- a/data/notifications/src/main/java/com/tangem/data/notifications/DefaultPushNotificationsRepository.kt +++ b/data/notifications/src/main/java/com/tangem/data/notifications/DefaultPushNotificationsRepository.kt @@ -23,7 +23,7 @@ internal class DefaultPushNotificationsRepository @Inject constructor( ) : PushNotificationsRepository { override suspend fun createApplicationId(pushToken: String?): ApplicationId = withContext(dispatchers.io) { - tangemTechApi.createApplicationId( + val appId = tangemTechApi.createApplicationId( NotificationApplicationCreateBody( platform = appInfoProvider.platform.lowercase(), device = appInfoProvider.device, @@ -33,7 +33,9 @@ internal class DefaultPushNotificationsRepository @Inject constructor( version = appInfoProvider.appVersion, pushToken = pushToken, ), - ).getOrThrow().appId.let(::ApplicationId) + ).getOrThrow().appId + + ApplicationId(appId) } override suspend fun saveApplicationId(appId: ApplicationId) { diff --git a/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt b/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt index 99ad446932..c5573994ce 100644 --- a/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt +++ b/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt @@ -50,16 +50,16 @@ internal class DefaultQrScanningEventsRepository : QrScanningEventsRepository { val result = QrResult(address = address) extractParameters(withoutSchema) - .forEach { - when (it.key) { + .forEach { entry -> + when (entry.key) { Parameter.Amount -> { // According to BIP-0021, the value is specified in decimals. No conversion needed - result.amount = it.value.parseBigDecimalOrNull() + result.amount = entry.value.parseBigDecimalOrNull() } Parameter.Message, Parameter.Memo, -> { - result.memo = URLDecoder.decode(it.value, "UTF-8") + result.memo = URLDecoder.decode(entry.value, "UTF-8") } Parameter.Address -> { // If 'address' parameter is exists, then currency must be TOKEN. @@ -70,7 +70,7 @@ internal class DefaultQrScanningEventsRepository : QrScanningEventsRepository { // matches the contract address of the token. // Otherwise, the scanned string is likely malformed, and we stop the entire parsing routin if (tokenCurrency.contractAddress.equals(address, ignoreCase = true)) { - result.address = it.value + result.address = entry.value } else { return QrResult() } @@ -80,7 +80,7 @@ internal class DefaultQrScanningEventsRepository : QrScanningEventsRepository { -> { // Extra convert parses scientific notation to decimal // This is necessary to be able comparing BigDecimal values - result.amount = it.value.parseBigDecimalOrNull() + result.amount = entry.value.parseBigDecimalOrNull() ?.toPlainString()?.toBigDecimalOrNull() ?.divide(BigDecimal.TEN.pow(cryptoCurrency.decimals)) } diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayTxHistoryRepository.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayTxHistoryRepository.kt index 1498a36a01..b2006f60c4 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayTxHistoryRepository.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayTxHistoryRepository.kt @@ -65,7 +65,7 @@ internal class DefaultTangemPayTxHistoryRepository @Inject constructor( ): List { cacheRegistry.invokeOnExpire( key = getCacheKey(customerWalletAddress = config.customerWalletAddress, cursor = cursor), - skipCache = config.refresh, + skipCache = config.shouldRefresh, block = { fetch(customerWalletAddress = config.customerWalletAddress, cursor = cursor, pageSize = limit) }, ) diff --git a/data/wallet-manager/src/main/java/com/tangem/data/walletmanager/extensions/WalletManagerFactory.kt b/data/wallet-manager/src/main/java/com/tangem/data/walletmanager/extensions/WalletManagerFactory.kt index b9dc8edf78..1a5442bfa2 100644 --- a/data/wallet-manager/src/main/java/com/tangem/data/walletmanager/extensions/WalletManagerFactory.kt +++ b/data/wallet-manager/src/main/java/com/tangem/data/walletmanager/extensions/WalletManagerFactory.kt @@ -9,7 +9,7 @@ import com.tangem.common.extensions.toMapKey import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.crypto.hdWallet.bip32.ExtendedPublicKey import com.tangem.domain.card.common.TapWorkarounds.isTestCard -import com.tangem.domain.card.common.TapWorkarounds.useOldStyleDerivation +import com.tangem.domain.card.common.TapWorkarounds.hasOldStyleDerivation import com.tangem.domain.card.common.util.cardTypesResolver import com.tangem.domain.card.configs.CardConfig import com.tangem.domain.card.configs.Wallet2CardConfig @@ -112,7 +112,7 @@ fun makePublicKey( private fun getDerivationParams(card: CardDTO): DerivationParams? { return if (!card.settings.isHDWalletAllowed) { null - } else if (card.useOldStyleDerivation) { + } else if (card.hasOldStyleDerivation) { DerivationParams.Default(DerivationStyle.LEGACY) } else { DerivationParams.Default(DerivationStyle.NEW) diff --git a/data/wallets/src/test/java/com/tangem/data/wallets/derivations/DefaultDerivationsRepositoryTest.kt b/data/wallets/src/test/java/com/tangem/data/wallets/derivations/DefaultDerivationsRepositoryTest.kt index eb812166f7..e9bccfd5a5 100644 --- a/data/wallets/src/test/java/com/tangem/data/wallets/derivations/DefaultDerivationsRepositoryTest.kt +++ b/data/wallets/src/test/java/com/tangem/data/wallets/derivations/DefaultDerivationsRepositoryTest.kt @@ -133,7 +133,7 @@ internal class DefaultDerivationsRepositoryTest { scanResponse = MockScanResponseFactory.create(cardConfig = MultiWalletCardConfig, derivedKeys = emptyMap()), ) coEvery { userWalletsStore.getSyncStrict(defaultUserWalletId) } returns userWallet - coEvery { tangemSdkManager.derivePublicKeys(null, any(), any()) } throws ScanCardException.UserCancelled + coEvery { tangemSdkManager.derivePublicKeys(null, any(), any()) } throws ScanCardException.UserCancelled() runCatching { repository.derivePublicKeys( diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/ScanCardException.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/ScanCardException.kt index 667e29f062..abca85611d 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/ScanCardException.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/ScanCardException.kt @@ -2,14 +2,14 @@ package com.tangem.domain.card sealed class ScanCardException : Exception() { - data object UserCancelled : ScanCardException() { + class UserCancelled : ScanCardException() { @Suppress("UnusedPrivateMember") - private fun readResolve(): Any = UserCancelled + private fun readResolve(): Any = UserCancelled() } - data object WrongAccessCode : ScanCardException() { + class WrongAccessCode : ScanCardException() { @Suppress("UnusedPrivateMember") - private fun readResolve(): Any = WrongAccessCode + private fun readResolve(): Any = WrongAccessCode() } open class ChainException : ScanCardException() 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 e8badaf526..ee83c3d83a 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 @@ -109,8 +109,8 @@ internal class TangemCardTypesResolver( override fun isAttestationFailed(): Boolean = card.attestation.status == Attestation.Status.Failed override fun hasWalletSignedHashes(): Boolean { - return card.wallets.any { - val totalSignedHashes = it.totalSignedHashes ?: 0 + return card.wallets.any { wallet -> + val totalSignedHashes = wallet.totalSignedHashes ?: 0 totalSignedHashes > 0 } } diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/IntroductionProcess.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/IntroductionProcess.kt index 0cb4a3685c..15916c16cf 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/IntroductionProcess.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/IntroductionProcess.kt @@ -4,7 +4,7 @@ import com.tangem.core.analytics.models.AnalyticsEvent sealed class IntroductionProcess( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent("Introduction Process", event, params) { object ScreenOpened : IntroductionProcess("Introduction Process Screen Opened") diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/ParamCardCurrencyConverter.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/ParamCardCurrencyConverter.kt index 2398da3650..8f5e77e8e3 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/ParamCardCurrencyConverter.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/ParamCardCurrencyConverter.kt @@ -14,7 +14,9 @@ class ParamCardCurrencyConverter : Converter { value.isTangemNote() -> AnalyticsParam.CurrencyType.Blockchain(value.getBlockchain()) value.isTangemTwins() -> AnalyticsParam.CurrencyType.Blockchain(Blockchain.Bitcoin) value.getBlockchain() != Blockchain.Unknown -> AnalyticsParam.CurrencyType.Blockchain(value.getBlockchain()) - value.getPrimaryToken() != null -> AnalyticsParam.CurrencyType.Token(value.getPrimaryToken()!!) + value.getPrimaryToken() != null -> { + AnalyticsParam.CurrencyType.Token(requireNotNull(value.getPrimaryToken())) + } else -> null } ?: return null diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/Shop.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/Shop.kt index 62c02a56ab..11536725f8 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/Shop.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/analytics/Shop.kt @@ -4,7 +4,7 @@ import com.tangem.core.analytics.models.AnalyticsEvent sealed class Shop( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent("Shop", event, params) { object ScreenOpened : Shop("Shop Screen Opened") 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 2790b54665..f3692995b3 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 @@ -36,14 +36,14 @@ object TapWorkarounds { val CardDTO.canSkipBackup: Boolean get() = this.firmwareVersion < backupRequiredFirmwareVersion || demoConfig.isDemoCardId(cardId) - val CardDTO.useOldStyleDerivation: Boolean + val CardDTO.hasOldStyleDerivation: Boolean get() = batchId == "AC01" || batchId == "AC02" || batchId == "CB95" val CardDTO.isExcluded: Boolean get() { - val excludedBatch = excludedBatches.contains(batchId) - val excludedIssuerName = excludedIssuers.contains(issuer.name.uppercase(Locale.ROOT)) - return excludedBatch || excludedIssuerName + val isBatchExcluded = excludedBatches.contains(batchId) + val isIssuerNameExcluded = excludedIssuers.contains(issuer.name.uppercase(Locale.ROOT)) + return isBatchExcluded || isIssuerNameExcluded } val CardDTO.isNotSupportedInThatRelease: Boolean diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/configs/Wallet2CardConfig.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/configs/Wallet2CardConfig.kt index 88464e81e4..0d983f457f 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/configs/Wallet2CardConfig.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/configs/Wallet2CardConfig.kt @@ -18,6 +18,7 @@ data object Wallet2CardConfig : CardConfig { * Logic to determine primary curve for blockchain in TangemWallet 2.0 * Order is important here */ + @Suppress("NullableToStringCall") override fun primaryCurve(blockchain: Blockchain): EllipticCurve? { // order is important, new curve is preferred for wallet 2 // TODO Comment old logic without direct mapping until tests and release diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/tangempay/model/TangemPayTxHistoryListConfig.kt b/domain/visa/src/main/kotlin/com/tangem/domain/tangempay/model/TangemPayTxHistoryListConfig.kt index 538753c2f0..fb61bc2965 100644 --- a/domain/visa/src/main/kotlin/com/tangem/domain/tangempay/model/TangemPayTxHistoryListConfig.kt +++ b/domain/visa/src/main/kotlin/com/tangem/domain/tangempay/model/TangemPayTxHistoryListConfig.kt @@ -1,3 +1,3 @@ package com.tangem.domain.tangempay.model -data class TangemPayTxHistoryListConfig(val customerWalletAddress: String, val refresh: Boolean) \ No newline at end of file +data class TangemPayTxHistoryListConfig(val customerWalletAddress: String, val shouldRefresh: Boolean) \ No newline at end of file diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayTxHistoryListManager.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayTxHistoryListManager.kt index 08a015090c..05ec6ef1d9 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayTxHistoryListManager.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/utils/TangemPayTxHistoryListManager.kt @@ -57,7 +57,7 @@ internal class TangemPayTxHistoryListManager( BatchAction.Reload( requestParams = TangemPayTxHistoryListConfig( customerWalletAddress = customerWalletAddress, - refresh = true, + shouldRefresh = true, ), ), ) @@ -66,7 +66,7 @@ internal class TangemPayTxHistoryListManager( suspend fun loadMore(customerWalletAddress: String) { actionsFlow.emit( BatchAction.LoadMore( - requestParams = TangemPayTxHistoryListConfig(customerWalletAddress, refresh = false), + requestParams = TangemPayTxHistoryListConfig(customerWalletAddress, shouldRefresh = false), ), ) }