diff --git a/common/ui/src/main/java/com/tangem/common/ui/account/AccountNameUM.kt b/common/ui/src/main/java/com/tangem/common/ui/account/AccountNameUM.kt index 305212c2bc..9b44a22a11 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/account/AccountNameUM.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/account/AccountNameUM.kt @@ -37,7 +37,7 @@ sealed interface AccountNameUM { * * @property raw the raw string value of the custom account name */ - data class Custom(internal val raw: String) : AccountNameUM { + data class Custom(val raw: String) : AccountNameUM { override val value: TextReference = stringReference(value = raw) } diff --git a/detekt_baseline_report.txt b/detekt_baseline_report.txt index 9c154d1888..b8cef02ecb 100644 --- a/detekt_baseline_report.txt +++ b/detekt_baseline_report.txt @@ -1,7 +1,7 @@ ========================================== Detekt Baseline Updater & Issue Counter ========================================== -Date: 2025-11-18 15:11:30 +Date: 2025-11-19 15:21:36 Updating detekt baseline for debug variant... @@ -13,13 +13,13 @@ Counting issues in baseline files... ========================================== Summary: - Total Issues: 1798 + Total Issues: 1778 Modules with Issues: 91 Average Issues per Module: 19 Progress: - Fixed: 4 out of 1802 (0%) - Remaining: 1798 + Fixed: 24 out of 1802 (1%) + Remaining: 1778 ========================================== All Modules with Issues (sorted by count) @@ -27,7 +27,7 @@ All Modules with Issues (sorted by count) Module Issues ──────────────────────────────────────────────────────────────── -features/wallet/impl 171 +features/wallet/impl 170 features/markets/impl 155 features/onboarding-v2/impl 137 features/onramp/impl 89 @@ -51,7 +51,6 @@ core/ui 27 common/ui 26 features/tangempay/details/impl 24 data/visa 24 -features/account/impl 23 features/wallet-settings/impl 21 data/nft 20 features/swap/data 15 @@ -85,6 +84,7 @@ 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 diff --git a/features/account/impl/detekt-baseline-debug.xml b/features/account/impl/detekt-baseline-debug.xml index b3408ebf0b..dce6c95e71 100644 --- a/features/account/impl/detekt-baseline-debug.xml +++ b/features/account/impl/detekt-baseline-debug.xml @@ -2,28 +2,9 @@ - BooleanPropertyNaming:AccountCreateEditModel.kt$AccountCreateEditModel$val duplicateAccountNames = (error as? AddCryptoPortfolioUseCase.Error.AccountListRequirementsNotMet) ?.cause is AccountList.Error.DuplicateAccountNames - BooleanPropertyNaming:AccountCreateEditModel.kt$AccountCreateEditModel$val duplicateAccountNames = (error as? UpdateCryptoPortfolioUseCase.Error.AccountListRequirementsNotMet) ?.cause is AccountList.Error.DuplicateAccountNames - BooleanPropertyNaming:AccountCreateEditModel.kt$AccountCreateEditModel$val showConfirmDialog = uiState.value.buttonState.isButtonEnabled - BooleanPropertyNaming:AccountCreateEditUM.kt$AccountCreateEditUM.Button$val showProgress: Boolean - MultilineLambdaItParameter:AccountCreateEditContent.kt${ /* * If the user had the default main account name and enters the same name during renaming, * we should use the default value instead of custom to avoid breaking the name validation process. */ val newName = if (wasDefault && it == defaultAccountName) { AccountNameUM.DefaultMain } else { AccountNameUM.Custom(raw = it) } account.onNameChange(newName) } - MultilineLambdaItParameter:ArchivedAccountListContent.kt$PreviewStateProvider${ ArchivedAccountUM( accountId = it.toString(), accountName = accountName, accountIconUM = portfolioIcon(), tokensInfo = stringReference("10 tokens"), networksInfo = stringReference("2 networks"), onClick = {}, isLoading = it % 2 == 0, ) } - NamedArguments:PortfolioSelectorModel.kt$PortfolioSelectorModel$buildAccountsList(portfolioData, artworks, isEnabled, selectedAccount) - NamedArguments:PortfolioSelectorModel.kt$PortfolioSelectorModel$buildUiList(isAccountsMode, portfolioData, artworks, isEnabled, selectedAccount) - NamedArguments:PortfolioSelectorModel.kt$PortfolioSelectorModel$buildWalletList(portfolioData, artworks, isEnabled, selectedAccount) NonBooleanPropertyPrefixedWithIs:DefaultPortfolioSelectorController.kt$DefaultPortfolioSelectorController$override val isAccountMode: Flow<Boolean> by lazy { isAccountsModeEnabledUseCase() } NonBooleanPropertyPrefixedWithIs:DefaultPortfolioSelectorController.kt$DefaultPortfolioSelectorController$override val isEnabled: MutableStateFlow<(UserWallet, AccountStatus) -> Boolean> = MutableStateFlow { _, _ -> true } NonBooleanPropertyPrefixedWithIs:DefaultPortfolioSelectorController.kt$DefaultPortfolioSelectorController$private val isAccountsModeEnabledUseCase: IsAccountsModeEnabledUseCase NonBooleanPropertyPrefixedWithIs:PortfolioSelectorModel.kt$PortfolioSelectorModel$private val isAccountsModeEnabledUseCase: IsAccountsModeEnabledUseCase - NullableBooleanCheck:AccountDetailsModel.kt$AccountDetailsModel$getUserWalletUseCase(account.accountId.userWalletId) .getOrNull()?.isMultiCurrency ?: false - PropertyUsedBeforeDeclaration:AccountDetailsModel.kt$AccountDetailsModel$_uiState - PropertyUsedBeforeDeclaration:ArchivedAccountListModel.kt$ArchivedAccountListModel$_uiState - UnnecessaryLet:ArchivedAccountListModel.kt$ArchivedAccountListModel$let { _uiState.value = newState } - UnnecessaryLet:PortfolioSelectorContent.kt$PortfolioSelectorPreviewData$let(::add) - UnusedImports:PortfolioSelectorBS.kt$import androidx.compose.foundation.background - UseEmptyCounterpart:AccountCreateEditModel.kt$AccountCreateEditModel$mapOf() - UseEmptyCounterpart:ArchivedAccountListModel.kt$ArchivedAccountListModel$mapOf() - VarCouldBeVal:AccountDetailsContent.kt$PreviewStateProvider$var portfolioIcon = AccountIconPreviewData.randomAccountIcon() - VarCouldBeVal:ArchivedAccountListModel.kt$ArchivedAccountListModel$private var getArchivedAccountsJob = JobHolder() diff --git a/features/account/impl/src/main/java/com/tangem/features/account/archived/ArchivedAccountListModel.kt b/features/account/impl/src/main/java/com/tangem/features/account/archived/ArchivedAccountListModel.kt index 6ead9dcbc6..67d7387811 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/archived/ArchivedAccountListModel.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/archived/ArchivedAccountListModel.kt @@ -46,9 +46,10 @@ internal class ArchivedAccountListModel @Inject constructor( private val params = paramsContainer.require() private val onCloseClick = { router.pop() } - val uiState: StateFlow get() = _uiState - private val _uiState: MutableStateFlow = MutableStateFlow(getInitialState()) - private var getArchivedAccountsJob = JobHolder() + val uiState: StateFlow + field = MutableStateFlow(getInitialState()) + + private val getArchivedAccountsJob = JobHolder() init { getArchivedAccounts() @@ -85,7 +86,9 @@ internal class ArchivedAccountListModel @Inject constructor( }, ) - newState?.let { _uiState.value = newState } + if (newState != null) { + uiState.value = newState + } } .flowOn(dispatchers.default) .launchIn(modelScope) @@ -93,11 +96,11 @@ internal class ArchivedAccountListModel @Inject constructor( } private fun recoverCryptoPortfolio(accountId: AccountId) = modelScope.launch { - _uiState.update { it.toggleProgress(accountId, isLoading = true) } + uiState.update { it.toggleProgress(accountId, isLoading = true) } val result = withContext(dispatchers.default) { recoverCryptoPortfolioUseCase(accountId) } - _uiState.update { it.toggleProgress(accountId, isLoading = false) } + uiState.update { it.toggleProgress(accountId, isLoading = false) } result .onLeft(::handleRecoverError) .onRight { @@ -134,7 +137,7 @@ internal class ArchivedAccountListModel @Inject constructor( messageSender.showErrorDialog(universalError = featureError, onDismiss = router::pop) } - private fun logError(error: AccountFeatureError, params: Map = mapOf()) { + private fun logError(error: AccountFeatureError, params: Map = emptyMap()) { val exception = IllegalStateException(error.toString()) Timber.e(exception) diff --git a/features/account/impl/src/main/java/com/tangem/features/account/archived/ui/ArchivedAccountListContent.kt b/features/account/impl/src/main/java/com/tangem/features/account/archived/ui/ArchivedAccountListContent.kt index 5614b931a9..782341c8e1 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/archived/ui/ArchivedAccountListContent.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/archived/ui/ArchivedAccountListContent.kt @@ -170,15 +170,15 @@ private class PreviewStateProvider : CollectionPreviewParameterProvider ArchivedAccountUM( - accountId = it.toString(), + accountId = id.toString(), accountName = accountName, accountIconUM = portfolioIcon(), tokensInfo = stringReference("10 tokens"), networksInfo = stringReference("2 networks"), onClick = {}, - isLoading = it % 2 == 0, + isLoading = id % 2 == 0, ) }.toImmutableList() val first = AccountArchivedUM.Content( diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt index bc827c729f..08191c3d3f 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/AccountCreateEditModel.kt @@ -124,10 +124,10 @@ internal class AccountCreateEditModel @Inject constructor( } private fun handleAddAccountError(error: AddCryptoPortfolioUseCase.Error) { - val duplicateAccountNames = (error as? AddCryptoPortfolioUseCase.Error.AccountListRequirementsNotMet) + val isDuplicateAccountNamesError = (error as? AddCryptoPortfolioUseCase.Error.AccountListRequirementsNotMet) ?.cause is AccountList.Error.DuplicateAccountNames when { - duplicateAccountNames -> showAccountNameExist() + isDuplicateAccountNamesError -> showAccountNameExist() else -> { showSomethingWrong() logError(error = AccountFeatureError.CreateAccount.FailedToCreateAccount(cause = error)) @@ -159,10 +159,10 @@ internal class AccountCreateEditModel @Inject constructor( } private fun handleEditAccountError(error: UpdateCryptoPortfolioUseCase.Error) { - val duplicateAccountNames = (error as? UpdateCryptoPortfolioUseCase.Error.AccountListRequirementsNotMet) + val isDuplicateAccountNamesError = (error as? UpdateCryptoPortfolioUseCase.Error.AccountListRequirementsNotMet) ?.cause is AccountList.Error.DuplicateAccountNames when { - duplicateAccountNames -> showAccountNameExist() + isDuplicateAccountNamesError -> showAccountNameExist() else -> { showSomethingWrong() logError(error = AccountFeatureError.EditAccount.FailedToEditAccount(cause = error)) @@ -176,30 +176,39 @@ internal class AccountCreateEditModel @Inject constructor( } private fun onCloseClick() { - val showConfirmDialog = uiState.value.buttonState.isButtonEnabled - if (showConfirmDialog) unsaveChangeDialog() else router.pop() + val shouldShowConfirmDialog = uiState.value.buttonState.isButtonEnabled + if (shouldShowConfirmDialog) unsaveChangeDialog() else router.pop() } private fun onIconSelect(icon: CryptoPortfolioIcon.Icon) { - uiState.value = uiState.value - .updateIconSelect(icon) - .validateNewState() + uiState.update { currentState -> + currentState.updateIconSelect(icon) + .validateNewState() + } } private fun onColorSelect(color: CryptoPortfolioIcon.Color) { - uiState.value = uiState.value - .updateColorSelect(color) - .validateNewState() + uiState.update { currentState -> + currentState.updateColorSelect(color) + .validateNewState() + } } private fun onNameChange(name: AccountNameUM) { - uiState.value = uiState.value - .updateName(name) - .validateNewState() + val isNotEmptyCustomName = (name as? AccountNameUM.Custom)?.raw?.isNotEmpty() == true + if (!name.isValidName() && isNotEmptyCustomName) { + Timber.d("Invalid account name: $name") + return + } + + uiState.update { currentState -> + currentState.updateName(name) + .validateNewState() + } } private fun AccountCreateEditUM.validateNewState(): AccountCreateEditUM { - val isValidName = this.account.name.toDomain().isRight() + val isValidName = this.account.name.isValidName() val isAvailableForConfirm = when (params) { is AccountCreateEditComponent.Params.Create -> isValidName is AccountCreateEditComponent.Params.Edit -> { @@ -213,6 +222,8 @@ internal class AccountCreateEditModel @Inject constructor( return this.updateButton(isButtonEnabled = isAvailableForConfirm) } + private fun AccountNameUM.isValidName(): Boolean = this.toDomain().isRight() + private fun getInitialState(): AccountCreateEditUM { return AccountCreateEditUM( title = umBuilder.toolbarTitle, @@ -250,7 +261,7 @@ internal class AccountCreateEditModel @Inject constructor( } } - private fun logError(error: AccountFeatureError, params: Map = mapOf()) { + private fun logError(error: AccountFeatureError, params: Map = emptyMap()) { val exception = IllegalStateException(error.toString()) Timber.e(exception) diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt index 52925be89a..da8220a1b5 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUM.kt @@ -51,7 +51,7 @@ internal data class AccountCreateEditUM( data class Button( val isButtonEnabled: Boolean, - val showProgress: Boolean, + val shouldShowProgress: Boolean, val onConfirmClick: () -> Unit, val text: TextReference, ) diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt index 3b710ed06d..a3e921cf2d 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/entity/AccountCreateEditUMBuilder.kt @@ -77,7 +77,7 @@ internal class AccountCreateEditUMBuilder( } return AccountCreateEditUM.Button( isButtonEnabled = false, - showProgress = false, + shouldShowProgress = false, onConfirmClick = onConfirmClick, text = text, ) @@ -119,7 +119,7 @@ internal class AccountCreateEditUMBuilder( } fun AccountCreateEditUM.toggleProgress(showProgress: Boolean): AccountCreateEditUM { - return this.copy(buttonState = this.buttonState.copy(showProgress = showProgress)) + return this.copy(buttonState = this.buttonState.copy(shouldShowProgress = showProgress)) } fun AccountCreateEditUM.updateDerivationIndex(derivationIndex: Int): AccountCreateEditUM { diff --git a/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt b/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt index 2c7168bc93..e9302796ad 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/createedit/ui/AccountCreateEditContent.kt @@ -80,7 +80,7 @@ internal fun AccountCreateEditContent(state: AccountCreateEditUM, modifier: Modi color = TangemTheme.colors.text.tertiary, ) } - if (state.buttonState.showProgress) { + if (state.buttonState.shouldShowProgress) { focusManager.clearFocus() keyboardController?.hide() } @@ -89,7 +89,7 @@ internal fun AccountCreateEditContent(state: AccountCreateEditUM, modifier: Modi .fillMaxWidth() .padding(16.dp), enabled = state.buttonState.isButtonEnabled, - showProgress = state.buttonState.showProgress, + showProgress = state.buttonState.shouldShowProgress, text = state.buttonState.text.resolveReference(), onClick = state.buttonState.onConfirmClick, ) @@ -129,15 +129,15 @@ private fun AccountSummary(account: Account) { placeholder = account.inputPlaceholder, value = account.name.value.resolveReference(), singleLine = true, - onValueChange = { + onValueChange = { value -> /* * If the user had the default main account name and enters the same name during renaming, * we should use the default value instead of custom to avoid breaking the name validation process. */ - val newName = if (wasDefault && it == defaultAccountName) { + val newName = if (wasDefault && value == defaultAccountName) { AccountNameUM.DefaultMain } else { - AccountNameUM.Custom(raw = it) + AccountNameUM.Custom(raw = value) } account.onNameChange(newName) @@ -321,7 +321,7 @@ private class PreviewStateProvider : CollectionPreviewParameterProvider() - val uiState: StateFlow get() = _uiState - private val _uiState: MutableStateFlow = MutableStateFlow(buildUI(params.account)) + val uiState: StateFlow + field = MutableStateFlow(buildUI(params.account)) + private val accountId = params.account.accountId init { singleAccountSupplier(SingleAccountProducer.Params(accountId)) - .onEach { account -> _uiState.update { buildUI(account) } } + .onEach { account -> uiState.update { buildUI(account) } } .launchIn(modelScope) } @@ -89,11 +90,11 @@ internal class AccountDetailsModel @Inject constructor( } private fun archiveCryptoPortfolio() = modelScope.launch { - _uiState.update { it.toggleProgress(true) } + uiState.update { it.toggleProgress(true) } archiveCryptoPortfolioUseCase(accountId) .onLeft { error -> failedArchiveDialog(error) - _uiState.update { it.toggleProgress(false) } + uiState.update { it.toggleProgress(false) } } .onRight { val message = resourceReference(R.string.account_archive_success_message) @@ -136,8 +137,8 @@ internal class AccountDetailsModel @Inject constructor( ) } } - val isMultiCurrency = getUserWalletUseCase(account.accountId.userWalletId) - .getOrNull()?.isMultiCurrency ?: false + val isMultiCurrency = getUserWalletUseCase(account.accountId.userWalletId).getOrNull() + ?.isMultiCurrency == true return AccountDetailsUM( accountName = account.accountName.toUM().value, accountIcon = account.portfolioIcon.toUM(), diff --git a/features/account/impl/src/main/java/com/tangem/features/account/details/ui/AccountDetailsContent.kt b/features/account/impl/src/main/java/com/tangem/features/account/details/ui/AccountDetailsContent.kt index bbc332ae27..1d0afaa6d2 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/details/ui/AccountDetailsContent.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/details/ui/AccountDetailsContent.kt @@ -196,7 +196,7 @@ private val archiveModeAvailable private class PreviewStateProvider : CollectionPreviewParameterProvider( buildList { val accountName = "Main" - var portfolioIcon = AccountIconPreviewData.randomAccountIcon() + val portfolioIcon = AccountIconPreviewData.randomAccountIcon() val first = AccountDetailsUM( onCloseClick = {}, onAccountEditClick = {}, diff --git a/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt b/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt index 475b7e7db8..570998a30d 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/selector/PortfolioSelectorModel.kt @@ -53,7 +53,13 @@ internal class PortfolioSelectorModel @Inject constructor( flow4 = selectorController.isEnabled, flow5 = selectedAccountState, transform = { isAccountsMode, portfolioData, artworks, isEnabled, selectedAccount -> - val uiList = buildUiList(isAccountsMode, portfolioData, artworks, isEnabled, selectedAccount) + val uiList = buildUiList( + isAccountsMode = isAccountsMode, + portfolioData = portfolioData, + artworks = artworks, + isEnabled = isEnabled, + selectedAccount = selectedAccount, + ) val title = when (isAccountsMode) { true -> resourceReference(R.string.common_choose_account) false -> resourceReference(R.string.common_choose_wallet) @@ -75,8 +81,18 @@ internal class PortfolioSelectorModel @Inject constructor( isEnabled: (UserWallet, AccountStatus) -> Boolean, selectedAccount: AccountId?, ): List = when (isAccountsMode) { - true -> buildAccountsList(portfolioData, artworks, isEnabled, selectedAccount) - false -> buildWalletList(portfolioData, artworks, isEnabled, selectedAccount) + true -> buildAccountsList( + portfolioData = portfolioData, + artworks = artworks, + isEnabled = isEnabled, + selectedAccount = selectedAccount, + ) + false -> buildWalletList( + portfolioData = portfolioData, + artworks = artworks, + isEnabled = isEnabled, + selectedAccount = selectedAccount, + ) } private fun buildWalletList( diff --git a/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorBS.kt b/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorBS.kt index f33617879f..5e63cd75cc 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorBS.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorBS.kt @@ -1,7 +1,6 @@ package com.tangem.features.account.selector.ui import android.content.res.Configuration -import androidx.compose.foundation.background import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable diff --git a/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorContent.kt b/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorContent.kt index 0fc52dd44d..6b8f1872fd 100644 --- a/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorContent.kt +++ b/features/account/impl/src/main/java/com/tangem/features/account/selector/ui/PortfolioSelectorContent.kt @@ -161,76 +161,65 @@ internal object PortfolioSelectorPreviewData { get() = walletItem.copy(isEnabled = false) val firstList - get() = buildList { + get() = listOf( PortfolioSelectorItemUM.GroupTitle( id = UUID.randomUUID().toString(), name = stringReference("Tangem 2.0"), - ).let(::add) - accountItem - .let { PortfolioSelectorItemUM.Portfolio(it, false) } - .let(::add) - lockedAccountItem - .let { PortfolioSelectorItemUM.Portfolio(it, false) } - .let(::add) + ), + PortfolioSelectorItemUM.Portfolio(accountItem, false), + PortfolioSelectorItemUM.Portfolio(lockedAccountItem, false), PortfolioSelectorItemUM.GroupTitle( id = UUID.randomUUID().toString(), name = stringReference("Tangem White"), - ).let(::add) - accountItem.let { PortfolioSelectorItemUM.Portfolio(it, true) } - .let(::add) - } + ), + PortfolioSelectorItemUM.Portfolio(accountItem, true), + ) val secondList - get() = firstList + buildList { + get() = firstList + listOf( PortfolioSelectorItemUM.GroupTitle( id = UUID.randomUUID().toString(), name = resourceReference(R.string.common_locked_wallets), - ).let(::add) - add(PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false)) - add(PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false)) - } + ), + PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false), + PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false), + ) val walletList - get() = buildList { - add(PortfolioSelectorItemUM.Portfolio(walletItem, false)) - add(PortfolioSelectorItemUM.Portfolio(walletItem, true)) - } + get() = listOf( + PortfolioSelectorItemUM.Portfolio(walletItem, false), + PortfolioSelectorItemUM.Portfolio(walletItem, true), + ) val lockedWalletList - get() = buildList { - add(PortfolioSelectorItemUM.Portfolio(walletItem, true)) - val title = PortfolioSelectorItemUM.GroupTitle( + get() = listOf( + PortfolioSelectorItemUM.Portfolio(walletItem, true), + PortfolioSelectorItemUM.GroupTitle( id = UUID.randomUUID().toString(), name = resourceReference(R.string.common_locked_wallets), - ) - add(title) - add(PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false)) - add(PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false)) - } + ), + PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false), + PortfolioSelectorItemUM.Portfolio(lockedWalletItem, false), + ) } internal class PortfolioSelectorPreviewStateProvider : CollectionPreviewParameterProvider( - buildList { - val first = PortfolioSelectorUM( + listOf( + PortfolioSelectorUM( title = resourceReference(R.string.common_choose_account), items = firstList.toImmutableList(), - ) - val second = PortfolioSelectorUM( + ), + PortfolioSelectorUM( title = resourceReference(R.string.common_choose_account), items = secondList.toImmutableList(), - ) - val walletListUM = PortfolioSelectorUM( + ), + PortfolioSelectorUM( title = resourceReference(R.string.common_choose_wallet), items = walletList.toImmutableList(), - ) - val lockedWalletListUM = - PortfolioSelectorUM( - title = resourceReference(R.string.common_choose_wallet), - items = lockedWalletList.toImmutableList(), - ) - add(first) - add(second) - add(walletListUM) - add(lockedWalletListUM) - }, + ), + PortfolioSelectorUM( + title = resourceReference(R.string.common_choose_wallet), + items = lockedWalletList.toImmutableList(), + ), + ), ) \ No newline at end of file diff --git a/features/wallet/impl/detekt-baseline-debug.xml b/features/wallet/impl/detekt-baseline-debug.xml index 252986850a..db463f017b 100644 --- a/features/wallet/impl/detekt-baseline-debug.xml +++ b/features/wallet/impl/detekt-baseline-debug.xml @@ -78,7 +78,6 @@ MultilineLambdaItParameter:WalletModel.kt$WalletModel${ walletScreenContentLoader.load( userWallet = it, clickIntents = clickIntents, coroutineScope = modelScope, isRefresh = true, ) } 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:WalletNFTListSubscriberV2.kt$WalletNFTListSubscriberV2${ stateController.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, ) }