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/NfcWreatHelper.kt | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 157 insertions(+), 4 deletions(-) diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt index 12a6fe4..65fd920 100644 --- a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt +++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt @@ -2,13 +2,25 @@ import android.app.Activity import android.content.Intent +import android.view.View +import android.widget.RelativeLayout import com.dayu.baselibrary.tools.nfc.NFCCallBack import com.dayu.baselibrary.tools.nfc.NfcWriteAdapter import com.dayu.general.bean.card.UserCard +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 -class NfcWreatHelper private constructor(intent: Intent, activity: Activity) : GeBaseHelper(activity) { +class NfcWreatHelper private constructor(intent: Intent, activity: Activity) : + GeBaseHelper(activity) { private val adapter: NfcWriteAdapter = NfcWriteAdapter(intent, activity) + private val compositeDisposable = CompositeDisposable() + private var loadingContainer: RelativeLayout? = null + private var progressWheel: ProgressWheel? = null companion object { private var helper: NfcWreatHelper? = null @@ -26,6 +38,69 @@ } } + /** + * 璁剧疆鍔犺浇鍔ㄧ敾瑙嗗浘 + */ + 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() + } + } + + /** + * 鍐欏崱(寮傛) + * + * @param str 涔﹀啓鍐呭锛�16涓瓧鑺� + * @param a 涔﹀啓鐨勬墖鍖� (浠�0寮�濮嬫暟) + * @param b 涔﹀啓鐨勫潡(浠�0寮�濮嬫暟) + * @param callback 鎿嶄綔缁撴灉鍥炶皟 + */ + fun writeDataAsync(str: ByteArray?, a: Int, b: Int, callback: (Boolean) -> Unit): Disposable { + showLoading() + val disposable = Observable.fromCallable { + writeData(str, a, b, object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + // 杩欎釜鍥炶皟鍦↖O绾跨▼涓紝涓嶅鐞哢I鐩稿叧鎿嶄綔 + } + }) + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ result -> + hideLoading() + callback(result) + }, { error -> + hideLoading() + error.printStackTrace() + callback(false) + }) + + compositeDisposable.add(disposable) + return disposable + } /** * 鍐欏崱 @@ -35,13 +110,39 @@ * @param b 涔﹀啓鐨勫潡(浠�0寮�濮嬫暟) * @param */ - fun writeData(str: ByteArray?, a: Int, b: Int,callBack: NFCCallBack): Boolean { + fun writeData(str: ByteArray?, a: Int, b: Int, callBack: NFCCallBack): Boolean { try { - return adapter.writeData(str, a, b,callBack) + return adapter.writeData(str, a, b, false, callBack) } catch (e: Exception) { e.printStackTrace() } return false + } + + /** + * 鍐欏崱(寮傛) + * + * @param userCard 鐢ㄦ埛鍗″唴瀹� + * @param callback 鎿嶄綔缁撴灉鍥炶皟 + */ + fun writeUserDataAsync(userCard: UserCard, callback: (Boolean) -> Unit): Disposable { + showLoading() + val disposable = Observable.fromCallable { + writeUserData(userCard) + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ result -> + hideLoading() + callback(result) + }, { error -> + hideLoading() + error.printStackTrace() + callback(false) + }) + + compositeDisposable.add(disposable) + return disposable } /** @@ -52,12 +153,64 @@ */ fun writeUserData(userCard: UserCard): Boolean { try { - return adapter.writeUserData(userCard,7) + return adapter.writeUserData(userCard, 7) } catch (e: java.lang.Exception) { e.printStackTrace() } return false } + /** + * 淇敼瀵嗙爜(寮傛) + * + * @param ps 瀵嗙爜鍒楄〃 + * @param isConnect 鏄惁淇濇寔杩炴帴 + * @param isClose 鏄惁鍏抽棴 + * @param callback 缁撴灉鍥炶皟 + */ + fun changePSAsync(ps: List<ByteArray>, isConnect: Boolean, isClose: Boolean, callback: (Boolean, String?) -> Unit): Disposable { + showLoading() + val disposable = Observable.fromCallable { + var resultSuccess = false + var resultMessage: String? = null + + changePS(ps, isConnect, isClose, object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + resultSuccess = flag + resultMessage = msg + } + }) + + Pair(resultSuccess, resultMessage) + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ result -> + hideLoading() + callback(result.first, result.second) + }, { error -> + hideLoading() + error.printStackTrace() + callback(false, error.message) + }) + + compositeDisposable.add(disposable) + return disposable + } + fun changePS(ps: List<ByteArray>, isConnect: Boolean, isClose: Boolean, nfcCallBack: NFCCallBack): Boolean { + try { + return adapter.changePasword(ps, isConnect, isClose, nfcCallBack) + } catch (e: java.lang.Exception) { + e.printStackTrace() + } + return false + } + + /** + * 娓呴櫎鎵�鏈夎闃咃紝闃叉鍐呭瓨娉勬紡 + */ + fun clearDisposables() { + compositeDisposable.clear() + } } \ No newline at end of file -- Gitblit v1.8.0