From d773ab0295feba24ae4fc14f61e8aa310e40f4ba Mon Sep 17 00:00:00 2001
From: zuojincheng <lf_zuo@163.com>
Date: 星期五, 06 六月 2025 16:55:57 +0800
Subject: [PATCH] refactor(nfc): 优化写卡流程和状态更新
---
generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 229 insertions(+), 2 deletions(-)
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
index 7f2d7ab..84d7111 100644
--- a/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
+++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt
@@ -2,8 +2,16 @@
import android.app.Activity
import android.content.Intent
+import android.view.View
+import android.widget.RelativeLayout
import com.dayu.baselibrary.tools.nfc.BaseNfcReadHelper
import com.dayu.baselibrary.tools.nfc.NfcReadAdapter
+import com.pnikosis.materialishprogress.ProgressWheel
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
+import io.reactivex.rxjava3.core.Observable
+import io.reactivex.rxjava3.disposables.CompositeDisposable
+import io.reactivex.rxjava3.disposables.Disposable
+import io.reactivex.rxjava3.schedulers.Schedulers
/**
* NFC璇诲彇宸ュ叿绫荤殑Kotlin瀹炵幇
@@ -11,6 +19,9 @@
class NfcReadHelper private constructor(intent: Intent, activity: Activity) : GeBaseHelper(activity) {
private val adapter: NfcReadAdapter = NfcReadAdapter(intent, activity)
+ private val compositeDisposable = CompositeDisposable()
+ private var loadingContainer: RelativeLayout? = null
+ private var progressWheel: ProgressWheel? = null
companion object {
private var helper: NfcReadHelper? = null
@@ -18,16 +29,92 @@
/**
* 鍗曚緥鍒濆鍖�
*/
- @JvmStatic
fun getInstance(intent: Intent, activity: Activity): NfcReadHelper {
if (helper == null) {
helper = NfcReadHelper(intent, activity)
}
+ helper!!.adapter.setIntent(intent)
return helper!!
}
}
+ /**
+ * 璁剧疆鍔犺浇鍔ㄧ敾瑙嗗浘
+ */
+ fun setLoadingView(loadingContainer: RelativeLayout, progressWheel: ProgressWheel) {
+ this.loadingContainer = loadingContainer
+ this.progressWheel = progressWheel
+ }
+ /**
+ * 鏄剧ず鍔犺浇鍔ㄧ敾
+ */
+ private fun showLoading() {
+ loadingContainer?.let {
+ it.visibility = View.VISIBLE
+ }
+ progressWheel?.let {
+ it.spin()
+ }
+ }
+
+ /**
+ * 闅愯棌鍔犺浇鍔ㄧ敾
+ */
+ private fun hideLoading() {
+ loadingContainer?.let {
+ it.visibility = View.GONE
+ }
+ progressWheel?.let {
+ it.stopSpinning()
+ }
+ }
+
+ /**
+ * 鑾峰彇鍗″彿(寮傛)
+ */
+ fun getCardNumberAsync(callback: (String) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ getCardNumber()
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback("")
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
+
+ /**
+ * 鑾峰彇鍗″彿(涓嶅叧闂繛鎺ワ紝寮傛)
+ */
+ fun getCardNumberNoCloseAsync(callback: (String) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ getCardNumberNoClose()
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback("")
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
+ }
/**
* 鑾峰彇鍗″彿
@@ -39,6 +126,38 @@
e.printStackTrace()
""
}
+ }
+
+ fun getCardNumberNoClose():String{
+ return try {
+ adapter.cardNumberNoClose
+ } catch (e: Exception) {
+ e.printStackTrace()
+ ""
+ }
+ }
+
+ /**
+ * 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙�(寮傛)
+ */
+ fun getCardTypeAndCardNumberAsync(callback: (String) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ getCardTypeAndCardNumber()
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback("")
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
}
/**
@@ -54,6 +173,46 @@
}
/**
+ * 璇诲彇NFC鍗$殑鍏ㄩ儴淇℃伅(寮傛)
+ */
+ fun getAllDataAsync(callback: BaseNfcReadHelper.NFCCallMapback) {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ try {
+ adapter.getAllData(object : BaseNfcReadHelper.NFCCallMapback {
+ override fun callBack(data: Map<String, List<ByteArray>>) {
+ hideLoading()
+ callback.callBack(data)
+ }
+
+ override fun error(code: Int) {
+ hideLoading()
+ callback.error(code)
+ }
+ })
+ true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ false
+ }
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ success ->
+ if (!success) {
+ hideLoading()
+ callback.error(-1)
+ }
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback.error(-1)
+ })
+
+ compositeDisposable.add(disposable)
+ }
+
+ /**
* 璇诲彇NFC鍗$殑鍏ㄩ儴淇℃伅
*/
fun getAllData(callback: BaseNfcReadHelper.NFCCallMapback) {
@@ -62,6 +221,29 @@
} catch (e: Exception) {
e.printStackTrace()
}
+ }
+
+ /**
+ * 鑾峰彇涓�涓墖鍖虹殑鏁版嵁(寮傛)
+ */
+ fun getOneSectorDataAsync(callback: (List<ByteArray>?) -> Unit): Disposable {
+ showLoading()
+ val disposable = Observable.fromCallable<Any> {
+ getOneSectorData() as Any
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ result ->
+ hideLoading()
+ callback(result as? List<ByteArray>)
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback(null)
+ })
+
+ compositeDisposable.add(disposable)
+ return disposable
}
/**
@@ -77,6 +259,46 @@
}
/**
+ * 璇诲彇NFC鍗$殑鐗瑰畾鎵囧尯淇℃伅(寮傛)
+ */
+ fun getDataAsync(a: Int, b: Int, callback: BaseNfcReadHelper.NFCCallByteback) {
+ showLoading()
+ val disposable = Observable.fromCallable {
+ try {
+ adapter.getData(a, b, object : BaseNfcReadHelper.NFCCallByteback {
+ override fun callBack(data: ByteArray) {
+ hideLoading()
+ callback.callBack(data)
+ }
+
+ override fun error(code: Int) {
+ hideLoading()
+ callback.error(code)
+ }
+ })
+ true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ false
+ }
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({ success ->
+ if (!success) {
+ hideLoading()
+ callback.error(-1)
+ }
+ }, { error ->
+ hideLoading()
+ error.printStackTrace()
+ callback.error(-1)
+ })
+
+ compositeDisposable.add(disposable)
+ }
+
+ /**
* 璇诲彇NFC鍗$殑鐗瑰畾鎵囧尯淇℃伅
*/
fun getData(a: Int, b: Int, callback: BaseNfcReadHelper.NFCCallByteback) {
@@ -87,5 +309,10 @@
}
}
-
+ /**
+ * 娓呴櫎鎵�鏈夎闃咃紝闃叉鍐呭瓨娉勬紡
+ */
+ fun clearDisposables() {
+ compositeDisposable.clear()
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0