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