Updated on 2026-08-14

This commit is contained in:
Tangem 2019-11-13 14:33:07 +03:00
parent bbdcad1410
commit d48abc8579
6 changed files with 26 additions and 23 deletions

View file

@ -25,8 +25,7 @@ class DefaultCardManagerDelegate(private val reader: NfcReader) : CardManagerDel
setLogger()
}
override fun onTaskStarted() {
// reader.isoDep = null
override fun onNfcSessionStarted() {
reader.readingCancelled = false
postUI { showReadingDialog(activity) }
if (!reader.nfcEnabled) showNFCEnableDialog()
@ -58,7 +57,7 @@ class DefaultCardManagerDelegate(private val reader: NfcReader) : CardManagerDel
activity.supportFragmentManager.let { nfcEnableDialog?.show(it, NfcEnableDialog.TAG) }
}
override fun showSecurityDelay(ms: Int) {
override fun onSecurityDelay(ms: Int) {
postUI {
readingDialog?.lTouchCard?.visibility = View.GONE
readingDialog?.tvRemainingTime?.text = ms.div(100).toString()
@ -78,7 +77,7 @@ class DefaultCardManagerDelegate(private val reader: NfcReader) : CardManagerDel
}
}
override fun onTaskCompleted() {
override fun onNfcSessionCompleted() {
postUI {
readingDialog?.lTouchCard?.visibility = View.GONE
readingDialog?.flSecurityDelay?.visibility = View.GONE
@ -88,7 +87,7 @@ class DefaultCardManagerDelegate(private val reader: NfcReader) : CardManagerDel
postUI(300) { readingDialog?.dismiss() }
}
override fun onTaskError(error: TaskError?) {
override fun onError(error: TaskError?) {
postUI {
readingDialog?.lTouchCard?.visibility = View.GONE
readingDialog?.flSecurityDelay?.visibility = View.GONE

View file

@ -5,6 +5,6 @@ import android.os.Looper
val uiHandler = Handler(Looper.getMainLooper())
internal fun postUI(msTime: Long = 0, func: () -> Unit) {
internal fun postUI(msTime: Long = 0, func: () -> Unit) {
if (msTime > 0) uiHandler.postDelayed({ func() }, msTime) else uiHandler.post(func)
}

View file

@ -1,5 +1,6 @@
package com.tangem.tangem_sdk_new.nfc
import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
@ -9,16 +10,15 @@ import android.nfc.Tag
import android.nfc.tech.IsoDep
import android.os.Build
import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import com.tangem.Log
class NfcManager : NfcAdapter.ReaderCallback {
val reader = NfcReader()
private var activity: FragmentActivity? = null
private var activity: Activity? = null
private var nfcAdapter: NfcAdapter? = null
fun setCurrentActivity(activity: FragmentActivity) {
fun setCurrentActivity(activity: Activity) {
this.activity = activity
nfcAdapter = NfcAdapter.getDefaultAdapter(activity)
}
@ -49,11 +49,13 @@ class NfcManager : NfcAdapter.ReaderCallback {
reader.nfcEnabled = true
enableReaderMode()
}
reader.manager = this
}
fun onPause() {
activity?.unregisterReceiver(mBroadcastReceiver)
disableReaderMode()
reader.manager = null
}
fun onDestroy() {
@ -61,12 +63,11 @@ class NfcManager : NfcAdapter.ReaderCallback {
nfcAdapter = null
}
private fun enableReaderMode() {
val options = Bundle()
nfcAdapter?.enableReaderMode(activity, this, READER_FLAGS, options)
fun enableReaderMode() {
nfcAdapter?.enableReaderMode(activity, this, READER_FLAGS, Bundle())
}
private fun disableReaderMode() {
fun disableReaderMode() {
nfcAdapter?.disableReaderMode(activity)
}

View file

@ -1,6 +1,7 @@
package com.tangem.tangem_sdk_new.nfc
import android.nfc.Tag
import android.nfc.TagLostException
import android.nfc.tech.IsoDep
import com.tangem.CardReader
import com.tangem.Log
@ -13,14 +14,15 @@ class NfcReader : CardReader {
override var readingActive = false
var nfcEnabled = false
var isoDep: IsoDep? = null
var manager: NfcManager? = null
private var isoDep: IsoDep? = null
set(value) {
// if tag is received, call connect first before transceiving data
// don't reassign when there's an active tag already
if (field == null) {
field = value
// if tag is received, call connect first before transceiving data
connect()
}
// don't reassign when there's an active tag already
if (value == null) field = value
}
@ -38,9 +40,11 @@ class NfcReader : CardReader {
var data: ByteArray? = null
var callback: ((response: CompletionResult<ResponseApdu>) -> Unit)? = null
override fun setStartSession() {
override fun startNfcSession() {
readingActive = true
readingCancelled = false
manager?.disableReaderMode()
manager?.enableReaderMode()
}
override fun closeSession() {
@ -93,7 +97,6 @@ class NfcReader : CardReader {
isoDep?.connect()
isoDep?.timeout = 240000
Log.i(this::class.simpleName!!, "Nfc session is started")
}
}

View file

@ -15,7 +15,7 @@ class NfcEnableDialog : DialogFragment() {
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = AlertDialog.Builder(requireContext())
val builder = AlertDialog.Builder(requireContext())
builder.setCancelable(false)
.setIcon(R.drawable.ic_action_nfc_gray)
.setTitle(R.string.dialog_nfc_enable_title)

View file

@ -11,10 +11,10 @@ import android.widget.RelativeLayout
import androidx.appcompat.widget.LinearLayoutCompat
class TouchCardAnimation(private var context: Context,
private var ivHandCardHorizontal: ImageView,
private var ivHandCardVertical: ImageView,
private var llHand: LinearLayoutCompat,
private var llNfc: LinearLayoutCompat) {
private var ivHandCardHorizontal: ImageView,
private var ivHandCardVertical: ImageView,
private var llHand: LinearLayoutCompat,
private var llNfc: LinearLayoutCompat) {
companion object {
const val CARD_ON_BACK = 0