diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/ActionViewModel.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/ActionViewModel.kt index 3c04d86d59..8ba6cf2f72 100644 --- a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/ActionViewModel.kt +++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/ui/ActionViewModel.kt @@ -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) { if (list.isNotEmpty()) notifyItemsChanged(list) diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/PersonalizationJsonConverter.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/PersonalizationJsonConverter.kt index 36c074f0a4..322f1643b6 100644 --- a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/PersonalizationJsonConverter.kt +++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/personalize/converter/PersonalizationJsonConverter.kt @@ -80,7 +80,8 @@ internal class JsonToConfig : Converter() { 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() { 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)) diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/converter/SimpleConverters.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/converter/SimpleConverters.kt index e68c77e083..e06e2492f0 100644 --- a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/converter/SimpleConverters.kt +++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/converter/SimpleConverters.kt @@ -17,7 +17,7 @@ class SignResponseConverter : BaseResponseConverter() { 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 { 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 { 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)) ) diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/ui/ResponseFragment.kt b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/ui/ResponseFragment.kt index 0dcb15e807..ea236daef2 100644 --- a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/ui/ResponseFragment.kt +++ b/tangem-devkit/src/main/java/com/tangem/devkit/ucase/variants/responses/ui/ResponseFragment.kt @@ -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) diff --git a/tangem-devkit/src/main/res/values/strings_response.xml b/tangem-devkit/src/main/res/values/strings_response.xml index 2fcd8010e4..3a2778c9d1 100644 --- a/tangem-devkit/src/main/res/values/strings_response.xml +++ b/tangem-devkit/src/main/res/values/strings_response.xml @@ -151,9 +151,9 @@ - Is success + Success - Is success + Success diff --git a/tangem-sdk/build.gradle b/tangem-sdk/build.gradle index 14d86acb0d..9c2742da98 100644 --- a/tangem-sdk/build.gradle +++ b/tangem-sdk/build.gradle @@ -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' +} \ No newline at end of file diff --git a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/responses/ResponseJsonConverter.kt b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/converter/ResponseConverter.kt similarity index 90% rename from tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/responses/ResponseJsonConverter.kt rename to tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/converter/ResponseConverter.kt index 06ca8702e5..392bdc9f96 100644 --- a/tangem-devkit/src/main/java/com/tangem/devkit/ucase/domain/responses/ResponseJsonConverter.kt +++ b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/converter/ResponseConverter.kt @@ -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 { 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) + } } \ No newline at end of file diff --git a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/extensions/List.kt b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/extensions/List.kt new file mode 100644 index 0000000000..a86c326453 --- /dev/null +++ b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/extensions/List.kt @@ -0,0 +1,13 @@ +package com.tangem.tangem_sdk_new.extensions + +fun List.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 +} \ No newline at end of file