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 | 149 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 146 insertions(+), 3 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 0a6e18c..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,14 +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) { 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 @@ -27,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 + } /** * 鍐欏崱 @@ -46,6 +120,32 @@ } /** + * 鍐欏崱(寮傛) + * + * @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 + } + + /** * 鍐欏崱 * * @param userCard 鐢ㄦ埛鍗″唴瀹� @@ -60,14 +160,57 @@ return false } - fun changePS( ps: List<ByteArray>, isConnect: Boolean, isClose: Boolean,nfcCallBack: NFCCallBack): Boolean { + /** + * 淇敼瀵嗙爜(寮傛) + * + * @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) + 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