Updated on 2026-08-14
This commit is contained in:
commit
5d36b4b9f5
12 changed files with 51 additions and 34 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 -->
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue