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/NfcWreatHelper.kt | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 164 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..b80183e 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 + } /** * 鍐欏崱 @@ -45,6 +119,34 @@ return false } + + + /** + * 鍐欏崱(寮傛) + * + * @param userCard 鐢ㄦ埛鍗″唴瀹� + * @param callBack 鎿嶄綔缁撴灉鍜屾秷鎭洖璋� + */ + fun writeUserDataAsync(userCard: UserCard, callBack: NFCCallBack): Disposable { + showLoading() + val disposable = Observable.fromCallable { + writeUserData(userCard, callBack) + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ result -> + hideLoading() + // 缁撴灉宸茬粡鍦╳riteUserData涓�氳繃callBack鍥炶皟浜� + }, { error -> + hideLoading() + error.printStackTrace() + callBack.isSusses(false, "寮傛鍐欏崱寮傚父: ${error.message}") + }) + + compositeDisposable.add(disposable) + return disposable + } + /** * 鍐欏崱 * @@ -60,14 +162,73 @@ return false } - fun changePS( ps: List<ByteArray>, isConnect: Boolean, isClose: Boolean,nfcCallBack: NFCCallBack): Boolean { + /** + * 鍐欏崱 + * + * @param userCard 鐢ㄦ埛鍗″唴瀹� + * @param callBack 鍥炶皟鎺ュ彛 + */ + fun writeUserData(userCard: UserCard, callBack: NFCCallBack): Boolean { try { - return adapter.changePasword( ps, isConnect, isClose,nfcCallBack) + return adapter.writeUserData(userCard, 7, callBack) + } catch (e: java.lang.Exception) { + e.printStackTrace() + callBack.isSusses(false, "鍐欏崱寮傚父: ${e.message}") + } + 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