From 649cc98fd50ed95e3adbdac8dcea42910127fd02 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 8 Nov 2019 11:11:18 +0300 Subject: [PATCH] Updated on 2026-08-14 --- tangem-card-old/tangem-card-old.iml | 36 ++++++++++++++++ .../com/tangem/commands/CheckWalletCommand.kt | 2 +- .../com/tangem/commands/CommandSerializer.kt | 2 +- .../com/tangem/commands/ReadCardCommand.kt | 2 +- .../java/com/tangem/commands/SignCommand.kt | 2 +- .../{enums => common/apdu}/Instruction.kt | 2 +- .../com/tangem/common/apdu/ResponseApdu.kt | 2 +- .../{enums => common/apdu}/StatusWord.kt | 2 +- .../main/java/com/tangem/tasks/ScanTask.kt | 14 +++--- .../com/tangem/tasks/SingleCommandTask.kt | 14 +++--- .../src/main/java/com/tangem/tasks/Task.kt | 43 +++++++------------ .../main/java/com/tangem/tasks/TaskError.kt | 30 +++++++++++++ .../DefaultCardManagerDelegate.kt | 4 +- 13 files changed, 106 insertions(+), 49 deletions(-) create mode 100644 tangem-card-old/tangem-card-old.iml rename tangem-core/src/main/java/com/tangem/{enums => common/apdu}/Instruction.kt (93%) rename tangem-core/src/main/java/com/tangem/{enums => common/apdu}/StatusWord.kt (96%) create mode 100644 tangem-core/src/main/java/com/tangem/tasks/TaskError.kt diff --git a/tangem-card-old/tangem-card-old.iml b/tangem-card-old/tangem-card-old.iml new file mode 100644 index 0000000000..3571291374 --- /dev/null +++ b/tangem-card-old/tangem-card-old.iml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt b/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt index 5bd42d45cd..7a189d8c7a 100644 --- a/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/CheckWalletCommand.kt @@ -2,13 +2,13 @@ package com.tangem.commands import com.tangem.CardEnvironment import com.tangem.common.apdu.CommandApdu +import com.tangem.common.apdu.Instruction import com.tangem.common.apdu.ResponseApdu import com.tangem.common.extentions.calculateSha256 import com.tangem.common.extentions.hexToBytes import com.tangem.common.tlv.Tlv import com.tangem.common.tlv.TlvMapper import com.tangem.common.tlv.TlvTag -import com.tangem.enums.Instruction import com.tangem.tasks.TaskError class CheckWalletResponse( diff --git a/tangem-core/src/main/java/com/tangem/commands/CommandSerializer.kt b/tangem-core/src/main/java/com/tangem/commands/CommandSerializer.kt index 56dd5d5566..a5c7db90a4 100644 --- a/tangem-core/src/main/java/com/tangem/commands/CommandSerializer.kt +++ b/tangem-core/src/main/java/com/tangem/commands/CommandSerializer.kt @@ -2,10 +2,10 @@ package com.tangem.commands import com.tangem.CardEnvironment import com.tangem.common.apdu.CommandApdu +import com.tangem.common.apdu.Instruction import com.tangem.common.apdu.ResponseApdu import com.tangem.common.extentions.toInt import com.tangem.common.tlv.TlvTag -import com.tangem.enums.Instruction interface CommandResponse diff --git a/tangem-core/src/main/java/com/tangem/commands/ReadCardCommand.kt b/tangem-core/src/main/java/com/tangem/commands/ReadCardCommand.kt index 293d69dae1..e7309a33f1 100644 --- a/tangem-core/src/main/java/com/tangem/commands/ReadCardCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/ReadCardCommand.kt @@ -2,13 +2,13 @@ package com.tangem.commands import com.tangem.CardEnvironment import com.tangem.common.apdu.CommandApdu +import com.tangem.common.apdu.Instruction import com.tangem.common.apdu.ResponseApdu import com.tangem.common.extentions.calculateSha256 import com.tangem.common.tlv.Tlv import com.tangem.common.tlv.TlvMapper import com.tangem.common.tlv.TlvTag import com.tangem.data.SettingsMask -import com.tangem.enums.Instruction import com.tangem.tasks.TaskError import java.util.* diff --git a/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt b/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt index 35dd60f001..736c68507e 100644 --- a/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt +++ b/tangem-core/src/main/java/com/tangem/commands/SignCommand.kt @@ -2,6 +2,7 @@ package com.tangem.commands import com.tangem.CardEnvironment import com.tangem.common.apdu.CommandApdu +import com.tangem.common.apdu.Instruction import com.tangem.common.apdu.ResponseApdu import com.tangem.common.extentions.calculateSha256 import com.tangem.common.extentions.hexToBytes @@ -9,7 +10,6 @@ import com.tangem.common.tlv.Tlv import com.tangem.common.tlv.TlvMapper import com.tangem.common.tlv.TlvTag import com.tangem.crypto.sign -import com.tangem.enums.Instruction import com.tangem.tasks.TaskError class SignResponse( diff --git a/tangem-core/src/main/java/com/tangem/enums/Instruction.kt b/tangem-core/src/main/java/com/tangem/common/apdu/Instruction.kt similarity index 93% rename from tangem-core/src/main/java/com/tangem/enums/Instruction.kt rename to tangem-core/src/main/java/com/tangem/common/apdu/Instruction.kt index a7ea9c4d2f..8ce911e5c6 100644 --- a/tangem-core/src/main/java/com/tangem/enums/Instruction.kt +++ b/tangem-core/src/main/java/com/tangem/common/apdu/Instruction.kt @@ -1,4 +1,4 @@ -package com.tangem.enums +package com.tangem.common.apdu enum class Instruction(var code: Int) { Unknown(0x00), diff --git a/tangem-core/src/main/java/com/tangem/common/apdu/ResponseApdu.kt b/tangem-core/src/main/java/com/tangem/common/apdu/ResponseApdu.kt index 7d1e5c2fbc..26035e114e 100644 --- a/tangem-core/src/main/java/com/tangem/common/apdu/ResponseApdu.kt +++ b/tangem-core/src/main/java/com/tangem/common/apdu/ResponseApdu.kt @@ -31,7 +31,7 @@ class ResponseApdu(val data: ByteArray) { } private fun decrypt(encryptionKey: ByteArray) { - + TODO("not implemented") } } \ No newline at end of file diff --git a/tangem-core/src/main/java/com/tangem/enums/StatusWord.kt b/tangem-core/src/main/java/com/tangem/common/apdu/StatusWord.kt similarity index 96% rename from tangem-core/src/main/java/com/tangem/enums/StatusWord.kt rename to tangem-core/src/main/java/com/tangem/common/apdu/StatusWord.kt index 9ba4e0d784..34a0153d49 100644 --- a/tangem-core/src/main/java/com/tangem/enums/StatusWord.kt +++ b/tangem-core/src/main/java/com/tangem/common/apdu/StatusWord.kt @@ -1,4 +1,4 @@ -package com.tangem.enums +package com.tangem.common.apdu enum class StatusWord (val code: Int, val description: String){ diff --git a/tangem-core/src/main/java/com/tangem/tasks/ScanTask.kt b/tangem-core/src/main/java/com/tangem/tasks/ScanTask.kt index 2f68978001..371e5686e7 100644 --- a/tangem-core/src/main/java/com/tangem/tasks/ScanTask.kt +++ b/tangem-core/src/main/java/com/tangem/tasks/ScanTask.kt @@ -38,7 +38,7 @@ internal class ScanTask : Task() { curve = cardData.curve!! walletPublickKey = cardData.walletPublicKey!! } else { - delegate?.onTaskError() + onTaskCompleted(true) callback(TaskEvent.Completion(TaskError.CardError())) } @@ -53,16 +53,18 @@ internal class ScanTask : Task() { checkWalletResponse.walletSignature, curve) if (verified) { - delegate?.onTaskCompleted() + onTaskCompleted() callback(TaskEvent.Completion()) callback(TaskEvent.Event(ScanEvent.OnVerifyEvent(true))) } else { - delegate?.onTaskError() + onTaskCompleted(true) callback(TaskEvent.Completion(TaskError.VefificationFailed())) } } is CompletionResult.Failure -> { - if (checkWalletEvent.error !is TaskError.UserCancelledError) delegate?.onTaskError() + if (checkWalletEvent.error !is TaskError.UserCancelledError) { + onTaskCompleted(true, checkWalletEvent.error) + } callback(TaskEvent.Completion(checkWalletEvent.error)) } } @@ -70,7 +72,9 @@ internal class ScanTask : Task() { } } is CompletionResult.Failure -> { - if (readEvent.error !is TaskError.UserCancelledError) delegate?.onTaskError() + if (readEvent.error !is TaskError.UserCancelledError) { + onTaskCompleted(true, readEvent.error) + } callback(TaskEvent.Completion(readEvent.error)) } } diff --git a/tangem-core/src/main/java/com/tangem/tasks/SingleCommandTask.kt b/tangem-core/src/main/java/com/tangem/tasks/SingleCommandTask.kt index 7da0985efe..5728ed9305 100644 --- a/tangem-core/src/main/java/com/tangem/tasks/SingleCommandTask.kt +++ b/tangem-core/src/main/java/com/tangem/tasks/SingleCommandTask.kt @@ -10,16 +10,18 @@ class SingleCommandTask( override fun onRun(cardEnvironment: CardEnvironment, callback: (result: TaskEvent) -> Unit) { - sendCommand(commandSerializer, cardEnvironment) { - when (it) { + sendCommand(commandSerializer, cardEnvironment) { completionResult -> + when (completionResult) { is CompletionResult.Success -> { - delegate?.onTaskCompleted() - callback(TaskEvent.Event(it.data)) + onTaskCompleted() + callback(TaskEvent.Event(completionResult.data)) callback(TaskEvent.Completion()) } is CompletionResult.Failure -> { - if (it.error !is TaskError.UserCancelledError) delegate?.onTaskError() - callback(TaskEvent.Completion(it.error)) + if (completionResult.error !is TaskError.UserCancelledError) { + onTaskCompleted(true, completionResult.error) + } + callback(TaskEvent.Completion(completionResult.error)) } } } diff --git a/tangem-core/src/main/java/com/tangem/tasks/Task.kt b/tangem-core/src/main/java/com/tangem/tasks/Task.kt index a7e5228781..8e2dd1c491 100644 --- a/tangem-core/src/main/java/com/tangem/tasks/Task.kt +++ b/tangem-core/src/main/java/com/tangem/tasks/Task.kt @@ -7,7 +7,7 @@ import com.tangem.Log import com.tangem.commands.CommandResponse import com.tangem.commands.CommandSerializer import com.tangem.common.CompletionResult -import com.tangem.enums.StatusWord +import com.tangem.common.apdu.StatusWord abstract class Task { @@ -22,8 +22,17 @@ abstract class Task { onRun(cardEnvironment, callback) } - abstract fun onRun(cardEnvironment: CardEnvironment, - callback: (result: TaskEvent) -> Unit) + protected fun onTaskCompleted(withError: Boolean = false, taskError: TaskError? = null) { + reader?.closeSession() + if (withError) { + delegate?.onTaskError(taskError) + } else { + delegate?.onTaskCompleted() + } + } + + protected abstract fun onRun(cardEnvironment: CardEnvironment, + callback: (result: TaskEvent) -> Unit) protected fun sendCommand( commandSerializer: CommandSerializer, @@ -75,31 +84,9 @@ abstract class Task { } } -sealed class TaskError(description: String? = null) : Exception(description) { - class UnknownStatus(sw: Int) : TaskError() - class MappingError : TaskError() - class GenericError(description: String? = null) : TaskError(description) - class UserCancelledError() : TaskError() - class Busy() : TaskError() - - class ErrorProcessingCommand : TaskError() - class InvalidState : TaskError() - class InsNotSupported : TaskError() - class InvalidParams : TaskError() - class NeedEncryption : TaskError() - class NeedPause : TaskError() - - class VefificationFailed : TaskError() - class CardError : TaskError() - class ReaderError() : TaskError() - class SerializeCommandError() : TaskError() - - class CardIsMissing() : TaskError() - class EmptyHashes() : TaskError() - class TooMuchHashes() : TaskError() - class HashSizeMustBeEqual() : TaskError() -} - +/** + * Returns in callback from tasks + */ sealed class TaskEvent { class Event(val data: T) : TaskEvent() class Completion(val error: TaskError? = null) : TaskEvent() diff --git a/tangem-core/src/main/java/com/tangem/tasks/TaskError.kt b/tangem-core/src/main/java/com/tangem/tasks/TaskError.kt new file mode 100644 index 0000000000..7287c281cb --- /dev/null +++ b/tangem-core/src/main/java/com/tangem/tasks/TaskError.kt @@ -0,0 +1,30 @@ +package com.tangem.tasks + +/** + * An error class that covers typical errors that may occur when performing Tangem SDK tasks. + * Errors are got propagated back within callbacks. + */ +sealed class TaskError(description: String? = null) : Exception(description) { + class UnknownStatus(sw: Int) : TaskError() + class MappingError : TaskError() + class GenericError(description: String? = null) : TaskError(description) + class UserCancelledError() : TaskError() + class Busy() : TaskError() + + class ErrorProcessingCommand : TaskError() + class InvalidState : TaskError() + class InsNotSupported : TaskError() + class InvalidParams : TaskError() + class NeedEncryption : TaskError() + class NeedPause : TaskError() + + class VefificationFailed : TaskError() + class CardError : TaskError() + class ReaderError() : TaskError() + class SerializeCommandError() : TaskError() + + class CardIsMissing() : TaskError() + class EmptyHashes() : TaskError() + class TooMuchHashes() : TaskError() + class HashSizeMustBeEqual() : TaskError() +} \ No newline at end of file diff --git a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultCardManagerDelegate.kt b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultCardManagerDelegate.kt index 7db8003f6d..051825e46e 100644 --- a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultCardManagerDelegate.kt +++ b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultCardManagerDelegate.kt @@ -47,7 +47,7 @@ class DefaultCardManagerDelegate(private val reader: NfcReader) : CardManagerDel } readingDialog?.setOnCancelListener { reader.readingCancelled = true -// reader.closeSession() + reader.closeSession() Log.i(this::class.simpleName!!, "readingCancelled is set to true") } readingDialog?.show() @@ -70,7 +70,6 @@ class DefaultCardManagerDelegate(private val reader: NfcReader) : CardManagerDel } override fun onTaskCompleted() { - reader.closeSession() postUI { readingDialog?.lTouchCard?.visibility = View.GONE readingDialog?.flSecurityDelay?.visibility = View.GONE @@ -81,7 +80,6 @@ class DefaultCardManagerDelegate(private val reader: NfcReader) : CardManagerDel } override fun onTaskError(error: TaskError?) { - reader.closeSession() postUI { readingDialog?.lTouchCard?.visibility = View.GONE readingDialog?.flSecurityDelay?.visibility = View.GONE