Skip to content
This repository was archived by the owner on Jan 7, 2026. It is now read-only.

Commit 0139194

Browse files
huhuanmingrevan-zhanghellohublot
authored
merge dev (#5)
* Update package-publish.yml * Update package-publish.yml * Update package-publish.yml * Update package.json * chore: update yarn.lock * chore: update yarn.lock * chore: update yarn.lock * chore: update yarn.lock * chore: update yarn.lock * chore: update yarn.lock * chore: add `--access public` flag * chore: remove the scope * chore: remove the YARN_NPM_AUTH_TOKEN * chore: replace the yarn to npm * fix: rename the package identifier to solve eas build error * chore: bump the version * feat: add checkNFCPermission and lastIsoDep * feat: bump the version * feat: fix the null cardInfo of new card * feat: bump version * feat: replace all callback to promise * fix: the permission on xiaomi and tag lost crash * fix: add AuthenticationLockCode * fix: iosdep isConnected crash * fix: the isodep crash * fix: read the last isodep * fix: the crash of tag is out of date * fix: the crash of enableForegroundDispatch --------- Co-authored-by: loatheb <zhangzhao@onekey.so> Co-authored-by: hublot <hublot@aliyun.com>
1 parent d383231 commit 0139194

39 files changed

+259
-289
lines changed

.github/workflows/package-publish.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ jobs:
1717
run: yarn prepare
1818
- name: Publish
1919
env:
20-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
21-
run: echo "//registry.npmjs.org/:_authToken=\${NPM_TOKEN}" > .npmrc && yarn publish
20+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
21+
run: npm whoami && npm publish --access public

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def supportsNamespace() {
4444

4545
android {
4646
if (supportsNamespace()) {
47-
namespace "so.onekey.app.wallet"
47+
namespace "so.onekey.app.wallet.lite"
4848

4949
sourceSets {
5050
main {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2-
package="so.onekey.app.wallet">
2+
package="so.onekey.app.wallet.lite">
33
</manifest>

android/src/main/java/so/onekey/app/wallet/LoggerManager.kt renamed to android/src/main/java/so/onekey/app/wallet/lite/LoggerManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package so.onekey.app.wallet
1+
package so.onekey.app.wallet.lite
22

33
import android.util.Log
44
import com.facebook.react.bridge.ReactApplicationContext
55
import com.facebook.react.bridge.ReactContextBaseJavaModule
66
import com.facebook.react.bridge.ReactMethod
7-
import so.onekey.app.wallet.utils.sendEvent
7+
import so.onekey.app.wallet.lite.utils.sendEvent
88

99
class LoggerManager(private val context: ReactApplicationContext) :
1010
ReactContextBaseJavaModule(context) {

android/src/main/java/so/onekey/app/wallet/OKLiteManager.kt renamed to android/src/main/java/so/onekey/app/wallet/lite/OKLiteManager.kt

Lines changed: 67 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package so.onekey.app.wallet
1+
package so.onekey.app.wallet.lite
22

33
import android.content.Intent
44
import android.nfc.NfcAdapter
@@ -11,13 +11,13 @@ import com.facebook.react.bridge.*
1111
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
1212
import kotlinx.coroutines.*
1313
import kotlinx.coroutines.channels.Channel
14-
import so.onekey.app.wallet.nfc.NFCExceptions
15-
import so.onekey.app.wallet.nfc.NfcUtils
16-
import so.onekey.app.wallet.nfc.broadcast.NfcStatusChangeBroadcastReceiver
17-
import so.onekey.app.wallet.onekeyLite.OneKeyLiteCard
18-
import so.onekey.app.wallet.onekeyLite.entitys.CardState
19-
import so.onekey.app.wallet.utils.NfcPermissionUtils
20-
import so.onekey.app.wallet.utils.Utils
14+
import so.onekey.app.wallet.lite.nfc.NFCExceptions
15+
import so.onekey.app.wallet.lite.nfc.NfcUtils
16+
import so.onekey.app.wallet.lite.nfc.broadcast.NfcStatusChangeBroadcastReceiver
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
2121
import java.util.concurrent.Executors
2222
import java.util.concurrent.atomic.AtomicInteger
2323

@@ -46,6 +46,7 @@ class OKLiteManager(private val context: ReactApplicationContext) :
4646
}
4747

4848
private val mNFCConnectedChannel = Channel<IsoDep?>(1)
49+
private var lastIsoDep: IsoDep? = null
4950
private val mNFCState = AtomicInteger(NFCState.Dead)
5051
private val mShowDialogNumber = AtomicInteger(0)
5152
private var mCurrentCardState: CardState? = null
@@ -78,7 +79,7 @@ class OKLiteManager(private val context: ReactApplicationContext) :
7879
delay(100)
7980
if (!mNFCConnectedChannel.isEmpty) {
8081
Log.e(TAG, "There is no way to use NFC")
81-
mNFCConnectedChannel.receive()
82+
// mNFCConnectedChannel.receive()
8283
val startRequest = OneKeyLiteCard.initRequest(isoDep)
8384
val dataMap = Arguments.createMap().apply {
8485
putInt("code", -1)
@@ -118,11 +119,11 @@ class OKLiteManager(private val context: ReactApplicationContext) :
118119
mNfcStateBroadcastReceiver,
119120
NfcStatusChangeBroadcastReceiver.nfcBroadcastReceiverIntentFilter
120121
)
121-
Utils.getTopActivity()?.let {
122-
launch(Dispatchers.IO) {
123-
OneKeyLiteCard.startNfc(it as FragmentActivity) {}
122+
Utils.getTopActivity()?.let {
123+
launch(Dispatchers.IO) {
124+
OneKeyLiteCard.startNfc(it as FragmentActivity) {}
125+
}
124126
}
125-
}
126127

127128
}
128129

@@ -211,11 +212,28 @@ class OKLiteManager(private val context: ReactApplicationContext) :
211212
it.putString("message", "show_connect_ui")
212213
})
213214
mShowDialogNumber.incrementAndGet()
214-
if (!mNFCConnectedChannel.isEmpty) {
215-
mNFCConnectedChannel.tryReceive()
215+
val tryReceiveResult = mNFCConnectedChannel.tryReceive()
216+
217+
fun IsoDep?.isSafeConnected(): Boolean {
218+
return runCatching { this?.isConnected ?: false }.getOrDefault(false)
216219
}
217-
val receiveIsoDep = mNFCConnectedChannel.receive()
218-
mCurrentCardState = null
220+
var receiveIsoDep: IsoDep? = null
221+
222+
if (tryReceiveResult.isSuccess) {
223+
receiveIsoDep = tryReceiveResult.getOrNull()
224+
if (!receiveIsoDep.isSafeConnected()) {
225+
receiveIsoDep = null
226+
}
227+
}
228+
229+
if (receiveIsoDep == null && lastIsoDep.isSafeConnected()) {
230+
receiveIsoDep = lastIsoDep
231+
}
232+
if (receiveIsoDep == null) {
233+
receiveIsoDep = mNFCConnectedChannel.receive()
234+
}
235+
236+
lastIsoDep = receiveIsoDep
219237
if (receiveIsoDep == null) {
220238
// 取消连接
221239
releaseDevice()
@@ -259,27 +277,7 @@ class OKLiteManager(private val context: ReactApplicationContext) :
259277
callback: Callback,
260278
execute: (isoDep: IsoDep) -> T
261279
) {
262-
val topActivity = Utils.getTopActivity()
263-
if (topActivity == null) {
264-
callback.invoke(NFCExceptions.InitializedException().createArguments(), null, null)
265-
return
266-
}
267-
val isNfcExists = NfcUtils.isNfcExits(topActivity)
268-
if (!isNfcExists) {
269-
// 没有 NFC 设备
270-
Log.d(TAG, "NFC device not found")
271-
callback.invoke(NFCExceptions.NotExistsNFC().createArguments(), null, null)
272-
return
273-
}
274-
275-
val isNfcEnable = NfcUtils.isNfcEnable(topActivity)
276-
if (!isNfcEnable) {
277-
// 没有打开 NFC 开关
278-
Log.d(TAG, "NFC device not enable")
279-
callback.invoke(NFCExceptions.NotEnableNFC().createArguments(), null, null)
280-
return
281-
}
282-
280+
val topActivity = Utils.getTopActivity() ?: return
283281
NfcPermissionUtils.checkPermission(topActivity) {
284282
try {
285283
Log.d(TAG, "NFC permission check success")
@@ -324,17 +322,6 @@ class OKLiteManager(private val context: ReactApplicationContext) :
324322
}
325323
}
326324

327-
@ReactMethod
328-
fun getCardName(callback: Callback) = launch {
329-
Log.d(TAG, "getCardName")
330-
handleOperation(callback) { isoDep ->
331-
Log.e(TAG, "getCardName Obtain the device")
332-
val cardName = OneKeyLiteCard.getCardName(isoDep)
333-
Log.e(TAG, "getCardName result $cardName")
334-
cardName
335-
}
336-
}
337-
338325
@ReactMethod
339326
fun getLiteInfo(callback: Callback) = launch {
340327
Log.d(TAG, "getLiteInfo")
@@ -377,6 +364,37 @@ class OKLiteManager(private val context: ReactApplicationContext) :
377364
}
378365
}
379366

367+
@ReactMethod
368+
fun checkNFCPermission(callback: Callback) {
369+
val topActivity = Utils.getTopActivity()
370+
if (topActivity == null) {
371+
callback.invoke(NFCExceptions.InitializedException().createArguments(), null, null)
372+
return
373+
}
374+
val isNfcExists = NfcUtils.isNfcExits(topActivity)
375+
if (!isNfcExists) {
376+
// 没有 NFC 设备
377+
Log.d(TAG, "NFC device not found")
378+
callback.invoke(NFCExceptions.NotExistsNFC().createArguments(), null, null)
379+
return
380+
}
381+
382+
val isNfcEnable = NfcUtils.isNfcEnable(topActivity)
383+
if (!isNfcEnable) {
384+
// 没有打开 NFC 开关
385+
Log.d(TAG, "NFC device not enable")
386+
callback.invoke(NFCExceptions.NotEnableNFC().createArguments(), null, null)
387+
return
388+
}
389+
NfcPermissionUtils.checkPermission(topActivity) {
390+
callback.invoke(null, null, null)
391+
return
392+
}
393+
// 没有 NFC 使用权限
394+
Log.d(TAG, "NFC device not permission")
395+
callback.invoke(NFCExceptions.NotNFCPermission().createArguments(), null, null)
396+
}
397+
380398
@ReactMethod
381399
fun reset(callback: Callback) = launch {
382400
Log.d(TAG, "reset")

android/src/main/java/so/onekey/app/wallet/OKLitePackage.kt renamed to android/src/main/java/so/onekey/app/wallet/lite/OKLitePackage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package so.onekey.app.wallet
1+
package so.onekey.app.wallet.lite
22

33
import com.facebook.react.ReactPackage
44
import com.facebook.react.bridge.NativeModule

android/src/main/java/so/onekey/app/wallet/keys/KeysNativeProvider.kt renamed to android/src/main/java/so/onekey/app/wallet/lite/keys/KeysNativeProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package so.onekey.app.wallet.keys
1+
package so.onekey.app.wallet.lite.keys
22

33
import android.content.Context
44

android/src/main/java/so/onekey/app/wallet/nfc/Exceptions.kt renamed to android/src/main/java/so/onekey/app/wallet/lite/nfc/Exceptions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package so.onekey.app.wallet.nfc
1+
package so.onekey.app.wallet.lite.nfc
22

33
sealed class NFCExceptions(val code: Int, override val message: String? = null) : Exception(message) {
44
fun toJson(): String {

android/src/main/java/so/onekey/app/wallet/nfc/NfcUtils.kt renamed to android/src/main/java/so/onekey/app/wallet/lite/nfc/NfcUtils.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package so.onekey.app.wallet.nfc
1+
package so.onekey.app.wallet.lite.nfc
22

33
import android.app.Activity
44
import android.app.PendingIntent
@@ -9,7 +9,7 @@ import android.nfc.NfcAdapter
99
import android.nfc.tech.*
1010
import android.os.Build
1111
import android.provider.Settings
12-
import so.onekey.app.wallet.utils.MiUtil
12+
import so.onekey.app.wallet.lite.utils.MiUtil
1313

1414
object NfcUtils {
1515

android/src/main/java/so/onekey/app/wallet/nfc/broadcast/NfcStatusChangeBroadcastReceiver.kt renamed to android/src/main/java/so/onekey/app/wallet/lite/nfc/broadcast/NfcStatusChangeBroadcastReceiver.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package so.onekey.app.wallet.nfc.broadcast
1+
package so.onekey.app.wallet.lite.nfc.broadcast
22

33
import android.content.BroadcastReceiver
44
import android.content.Context

0 commit comments

Comments
 (0)