diff --git a/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt b/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt index 2b77d3ba85..2d1ab24a3b 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletStores/repository/implementation/utils/WalletDataOperations.kt @@ -205,16 +205,7 @@ internal fun List.updateSelectedAddress( if (index == -1) return this val oldWalletData = this[index] - val addresses = oldWalletData.walletAddresses - ?: return this - val selectedAddress = addresses.list - .firstOrNull { it.type == addressType } - ?: addresses.selectedAddress - val updatedWalletData = oldWalletData.copy( - walletAddresses = addresses.copy( - selectedAddress = selectedAddress, - ), - ) + val updatedWalletData = oldWalletData.updateSelectedAddress(addressType) if (oldWalletData == updatedWalletData) return this return this.toMutableList().apply { @@ -222,6 +213,21 @@ internal fun List.updateSelectedAddress( } } +internal fun WalletDataModel.updateSelectedAddress( + addressType: AddressType, +): WalletDataModel { + val addresses = walletAddresses ?: return this + val selectedAddress = addresses.list + .firstOrNull { it.type == addressType } + ?: addresses.selectedAddress + + return this.copy( + walletAddresses = addresses.copy( + selectedAddress = selectedAddress, + ), + ) +} + internal fun WalletDataModel.isSameWalletData(other: WalletDataModel): Boolean { return this.currency == other.currency } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt index 9a26ff4057..b66b7d3038 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt @@ -183,8 +183,13 @@ class SingleWalletView : WalletView() { } } + // FIXME: Move to model watcher + private var watchedPrimaryWallet: WalletDataModel? = null private fun setupAddressCard(state: WalletState, binding: FragmentWalletBinding) = with(binding.lAddress) { val primaryWallet = state.primaryWalletData + if (primaryWallet == watchedPrimaryWallet) return@with + watchedPrimaryWallet = primaryWallet + if (primaryWallet?.walletAddresses != null && primaryWallet.currency is Currency.Blockchain) { binding.lAddress.root.show() if (primaryWallet.shouldShowMultipleAddress()) { @@ -211,16 +216,16 @@ class SingleWalletView : WalletView() { ), ) } - setupCardInfo(state) + setupCardInfo(primaryWallet) } else { binding.lAddress.root.hide() } } - private fun setupCardInfo(state: WalletState) { + private fun setupCardInfo(walletData: WalletDataModel) { val textView = binding?.lAddress?.tvInfo - val blockchain = state.primaryWalletData?.currency?.blockchain - if (textView != null && blockchain != null) { + val blockchain = walletData.currency.blockchain + if (textView != null) { textView.text = textView.getString( id = R.string.address_qr_code_message_format, blockchain.fullName,