From 59237ecbcb9828b1dc762da07f83fa598bd9d6b2 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期二, 03 六月 2025 18:07:01 +0800 Subject: [PATCH] fix(NewCard2Activity): 优化读卡逻辑 --- generallibrary/src/main/java/com/dayu/general/tool/NfcReadHelper.kt | 221 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 218 insertions(+), 3 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 a8f81f1..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 @@ -27,7 +38,83 @@ } } + /** + * 璁剧疆鍔犺浇鍔ㄧ敾瑙嗗浘 + */ + 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 + } /** * 鑾峰彇鍗″彿 @@ -50,8 +137,28 @@ } } - - + /** + * 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙�(寮傛) + */ + 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 + } /** * 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙� @@ -66,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) { @@ -74,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 } /** @@ -89,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) { @@ -99,5 +309,10 @@ } } - + /** + * 娓呴櫎鎵�鏈夎闃咃紝闃叉鍐呭瓨娉勬紡 + */ + fun clearDisposables() { + compositeDisposable.clear() + } } \ No newline at end of file -- Gitblit v1.8.0