Updated on 2026-08-14

This commit is contained in:
Tangem 2020-05-07 12:28:47 +00:00
commit 5d36b4b9f5
12 changed files with 51 additions and 34 deletions

View file

@ -3,7 +3,6 @@ package com.tangem.devkit.ucase.ui
import android.view.View
import androidx.annotation.UiThread
import androidx.lifecycle.*
import com.google.gson.Gson
import com.tangem.SessionError
import com.tangem.TangemSdk
import com.tangem.commands.Card
@ -16,7 +15,6 @@ import com.tangem.devkit._arch.structure.Payload
import com.tangem.devkit._arch.structure.abstraction.Item
import com.tangem.devkit._arch.structure.abstraction.iterate
import com.tangem.devkit.ucase.domain.paramsManager.ItemsManager
import com.tangem.devkit.ucase.domain.responses.ResponseJsonConverter
import com.tangem.devkit.ucase.resources.ActionType
import com.tangem.devkit.ucase.tunnel.ViewScreen
import com.tangem.devkit.ucase.variants.personalize.converter.ItemTypes
@ -134,7 +132,6 @@ class ActionViewModel(private val itemsManager: ItemsManager) : ViewModel(), Lif
internal class Notifier(private val vm: ActionViewModel) {
private var notShowedError: SessionError? = null
private val gson: Gson = ResponseJsonConverter().gson
fun handleActionResult(result: CompletionResult<*>, list: List<Item>) {
if (list.isNotEmpty()) notifyItemsChanged(list)

View file

@ -80,7 +80,8 @@ internal class JsonToConfig : Converter<PersonalizationJson, PersonalizationConf
// copy whole object and then checking tricky places
config.cardData = jsonCardData
config.itsToken = jsonCardData.token_contract_address.isNotEmpty() || jsonCardData.token_symbol.isNotEmpty()
config.itsToken = jsonCardData.token_contract_address?.isNotEmpty() ?: false
|| jsonCardData.token_symbol?.isNotEmpty() ?: false
val selectedBlockchain = Helper.listOfBlockchain().firstOrNull { it.value == jsonCardData.blockchain }
if (selectedBlockchain == null) {
@ -180,9 +181,9 @@ internal class ConfigToJson : Converter<PersonalizationConfig, PersonalizationJs
jsonDto.cardData.token_symbol = config.cardData.token_symbol
jsonDto.cardData.token_decimal = config.cardData.token_decimal
} else {
jsonDto.cardData.token_contract_address = ""
jsonDto.cardData.token_symbol = ""
jsonDto.cardData.token_decimal = 0
jsonDto.cardData.token_contract_address = null
jsonDto.cardData.token_symbol = null
jsonDto.cardData.token_decimal = null
}
}

View file

@ -192,9 +192,9 @@ class CardData {
var date = ""
var batch = ""
var blockchain = ""
var token_symbol = ""
var token_contract_address = ""
var token_decimal: Long = 0
var token_symbol: String? = null
var token_contract_address: String? = null
var token_decimal: Long? = null
var product_note = false
var product_tag = false
var product_id_card = false

View file

@ -87,7 +87,7 @@ fun PersonalizationJson.toCardConfig(): CardConfig {
productMask = productMask,
tokenSymbol = this.cardData.token_symbol,
tokenContractAddress = this.cardData.token_contract_address,
tokenDecimal = this.cardData.token_decimal.toInt(),
tokenDecimal = this.cardData.token_decimal?.toInt(),
issuerName = this.issuerName,
manufactureDateTime = Calendar.getInstance().time,
manufacturerSignature = null)

View file

@ -2,8 +2,8 @@ package com.tangem.devkit.ucase.variants.responses.converter
import com.tangem.devkit._arch.structure.Id
import com.tangem.devkit._arch.structure.abstraction.*
import com.tangem.devkit.ucase.domain.responses.ResponseFieldConverter
import com.tangem.devkit.ucase.variants.responses.item.TextHeaderItem
import com.tangem.tangem_sdk_new.converter.ResponseFieldConverter
import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf
/**

View file

@ -43,12 +43,12 @@ class CardConverter : BaseResponseConverter<Card>() {
group.addItem(TextItem(CardId.manufacturerName, from.manufacturerName))
group.addItem(TextItem(CardId.status, valueToString(from.status)))
group.addItem(TextItem(CardId.firmwareVersion, from.firmwareVersion))
group.addItem(TextItem(CardId.cardPublicKey, fieldConverter.byteArray(from.cardPublicKey)))
group.addItem(TextItem(CardId.issuerPublicKey, fieldConverter.byteArray(from.issuerPublicKey)))
group.addItem(TextItem(CardId.cardPublicKey, fieldConverter.byteArrayToHex(from.cardPublicKey)))
group.addItem(TextItem(CardId.issuerPublicKey, fieldConverter.byteArrayToHex(from.issuerPublicKey)))
group.addItem(TextItem(CardId.curve, valueToString(from.curve)))
group.addItem(TextItem(CardId.maxSignatures, valueToString(from.maxSignatures)))
group.addItem(TextItem(CardId.pauseBeforePin2, valueToString(from.pauseBeforePin2)))
group.addItem(TextItem(CardId.walletPublicKey, fieldConverter.byteArray(from.walletPublicKey)))
group.addItem(TextItem(CardId.walletPublicKey, fieldConverter.byteArrayToHex(from.walletPublicKey)))
group.addItem(TextItem(CardId.walletRemainingSignatures, valueToString(from.walletRemainingSignatures)))
group.addItem(TextItem(CardId.walletSignedHashes, valueToString(from.walletSignedHashes)))
group.addItem(TextItem(CardId.health, valueToString(from.health)))
@ -72,7 +72,7 @@ class CardConverter : BaseResponseConverter<Card>() {
group.addItem(TextItem(CardDataId.manufactureDateTime, valueToString(data.manufactureDateTime)))
group.addItem(TextItem(CardDataId.issuerName, data.issuerName))
group.addItem(TextItem(CardDataId.blockchainName, data.blockchainName))
group.addItem(TextItem(CardDataId.manufacturerSignature, fieldConverter.byteArray(data.manufacturerSignature)))
group.addItem(TextItem(CardDataId.manufacturerSignature, fieldConverter.byteArrayToHex(data.manufacturerSignature)))
group.addItem(TextItem(CardDataId.tokenSymbol, data.tokenSymbol))
group.addItem(TextItem(CardDataId.tokenContractAddress, data.tokenContractAddress))
group.addItem(TextItem(CardDataId.tokenDecimal, data.tokenSymbol))

View file

@ -17,7 +17,7 @@ class SignResponseConverter : BaseResponseConverter<SignResponse>() {
TextItem(SignId.cid, from.cardId),
TextItem(SignId.walletSignedHashes, valueToString(from.walletSignedHashes)),
TextItem(SignId.walletRemainingSignatures, valueToString(from.walletRemainingSignatures)),
TextItem(SignId.signature, fieldConverter.byteArray(from.signature))
TextItem(SignId.signature, fieldConverter.byteArrayToHex(from.signature))
)
}
}
@ -33,7 +33,7 @@ class CreateWalletResponseConverter : BaseResponseConverter<CreateWalletResponse
return listOf(
TextItem(CreateWalletId.cid, from.cardId),
TextItem(CreateWalletId.cardStatus, valueToString(from.status)),
TextItem(CreateWalletId.walletPublicKey, fieldConverter.byteArray(from.walletPublicKey))
TextItem(CreateWalletId.walletPublicKey, fieldConverter.byteArrayToHex(from.walletPublicKey))
)
}
}
@ -51,8 +51,8 @@ class ReadIssuerDataResponseConverter : BaseResponseConverter<ReadIssuerDataResp
override fun convert(from: ReadIssuerDataResponse): List<Item> {
return listOf(
TextItem(ReadIssuerDataId.cid, from.cardId),
TextItem(ReadIssuerDataId.issuerData, fieldConverter.byteArray(from.issuerData)),
TextItem(ReadIssuerDataId.issuerDataSignature, fieldConverter.byteArray(from.issuerDataSignature)),
TextItem(ReadIssuerDataId.issuerData, fieldConverter.byteArrayToString(from.issuerData)),
TextItem(ReadIssuerDataId.issuerDataSignature, fieldConverter.byteArrayToHex(from.issuerDataSignature)),
TextItem(ReadIssuerDataId.issuerDataCounter, valueToString(from.issuerDataCounter))
)
}
@ -63,8 +63,8 @@ class ReadIssuerExtraDataResponseConverter : BaseResponseConverter<ReadIssuerExt
return listOf(
TextItem(ReadIssuerExtraDataId.cid, from.cardId),
TextItem(ReadIssuerExtraDataId.size, valueToString(from.size)),
TextItem(ReadIssuerExtraDataId.issuerData, fieldConverter.byteArray(from.issuerData)),
TextItem(ReadIssuerExtraDataId.issuerDataSignature, fieldConverter.byteArray(from.issuerDataSignature)),
TextItem(ReadIssuerExtraDataId.issuerData, fieldConverter.byteArrayToString(from.issuerData)),
TextItem(ReadIssuerExtraDataId.issuerDataSignature, fieldConverter.byteArrayToHex(from.issuerDataSignature)),
TextItem(ReadIssuerExtraDataId.issuerDataCounter, valueToString(from.issuerDataCounter))
)
}
@ -82,8 +82,8 @@ class ReadUserDataResponseConverter : BaseResponseConverter<ReadUserDataResponse
override fun convert(from: ReadUserDataResponse): List<Item> {
return listOf(
TextItem(ReadUserDataId.cid, from.cardId),
TextItem(ReadUserDataId.userData, fieldConverter.byteArray(from.userData)),
TextItem(ReadUserDataId.userProtectedData, fieldConverter.byteArray(from.userProtectedData)),
TextItem(ReadUserDataId.userData, fieldConverter.byteArrayToString(from.userData)),
TextItem(ReadUserDataId.userProtectedData, fieldConverter.byteArrayToString(from.userProtectedData)),
TextItem(ReadUserDataId.userCounter, valueToString(from.userCounter)),
TextItem(ReadUserDataId.userProtectedCounter, valueToString(from.userProtectedCounter))
)

View file

@ -12,10 +12,10 @@ import com.tangem.devkit.R
import com.tangem.devkit._arch.widget.WidgetBuilder
import com.tangem.devkit._main.MainViewModel
import com.tangem.devkit.extensions.shareText
import com.tangem.devkit.ucase.domain.responses.ResponseJsonConverter
import com.tangem.devkit.ucase.ui.BaseFragment
import com.tangem.devkit.ucase.variants.responses.ResponseViewModel
import com.tangem.devkit.ucase.variants.responses.ui.widget.ResponseItemBuilder
import com.tangem.tangem_sdk_new.converter.ResponseConverter
/**
[REDACTED_AUTHOR]
@ -68,7 +68,7 @@ open class ResponseFragment : BaseFragment() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_share -> {
shareText(ResponseJsonConverter().convertResponse(mainActivityVM.commandResponse))
shareText(ResponseConverter().convertResponse(mainActivityVM.commandResponse))
}
}
return super.onOptionsItemSelected(item)

View file

@ -151,9 +151,9 @@
<!-- Field names - Response: Depersonalize -->
<string name="response_depersonalize_is_success">Is success</string>
<string name="response_depersonalize_is_success">Success</string>
<string name="info_response_depersonalize_is_success">Is success</string>
<string name="info_response_depersonalize_is_success">Success</string>
<!-- Field names - Response: Read Issuer (Extra) Data -->

View file

@ -58,4 +58,6 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
implementation 'com.google.code.gson:gson:2.8.6'
}

View file

@ -1,9 +1,9 @@
package com.tangem.devkit.ucase.domain.responses
package com.tangem.tangem_sdk_new.converter
import com.google.gson.*
import com.tangem.commands.*
import com.tangem.common.extensions.toHexString
import com.tangem.devkit.extensions.print
import com.tangem.tangem_sdk_new.extensions.print
import java.lang.reflect.Type
import java.text.DateFormat
import java.util.*
@ -11,7 +11,7 @@ import java.util.*
/**
[REDACTED_AUTHOR]
*/
class ResponseJsonConverter {
class ResponseConverter {
val gson: Gson by lazy { init() }
@ -36,7 +36,7 @@ class ByteTypeAdapter(
private val fieldConverter: ResponseFieldConverter
) : JsonSerializer<ByteArray> {
override fun serialize(src: ByteArray, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
return JsonPrimitive(fieldConverter.byteArray(src))
return JsonPrimitive(fieldConverter.byteArrayToHex(src))
}
}
@ -109,7 +109,11 @@ class ResponseFieldConverter {
return Settings.values().filter { masks.contains(it) }.map { it.name }
}
fun byteArray(byteArray: ByteArray?): String? {
fun byteArrayToHex(byteArray: ByteArray?): String? {
return byteArray?.toHexString()
}
fun byteArrayToString(byteArray: ByteArray?): String? {
return if (byteArray == null) null else String(byteArray)
}
}

View file

@ -0,0 +1,13 @@
package com.tangem.tangem_sdk_new.extensions
fun <T> List<T>.print(delimiter: String = ", ", wrap: Boolean = true): String {
val builder = StringBuilder()
forEach { builder.append(it).append(delimiter) }
val length = builder.length
if (length > delimiter.length) {
builder.delete(length - delimiter.length, length)
}
val result = builder.toString()
return if (wrap) "[$result]" else result
}