From bcf885568f196707ac1e5a639fa839a3bcaee243 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 10 Apr 2020 12:26:42 +0300 Subject: [PATCH] Updated on 2026-08-14 --- ...nitializer.kt => ResponseJsonConverter.kt} | 10 +++++++++- .../ucase/resources/MainResourceHolder.kt | 20 +++++++++++++++++++ .../tangemtest/ucase/ui/ActionViewModel.kt | 4 ++-- .../personalize/ui/widgets/BaseAppWidget.kt | 14 ++++++------- .../ui/widgets/DescriptionWidget.kt | 2 +- .../responses/converter/CardConverter.kt | 11 +++++----- .../variants/responses/ui/ResponseFragment.kt | 6 ++++-- .../responses/ui/widget/ResponseWidget.kt | 5 +++-- 8 files changed, 52 insertions(+), 20 deletions(-) rename tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/{GsonInitializer.kt => ResponseJsonConverter.kt} (89%) 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/ResponseJsonConverter.kt similarity index 89% rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/GsonInitializer.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt index 4d6e2407d7..84695d90fb 100644 --- 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/ResponseJsonConverter.kt @@ -6,6 +6,7 @@ import com.tangem.commands.Settings import com.tangem.commands.SettingsMask import com.tangem.commands.SigningMethod import com.tangem.common.extensions.toHexString +import com.tangem.tasks.TaskEvent import java.lang.reflect.Type import java.text.DateFormat import java.util.* @@ -13,7 +14,7 @@ import java.util.* /** [REDACTED_AUTHOR] */ -class GsonInitializer { +class ResponseJsonConverter { val gson: Gson by lazy { init() } private fun init(): Gson { @@ -27,6 +28,13 @@ class GsonInitializer { builder.setPrettyPrinting() return builder.create() } + + fun convertTaskEvent(task: TaskEvent<*>?): String = gson.toJson(task) + + fun convertEvent(task: TaskEvent<*>?): String { + val event = task as? TaskEvent.Event ?: "" + return gson.toJson(event) + } } class ByteTypeAdapter : JsonSerializer { diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/MainResourceHolder.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/MainResourceHolder.kt index cf6a61abbc..86c7454365 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/MainResourceHolder.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/resources/MainResourceHolder.kt @@ -1,7 +1,10 @@ package com.tangem.tangemtest.ucase.resources +import com.tangem.tangemtest.AppTangemDemo import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.structure.Id +import com.tangem.tangemtest._arch.structure.StringId +import com.tangem.tangemtest._arch.structure.StringResId import com.tangem.tangemtest.ucase.resources.initializers.ActionResources import com.tangem.tangemtest.ucase.resources.initializers.PersonalizationResources import com.tangem.tangemtest.ucase.resources.initializers.ResponseResources @@ -21,6 +24,23 @@ object MainResourceHolder : ResourceHolder() { ResponseResources().init(this) } + override fun get(type: Id): Resources? { + return when(type) { + is StringId -> getResourcesFromName(type.value) + is StringResId -> Resources(type.value) + else -> super.get(type) + } + } + + private fun getResourcesFromName(resName: String): Resources? { + val context = AppTangemDemo.appInstance.applicationContext + val resNameId = context.resources.getIdentifier(resName, "string", context.packageName) + val resInfoId = context.resources.getIdentifier("info_$resName", "string", context.packageName) + if (resNameId == 0) return null + + return Resources(resNameId, if (resInfoId == 0) null else resInfoId) + } + inline fun safeGet(id: Id): Res { val result = super.get(id) ?: Resources(R.string.unknown, R.string.unknown) return result as Res diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt index e1b63c7df7..a44367f98c 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt @@ -12,7 +12,7 @@ import com.tangem.tangemtest._arch.structure.abstraction.Item import com.tangem.tangemtest._arch.structure.abstraction.iterate import com.tangem.tangemtest.commons.performAction import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager -import com.tangem.tangemtest.ucase.domain.responses.GsonInitializer +import com.tangem.tangemtest.ucase.domain.responses.ResponseJsonConverter import com.tangem.tangemtest.ucase.tunnel.ViewScreen import com.tangem.tasks.ScanEvent import com.tangem.tasks.TaskError @@ -92,7 +92,7 @@ class ActionViewModel(private val itemsManager: ItemsManager) : ViewModel(), Lif internal class Notifier(private val vm: ActionViewModel) { private var notShowedError: TaskError? = null - private val gson: Gson = GsonInitializer().gson + private val gson: Gson = ResponseJsonConverter().gson fun handleActionResult(response: TaskEvent<*>, list: List) { if (list.isNotEmpty()) notifyItemsChanged(list) diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/BaseAppWidget.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/BaseAppWidget.kt index 65f110c8c2..5900b5da37 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/BaseAppWidget.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/BaseAppWidget.kt @@ -2,7 +2,6 @@ package com.tangem.tangemtest.ucase.variants.personalize.ui.widgets import android.view.ViewGroup import com.tangem.tangemtest._arch.structure.StringId -import com.tangem.tangemtest._arch.structure.StringResId import com.tangem.tangemtest._arch.structure.abstraction.Item import com.tangem.tangemtest._arch.widget.abstraction.BaseViewWidget import com.tangem.tangemtest._arch.widget.abstraction.ViewWidget @@ -15,14 +14,15 @@ import ru.dev.gbixahue.eu4d.lib.android._android.views.stringFrom */ abstract class BaseAppWidget(parent: ViewGroup, item: Item) : BaseViewWidget(parent, item) { override fun getName(): String { - return when (val id = item.id) { - is StringId -> id.value - is StringResId -> view.stringFrom(id.value) - else -> view.stringFrom(getResNameId()) - } + val idName = if (item.id is StringId) (item.id as StringId).value else "" + + val resources = getResources() ?: return idName + return view.stringFrom(resources.resName) } } +fun ViewWidget.getResources(): Resources? = MainResourceHolder.get(item.id) + fun ViewWidget.getResNameId(): Int = MainResourceHolder.safeGet(item.id).resName -fun ViewWidget.getResDescription(): Int? = MainResourceHolder.safeGet(item.id).resDescription \ No newline at end of file +fun ViewWidget.getResDescriptionId(): Int? = MainResourceHolder.get(item.id)?.resDescription \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/DescriptionWidget.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/DescriptionWidget.kt index 0e49f54ec5..b1d699f972 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/DescriptionWidget.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/widgets/DescriptionWidget.kt @@ -30,7 +30,7 @@ abstract class DescriptionWidget( protected open fun changeDescriptionVisibility(state: Int) { val tv = tvDescription ?: return - val descriptionId = getResDescription() ?: return + val descriptionId = getResDescriptionId() ?: return val description = tv.context.getString(descriptionId) if (description.isEmpty()) return diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/CardConverter.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/CardConverter.kt index 40db39e261..374cdaaf20 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/CardConverter.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/CardConverter.kt @@ -4,6 +4,7 @@ import com.tangem.commands.Card import com.tangem.commands.CardData import com.tangem.commands.Settings import com.tangem.commands.SettingsMask +import com.tangem.common.extensions.toHexString import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.structure.Id import com.tangem.tangemtest._arch.structure.StringId @@ -51,11 +52,11 @@ class CardConverter : ModelToItems { group.addItem(TextItem(CardId.manufacturerName, from.manufacturerName)) group.addItem(TextItem(CardId.status, stringOf(from.status))) group.addItem(TextItem(CardId.firmwareVersion, from.firmwareVersion)) - group.addItem(TextItem(CardId.cardPublicKey, stringOf(from.cardPublicKey))) - group.addItem(TextItem(CardId.issuerPublicKey, stringOf(from.issuerPublicKey))) + group.addItem(TextItem(CardId.cardPublicKey, from.cardPublicKey?.toHexString())) + group.addItem(TextItem(CardId.issuerPublicKey, from.issuerPublicKey?.toHexString())) group.addItem(TextItem(CardId.curve, stringOf(from.curve))) group.addItem(TextItem(CardId.maxSignatures, stringOf(from.maxSignatures))) - group.addItem(TextItem(CardId.signingMethod, stringOf(from.signingMethod))) + group.addItem(TextItem(CardId.signingMethod, stringOf(from.signingMethod?.rawValue))) group.addItem(TextItem(CardId.pauseBeforePin2, stringOf(from.pauseBeforePin2))) group.addItem(TextItem(CardId.walletPublicKey, stringOf(from.walletPublicKey))) group.addItem(TextItem(CardId.walletRemainingSignatures, stringOf(from.walletRemainingSignatures))) @@ -79,8 +80,8 @@ class CardConverter : ModelToItems { group.addItem(TextItem(CardDataId.manufactureDateTime, stringOf(data.manufactureDateTime))) group.addItem(TextItem(CardDataId.issuerName, data.issuerName)) group.addItem(TextItem(CardDataId.blockchainName, data.blockchainName)) - group.addItem(TextItem(CardDataId.manufacturerSignature, stringOf(data.manufacturerSignature))) - group.addItem(TextItem(CardDataId.productMask, stringOf(data.productMask))) + group.addItem(TextItem(CardDataId.manufacturerSignature, data.manufacturerSignature?.toHexString())) + group.addItem(TextItem(CardDataId.productMask, stringOf(data.productMask?.rawValue))) 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-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt index e5cc169f68..4477f12894 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt @@ -6,11 +6,11 @@ import android.widget.LinearLayout import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.Observer -import com.google.gson.Gson import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.widget.WidgetBuilder import com.tangem.tangemtest._main.MainViewModel import com.tangem.tangemtest.extensions.shareText +import com.tangem.tangemtest.ucase.domain.responses.ResponseJsonConverter import com.tangem.tangemtest.ucase.ui.BaseFragment import com.tangem.tangemtest.ucase.variants.responses.ResponseViewModel import com.tangem.tangemtest.ucase.variants.responses.ui.widget.ResponseItemBuilder @@ -66,7 +66,9 @@ open class ResponseFragment : BaseFragment() { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.action_share -> shareText(Gson().toJson(mainActivityVM.responseEvent)) + R.id.action_share -> { + shareText(ResponseJsonConverter().convertEvent(mainActivityVM.responseEvent)) + } } return super.onOptionsItemSelected(item) } diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/widget/ResponseWidget.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/widget/ResponseWidget.kt index d08de11386..054ab81dbc 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/widget/ResponseWidget.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/widget/ResponseWidget.kt @@ -22,11 +22,12 @@ abstract class ResponseWidget(parent: ViewGroup, item: Item): DescriptionWidget( val clipboard = view.context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager ?: return@setOnClickListener - val clip: ClipData = ClipData.newPlainText("FieldValue", "$data") + val clipboardData = "${getName()} - $data" + val clip: ClipData = ClipData.newPlainText("FieldValue", clipboardData) clipboard.setPrimaryClip(clip) val copyMessage = view.stringFrom(R.string.copy_to_clipboard) - view.toast("$copyMessage: ${getName()} - $data") + view.toast("$copyMessage\n$clipboardData") } } } \ No newline at end of file