Updated on 2026-08-14

This commit is contained in:
Tangem 2024-03-20 08:27:03 +00:00
commit 76393d2fae
13 changed files with 90 additions and 13 deletions

View file

@ -22,6 +22,12 @@ internal class RuntimeUserWalletsStore(
?.singleOrNull { it.walletId == key }
}
override suspend fun getAllSyncOrNull(): List<UserWallet>? {
return walletsStateHolder.userWalletsListManager
?.userWallets
?.firstOrNull()
}
override suspend fun update(userWalletId: UserWalletId, update: suspend (UserWallet) -> UserWallet) {
walletsStateHolder.userWalletsListManager?.update(userWalletId, update)
}

View file

@ -9,6 +9,8 @@ interface UserWalletsStore {
suspend fun getSyncOrNull(key: UserWalletId): UserWallet?
suspend fun getAllSyncOrNull(): List<UserWallet>?
@Throws
suspend fun update(userWalletId: UserWalletId, update: suspend (UserWallet) -> UserWallet)
}

View file

@ -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
}
}

View file

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="22dp"
android:height="22dp"
android:viewportWidth="22"
android:viewportHeight="22">
<path
android:fillColor="#000000"
android:pathData="M11.425,8.957H7.391C6.759,8.957 6.153,8.706 5.706,8.259L3.34,5.894H11.766C14.163,5.894 16.106,7.837 16.106,10.234C16.106,12.052 14.989,13.608 13.404,14.255L10.66,11.511H11.425C12.131,11.511 12.702,10.939 12.702,10.234C12.702,9.529 12.131,8.957 11.425,8.957Z" />
<path
android:fillColor="#000000"
android:pathData="M12.362,18.319L5.935,11.892C5.292,11.249 5.747,10.149 6.657,10.149H8.617L16.787,18.319H12.362Z" />
<path
android:fillColor="#000000"
android:pathData="M14.234,18.319C13.245,18.757 12.151,19 11,19C6.582,19 3,15.418 3,11C3,9.623 3.348,8.327 3.961,7.195L4.465,7.7C3.964,8.691 3.681,9.813 3.681,11C3.681,15.042 6.958,18.319 11,18.319C11.627,18.319 12.235,18.24 12.816,18.092L13.043,18.319H14.234Z" />
<path
android:fillColor="#000000"
android:pathData="M16.215,17.066C17.92,15.599 19,13.426 19,11C19,6.582 15.418,3 11,3C8.523,3 6.309,4.126 4.841,5.894H5.756C7.086,4.529 8.944,3.681 11,3.681C15.042,3.681 18.319,6.958 18.319,11C18.319,13.238 17.315,15.241 15.733,16.583L16.215,17.066Z" />
</vector>

View file

@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="22dp"
android:height="22dp"
android:viewportWidth="22"
android:viewportHeight="22">
<group>
<clip-path
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z"/>
<path
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z"
android:fillColor="#1A3764"/>
<path
android:pathData="M11.425,8.957H7.391C6.759,8.957 6.153,8.706 5.706,8.259L3.34,5.894H11.766C14.163,5.894 16.106,7.837 16.106,10.234C16.106,12.052 14.989,13.608 13.404,14.255L10.66,11.511H11.425C12.131,11.511 12.702,10.939 12.702,10.234C12.702,9.529 12.131,8.957 11.425,8.957Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M12.362,18.319L5.935,11.892C5.292,11.249 5.747,10.149 6.657,10.149H8.617L16.787,18.319H12.362Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M14.234,18.319C13.245,18.757 12.151,19 11,19C6.582,19 3,15.418 3,11C3,9.623 3.348,8.327 3.961,7.195L4.465,7.7C3.964,8.691 3.681,9.813 3.681,11C3.681,15.042 6.958,18.319 11,18.319C11.627,18.319 12.235,18.24 12.816,18.092L13.043,18.319H14.234Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M16.215,17.066C17.92,15.599 19,13.426 19,11C19,6.582 15.418,3 11,3C8.523,3 6.309,4.126 4.841,5.894H5.756C7.086,4.529 8.944,3.681 11,3.681C15.042,3.681 18.319,6.958 18.319,11C18.319,13.238 17.315,15.241 15.733,16.583L16.215,17.066Z"
android:fillColor="#ffffff"/>
</group>
</vector>

View file

@ -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())
}

View file

@ -15,13 +15,13 @@ internal object CardInfoConverter : Converter<UserWallet, CardInfo> {
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,
)
}

View file

@ -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<BlockchainInfo>) {

View file

@ -71,6 +71,8 @@ class GetSupportFeedbackEmailUseCase(
skipLine()
append(
FeedbackDataBuilder().apply {
addUserWalletsInfo(userWalletsInfo = feedbackRepository.getUserWalletsInfo())
addDelimiter()
addCardInfo(cardInfo)
addDelimiter()
addBlockchainInfoList(blockchainInfoList = feedbackRepository.getBlockchainInfoList())

View file

@ -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<SignedHashes>,
val isImported: Boolean,
val isStart2Coin: Boolean,
) {

View file

@ -0,0 +1,6 @@
package com.tangem.domain.feedback.models
data class UserWalletsInfo(
val selectedUserWalletId: String,
val totalUserWallets: Int,
)

View file

@ -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<BlockchainInfo>

View file

@ -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,7 +196,7 @@ fun Blockchain.toNetworkId(): String {
Blockchain.ZkSyncEraTestnet -> "zksync/testnet" // FIXME
Blockchain.Nexa -> "nexa" // FIXME
Blockchain.NexaTestnet -> "nexa/testnet" // FIXME
Blockchain.Radiant -> "TODO() add" // FIXME
Blockchain.Radiant -> "radiant"
}
}
@ -262,7 +263,7 @@ fun Blockchain.toCoinId(): String {
Blockchain.ZkSyncEraTestnet -> "zksync/testnet" // FIXME
Blockchain.Nexa -> "nexa" // FIXME
Blockchain.NexaTestnet -> "nexa/testnet" // FIXME
Blockchain.Radiant -> "TODO() add" // FIXME
Blockchain.Radiant -> "radiant"
}
}
@ -294,4 +295,5 @@ private val excludedBlockchains = listOf(
Blockchain.ZkSyncEraTestnet,
Blockchain.Nexa,
Blockchain.NexaTestnet,
Blockchain.Radiant,
)