Updated on 2026-08-14
This commit is contained in:
parent
c72faf1c35
commit
bcf885568f
8 changed files with 52 additions and 20 deletions
|
|
@ -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<ByteArray> {
|
||||
|
|
@ -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<Id>() {
|
|||
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 <reified Res : Resources> safeGet(id: Id): Res {
|
||||
val result = super.get(id) ?: Resources(R.string.unknown, R.string.unknown)
|
||||
return result as Res
|
||||
|
|
|
|||
|
|
@ -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<Item>) {
|
||||
if (list.isNotEmpty()) notifyItemsChanged(list)
|
||||
|
|
|
|||
|
|
@ -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<Resources>(item.id).resName
|
||||
|
||||
fun ViewWidget.getResDescription(): Int? = MainResourceHolder.safeGet<Resources>(item.id).resDescription
|
||||
fun ViewWidget.getResDescriptionId(): Int? = MainResourceHolder.get(item.id)?.resDescription
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Card> {
|
|||
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<Card> {
|
|||
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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue