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