@@ -12,25 +12,25 @@ import kotlinx.coroutines.channels.Channel
1212import com.facebook.react.bridge.Callback
1313import com.facebook.react.bridge.ReactApplicationContext
1414import com.facebook.react.module.annotations.ReactModule
15- import so.onekey.app.wallet.lite .nfc.NFCExceptions
16- import so.onekey.app.wallet.lite .nfc.NfcUtils
17- import so.onekey.app.wallet.lite .onekeyLite.OneKeyLiteCard
18- import so.onekey.app.wallet.lite .onekeyLite.entitys.CardState
19- import so.onekey.app.wallet.lite .utils.NfcPermissionUtils
20- import so.onekey.app.wallet.lite .utils.Utils
15+ import com.onekeyfe.reactnativelitecard .nfc.NFCExceptions
16+ import com.onekeyfe.reactnativelitecard .nfc.NfcUtils
17+ import com.onekeyfe.reactnativelitecard .onekeyLite.OneKeyLiteCard
18+ import com.onekeyfe.reactnativelitecard .onekeyLite.entitys.CardState
19+ import com.onekeyfe.reactnativelitecard .utils.NfcPermissionUtils
20+ import com.onekeyfe.reactnativelitecard .utils.Utils
2121import java.util.concurrent.atomic.AtomicInteger
2222import com.facebook.react.bridge.Arguments
2323import com.facebook.react.bridge.BaseActivityEventListener
2424import com.facebook.react.bridge.LifecycleEventListener
2525import com.facebook.react.bridge.WritableMap
26- import so.onekey.app.wallet.lite .nfc.broadcast.NfcStatusChangeBroadcastReceiver
26+ import com.onekeyfe.reactnativelitecard .nfc.broadcast.NfcStatusChangeBroadcastReceiver
2727import java.util.concurrent.Executors.newFixedThreadPool
2828
2929private val NFCDispatcher = newFixedThreadPool(1 ).asCoroutineDispatcher()
3030public fun NFCScope (): CoroutineScope = CoroutineScope (SupervisorJob () + NFCDispatcher )
3131
3232@ReactModule(name = ReactNativeLiteCardModule .NAME )
33- class ReactNativeLiteCardModule (reactContext : ReactApplicationContext ) :
33+ class ReactNativeLiteCardModule (val reactContext : ReactApplicationContext ) :
3434 NativeReactNativeLiteCardSpec (reactContext), LifecycleEventListener , CoroutineScope by NFCScope () {
3535
3636 companion object {
@@ -50,6 +50,21 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
5050 return NAME
5151 }
5252
53+ override fun initialize () {
54+ super .initialize()
55+ Utils .init (reactContext)
56+ Utils .getActivityLifecycle()
57+ Utils .getTopActivity()?.registerReceiver(
58+ mNfcStateBroadcastReceiver,
59+ NfcStatusChangeBroadcastReceiver .nfcBroadcastReceiverIntentFilter
60+ )
61+ Utils .getTopActivity()?.let {
62+ launch(Dispatchers .IO ) {
63+ OneKeyLiteCard .startNfc(it as FragmentActivity ) {}
64+ }
65+ }
66+ }
67+
5368 private val mNFCConnectedChannel = Channel <IsoDep ?>(1 )
5469 private var lastIsoDep: IsoDep ? = null
5570 private val mNFCState = AtomicInteger (NFCState .Dead )
@@ -74,7 +89,7 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
7489 val dataMap = Arguments .createMap().apply {
7590 putString(" type" , " unknown" )
7691 }
77- emitOnNFCActiveConnection(dataMap)
92+ emitOnNFCActiveConnection(dataMap.copy() )
7893 Log .d(TAG , " Unknown device" )
7994 return
8095 }
@@ -96,7 +111,7 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
96111 putBoolean(" isNewCard" , startRequest.isNewCard)
97112 putBoolean(" hasBackup" , startRequest.hasBackup)
98113 }
99- emitOnNFCActiveConnection(dataMap)
114+ emitOnNFCActiveConnection(dataMap.copy() )
100115 }
101116 } catch (e: Exception ) {
102117 e.printStackTrace()
@@ -105,8 +120,7 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
105120 putInt(" code" , - 1 )
106121 putString(" type" , " unknown" )
107122 }
108- emitOnNFCActiveConnection(dataMap)
109- emitOnNFCActiveConnection(dataMap)
123+ emitOnNFCActiveConnection(dataMap.copy())
110124 }
111125 }
112126 }
@@ -128,15 +142,15 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
128142 emitOnNFCUIEvent(Arguments .createMap().also {
129143 it.putInt(" code" , 3 )
130144 it.putString(" message" , " close_connect_ui" )
131- })
145+ }.copy() )
132146
133147 // 还有需要处理的 NFC 事件
134148 if (decrementAndGet > 0 ) {
135149 // 展示连接 ui
136150 emitOnNFCUIEvent(Arguments .createMap().also {
137151 it.putInt(" code" , 1 )
138152 it.putString(" message" , " show_connect_ui" )
139- })
153+ }.copy() )
140154 }
141155 }
142156
@@ -146,7 +160,7 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
146160 emitOnNFCUIEvent(Arguments .createMap().also {
147161 it.putInt(" code" , 1 )
148162 it.putString(" message" , " show_connect_ui" )
149- })
163+ }.copy() )
150164 mShowDialogNumber.incrementAndGet()
151165 val tryReceiveResult = mNFCConnectedChannel.tryReceive()
152166
@@ -182,7 +196,7 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
182196 emitOnNFCUIEvent(Arguments .createMap().also {
183197 it.putInt(" code" , 2 )
184198 it.putString(" message" , " connected" )
185- })
199+ }.copy() )
186200 }
187201 return receiveIsoDep
188202 }
@@ -218,15 +232,15 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
218232 map.putBoolean(" isNewCard" , this .isNewCard)
219233 map.putString(" serialNum" , this .serialNum)
220234 map.putInt(" pinRetryCount" , this .pinRetryCount)
221- return map
235+ return map.copy()
222236 }
223237
224238 private fun NFCExceptions?.createArguments (): WritableMap {
225239 val map = Arguments .createMap()
226240 if (this == null ) return map
227241 map.putInt(" code" , this .code)
228242 map.putString(" message" , this .message)
229- return map
243+ return map.copy()
230244 }
231245
232246 override fun getLiteInfo (callback : Callback ? ) {
@@ -387,7 +401,6 @@ class ReactNativeLiteCardModule(reactContext: ReactApplicationContext) :
387401 try {
388402 OneKeyLiteCard .startNfc(it) {
389403 mNFCState.set(NFCState .Started )
390-
391404 Log .d(TAG , " NFC starting success" )
392405 }
393406 } catch (e: Exception ) {
0 commit comments