From 2720e5588c45053f390b35538ace879ea4ea5314 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 17 Mar 2024 21:59:37 +0800 Subject: [PATCH 1/2] Updated on 2026-08-14 --- .../com/tangem/tap/data/RuntimeUserWalletsStore.kt | 6 ++++++ .../datasource/local/userwallet/UserWalletsStore.kt | 2 ++ .../data/feedback/DefaultFeedbackRepository.kt | 12 ++++++++---- .../data/feedback/converters/CardInfoConverter.kt | 2 +- .../tangem/domain/feedback/FeedbackDataBuilder.kt | 8 +++++++- .../feedback/GetSupportFeedbackEmailUseCase.kt | 2 ++ .../com/tangem/domain/feedback/models/CardInfo.kt | 2 +- .../tangem/domain/feedback/models/UserWalletsInfo.kt | 6 ++++++ .../domain/feedback/repository/FeedbackRepository.kt | 7 +++---- 9 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 domain/feedback/src/main/java/com/tangem/domain/feedback/models/UserWalletsInfo.kt diff --git a/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt b/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt index 884fa65323..87b5944231 100644 --- a/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt +++ b/app/src/main/java/com/tangem/tap/data/RuntimeUserWalletsStore.kt @@ -22,6 +22,12 @@ internal class RuntimeUserWalletsStore( ?.singleOrNull { it.walletId == key } } + override suspend fun getAllSyncOrNull(): List? { + return walletsStateHolder.userWalletsListManager + ?.userWallets + ?.firstOrNull() + } + override suspend fun update(userWalletId: UserWalletId, update: suspend (UserWallet) -> UserWallet) { walletsStateHolder.userWalletsListManager?.update(userWalletId, update) } diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt index f3b1c56267..bfee20e460 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/userwallet/UserWalletsStore.kt @@ -9,6 +9,8 @@ interface UserWalletsStore { suspend fun getSyncOrNull(key: UserWalletId): UserWallet? + suspend fun getAllSyncOrNull(): List? + @Throws suspend fun update(userWalletId: UserWalletId, update: suspend (UserWallet) -> UserWallet) } \ No newline at end of file diff --git a/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt b/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt index 6148da1827..9f6c1aa883 100644 --- a/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt +++ b/data/feedback/src/main/java/com/tangem/data/feedback/DefaultFeedbackRepository.kt @@ -10,10 +10,7 @@ import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getObjectMap import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.datasource.local.walletmanager.WalletManagersStore -import com.tangem.domain.feedback.models.AppLogModel -import com.tangem.domain.feedback.models.BlockchainInfo -import com.tangem.domain.feedback.models.CardInfo -import com.tangem.domain.feedback.models.PhoneInfo +import com.tangem.domain.feedback.models.* import com.tangem.domain.feedback.repository.FeedbackRepository import com.tangem.domain.wallets.models.UserWallet import timber.log.Timber @@ -38,6 +35,13 @@ internal class DefaultFeedbackRepository( private val context: Context, ) : FeedbackRepository { + override suspend fun getUserWalletsInfo(): UserWalletsInfo { + return UserWalletsInfo( + selectedUserWalletId = getSelectedUserWallet().walletId.stringValue, + totalUserWallets = userWalletsStore.getAllSyncOrNull()?.size ?: error("No user wallets found"), + ) + } + override suspend fun getCardInfo(): CardInfo { return CardInfoConverter.convert(value = getSelectedUserWallet()) } diff --git a/data/feedback/src/main/java/com/tangem/data/feedback/converters/CardInfoConverter.kt b/data/feedback/src/main/java/com/tangem/data/feedback/converters/CardInfoConverter.kt index e9a1a61019..7d16454467 100644 --- a/data/feedback/src/main/java/com/tangem/data/feedback/converters/CardInfoConverter.kt +++ b/data/feedback/src/main/java/com/tangem/data/feedback/converters/CardInfoConverter.kt @@ -15,13 +15,13 @@ internal object CardInfoConverter : Converter { override fun convert(value: UserWallet): CardInfo { return with(value.scanResponse) { CardInfo( - userWalletId = value.walletId.stringValue, cardId = card.cardId, firmwareVersion = card.firmwareVersion.stringValue, cardBlockchain = walletData?.blockchain, signedHashesList = card.wallets.map { CardInfo.SignedHashes(curve = it.curve.curve, total = it.totalSignedHashes?.toString()) }, + isImported = value.isImported, isStart2Coin = value.scanResponse.card.isStart2Coin, ) } diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt index 35740e1357..5350902e33 100644 --- a/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt +++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/FeedbackDataBuilder.kt @@ -3,6 +3,7 @@ package com.tangem.domain.feedback import com.tangem.domain.feedback.models.BlockchainInfo import com.tangem.domain.feedback.models.CardInfo import com.tangem.domain.feedback.models.PhoneInfo +import com.tangem.domain.feedback.models.UserWalletsInfo import com.tangem.domain.feedback.utils.breakLine import com.tangem.domain.feedback.models.BlockchainInfo.Addresses as BlockchainAddresses @@ -10,12 +11,17 @@ internal class FeedbackDataBuilder { private val builder = StringBuilder() + fun addUserWalletsInfo(userWalletsInfo: UserWalletsInfo) { + builder.appendKeyValue("User Wallet ID", userWalletsInfo.selectedUserWalletId) + builder.appendKeyValue("Total saved wallets", userWalletsInfo.totalUserWallets.toString()) + } + fun addCardInfo(cardInfo: CardInfo) { builder.appendKeyValue("Card ID", cardInfo.cardId) builder.appendKeyValue("Firmware version", cardInfo.firmwareVersion) + builder.appendKeyValue("Imported wallet", if (cardInfo.isImported) "yes" else "no") builder.appendKeyValue("Card Blockchain", cardInfo.cardBlockchain) builder.appendSignedHashes(cardInfo.signedHashesList) - builder.appendKeyValue("User Wallet ID", cardInfo.userWalletId) } fun addBlockchainInfoList(blockchainInfoList: List) { diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/GetSupportFeedbackEmailUseCase.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/GetSupportFeedbackEmailUseCase.kt index 25db3a0ef6..6ab491c734 100644 --- a/domain/feedback/src/main/java/com/tangem/domain/feedback/GetSupportFeedbackEmailUseCase.kt +++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/GetSupportFeedbackEmailUseCase.kt @@ -71,6 +71,8 @@ class GetSupportFeedbackEmailUseCase( skipLine() append( FeedbackDataBuilder().apply { + addUserWalletsInfo(userWalletsInfo = feedbackRepository.getUserWalletsInfo()) + addDelimiter() addCardInfo(cardInfo) addDelimiter() addBlockchainInfoList(blockchainInfoList = feedbackRepository.getBlockchainInfoList()) diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/models/CardInfo.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/models/CardInfo.kt index 79eb5285c6..7ae84ac608 100644 --- a/domain/feedback/src/main/java/com/tangem/domain/feedback/models/CardInfo.kt +++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/models/CardInfo.kt @@ -1,11 +1,11 @@ package com.tangem.domain.feedback.models data class CardInfo( - val userWalletId: String, val cardId: String, val firmwareVersion: String, val cardBlockchain: String?, val signedHashesList: List, + val isImported: Boolean, val isStart2Coin: Boolean, ) { diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/models/UserWalletsInfo.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/models/UserWalletsInfo.kt new file mode 100644 index 0000000000..0438e80ae4 --- /dev/null +++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/models/UserWalletsInfo.kt @@ -0,0 +1,6 @@ +package com.tangem.domain.feedback.models + +data class UserWalletsInfo( + val selectedUserWalletId: String, + val totalUserWallets: Int, +) \ No newline at end of file diff --git a/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt b/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt index 5e137df28a..58281067c1 100644 --- a/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt +++ b/domain/feedback/src/main/java/com/tangem/domain/feedback/repository/FeedbackRepository.kt @@ -1,13 +1,12 @@ package com.tangem.domain.feedback.repository -import com.tangem.domain.feedback.models.AppLogModel -import com.tangem.domain.feedback.models.BlockchainInfo -import com.tangem.domain.feedback.models.CardInfo -import com.tangem.domain.feedback.models.PhoneInfo +import com.tangem.domain.feedback.models.* import java.io.File interface FeedbackRepository { + suspend fun getUserWalletsInfo(): UserWalletsInfo + suspend fun getCardInfo(): CardInfo suspend fun getBlockchainInfoList(): List From 7018750110d908d8267736ba2b485d27f867c5e4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 Mar 2024 13:25:43 +0500 Subject: [PATCH 2/2] Updated on 2026-08-14 --- .../core/ui/extensions/BlockchainIcons.kt | 5 ++++ .../src/main/res/drawable/ic_radiant_22.xml | 18 +++++++++++++ .../src/main/res/drawable/img_radiant_22.xml | 27 +++++++++++++++++++ .../domain/common/extensions/Blockchain.kt | 4 +++ gradle/dependencies.toml | 2 +- 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 core/ui/src/main/res/drawable/ic_radiant_22.xml create mode 100644 core/ui/src/main/res/drawable/img_radiant_22.xml diff --git a/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt b/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt index f49147879e..0854deb7f8 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/extensions/BlockchainIcons.kt @@ -57,6 +57,7 @@ fun getActiveIconRes(blockchainId: String): Int { "aurora", "aurora/test" -> R.drawable.img_aurora_22 "areon", "areon/test" -> R.drawable.img_areon_22 "pls", "pls/test" -> R.drawable.img_pls_22 + "radiant" -> R.drawable.img_radiant_22 else -> R.drawable.ic_alert_24 } } @@ -115,6 +116,7 @@ fun getActiveIconResByNetworkId(networkId: String): Int { "aurora", "aurora/test" -> R.drawable.img_aurora_22 "areon", "areon/test" -> R.drawable.img_areon_22 "pls", "pls/test" -> R.drawable.img_pls_22 + "radiant" -> R.drawable.img_radiant_22 else -> R.drawable.ic_alert_24 } } @@ -170,6 +172,7 @@ fun getActiveIconResByCoinId(coinId: String): Int { "aurora-near" -> R.drawable.img_aurora_22 "areon" -> R.drawable.img_areon_22 "pls" -> R.drawable.img_pls_22 + "radiant" -> R.drawable.img_radiant_22 else -> R.drawable.ic_alert_24 } } @@ -228,6 +231,7 @@ fun getGreyedOutIconRes(blockchainId: String): Int { "aurora", "aurora/test" -> R.drawable.ic_aurora_22 "areon", "areon/test" -> R.drawable.ic_areon_22 "pls", "pls/test" -> R.drawable.ic_pls_22 + "radiant" -> R.drawable.ic_radiant_22 else -> R.drawable.ic_alert_24 } } @@ -286,6 +290,7 @@ fun getGreyedOutIconResByNetworkId(networkId: String): Int { "aurora", "aurora/test" -> R.drawable.ic_aurora_22 "areon", "areon/test" -> R.drawable.ic_areon_22 "pls", "pls/test" -> R.drawable.ic_pls_22 + "radiant" -> R.drawable.ic_radiant_22 else -> R.drawable.ic_alert_24 } } \ No newline at end of file diff --git a/core/ui/src/main/res/drawable/ic_radiant_22.xml b/core/ui/src/main/res/drawable/ic_radiant_22.xml new file mode 100644 index 0000000000..53d3f81f81 --- /dev/null +++ b/core/ui/src/main/res/drawable/ic_radiant_22.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/core/ui/src/main/res/drawable/img_radiant_22.xml b/core/ui/src/main/res/drawable/img_radiant_22.xml new file mode 100644 index 0000000000..8b5ea3383f --- /dev/null +++ b/core/ui/src/main/res/drawable/img_radiant_22.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index 44e60f9690..3ee891252a 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -97,6 +97,7 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? { "nexa/testnet" -> Blockchain.NexaTestnet // FIXME "zksync" -> Blockchain.ZkSyncEra // FIXME "zksync/testnet" -> Blockchain.ZkSyncEraTestnet // FIXME + "radiant" -> Blockchain.Radiant else -> null } } @@ -195,6 +196,7 @@ fun Blockchain.toNetworkId(): String { Blockchain.ZkSyncEraTestnet -> "zksync/testnet" // FIXME Blockchain.Nexa -> "nexa" // FIXME Blockchain.NexaTestnet -> "nexa/testnet" // FIXME + Blockchain.Radiant -> "radiant" } } @@ -261,6 +263,7 @@ fun Blockchain.toCoinId(): String { Blockchain.ZkSyncEraTestnet -> "zksync/testnet" // FIXME Blockchain.Nexa -> "nexa" // FIXME Blockchain.NexaTestnet -> "nexa/testnet" // FIXME + Blockchain.Radiant -> "radiant" } } @@ -292,4 +295,5 @@ private val excludedBlockchains = listOf( Blockchain.ZkSyncEraTestnet, Blockchain.Nexa, Blockchain.NexaTestnet, + Blockchain.Radiant, ) \ No newline at end of file diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index b7e7c03a4e..a91c4340a5 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -85,7 +85,7 @@ leakcanary = "2.13" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "develop-528" +tangemBlockchainSdk = "develop-537" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "develop-332" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^