Updated on 2026-08-14

This commit is contained in:
Tangem 2020-04-01 10:33:50 +03:00
parent c2d1c73aed
commit a710e7de77
8 changed files with 79 additions and 110 deletions

View file

@ -274,7 +274,7 @@ class CardManager(
val personalizationCommand = PersonalizeCommand(config, issuer, manufacturer, acquirer)
val task = SingleCommandTask(personalizationCommand)
task.performPreflightRead = false
runTask(task, cardId, callback = callback)
runTask(task, callback = callback)
}
/**

View file

@ -1,46 +1,23 @@
package com.tangem.tangemtest.ucase.domain.actions
import com.tangem.commands.personalization.CardConfig
import com.tangem.tangemtest._arch.structure.impl.EditTextItem
import com.tangem.tangemtest._arch.structure.impl.getData
import com.tangem.commands.personalization.entities.CardConfig
import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback
import com.tangem.tangemtest.ucase.variants.TlvId
import com.tangem.tasks.TaskEvent
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
import com.tangem.tangemtest.ucase.variants.personalize.dto.DefaultPersonalizeParams
/**
[REDACTED_AUTHOR]
*/
class PersonalizeAction : BaseCardAction() {
override fun executeMainAction(attrs: AttrForAction, callback: ActionCallback) {
var cardId: String? = null
ScanAction().executeMainAction(attrs) { response, affectedList ->
when (response) {
is TaskEvent.Event -> {
Log.d(this, "ScanAction:response: TaskEvent.Event")
val item = affectedList.firstOrNull { it.id == TlvId.CardId } as? EditTextItem
?: return@executeMainAction
cardId = item.getData()
if (cardId == null) {
handleResponse(response, null, attrs, callback)
return@executeMainAction
}
}
is TaskEvent.Completion -> {
Log.d(this, "ScanAction:response: TaskEvent.Completion")
if (cardId == null) {
handleResponse(response, null, attrs, callback)
return@executeMainAction
}
val cardConfig = attrs.payload.remove(cardConfig) as? CardConfig
?: throw IllegalArgumentException("CardConfig must be in the payloads of the ParamsManager")
val cardConfig = attrs.payload.remove(cardConfig) as? CardConfig
?: throw IllegalArgumentException("CardConfig must be in the payloads of the ParamsManager")
val issuer = DefaultPersonalizeParams.issuer()
val acquirer = DefaultPersonalizeParams.acquirer()
val manufacturer = DefaultPersonalizeParams.manufacturer()
attrs.cardManager.personalize(cardConfig, cardId!!) {
handleResponse(it, null, attrs, callback)
}
}
}
attrs.cardManager.personalize(cardConfig, issuer, manufacturer, acquirer) {
handleResponse(it, null, attrs, callback)
}
}

View file

@ -3,8 +3,8 @@ package com.tangem.tangemtest.ucase.variants.personalize.converter
import com.tangem.commands.CardData
import com.tangem.commands.EllipticCurve
import com.tangem.commands.ProductMaskBuilder
import com.tangem.commands.personalization.CardConfig
import com.tangem.commands.personalization.NdefRecord
import com.tangem.commands.personalization.entities.CardConfig
import com.tangem.commands.personalization.entities.NdefRecord
import com.tangem.tangemtest._arch.structure.Additional
import com.tangem.tangemtest._arch.structure.Id
import com.tangem.tangemtest._arch.structure.abstraction.Block

View file

@ -1,54 +0,0 @@
package com.tangem.tangemtest.ucase.variants.personalize.dto
import com.tangem.Config
import com.tangem.commands.personalization.entities.Issuer
import com.tangem.common.KeyPair
/**
[REDACTED_AUTHOR]
*/
interface CardManagerConfig {
companion object {
fun default(): Config {
val issuer = issuer()
return Config(
true,
issuer = issuer(),
issuerPublicKey = null,
acquirerKeyPair = acquirer(),
manufacturerKeyPair = manufacturer()
)
}
private fun issuer(): Issuer {
return Issuer(
name = "TANGEM SDK",
id = "TANGEM SDK" + "\u0000",
dataKeyPair = KeyPair(
"".toByteArray(),
"11121314151617184771ED81F2BACF57479E4735EB1405083927372D40DA9E92".toByteArray()
),
transactionKeyPair = KeyPair(
"".toByteArray(),
"11121314151617184771ED81F2BACF57479E4735EB1405081918171615141312".toByteArray()
)
)
}
private fun acquirer(): KeyPair {
return KeyPair(
"".toByteArray(),
"21222324252627284771ED81F2BACF57479E4735EB1405083927372D40DA9E92".toByteArray()
)
}
private fun manufacturer(): KeyPair {
val manufacturer = Manufacturer(Manufacturer.Mode.Developer)
return KeyPair(
manufacturer.publicKey,
manufacturer.privateKey
)
}
}
}

View file

@ -0,0 +1,51 @@
package com.tangem.tangemtest.ucase.variants.personalize.dto
import com.tangem.commands.personalization.entities.Acquirer
import com.tangem.commands.personalization.entities.Issuer
import com.tangem.commands.personalization.entities.Manufacturer
import com.tangem.common.KeyPair
/**
[REDACTED_AUTHOR]
*/
interface DefaultPersonalizeParams {
companion object {
fun issuer(): Issuer {
val name = "TANGEM SDK"
return Issuer(
name = name,
id = name + "\u0000",
dataKeyPair = KeyPair(
"".toByteArray(),
"11121314151617184771ED81F2BACF57479E4735EB1405083927372D40DA9E92".toByteArray()
),
transactionKeyPair = KeyPair(
"".toByteArray(),
"11121314151617184771ED81F2BACF57479E4735EB1405081918171615141312".toByteArray()
)
)
}
fun acquirer(): Acquirer {
val name = "Smart Cash"
return Acquirer(
name = name,
id = name + "\u0000",
keyPair = KeyPair(
"".toByteArray(),
"21222324252627284771ED81F2BACF57479E4735EB1405083927372D40DA9E92".toByteArray()
)
)
}
fun manufacturer(): Manufacturer {
val keys = Manufacturer(com.tangem.tangemtest.ucase.variants.personalize.dto.Manufacturer.Mode.Developer)
return Manufacturer(
name = "Tangem",
keyPair = KeyPair(keys.publicKey, keys.privateKey)
)
}
}
}

View file

@ -12,10 +12,7 @@ import androidx.lifecycle.Observer
import com.google.android.material.snackbar.BaseTransientBottomBar
import com.google.android.material.snackbar.Snackbar
import com.tangem.CardManager
import com.tangem.tangem_sdk_new.DefaultCardManagerDelegate
import com.tangem.tangem_sdk_new.NfcLifecycleObserver
import com.tangem.tangem_sdk_new.TerminalKeysStorage
import com.tangem.tangem_sdk_new.nfc.NfcManager
import com.tangem.tangem_sdk_new.extensions.init
import com.tangem.tangemtest.R
import com.tangem.tangemtest._arch.structure.abstraction.Block
import com.tangem.tangemtest._main.MainViewModel
@ -25,7 +22,6 @@ import com.tangem.tangemtest.ucase.domain.paramsManager.ParamsManagerFactory
import com.tangem.tangemtest.ucase.resources.ActionType
import com.tangem.tangemtest.ucase.ui.ActionViewModelFactory
import com.tangem.tangemtest.ucase.ui.ParamsViewModel
import com.tangem.tangemtest.ucase.variants.personalize.dto.CardManagerConfig
import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizeConfig
import com.tangem.tangemtest.ucase.variants.personalize.ui.widgets.WidgetBuilder
import kotlinx.android.synthetic.main.fg_personalize.*
@ -56,8 +52,6 @@ class PersonalizeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val cardManager = initCardManager() ?: return
val blockList = mutableListOf<Block>()
personalizeVM.ldBlockList.observe(viewLifecycleOwner, Observer { list ->
blockList.clear()
@ -68,6 +62,7 @@ class PersonalizeFragment : Fragment() {
personalizeVM.toggleDescriptionVisibility(it)
})
val cardManager = CardManager.init(requireActivity())
paramsVM.setCardManager(cardManager)
paramsVM.ldResponse.observe(viewLifecycleOwner, Observer {
Log.d(this, "action response: ${if (it.length > 50) it.substring(0..50) else it}")
@ -81,19 +76,19 @@ class PersonalizeFragment : Fragment() {
}
}
private fun initCardManager(): CardManager? {
val activity = activity ?: return null
val nfcManager = NfcManager().apply {
this.setCurrentActivity(activity)
activity.lifecycle.addObserver(NfcLifecycleObserver(this))
}
val cardManagerDelegate = DefaultCardManagerDelegate(nfcManager.reader).apply {
this.activity = activity
}
return CardManager(nfcManager.reader, cardManagerDelegate, CardManagerConfig.default()).apply {
this.setTerminalKeysService(TerminalKeysStorage(activity.application))
}
}
// private fun initCardManager(): CardManager? {
// val activity = activity ?: return null
// val nfcManager = NfcManager().apply {
// this.setCurrentActivity(activity)
// activity.lifecycle.addObserver(NfcLifecycleObserver(this))
// }
// val cardManagerDelegate = DefaultCardManagerDelegate(nfcManager.reader).apply {
// this.activity = activity
// }
// return CardManager(nfcManager.reader, cardManagerDelegate, DefaultPersonalizeParams.default()).apply {
// this.setTerminalKeysService(TerminalKeysStorage(activity.application))
// }
// }
protected fun showSnackbarMessage(message: String) {
Snackbar.make(mainView, message, BaseTransientBottomBar.LENGTH_SHORT).show()

View file

@ -5,7 +5,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.google.gson.Gson
import com.tangem.commands.personalization.CardConfig
import com.tangem.commands.personalization.entities.CardConfig
import com.tangem.tangemtest._arch.structure.abstraction.BaseItem
import com.tangem.tangemtest._arch.structure.abstraction.Block
import com.tangem.tangemtest.ucase.variants.personalize.converter.PersonalizeConfigConverter