Updated on 2026-08-14
This commit is contained in:
commit
9477fa8f64
6 changed files with 22 additions and 9 deletions
|
|
@ -1,119 +0,0 @@
|
|||
package com.tangem.devkit.ucase.domain.responses
|
||||
|
||||
import com.google.gson.*
|
||||
import com.tangem.commands.*
|
||||
import com.tangem.common.extensions.toHexString
|
||||
import com.tangem.devkit.extensions.print
|
||||
import java.lang.reflect.Type
|
||||
import java.text.DateFormat
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
class ResponseJsonConverter {
|
||||
|
||||
val gson: Gson by lazy { init() }
|
||||
|
||||
private val fieldConverter = ResponseFieldConverter()
|
||||
|
||||
private fun init(): Gson {
|
||||
val builder = GsonBuilder().apply {
|
||||
registerTypeAdapter(ByteArray::class.java, ByteTypeAdapter(fieldConverter))
|
||||
registerTypeAdapter(SigningMethodMask::class.java, SigningMethodTypeAdapter(fieldConverter))
|
||||
registerTypeAdapter(SettingsMask::class.java, SettingsMaskTypeAdapter(fieldConverter))
|
||||
registerTypeAdapter(ProductMask::class.java, ProductMaskTypeAdapter(fieldConverter))
|
||||
registerTypeAdapter(Date::class.java, DateTypeAdapter())
|
||||
}
|
||||
builder.setPrettyPrinting()
|
||||
return builder.create()
|
||||
}
|
||||
|
||||
fun convertResponse(response: CommandResponse?): String = gson.toJson(response)
|
||||
}
|
||||
|
||||
class ByteTypeAdapter(
|
||||
private val fieldConverter: ResponseFieldConverter
|
||||
) : JsonSerializer<ByteArray> {
|
||||
override fun serialize(src: ByteArray, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
|
||||
return JsonPrimitive(fieldConverter.byteArrayToHex(src))
|
||||
}
|
||||
}
|
||||
|
||||
class SettingsMaskTypeAdapter(
|
||||
private val fieldConverter: ResponseFieldConverter
|
||||
) : JsonSerializer<SettingsMask> {
|
||||
override fun serialize(src: SettingsMask, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
|
||||
return JsonArray().apply {
|
||||
fieldConverter.settingsMaskList(src).forEach { add(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ProductMaskTypeAdapter(
|
||||
private val fieldConverter: ResponseFieldConverter
|
||||
) : JsonSerializer<ProductMask> {
|
||||
override fun serialize(src: ProductMask, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
|
||||
return JsonArray().apply {
|
||||
fieldConverter.productMaskList(src).forEach { add(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SigningMethodTypeAdapter(
|
||||
private val fieldConverter: ResponseFieldConverter
|
||||
) : JsonSerializer<SigningMethodMask> {
|
||||
override fun serialize(src: SigningMethodMask, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
|
||||
return JsonArray().apply {
|
||||
fieldConverter.signingMethodList(src).forEach { add(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DateTypeAdapter : JsonSerializer<Date> {
|
||||
override fun serialize(src: Date, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
|
||||
val formatter = DateFormat.getDateInstance(DateFormat.DEFAULT, Locale("en_US"))
|
||||
return JsonPrimitive(formatter.format(src).toString())
|
||||
}
|
||||
}
|
||||
|
||||
class ResponseFieldConverter {
|
||||
|
||||
fun productMask(productMask: ProductMask?): String {
|
||||
return productMaskList(productMask).print(wrap = false)
|
||||
}
|
||||
|
||||
fun productMaskList(productMask: ProductMask?): List<String> {
|
||||
val mask = productMask ?: return emptyList()
|
||||
|
||||
return Product.values().filter { mask.contains(it) }.map { it.name }
|
||||
}
|
||||
|
||||
fun signingMethod(signingMask: SigningMethodMask?): String {
|
||||
return signingMethodList(signingMask).print(wrap = false)
|
||||
}
|
||||
|
||||
fun signingMethodList(signingMask: SigningMethodMask?): List<String> {
|
||||
val mask = signingMask ?: return emptyList()
|
||||
|
||||
return SigningMethod.values().filter { mask.contains(it) }.map { it.name }
|
||||
}
|
||||
|
||||
fun settingsMask(settingsMask: SettingsMask?): String {
|
||||
return settingsMaskList(settingsMask).print(wrap = false)
|
||||
}
|
||||
|
||||
fun settingsMaskList(settingsMask: SettingsMask?): List<String> {
|
||||
val masks = settingsMask ?: return emptyList()
|
||||
|
||||
return Settings.values().filter { masks.contains(it) }.map { it.name }
|
||||
}
|
||||
|
||||
fun byteArrayToHex(byteArray: ByteArray?): String? {
|
||||
return byteArray?.toHexString()
|
||||
}
|
||||
|
||||
fun byteArrayToString(byteArray: ByteArray?): String? {
|
||||
return if (byteArray == null) null else String(byteArray)
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,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 +133,6 @@ class ActionViewModel(private val itemsManager: ItemsManager) : ViewModel(), Lif
|
|||
internal class Notifier(private val vm: ActionViewModel) {
|
||||
|
||||
private var notShowedError: TangemSdkError? = null
|
||||
private val gson: Gson = ResponseJsonConverter().gson
|
||||
|
||||
fun handleActionResult(result: CompletionResult<*>, list: List<Item>) {
|
||||
if (list.isNotEmpty()) notifyItemsChanged(list)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue