From 8c24ae20107210413ecd6b0703fb670960aeafa2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 12 May 2020 15:30:17 +0300 Subject: [PATCH] Updated on 2026-08-14 --- tangem-core/src/main/java/com/tangem/CardSession.kt | 7 ++++++- .../main/java/com/tangem/common/tlv/TlvDecoder.kt | 12 ++++++++---- .../tangem_sdk_new/DefaultSessionViewDelegate.kt | 1 - .../java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt | 7 ++++--- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tangem-core/src/main/java/com/tangem/CardSession.kt b/tangem-core/src/main/java/com/tangem/CardSession.kt index 34f243fc4f..39ee1cc750 100644 --- a/tangem-core/src/main/java/com/tangem/CardSession.kt +++ b/tangem-core/src/main/java/com/tangem/CardSession.kt @@ -166,6 +166,8 @@ class CardSession( * @param error An error that will be shown. */ private fun stopWithError(error: Exception) { + if (!isBusy) return + reader.closeSession() isBusy = false @@ -175,9 +177,12 @@ class CardSession( error.localizedMessage } if (error !is TangemSdkError.UserCancelled) { - Log.e("tag", "Finishing with error: $errorMessage") + Log.e(tag, "Finishing with error: $errorMessage") viewDelegate.onError(errorMessage) + } else { + Log.i(tag, "User cancelled NFC session") } + } fun send(apdu: CommandApdu, callback: (result: CompletionResult) -> Unit) { diff --git a/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt b/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt index 62c0899f2d..ac83d38b06 100644 --- a/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt +++ b/tangem-core/src/main/java/com/tangem/common/tlv/TlvDecoder.kt @@ -33,7 +33,7 @@ class TlvDecoder(val tlvList: List) { */ inline fun decodeOptional(tag: TlvTag): T? = try { - decode(tag) + decode(tag, false) } catch (exception: TangemSdkError.DecodingFailedMissingTag) { null } @@ -47,14 +47,18 @@ class TlvDecoder(val tlvList: List) { * * @return [Tlv] value converted to a nullable type [T]. * - * @throws [TaskError.MissingTag] exception if no [Tlv] is found by the Tag. + * @throws [TangemSdkError.DecodingFailedMissingTag] exception if no [Tlv] is found by the Tag. */ - inline fun decode(tag: TlvTag): T { + inline fun decode(tag: TlvTag, logError: Boolean = true): T { val tlvValue: ByteArray = tlvList.find { it.tag == tag }?.value ?: if (tag.valueType() == TlvValueType.BoolValue && T::class == Boolean::class) { return false as T } else { - Log.e(this::class.simpleName!!, "Tag $tag not found") + if (logError) { + Log.e(this::class.simpleName!!, "TLV $tag not found") + } else { + Log.v(this::class.simpleName!!, "TLV $tag not found") + } throw TangemSdkError.DecodingFailedMissingTag() } diff --git a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultSessionViewDelegate.kt b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultSessionViewDelegate.kt index 4b422c3687..a15f16521e 100644 --- a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultSessionViewDelegate.kt +++ b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/DefaultSessionViewDelegate.kt @@ -61,7 +61,6 @@ class DefaultSessionViewDelegate(private val reader: NfcReader) : SessionViewDel readingDialog?.setOnCancelListener { reader.readingCancelled = true reader.closeSession() - Log.i(this::class.simpleName!!, "readingCancelled is set to true") } readingDialog?.show() } diff --git a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt index 225edfb595..9b42d5b108 100644 --- a/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt +++ b/tangem-sdk/src/main/java/com/tangem/tangem_sdk_new/nfc/NfcReader.kt @@ -26,7 +26,7 @@ class NfcReader : CardReader { if (field == null) { field = value // if tag is received, call connect first before transceiving data - connect() + if (value != null) connect() } if (value == null) field = value } @@ -46,6 +46,7 @@ class NfcReader : CardReader { private var callback: ((response: CompletionResult) -> Unit)? = null override fun openSession() { + Log.i(this::class.simpleName!!, "NFC reader is starting NFC session") readingActive = true readingCancelled = false manager?.disableReaderMode() @@ -85,7 +86,7 @@ class NfcReader : CardReader { return } if (rawResponse != null) { - Log.i(this::class.simpleName!!, "Nfc response is received") + Log.i(this::class.simpleName!!, "NFC response is received") data = null } rawResponse?.let { callback?.invoke(CompletionResult.Success(ResponseApdu(it))) } @@ -103,7 +104,7 @@ class NfcReader : CardReader { isoDep?.close() isoDep?.connect() isoDep?.timeout = 240000 - Log.i(this::class.simpleName!!, "Nfc session is started") + Log.i(this::class.simpleName!!, "NFC tag is connected") } private fun onNfcVDiscovered(nfcV: NfcV) {