From 4eef7d1eb602674f3c5230c38ecf0fbbfcbf9364 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 31 Mar 2020 14:05:24 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tangemtest/extensions/List.kt | 16 ++++++ .../ucase/domain/responses/GsonInitializer.kt | 55 +++++++++++++++++++ .../tangemtest/ucase/ui/ParamsViewModel.kt | 21 ++----- 3 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 tangem-demo/src/main/java/com/tangem/tangemtest/extensions/List.kt create mode 100644 tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/GsonInitializer.kt diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/List.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/List.kt new file mode 100644 index 0000000000..d637d6f89a --- /dev/null +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/extensions/List.kt @@ -0,0 +1,16 @@ +package com.tangem.tangemtest.extensions + +/** +[REDACTED_AUTHOR] + */ +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 diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/GsonInitializer.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/GsonInitializer.kt new file mode 100644 index 0000000000..826eeae2eb --- /dev/null +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/GsonInitializer.kt @@ -0,0 +1,55 @@ +package com.tangem.tangemtest.ucase.domain.responses + +import com.google.gson.* +import com.tangem.commands.ProductMask +import com.tangem.commands.Settings +import com.tangem.commands.SettingsMask +import com.tangem.commands.SigningMethod +import com.tangem.common.extensions.toHexString +import java.lang.reflect.Type + +/** +[REDACTED_AUTHOR] + */ +class GsonInitializer { + val gson: Gson by lazy { init() } + + private fun init(): Gson { + val builder = GsonBuilder().apply { + registerTypeAdapter(ByteArray::class.java, ByteTypeAdapter()) + registerTypeAdapter(SigningMethod::class.java, SigningMethodTypeAdapter()) + registerTypeAdapter(SettingsMask::class.java, SettingsMaskTypeAdapter()) + registerTypeAdapter(ProductMask::class.java, ProductMaskTypeAdapter()) + } + builder.setPrettyPrinting() + return builder.create() + } +} + +class ByteTypeAdapter : JsonSerializer { + override fun serialize(src: ByteArray, typeOfSrc: Type, context: JsonSerializationContext): JsonElement { + return JsonPrimitive(src.toHexString()) + } +} + +class SettingsMaskTypeAdapter : JsonSerializer { + override fun serialize(src: SettingsMask, typeOfSrc: Type, context: JsonSerializationContext): JsonElement { + val arrayElement = JsonArray() + Settings.values() + .filter { src.contains(it) } + .forEach { arrayElement.add(it.name) } + return arrayElement + } +} + +class ProductMaskTypeAdapter : JsonSerializer { + override fun serialize(src: ProductMask, typeOfSrc: Type, context: JsonSerializationContext): JsonElement { + return JsonPrimitive(src.rawValue.toString()) + } +} + +class SigningMethodTypeAdapter : JsonSerializer { + override fun serialize(src: SigningMethod, typeOfSrc: Type, context: JsonSerializationContext): JsonElement { + return JsonPrimitive(src.rawValue.toString()) + } +} \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ParamsViewModel.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ParamsViewModel.kt index 3253c67402..3de5fece3d 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ParamsViewModel.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ParamsViewModel.kt @@ -5,17 +5,14 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.google.gson.Gson -import com.google.gson.GsonBuilder -import com.google.gson.JsonPrimitive -import com.google.gson.JsonSerializer import com.tangem.CardManager import com.tangem.commands.Card -import com.tangem.common.extensions.toHexString import com.tangem.tangemtest._arch.SingleLiveEvent import com.tangem.tangemtest._arch.structure.Id import com.tangem.tangemtest._arch.structure.abstraction.Item import com.tangem.tangemtest.commons.performAction import com.tangem.tangemtest.ucase.domain.paramsManager.ParamsManager +import com.tangem.tangemtest.ucase.domain.responses.GsonInitializer import com.tangem.tasks.ScanEvent import com.tangem.tasks.TaskError import com.tangem.tasks.TaskEvent @@ -76,18 +73,8 @@ class ParamsViewModel(val paramsManager: ParamsManager) : ViewModel() { internal class Notifier(private val vm: ParamsViewModel) { - private val gsonConverter: Gson by lazy { createGson() } - - private fun createGson(): Gson { - val builder = GsonBuilder() - builder.registerTypeAdapter(ByteArray::class.java, JsonSerializer { src, typeOfSrc, context -> - JsonPrimitive(src.toHexString()) - }) - builder.setPrettyPrinting() - return builder.create() - } - private var notShowedError: TaskError? = null + private val gson: Gson = GsonInitializer().gson fun handleActionResult(response: TaskEvent<*>, list: List) { notifyParameterChanges(list) @@ -112,12 +99,12 @@ internal class Notifier(private val vm: ParamsViewModel) { when (event) { is ScanEvent.OnReadEvent -> { vm.ldCard.postValue(event.card) - vm.ldResponse.postValue(gsonConverter.toJson(event)) + vm.ldResponse.postValue(gson.toJson(event)) } is ScanEvent.OnVerifyEvent -> { vm.ldIsVerified.postValue(true) } - else -> vm.ldResponse.postValue(gsonConverter.toJson(event)) + else -> vm.ldResponse.postValue(gson.toJson(event)) } }