Updated on 2026-08-14
This commit is contained in:
parent
c2d1c73aed
commit
a710e7de77
8 changed files with 79 additions and 110 deletions
|
|
@ -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)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue