diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index d77bf753a1..075ca14999 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -169,6 +169,7 @@ private fun handleWalletAction(action: Action) { is OnboardingWalletAction.FinishOnboarding -> { store.dispatch(GlobalAction.Onboarding.Stop) navigateToWalletScreen() + store.dispatch(BackupAction.DiscardBackup) } is OnboardingWalletAction.ResumeBackup -> { val newAction = when (val backupState = backupService.currentState) { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt index 74277c326f..07d83bda21 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt @@ -537,7 +537,7 @@ class OnboardingWalletFragment : val cardIdFormatter = CardIdFormatter(CardIdDisplayFormat.LastMasked(4)) getString( R.string.onboarding_subtitle_scan_backup_card_format, - state.primaryCardId?.let { cardIdFormatter.getFormattedCardId(it) }, + cardIdFormatter.getFormattedCardId(state.backupCardIds[cardNumber - 1]), ) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt b/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt index bd6e251c2b..250bbcbef2 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt @@ -63,7 +63,11 @@ internal fun OkHttpClient.Builder.addHeaders(requestHeaders: Map val request = chain.request().newBuilder().apply { - requestHeaders.forEach { addHeader(it.key, it.value.invoke()) } + requestHeaders.forEach { + val value = it.value.invoke() + + if (value.isNotBlank()) addHeader(name = it.key, value = value) + } }.build() chain.proceed(request) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index 90a7bc5ca0..24e23b5336 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -144,6 +144,8 @@ internal class SwapViewModel @Inject constructor( private val fromTokenBalanceJobHolder = JobHolder() private val toTokenBalanceJobHolder = JobHolder() + private var isAmountChangedByUser: Boolean = false + val currentScreen: SwapNavScreen get() = swapRouter.currentScreen @@ -480,11 +482,22 @@ internal class SwapViewModel @Inject constructor( val currentSelected = dataState.selectedProvider if (currentSelected != null && consideredProviders.keys.contains(currentSelected)) { // logic for always choose best if already selected provider - bestQuotesProvider ?: currentSelected + if (isAmountChangedByUser) { + isAmountChangedByUser = false + bestQuotesProvider ?: currentSelected + } else { + currentSelected + } } else { val recommendedProvider = successLoadedData.keys.firstOrNull { it.isRecommended } triggerPromoProviderEvent(recommendedProvider, bestQuotesProvider) - recommendedProvider ?: bestQuotesProvider ?: consideredProviders.keys.first() + + if (isAmountChangedByUser) { + isAmountChangedByUser = false + recommendedProvider ?: bestQuotesProvider ?: consideredProviders.keys.first() + } else { + recommendedProvider ?: consideredProviders.keys.first() + } } } else { state.keys.first() @@ -775,6 +788,11 @@ internal class SwapViewModel @Inject constructor( ) } } + + if (dataState.fromCryptoCurrency != null && dataState.tokensDataState != null) { + isAmountChangedByUser = true + } + dataState = dataState.copy( fromCryptoCurrency = fromToken, toCryptoCurrency = toToken, @@ -828,6 +846,8 @@ internal class SwapViewModel @Inject constructor( val newToToken = dataState.fromCryptoCurrency if (newFromToken != null && newToToken != null) { + isAmountChangedByUser = true + dataState = dataState.copy( fromCryptoCurrency = newFromToken, toCryptoCurrency = newToToken, @@ -859,10 +879,16 @@ internal class SwapViewModel @Inject constructor( val decimals = fromToken.currency.decimals val cutValue = cutAmountWithDecimals(decimals, value) lastAmount.value = cutValue - uiState = - stateBuilder.updateSwapAmount(uiState, inputNumberFormatter.formatWithThousands(cutValue, decimals)) + uiState = stateBuilder.updateSwapAmount( + uiState = uiState, + amount = inputNumberFormatter.formatWithThousands(cutValue, decimals), + ) if (toToken != null) { + if (toToken.value.amount != null) { + isAmountChangedByUser = true + } + amountDebouncer.debounce(viewModelScope, DEBOUNCE_AMOUNT_DELAY) { startLoadingQuotes( fromToken = fromToken, diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt index 711cdaac37..f83b3840fe 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/WalletImageResolver.kt @@ -5,18 +5,21 @@ import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.common.util.getCardsCount import com.tangem.domain.demo.DemoConfig import com.tangem.domain.wallets.models.UserWallet +import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.feature.wallet.impl.R +import kotlinx.coroutines.runBlocking +import javax.inject.Inject /** * Wallet image resolver * + * @property walletsRepository wallets repository + * [REDACTED_AUTHOR] */ -internal object WalletImageResolver { - - private const val WALLET_WITHOUT_BACKUP_COUNT = 1 - private const val WALLET_WITH_ONE_BACKUP_COUNT = 2 - private const val WALLET_WITH_TWO_BACKUPS_COUNT = 3 +internal class WalletImageResolver @Inject constructor( + private val walletsRepository: WalletsRepository, +) { /** Get a specified wallet [userWallet] image */ @Suppress("CyclomaticComplexMethod") @@ -36,6 +39,7 @@ internal object WalletImageResolver { return when { cardTypesResolver.isDevKit() -> R.drawable.ill_dev_120_106 + userWallet.isRing() -> userWallet.resolveWalletWithRing() cobrandImage != null -> userWallet.resolveWallet2Cobrand(image = cobrandImage) cardTypesResolver.isWallet2() -> userWallet.resolveWallet2() cardTypesResolver.isShibaWallet() -> userWallet.resolveShibaWallet() @@ -48,6 +52,18 @@ internal object WalletImageResolver { } } + private fun UserWallet.isRing(): Boolean { + return scanResponse.cardTypesResolver.isRing() || + runBlocking { walletsRepository.isWalletWithRing(userWalletId = this@isRing.walletId) } + } + + private fun UserWallet.resolveWalletWithRing(): Int? { + return resolveWallet2( + oneBackupResId = R.drawable.ill_card_with_ring_120_106, + twoBackupResId = R.drawable.ill_card2_with_ring_120_106, + ) + } + private fun UserWallet.resolveWallet2Cobrand(image: Wallet2CobrandImage): Int? { return resolveWallet2(oneBackupResId = image.cards2ResId, twoBackupResId = image.cards3ResId) } @@ -90,4 +106,10 @@ internal object WalletImageResolver { return if (count != null) resolve(count) else null } + + private companion object { + const val WALLET_WITHOUT_BACKUP_COUNT = 1 + const val WALLET_WITH_ONE_BACKUP_COUNT = 2 + const val WALLET_WITH_TWO_BACKUPS_COUNT = 3 + } } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt index dd9b3ee7d1..3f2da0d9a7 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/AddWalletTransformer.kt @@ -1,6 +1,7 @@ package com.tangem.feature.wallet.presentation.wallet.state.transformers import com.tangem.domain.wallets.models.UserWallet +import com.tangem.feature.wallet.presentation.wallet.domain.WalletImageResolver import com.tangem.feature.wallet.presentation.wallet.state.model.WalletScreenState import com.tangem.feature.wallet.presentation.wallet.state.utils.WalletLoadingStateFactory import com.tangem.feature.wallet.presentation.wallet.viewmodels.intents.WalletClickIntents @@ -9,10 +10,14 @@ import kotlinx.collections.immutable.toImmutableList internal class AddWalletTransformer( private val userWallet: UserWallet, private val clickIntents: WalletClickIntents, + private val walletImageResolver: WalletImageResolver, ) : WalletScreenStateTransformer { private val walletLoadingStateFactory by lazy { - WalletLoadingStateFactory(clickIntents = clickIntents) + WalletLoadingStateFactory( + clickIntents = clickIntents, + walletImageResolver = walletImageResolver, + ) } override fun transform(prevState: WalletScreenState): WalletScreenState { diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt index 24b9bb0afd..96d978a00f 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/InitializeWalletsTransformer.kt @@ -15,9 +15,12 @@ internal class InitializeWalletsTransformer( private val selectedWalletIndex: Int, private val wallets: List, private val clickIntents: WalletClickIntents, + private val walletImageResolver: WalletImageResolver, ) : WalletScreenStateTransformer { - private val walletLoadingStateFactory by lazy { WalletLoadingStateFactory(clickIntents = clickIntents) } + private val walletLoadingStateFactory by lazy { + WalletLoadingStateFactory(clickIntents = clickIntents, walletImageResolver = walletImageResolver) + } override fun transform(prevState: WalletScreenState): WalletScreenState { return prevState.copy( @@ -78,7 +81,7 @@ internal class InitializeWalletsTransformer( id = walletId, title = name, additionalInfo = WalletAdditionalInfoFactory.resolve(wallet = this), - imageResId = WalletImageResolver.resolve(userWallet = this), + imageResId = walletImageResolver.resolve(userWallet = this), onRenameClick = clickIntents::onRenameBeforeConfirmationClick, onDeleteClick = clickIntents::onDeleteBeforeConfirmationClick, ) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt index 8b18dcf457..f083b489f0 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/ReinitializeWalletTransformer.kt @@ -2,6 +2,7 @@ package com.tangem.feature.wallet.presentation.wallet.state.transformers import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.models.UserWalletId +import com.tangem.feature.wallet.presentation.wallet.domain.WalletImageResolver import com.tangem.feature.wallet.presentation.wallet.state.model.WalletScreenState import com.tangem.feature.wallet.presentation.wallet.state.utils.WalletLoadingStateFactory import com.tangem.feature.wallet.presentation.wallet.viewmodels.intents.WalletClickIntents @@ -20,9 +21,12 @@ internal class ReinitializeWalletTransformer( private val prevWalletId: UserWalletId, private val newUserWallet: UserWallet, private val clickIntents: WalletClickIntents, + private val walletImageResolver: WalletImageResolver, ) : WalletScreenStateTransformer { - private val walletLoadingStateFactory by lazy { WalletLoadingStateFactory(clickIntents = clickIntents) } + private val walletLoadingStateFactory by lazy { + WalletLoadingStateFactory(clickIntents = clickIntents, walletImageResolver = walletImageResolver) + } override fun transform(prevState: WalletScreenState): WalletScreenState { return prevState.copy( diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt index be16388c83..7da90fd1ec 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UnlockWalletTransformer.kt @@ -2,6 +2,7 @@ package com.tangem.feature.wallet.presentation.wallet.state.transformers import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.models.UserWalletId +import com.tangem.feature.wallet.presentation.wallet.domain.WalletImageResolver import com.tangem.feature.wallet.presentation.wallet.state.model.WalletScreenState import com.tangem.feature.wallet.presentation.wallet.state.model.WalletState import com.tangem.feature.wallet.presentation.wallet.state.utils.WalletLoadingStateFactory @@ -12,9 +13,12 @@ import timber.log.Timber internal class UnlockWalletTransformer( private val unlockedWallets: List, private val clickIntents: WalletClickIntents, + private val walletImageResolver: WalletImageResolver, ) : WalletScreenStateTransformer { - private val walletLoadingStateFactory by lazy { WalletLoadingStateFactory(clickIntents = clickIntents) } + private val walletLoadingStateFactory by lazy { + WalletLoadingStateFactory(clickIntents = clickIntents, walletImageResolver = walletImageResolver) + } override fun transform(prevState: WalletScreenState): WalletScreenState { return prevState.copy( diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UpdateWalletCardsCountTransformer.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UpdateWalletCardsCountTransformer.kt index 59531e1ece..f350399697 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UpdateWalletCardsCountTransformer.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/UpdateWalletCardsCountTransformer.kt @@ -10,6 +10,7 @@ import timber.log.Timber internal class UpdateWalletCardsCountTransformer( private val userWallet: UserWallet, + private val walletImageResolver: WalletImageResolver, ) : WalletStateTransformer(userWallet.walletId) { override fun transform(prevState: WalletState): WalletState { @@ -37,7 +38,7 @@ internal class UpdateWalletCardsCountTransformer( return when (this) { is WalletCardState.Content -> copy( additionalInfo = WalletAdditionalInfoFactory.resolve(wallet = userWallet), - imageResId = WalletImageResolver.resolve(userWallet = userWallet), + imageResId = walletImageResolver.resolve(userWallet = userWallet), cardCount = userWallet.getCardsCount(), ) else -> this diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt index 21d72d857e..28ce2908d0 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/utils/WalletLoadingStateFactory.kt @@ -18,7 +18,10 @@ import kotlinx.coroutines.flow.MutableStateFlow * * @property clickIntents click intents */ -internal class WalletLoadingStateFactory(private val clickIntents: WalletClickIntents) { +internal class WalletLoadingStateFactory( + private val clickIntents: WalletClickIntents, + private val walletImageResolver: WalletImageResolver, +) { fun create(userWallet: UserWallet): WalletState { return userWallet.createStateByWalletType( @@ -80,7 +83,7 @@ internal class WalletLoadingStateFactory(private val clickIntents: WalletClickIn id = walletId, title = name, additionalInfo = if (isMultiCurrency) WalletAdditionalInfoFactory.resolve(wallet = this) else null, - imageResId = WalletImageResolver.resolve(userWallet = this), + imageResId = walletImageResolver.resolve(userWallet = this), onRenameClick = clickIntents::onRenameBeforeConfirmationClick, onDeleteClick = clickIntents::onDeleteBeforeConfirmationClick, ) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletCard.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletCard.kt index 55ca2d223b..6ceb82e75c 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletCard.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/components/common/WalletCard.kt @@ -1,12 +1,11 @@ package com.tangem.feature.wallet.presentation.wallet.ui.components.common import android.content.res.Configuration +import androidx.annotation.DrawableRes import androidx.annotation.StringRes -import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.* import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut -import androidx.compose.animation.togetherWith +import androidx.compose.foundation.Image import androidx.compose.foundation.LocalIndication import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectTapGestures @@ -26,9 +25,11 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -54,7 +55,7 @@ import com.tangem.feature.wallet.impl.R import com.tangem.feature.wallet.presentation.common.WalletPreviewData import com.tangem.feature.wallet.presentation.wallet.state.model.WalletCardState -// private const val HALF_OF_ITEM_WIDTH = 0.5 +private const val HALF_OF_ITEM_WIDTH = 0.5 /** * Wallet card @@ -116,33 +117,31 @@ internal fun WalletCard(state: WalletCardState, isBalanceHidden: Boolean, modifi bottom.linkTo(anchor = parent.bottom, margin = contentVerticalMargin) if (additionalText != null) { - width = Dimension.wrapContent - // TODO: [REDACTED_JIRA] - // width = if (state.imageResId != null) { - // end.linkTo(imageRef.start) - // Dimension.fillToConstraints - // } else { - // Dimension.wrapContent - // } + width = if (state.imageResId != null) { + end.linkTo(imageRef.start) + Dimension.fillToConstraints + } else { + Dimension.wrapContent + } } }, ) - // TODO: [REDACTED_JIRA] // If balance has a large width then image must be hidden - // val hasSpaceForImage by remember(key1 = balanceWidth, key2 = itemSize.width) { - // mutableStateOf(value = balanceWidth < itemSize.width * HALF_OF_ITEM_WIDTH) - // } - // if (hasSpaceForImage) { - // Image( - // id = state.imageResId, - // modifier = Modifier.constrainAs(imageRef) { - // end.linkTo(parent.end) - // bottom.linkTo(parent.bottom) - // height = Dimension.fillToConstraints - // }, - // ) - // } + val hasSpaceForImage by remember(key1 = balanceWidth, key2 = itemSize.width) { + mutableStateOf(value = balanceWidth < itemSize.width * HALF_OF_ITEM_WIDTH) + } + + if (hasSpaceForImage) { + Image( + id = state.imageResId, + modifier = Modifier.constrainAs(imageRef) { + end.linkTo(parent.end) + bottom.linkTo(parent.bottom) + height = Dimension.fillToConstraints + }, + ) + } } } @@ -371,19 +370,19 @@ private fun LockedContent(modifier: Modifier = Modifier) { ) } -// @Composable -// private fun Image(@DrawableRes id: Int?, modifier: Modifier = Modifier) { -// AnimatedVisibility(visible = id != null, modifier = modifier) { -// val imageRes = id ?: return@AnimatedVisibility -// -// Image( -// painter = painterResource(id = imageRes), -// contentDescription = null, -// modifier = Modifier.width(width = TangemTheme.dimens.size120), -// contentScale = ContentScale.FillWidth, -// ) -// } -// } +@Composable +private fun Image(@DrawableRes id: Int?, modifier: Modifier = Modifier) { + AnimatedVisibility(visible = id != null, modifier = modifier) { + val imageRes = id ?: return@AnimatedVisibility + + Image( + painter = painterResource(id = imageRes), + contentDescription = null, + modifier = Modifier.width(width = TangemTheme.dimens.size120), + contentScale = ContentScale.FillWidth, + ) + } +} // region Preview diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index 0e4a2b096d..87496adf65 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -16,6 +16,7 @@ import com.tangem.feature.wallet.presentation.deeplink.WalletDeepLinksHandler import com.tangem.feature.wallet.presentation.router.InnerWalletRouter import com.tangem.feature.wallet.presentation.wallet.analytics.WalletScreenAnalyticsEvent import com.tangem.feature.wallet.presentation.wallet.analytics.utils.SelectedWalletAnalyticsSender +import com.tangem.feature.wallet.presentation.wallet.domain.WalletImageResolver import com.tangem.feature.wallet.presentation.wallet.domain.WalletNameMigrationUseCase import com.tangem.feature.wallet.presentation.wallet.loaders.WalletScreenContentLoader import com.tangem.feature.wallet.presentation.wallet.state.WalletStateController @@ -67,6 +68,7 @@ internal class WalletViewModel @Inject constructor( private val refreshMultiCurrencyWalletQuotesUseCase: RefreshMultiCurrencyWalletQuotesUseCase, private val shouldAskPermissionUseCase: ShouldAskPermissionUseCase, private val marketsFeatureToggles: MarketsFeatureToggles, + private val walletImageResolver: WalletImageResolver, analyticsEventsHandler: AnalyticsEventHandler, ) : ViewModel() { @@ -267,7 +269,12 @@ internal class WalletViewModel @Inject constructor( coroutineScope = viewModelScope, ) - stateHolder.update(transformer = UpdateWalletCardsCountTransformer(action.selectedWallet)) + stateHolder.update( + transformer = UpdateWalletCardsCountTransformer( + userWallet = action.selectedWallet, + walletImageResolver = walletImageResolver, + ), + ) } is WalletsUpdateActionResolver.Action.UpdateWalletName -> { stateHolder.update(transformer = RenameWalletTransformer(action.selectedWalletId, action.name)) @@ -290,6 +297,7 @@ internal class WalletViewModel @Inject constructor( selectedWalletIndex = action.selectedWalletIndex, wallets = action.wallets, clickIntents = clickIntents, + walletImageResolver = walletImageResolver, ), ) @@ -322,6 +330,7 @@ internal class WalletViewModel @Inject constructor( prevWalletId = action.prevWalletId, newUserWallet = action.selectedWallet, clickIntents = clickIntents, + walletImageResolver = walletImageResolver, ), ) } @@ -337,6 +346,7 @@ internal class WalletViewModel @Inject constructor( AddWalletTransformer( userWallet = action.selectedWallet, clickIntents = clickIntents, + walletImageResolver = walletImageResolver, ), ) @@ -386,6 +396,7 @@ internal class WalletViewModel @Inject constructor( transformer = UnlockWalletTransformer( unlockedWallets = action.unlockedWallets, clickIntents = clickIntents, + walletImageResolver = walletImageResolver, ), ) diff --git a/features/wallet/impl/src/main/res/drawable/ill_card2_with_ring_120_106.png b/features/wallet/impl/src/main/res/drawable/ill_card2_with_ring_120_106.png new file mode 100644 index 0000000000..3f71b06f0e Binary files /dev/null and b/features/wallet/impl/src/main/res/drawable/ill_card2_with_ring_120_106.png differ diff --git a/features/wallet/impl/src/main/res/drawable/ill_card_with_ring_120_106.png b/features/wallet/impl/src/main/res/drawable/ill_card_with_ring_120_106.png new file mode 100644 index 0000000000..adee5dfbc2 Binary files /dev/null and b/features/wallet/impl/src/main/res/drawable/ill_card_with_ring_120_106.png differ