@regulaforensics/react-native-document-reader-api 7.5.763-nightly → 7.5.767-nightly
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RNDocumentReaderApi.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/regula/documentreader/BluetoothUtil.kt +95 -45
- package/android/src/main/java/com/regula/documentreader/Config.kt +43 -2
- package/android/src/main/java/com/regula/documentreader/JSONConstructor.kt +27 -13
- package/android/src/main/java/com/regula/documentreader/RNRegulaDocumentReaderModule.kt +29 -23
- package/android/src/main/java/com/regula/documentreader/Utils.kt +7 -2
- package/example/package-lock.json +3972 -6735
- package/example/package.json +2 -2
- package/index.d.ts +116 -3
- package/index.js +80 -3
- package/ios/RGLWConfig.m +45 -0
- package/ios/RGLWJSONConstructor.h +3 -0
- package/ios/RGLWJSONConstructor.m +33 -2
- package/ios/RNRegulaDocumentReader.h +4 -1
- package/ios/RNRegulaDocumentReader.m +71 -24
- package/package.json +1 -1
|
@@ -14,6 +14,6 @@ Pod::Spec.new do |s|
|
|
|
14
14
|
s.source = { :http => 'file:' + __dir__ }
|
|
15
15
|
s.ios.deployment_target = '11.0'
|
|
16
16
|
s.source_files = "ios/*.{h,m}"
|
|
17
|
-
s.dependency 'DocumentReaderNightly', '7.5.
|
|
17
|
+
s.dependency 'DocumentReaderNightly', '7.5.4172'
|
|
18
18
|
s.dependency 'React'
|
|
19
19
|
end
|
package/android/build.gradle
CHANGED
|
@@ -41,7 +41,7 @@ dependencies {
|
|
|
41
41
|
//noinspection GradleDynamicVersion
|
|
42
42
|
implementation 'com.facebook.react:react-native:+'
|
|
43
43
|
//noinspection GradleDependency
|
|
44
|
-
implementation('com.regula.documentreader:api:7.5.
|
|
44
|
+
implementation('com.regula.documentreader:api:7.5.10351') {
|
|
45
45
|
transitive = true
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
// Created by Pavel Masiuk on 21.09.2023.
|
|
6
6
|
// Copyright © 2023 Regula. All rights reserved.
|
|
7
7
|
//
|
|
8
|
+
@file:SuppressLint("MissingPermission")
|
|
8
9
|
|
|
9
10
|
package com.regula.documentreader
|
|
10
11
|
|
|
11
|
-
import android.Manifest.permission
|
|
12
|
+
import android.Manifest.permission.ACCESS_FINE_LOCATION
|
|
13
|
+
import android.Manifest.permission.BLUETOOTH_CONNECT
|
|
14
|
+
import android.Manifest.permission.BLUETOOTH_SCAN
|
|
12
15
|
import android.annotation.SuppressLint
|
|
13
16
|
import android.app.Activity
|
|
14
17
|
import android.bluetooth.BluetoothAdapter
|
|
@@ -19,7 +22,6 @@ import android.content.pm.PackageManager.PERMISSION_GRANTED
|
|
|
19
22
|
import android.os.Build
|
|
20
23
|
import android.os.IBinder
|
|
21
24
|
import android.provider.Settings
|
|
22
|
-
import androidx.annotation.RequiresPermission
|
|
23
25
|
import androidx.core.app.ActivityCompat.requestPermissions
|
|
24
26
|
import androidx.core.content.ContextCompat.checkSelfPermission
|
|
25
27
|
import com.regula.documentreader.api.ble.BLEWrapper
|
|
@@ -28,37 +30,103 @@ import com.regula.documentreader.api.ble.RegulaBleService
|
|
|
28
30
|
import com.regula.documentreader.api.internal.permission.BluetoothPermissionHelper.BLE_ACCESS_PERMISSION
|
|
29
31
|
import com.regula.documentreader.api.internal.permission.BluetoothSettingsHelper.isBluetoothEnabled
|
|
30
32
|
import com.regula.documentreader.api.internal.permission.BluetoothSettingsHelper.isLocationServiceEnabled
|
|
33
|
+
import java.util.Timer
|
|
34
|
+
import java.util.TimerTask
|
|
31
35
|
|
|
32
|
-
const val
|
|
33
|
-
|
|
36
|
+
const val SEARCHING_TIMEOUT: Long = 7000
|
|
37
|
+
|
|
38
|
+
const val INTENT_REQUEST_ENABLE_LOCATION = 196
|
|
39
|
+
const val INTENT_REQUEST_ENABLE_BLUETOOTH = 197
|
|
34
40
|
|
|
35
41
|
@SuppressLint("StaticFieldLeak")
|
|
36
|
-
var
|
|
42
|
+
lateinit var bluetooth: BLEWrapper
|
|
43
|
+
lateinit var savedCallbackForPermissionResult: Callback
|
|
44
|
+
var deviceConnected = false
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
fun connectBluetoothDevice(callback: Callback) {
|
|
47
|
+
// return if already connected
|
|
48
|
+
if (deviceConnected) return
|
|
49
|
+
|
|
50
|
+
// If some of the bluetooth permissions/settings don't match the requirements,
|
|
51
|
+
// save callback for later and request the permissions/settings.
|
|
52
|
+
// Callback will then be used in onRequestPermissionsResult for permission requests
|
|
53
|
+
// and in onActivityResult for settings change requests.
|
|
54
|
+
if (!isBluetoothSettingsReady(activity)) {
|
|
55
|
+
savedCallbackForPermissionResult = callback
|
|
56
|
+
return
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// set searching timeout
|
|
60
|
+
val timer = object : TimerTask() {
|
|
61
|
+
override fun run() {
|
|
62
|
+
callback.success(false)
|
|
63
|
+
bluetooth.stopDeviceScan()
|
|
64
|
+
bluetooth.disconnect()
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
Timer().schedule(timer, SEARCHING_TIMEOUT)
|
|
68
|
+
|
|
69
|
+
// start searching devices
|
|
70
|
+
val bleIntent = Intent(activity, RegulaBleService::class.java)
|
|
71
|
+
activity.startService(bleIntent)
|
|
72
|
+
activity.bindService(bleIntent, object : ServiceConnection {
|
|
73
|
+
override fun onServiceConnected(name: ComponentName, service: IBinder) {
|
|
74
|
+
bluetooth = (service as RegulaBleService.LocalBinder).service.bleManager
|
|
75
|
+
bluetooth.addCallback(object : BleWrapperCallback() {
|
|
76
|
+
override fun onDeviceReady() {
|
|
77
|
+
timer.cancel()
|
|
78
|
+
bluetooth.removeCallback(this)
|
|
79
|
+
deviceConnected = true
|
|
80
|
+
callback.success(true)
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
override fun onServiceDisconnected(name: ComponentName) {}
|
|
86
|
+
}, 0)
|
|
42
87
|
}
|
|
43
88
|
|
|
44
|
-
fun
|
|
45
|
-
|
|
46
|
-
|
|
89
|
+
fun onRequestPermissionsResult(
|
|
90
|
+
requestCode: Int,
|
|
91
|
+
permissions: Array<out String>,
|
|
92
|
+
grantResults: IntArray
|
|
93
|
+
): Boolean {
|
|
94
|
+
if (requestCode != BLE_ACCESS_PERMISSION || permissions.isEmpty()) return false
|
|
95
|
+
if (grantResults.isEmpty() || grantResults[0] != PERMISSION_GRANTED) {
|
|
96
|
+
savedCallbackForPermissionResult.success(false)
|
|
97
|
+
return true
|
|
98
|
+
}
|
|
99
|
+
connectBluetoothDevice(savedCallbackForPermissionResult)
|
|
100
|
+
return true
|
|
47
101
|
}
|
|
48
102
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
103
|
+
fun onActivityResult(requestCode: Int, rc: Int, @Suppress("UNUSED_PARAMETER") data: Intent?): Boolean {
|
|
104
|
+
var resultCode = rc
|
|
105
|
+
if (requestCode == INTENT_REQUEST_ENABLE_LOCATION)
|
|
106
|
+
resultCode = if (isLocationServiceEnabled(activity)) Activity.RESULT_OK
|
|
107
|
+
else requestCode
|
|
108
|
+
|
|
109
|
+
if (requestCode == INTENT_REQUEST_ENABLE_BLUETOOTH || requestCode == INTENT_REQUEST_ENABLE_LOCATION) {
|
|
110
|
+
if (resultCode == Activity.RESULT_OK)
|
|
111
|
+
connectBluetoothDevice(savedCallbackForPermissionResult)
|
|
112
|
+
else
|
|
113
|
+
savedCallbackForPermissionResult.success(false)
|
|
114
|
+
return true
|
|
55
115
|
}
|
|
116
|
+
return false
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
fun isBluetoothSettingsReady(activity: Activity): Boolean {
|
|
56
120
|
deniedBluetoothPermissions(activity)?.let {
|
|
57
121
|
requestPermissions(activity, it, BLE_ACCESS_PERMISSION)
|
|
58
122
|
return false
|
|
59
123
|
}
|
|
60
124
|
if (!isBluetoothEnabled(activity)) {
|
|
61
|
-
|
|
125
|
+
requestEnableBluetooth(activity)
|
|
126
|
+
return false
|
|
127
|
+
}
|
|
128
|
+
if (!isLocationServiceEnabled(activity)) {
|
|
129
|
+
requestEnableLocationService(activity)
|
|
62
130
|
return false
|
|
63
131
|
}
|
|
64
132
|
return true
|
|
@@ -83,30 +151,12 @@ fun deniedBluetoothPermission(
|
|
|
83
151
|
return arrayOf()
|
|
84
152
|
}
|
|
85
153
|
|
|
86
|
-
fun
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
onReady: () -> Unit
|
|
91
|
-
) {
|
|
92
|
-
val bleIntent = Intent(activity, RegulaBleService::class.java)
|
|
93
|
-
activity.startService(bleIntent)
|
|
94
|
-
|
|
95
|
-
activity.bindService(bleIntent, object : ServiceConnection {
|
|
96
|
-
override fun onServiceConnected(name: ComponentName, service: IBinder) {
|
|
97
|
-
bleManager = (service as RegulaBleService.LocalBinder).service.bleManager
|
|
98
|
-
val isBleManagerConnected = bleManager?.isConnected == true
|
|
99
|
-
onConnected(isBleManagerConnected)
|
|
100
|
-
if (!isBleManagerConnected) {
|
|
101
|
-
bleManager?.addCallback(object : BleWrapperCallback() {
|
|
102
|
-
override fun onDeviceReady() {
|
|
103
|
-
bleManager!!.removeCallback(this)
|
|
104
|
-
onReady()
|
|
105
|
-
}
|
|
106
|
-
})
|
|
107
|
-
}
|
|
108
|
-
}
|
|
154
|
+
fun requestEnableBluetooth(activity: Activity) {
|
|
155
|
+
val enableIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
|
|
156
|
+
activity.startActivityForResult(enableIntent, INTENT_REQUEST_ENABLE_BLUETOOTH)
|
|
157
|
+
}
|
|
109
158
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
159
|
+
fun requestEnableLocationService(activity: Activity) {
|
|
160
|
+
val myIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
|
|
161
|
+
activity.startActivityForResult(myIntent, INTENT_REQUEST_ENABLE_LOCATION)
|
|
162
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Config.
|
|
2
|
+
// Config.kt
|
|
3
3
|
// DocumentReader
|
|
4
4
|
//
|
|
5
5
|
// Created by Pavel Masiuk on 21.09.2023.
|
|
@@ -26,6 +26,7 @@ import com.regula.documentreader.api.params.LivenessParams
|
|
|
26
26
|
import com.regula.documentreader.api.params.ParamsCustomization
|
|
27
27
|
import com.regula.documentreader.api.params.ProcessParam
|
|
28
28
|
import com.regula.documentreader.api.params.RfidScenario
|
|
29
|
+
import com.regula.documentreader.api.params.rfid.dg.DTCDataGroup
|
|
29
30
|
import com.regula.documentreader.api.params.rfid.dg.DataGroups
|
|
30
31
|
import com.regula.documentreader.api.params.rfid.dg.EIDDataGroups
|
|
31
32
|
import com.regula.documentreader.api.params.rfid.dg.EPassportDataGroups
|
|
@@ -129,12 +130,16 @@ fun setProcessParams(processParams: ProcessParam, opts: JSONObject) = opts.forEa
|
|
|
129
130
|
"shouldReturnPackageForReprocess" -> processParams.shouldReturnPackageForReprocess = v as Boolean
|
|
130
131
|
"disablePerforationOCR" -> processParams.disablePerforationOCR = v as Boolean
|
|
131
132
|
"respectImageQuality" -> processParams.respectImageQuality = v as Boolean
|
|
133
|
+
"strictImageQuality" -> processParams.strictImageQuality = v as Boolean
|
|
132
134
|
"splitNames" -> processParams.splitNames = v as Boolean
|
|
133
135
|
"doDetectCan" -> processParams.doDetectCan = v as Boolean
|
|
134
136
|
"useFaceApi" -> processParams.useFaceApi = v as Boolean
|
|
135
137
|
"useAuthenticityCheck" -> processParams.useAuthenticityCheck = v as Boolean
|
|
136
138
|
"checkHologram" -> processParams.checkHologram = v as Boolean
|
|
137
139
|
"generateNumericCodes" -> processParams.generateNumericCodes = v as Boolean
|
|
140
|
+
"strictBarcodeDigitalSignatureCheck" -> processParams.strictBarcodeDigitalSignatureCheck = v as Boolean
|
|
141
|
+
"selectLongestNames" -> processParams.selectLongestNames = v as Boolean
|
|
142
|
+
"generateDTCVC" -> processParams.generateDTCVC = v as Boolean
|
|
138
143
|
"measureSystem" -> processParams.measureSystem = v.toInt()
|
|
139
144
|
"barcodeParserType" -> processParams.barcodeParserType = v.toInt()
|
|
140
145
|
"perspectiveAngle" -> processParams.perspectiveAngle = v.toInt()
|
|
@@ -207,12 +212,16 @@ fun getProcessParams(processParams: ProcessParam) = mapOf(
|
|
|
207
212
|
"shouldReturnPackageForReprocess" to processParams.shouldReturnPackageForReprocess,
|
|
208
213
|
"disablePerforationOCR" to processParams.disablePerforationOCR,
|
|
209
214
|
"respectImageQuality" to processParams.respectImageQuality,
|
|
215
|
+
"strictImageQuality" to processParams.strictImageQuality,
|
|
210
216
|
"splitNames" to processParams.splitNames,
|
|
211
217
|
"doDetectCan" to processParams.doDetectCan,
|
|
212
218
|
"useFaceApi" to processParams.useFaceApi,
|
|
213
219
|
"useAuthenticityCheck" to processParams.useAuthenticityCheck,
|
|
214
220
|
"checkHologram" to processParams.checkHologram,
|
|
215
221
|
"generateNumericCodes" to processParams.generateNumericCodes,
|
|
222
|
+
"strictBarcodeDigitalSignatureCheck" to processParams.strictBarcodeDigitalSignatureCheck,
|
|
223
|
+
"selectLongestNames" to processParams.selectLongestNames,
|
|
224
|
+
"generateDTCVC" to processParams.generateDTCVC,
|
|
216
225
|
"measureSystem" to processParams.measureSystem,
|
|
217
226
|
"barcodeParserType" to processParams.barcodeParserType,
|
|
218
227
|
"perspectiveAngle" to processParams.perspectiveAngle,
|
|
@@ -265,6 +274,8 @@ fun setCustomization(customization: ParamsCustomization, opts: JSONObject, conte
|
|
|
265
274
|
"cameraFrameLineLength" -> editor.setCameraFrameLineLength(v.toInt())
|
|
266
275
|
"cameraFrameShapeType" -> editor.setCameraFrameShapeType(v.toInt())
|
|
267
276
|
"cameraFrameOffsetWidth" -> editor.setCameraFrameOffsetWidth(v.toInt())
|
|
277
|
+
"nextPageAnimationStartDelay" -> editor.setNextPageAnimationStartDelay(v.toInt())
|
|
278
|
+
"nextPageAnimationEndDelay" -> editor.setNextPageAnimationEndDelay(v.toInt())
|
|
268
279
|
"activityIndicatorSize" -> editor.setActivityIndicatorSize(v.toInt())
|
|
269
280
|
"status" -> editor.setStatus(v as String)
|
|
270
281
|
"resultStatus" -> editor.setResultStatus(v as String)
|
|
@@ -278,6 +289,7 @@ fun setCustomization(customization: ParamsCustomization, opts: JSONObject, conte
|
|
|
278
289
|
"activityIndicatorColor" -> editor.setActivityIndicatorColor(v.toColor())
|
|
279
290
|
"statusBackgroundColor" -> editor.setStatusBackgroundColor(v.toColor())
|
|
280
291
|
"cameraPreviewBackgroundColor" -> editor.setCameraPreviewBackgroundColor(v.toColor())
|
|
292
|
+
"backgroundMaskColor" -> editor.setBackgroundMaskColor(v.toColor())
|
|
281
293
|
"statusPositionMultiplier" -> editor.setStatusPositionMultiplier(v.toFloat())
|
|
282
294
|
"resultStatusPositionMultiplier" -> editor.setResultStatusPositionMultiplier(v.toFloat())
|
|
283
295
|
"toolbarSize" -> editor.setToolbarSize(v.toFloat())
|
|
@@ -336,6 +348,8 @@ fun getCustomization(customization: ParamsCustomization) = mapOf(
|
|
|
336
348
|
"cameraFrameLineLength" to customization.cameraFrameLineLength,
|
|
337
349
|
"cameraFrameShapeType" to customization.cameraFrameShapeType,
|
|
338
350
|
"cameraFrameOffsetWidth" to customization.cameraFrameOffsetWidth,
|
|
351
|
+
"nextPageAnimationStartDelay" to customization.nextPageAnimationStartDelay,
|
|
352
|
+
"nextPageAnimationEndDelay" to customization.nextPageAnimationEndDelay,
|
|
339
353
|
"activityIndicatorSize" to customization.activityIndicatorSize,
|
|
340
354
|
"status" to customization.status,
|
|
341
355
|
"resultStatus" to customization.resultStatus,
|
|
@@ -349,6 +363,7 @@ fun getCustomization(customization: ParamsCustomization) = mapOf(
|
|
|
349
363
|
"activityIndicatorColor" to customization.activityIndicatorColor.toLong(),
|
|
350
364
|
"statusBackgroundColor" to customization.statusBackgroundColor.toLong(),
|
|
351
365
|
"cameraPreviewBackgroundColor" to customization.cameraPreviewBackgroundColor.toLong(),
|
|
366
|
+
"backgroundMaskColor" to customization.backgroundMaskColor.toLong(),
|
|
352
367
|
"statusPositionMultiplier" to customization.statusPositionMultiplier,
|
|
353
368
|
"resultStatusPositionMultiplier" to customization.resultStatusPositionMultiplier,
|
|
354
369
|
"backgroundMaskAlpha" to customization.backgroundMaskAlpha,
|
|
@@ -422,6 +437,8 @@ fun setRfidScenario(rfidScenario: RfidScenario, opts: JSONObject) = opts.forEach
|
|
|
422
437
|
"applyAmendments" -> rfidScenario.isApplyAmendments = v as Boolean
|
|
423
438
|
"autoSettings" -> rfidScenario.isAutoSettings = v as Boolean
|
|
424
439
|
"proceedReadingAlways" -> rfidScenario.proceedReadingAlways = v as Boolean
|
|
440
|
+
"readDTC" -> rfidScenario.isReadDTC = v as Boolean
|
|
441
|
+
"mrzStrictCheck" -> rfidScenario.isMrzStrictCheck = v as Boolean
|
|
425
442
|
"signManagementAction" -> rfidScenario.signManagementAction = v.toInt()
|
|
426
443
|
"readingBuffer" -> rfidScenario.readingBuffer = v.toInt()
|
|
427
444
|
"onlineTAToSignDataType" -> rfidScenario.onlineTAToSignDataType = v.toInt()
|
|
@@ -437,9 +454,11 @@ fun setRfidScenario(rfidScenario: RfidScenario, opts: JSONObject) = opts.forEach
|
|
|
437
454
|
"mrz" -> rfidScenario.mrz = v as String
|
|
438
455
|
"eSignPINDefault" -> rfidScenario.seteSignPINDefault(v as String)
|
|
439
456
|
"eSignPINNewValue" -> rfidScenario.seteSignPINNewValue(v as String)
|
|
457
|
+
"cardAccess" -> rfidScenario.cardAccess = v as String
|
|
440
458
|
"ePassportDataGroups" -> setDataGroups(rfidScenario.ePassportDataGroups(), v as JSONObject)
|
|
441
459
|
"eIDDataGroups" -> setDataGroups(rfidScenario.eIDDataGroups(), v as JSONObject)
|
|
442
460
|
"eDLDataGroups" -> setDataGroups(rfidScenario.eDLDataGroups(), v as JSONObject)
|
|
461
|
+
"dtcDataGroups" -> setDataGroups(rfidScenario.DTCDataGroup(), v as JSONObject)
|
|
443
462
|
}
|
|
444
463
|
}
|
|
445
464
|
|
|
@@ -478,6 +497,8 @@ fun getRfidScenario(rfidScenario: RfidScenario) = mapOf(
|
|
|
478
497
|
"applyAmendments" to rfidScenario.isApplyAmendments,
|
|
479
498
|
"autoSettings" to rfidScenario.isAutoSettings,
|
|
480
499
|
"proceedReadingAlways" to rfidScenario.proceedReadingAlways,
|
|
500
|
+
"readDTC" to rfidScenario.isReadDTC,
|
|
501
|
+
"mrzStrictCheck" to rfidScenario.isMrzStrictCheck,
|
|
481
502
|
"signManagementAction" to rfidScenario.signManagementAction,
|
|
482
503
|
"readingBuffer" to rfidScenario.readingBuffer,
|
|
483
504
|
"onlineTAToSignDataType" to rfidScenario.onlineTAToSignDataType,
|
|
@@ -493,9 +514,11 @@ fun getRfidScenario(rfidScenario: RfidScenario) = mapOf(
|
|
|
493
514
|
"mrz" to rfidScenario.mrz,
|
|
494
515
|
"eSignPINDefault" to rfidScenario.geteSignPINDefault(),
|
|
495
516
|
"eSignPINNewValue" to rfidScenario.geteSignPINNewValue(),
|
|
517
|
+
"cardAccess" to rfidScenario.cardAccess,
|
|
496
518
|
"ePassportDataGroups" to getDataGroups(rfidScenario.ePassportDataGroups()),
|
|
497
519
|
"eIDDataGroups" to getDataGroups(rfidScenario.eIDDataGroups()),
|
|
498
|
-
"eDLDataGroups" to getDataGroups(rfidScenario.eDLDataGroups())
|
|
520
|
+
"eDLDataGroups" to getDataGroups(rfidScenario.eDLDataGroups()),
|
|
521
|
+
"dtcDataGroups" to getDataGroups(rfidScenario.DTCDataGroup())
|
|
499
522
|
).toJsonObject()
|
|
500
523
|
|
|
501
524
|
fun setDataGroups(dataGroup: DataGroups, opts: JSONObject) = opts.forEach { k, v ->
|
|
@@ -529,6 +552,15 @@ fun setDataGroups(dataGroup: DataGroups, opts: JSONObject) = opts.forEach { k, v
|
|
|
529
552
|
"DG20" -> dataGroup.isDG20 = value
|
|
530
553
|
"DG21" -> dataGroup.isDG21 = value
|
|
531
554
|
}
|
|
555
|
+
if (dataGroup is DTCDataGroup) when (k) {
|
|
556
|
+
"DG15" -> dataGroup.isDG15 = value
|
|
557
|
+
"DG16" -> dataGroup.isDG16 = value
|
|
558
|
+
"DG17" -> dataGroup.isDG17 = value
|
|
559
|
+
"DG18" -> dataGroup.isDG18 = value
|
|
560
|
+
"DG22" -> dataGroup.isDG22 = value
|
|
561
|
+
"DG23" -> dataGroup.isDG23 = value
|
|
562
|
+
"DG24" -> dataGroup.isDG24 = value
|
|
563
|
+
}
|
|
532
564
|
}
|
|
533
565
|
|
|
534
566
|
fun getDataGroups(dataGroup: DataGroups): JSONObject {
|
|
@@ -561,6 +593,15 @@ fun getDataGroups(dataGroup: DataGroups): JSONObject {
|
|
|
561
593
|
result["DG20"] = dataGroup.isDG20
|
|
562
594
|
result["DG21"] = dataGroup.isDG21
|
|
563
595
|
}
|
|
596
|
+
if (dataGroup is DTCDataGroup) {
|
|
597
|
+
result["DG15"] = dataGroup.isDG15
|
|
598
|
+
result["DG16"] = dataGroup.isDG16
|
|
599
|
+
result["DG17"] = dataGroup.isDG17
|
|
600
|
+
result["DG18"] = dataGroup.isDG18
|
|
601
|
+
result["DG22"] = dataGroup.isDG22
|
|
602
|
+
result["DG23"] = dataGroup.isDG23
|
|
603
|
+
result["DG24"] = dataGroup.isDG24
|
|
604
|
+
}
|
|
564
605
|
return result.toJsonObject()
|
|
565
606
|
}
|
|
566
607
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//
|
|
2
|
-
// JSONConstructor.
|
|
2
|
+
// JSONConstructor.kt
|
|
3
3
|
// DocumentReader
|
|
4
4
|
//
|
|
5
5
|
// Created by Pavel Masiuk on 21.09.2023.
|
|
@@ -46,6 +46,7 @@ import com.regula.documentreader.api.params.rfid.TccParams
|
|
|
46
46
|
import com.regula.documentreader.api.params.rfid.authorization.PAAttribute
|
|
47
47
|
import com.regula.documentreader.api.params.rfid.authorization.PAResourcesIssuer
|
|
48
48
|
import com.regula.documentreader.api.params.rfid.authorization.TAChallenge
|
|
49
|
+
import com.regula.documentreader.api.params.rfid.dg.DTCDataGroup
|
|
49
50
|
import com.regula.documentreader.api.params.rfid.dg.EDLDataGroups
|
|
50
51
|
import com.regula.documentreader.api.params.rfid.dg.EIDDataGroups
|
|
51
52
|
import com.regula.documentreader.api.params.rfid.dg.EPassportDataGroups
|
|
@@ -243,6 +244,17 @@ fun generateDocReaderConfig(temp: DocReaderConfig?): JSONObject? {
|
|
|
243
244
|
return result
|
|
244
245
|
}
|
|
245
246
|
|
|
247
|
+
fun bleDeviceConfigFromJSON(input: JSONObject): BleDeviceConfig {
|
|
248
|
+
var result = BleDeviceConfig(bluetooth)
|
|
249
|
+
|
|
250
|
+
if (input.has("customDb")) result = BleDeviceConfig(bluetooth, byteArrayFromBase64(input.getString("customDb")))
|
|
251
|
+
if (input.has("licenseUpdate")) result.setLicenseUpdate(input.getBoolean("licenseUpdate"))
|
|
252
|
+
if (input.has("delayedNNLoad")) result.isDelayedNNLoad = input.getBoolean("delayedNNLoad")
|
|
253
|
+
if (input.has("blackList")) result.blackList = input.getJSONObject("blackList")
|
|
254
|
+
|
|
255
|
+
return result
|
|
256
|
+
}
|
|
257
|
+
|
|
246
258
|
fun scannerConfigFromJSON(input: JSONObject): ScannerConfig {
|
|
247
259
|
val builder = if (input.has("scenario")) ScannerConfig.Builder(input.getString("scenario"))
|
|
248
260
|
else ScannerConfig.Builder(onlineProcessingConfigFromJSON(input.getJSONObject("onlineProcessingConfig"))!!)
|
|
@@ -274,6 +286,7 @@ fun recognizeConfigFromJSON(input: JSONObject): RecognizeConfig {
|
|
|
274
286
|
else RecognizeConfig.Builder(onlineProcessingConfigFromJSON(input.getJSONObject("onlineProcessingConfig"))!!)
|
|
275
287
|
|
|
276
288
|
if (input.has("oneShotIdentification")) builder.setOneShotIdentification(input.getBoolean("oneShotIdentification"))
|
|
289
|
+
if (input.has("dtc")) builder.setDTC(byteArrayFromBase64(input.getString("dtc"))!!)
|
|
277
290
|
if (input.has("livePortrait")) builder.setLivePortrait(bitmapFromBase64(input.getString("livePortrait"))!!)
|
|
278
291
|
if (input.has("extPortrait")) builder.setExtPortrait(bitmapFromBase64(input.getString("extPortrait"))!!)
|
|
279
292
|
if (input.has("image")) builder.setBitmap(bitmapFromBase64(input.getString("image"))!!)
|
|
@@ -302,6 +315,7 @@ fun generateRecognizeConfig(temp: RecognizeConfig?): JSONObject? {
|
|
|
302
315
|
result.put("scenario", input.scenario)
|
|
303
316
|
result.put("onlineProcessingConfig", generateOnlineProcessingConfig(input.onlineProcessingConfig))
|
|
304
317
|
result.put("oneShotIdentification", input.oneShotIdentification)
|
|
318
|
+
result.put("dtc", generateByteArray(input.dtc))
|
|
305
319
|
result.put("livePortrait", bitmapToBase64(input.livePortrait))
|
|
306
320
|
result.put("extPortrait", bitmapToBase64(input.extPortrait))
|
|
307
321
|
result.put("image", bitmapToBase64(input.bitmap))
|
|
@@ -325,6 +339,7 @@ fun backendProcessingConfigFromJSON(temp: JSONObject?): BackendProcessingConfig?
|
|
|
325
339
|
val result = BackendProcessingConfig(input.getString("url"))
|
|
326
340
|
if (input.has("httpHeaders")) result.httpHeaders = stringMapFromJson(input.getJSONObject("httpHeaders"))
|
|
327
341
|
if (input.has("rfidServerSideChipVerification")) result.rfidServerSideChipVerification = input.getBoolean("rfidServerSideChipVerification")
|
|
342
|
+
if (input.has("timeoutConnection")) result.timeoutConnection = input.getDouble("timeoutConnection")
|
|
328
343
|
|
|
329
344
|
return result
|
|
330
345
|
}
|
|
@@ -337,6 +352,7 @@ fun generateBackendProcessingConfig(temp: BackendProcessingConfig?): JSONObject?
|
|
|
337
352
|
result.put("url", input.url)
|
|
338
353
|
result.put("httpHeaders", generateStringMap(input.httpHeaders))
|
|
339
354
|
result.put("rfidServerSideChipVerification", input.rfidServerSideChipVerification)
|
|
355
|
+
result.put("timeoutConnection", input.timeoutConnection)
|
|
340
356
|
|
|
341
357
|
return result
|
|
342
358
|
}
|
|
@@ -508,6 +524,14 @@ fun eIDDataGroupsFromJSON(input: JSONObject): EIDDataGroups {
|
|
|
508
524
|
|
|
509
525
|
fun generateEIDDataGroups(input: EIDDataGroups): JSONObject = getDataGroups(input)
|
|
510
526
|
|
|
527
|
+
fun dtcDataGroupsFromJSON(input: JSONObject): DTCDataGroup {
|
|
528
|
+
val result = DTCDataGroup()
|
|
529
|
+
setDataGroups(result, input)
|
|
530
|
+
return result
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
fun generateDTCDataGroups(input: DTCDataGroup): JSONObject = getDataGroups(input)
|
|
534
|
+
|
|
511
535
|
fun rfidScenarioFromJSON(input: JSONObject): RfidScenario {
|
|
512
536
|
val result = RfidScenario()
|
|
513
537
|
setRfidScenario(result, input)
|
|
@@ -573,18 +597,6 @@ fun generateTypeface(temp: Typeface?, size: Int? = null): JSONObject? {
|
|
|
573
597
|
return result
|
|
574
598
|
}
|
|
575
599
|
|
|
576
|
-
fun bleDeviceConfigFromJSON(input: JSONObject): BleDeviceConfig {
|
|
577
|
-
val bleWrapper = bleManager
|
|
578
|
-
var result = BleDeviceConfig(bleWrapper)
|
|
579
|
-
|
|
580
|
-
if (input.has("customDb")) result = BleDeviceConfig(bleWrapper!!, byteArrayFromBase64(input.getString("customDb")))
|
|
581
|
-
if (input.has("licenseUpdate")) result.setLicenseUpdate(input.getBoolean("licenseUpdate"))
|
|
582
|
-
if (input.has("delayedNNLoad")) result.isDelayedNNLoad = input.getBoolean("delayedNNLoad")
|
|
583
|
-
if (input.has("blackList")) result.blackList = input.getJSONObject("blackList")
|
|
584
|
-
|
|
585
|
-
return result
|
|
586
|
-
}
|
|
587
|
-
|
|
588
600
|
fun imageInputDataFromJSON(temp: JSONObject?): ImageInputData? {
|
|
589
601
|
if (temp == null || !temp.has("image")) return null
|
|
590
602
|
val input: JSONObject = temp
|
|
@@ -2168,6 +2180,7 @@ fun documentReaderResultsFromJSON(temp: JSONObject?): DocumentReaderResults? {
|
|
|
2168
2180
|
result.documentType = listFromJSON(input.optJSONArray("documentType"), ::documentReaderDocumentTypeFromJSON)!!
|
|
2169
2181
|
result.status = documentReaderResultsStatusFromJSON(input.optJSONObject("status"))!!
|
|
2170
2182
|
result.vdsncData = vdsncDataFromJSON(input.optJSONObject("vdsncData")!!)
|
|
2183
|
+
result.dtcData = input.getString("dtcData")
|
|
2171
2184
|
result.transactionInfo = transactionInfoFromJSON(input.optJSONObject("transactionInfo"))
|
|
2172
2185
|
|
|
2173
2186
|
return result
|
|
@@ -2196,6 +2209,7 @@ fun generateDocumentReaderResults(temp: DocumentReaderResults?, context: Context
|
|
|
2196
2209
|
result.put("documentType", generateList(input.documentType, ::generateDocumentReaderDocumentType))
|
|
2197
2210
|
result.put("status", generateDocumentReaderResultsStatus(input.status))
|
|
2198
2211
|
result.put("vdsncData", generateVDSNCData(input.vdsncData))
|
|
2212
|
+
result.put("dtcData", input.dtcData)
|
|
2199
2213
|
result.put("transactionInfo", generateTransactionInfo(input.transactionInfo))
|
|
2200
2214
|
|
|
2201
2215
|
return result
|
|
@@ -21,6 +21,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
|
21
21
|
import com.facebook.react.bridge.ReactMethod
|
|
22
22
|
import com.facebook.react.bridge.ReadableArray
|
|
23
23
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
24
|
+
import com.facebook.react.modules.core.PermissionListener
|
|
24
25
|
import com.regula.common.LocalizationCallbacks
|
|
25
26
|
import com.regula.documentreader.Convert.bitmapToBase64
|
|
26
27
|
import com.regula.documentreader.Convert.byteArrayFromBase64
|
|
@@ -55,7 +56,7 @@ import org.json.JSONArray
|
|
|
55
56
|
import org.json.JSONObject
|
|
56
57
|
|
|
57
58
|
@Suppress("unused", "UNUSED_PARAMETER")
|
|
58
|
-
class RNRegulaDocumentReaderModule(rc: ReactApplicationContext) : ReactContextBaseJavaModule(rc), ActivityEventListener {
|
|
59
|
+
class RNRegulaDocumentReaderModule(rc: ReactApplicationContext) : ReactContextBaseJavaModule(rc), ActivityEventListener, PermissionListener {
|
|
59
60
|
init {
|
|
60
61
|
reactContext = rc
|
|
61
62
|
reactContext.addActivityEventListener(this)
|
|
@@ -70,8 +71,15 @@ class RNRegulaDocumentReaderModule(rc: ReactApplicationContext) : ReactContextBa
|
|
|
70
71
|
@ReactMethod
|
|
71
72
|
fun exec(moduleName: String?, action: String?, args: ReadableArray, successCallback: com.facebook.react.bridge.Callback, errorCallback: com.facebook.react.bridge.Callback) = exec(action, args, successCallback, errorCallback)
|
|
72
73
|
override fun getName() = "RNRegulaDocumentReader"
|
|
73
|
-
override fun onNewIntent(intent: Intent)
|
|
74
|
-
|
|
74
|
+
override fun onNewIntent(intent: Intent) {
|
|
75
|
+
newIntent(intent)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
override fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
|
|
79
|
+
onActivityResult(requestCode, resultCode, data)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>?, grantResults: IntArray?) = com.regula.documentreader.onRequestPermissionsResult(requestCode, permissions!!, grantResults!!)
|
|
75
83
|
}
|
|
76
84
|
|
|
77
85
|
fun sendEvent(event: String, data: Any? = "") {
|
|
@@ -109,8 +117,6 @@ fun exec(action: String?, arguments: ReadableArray, successCallback: com.faceboo
|
|
|
109
117
|
when (action) {
|
|
110
118
|
"getDocumentReaderIsReady" -> getDocumentReaderIsReady(callback)
|
|
111
119
|
"getDocumentReaderStatus" -> getDocumentReaderStatus(callback)
|
|
112
|
-
"isAuthenticatorAvailableForUse" -> isAuthenticatorAvailableForUse(callback)
|
|
113
|
-
"isBlePermissionsGranted" -> isBlePermissionsGranted(callback)
|
|
114
120
|
"getRfidSessionStatus" -> getRfidSessionStatus(callback)
|
|
115
121
|
"setRfidSessionStatus" -> setRfidSessionStatus(callback)
|
|
116
122
|
"getTag" -> getTag(callback)
|
|
@@ -150,11 +156,13 @@ fun exec(action: String?, arguments: ReadableArray, successCallback: com.faceboo
|
|
|
150
156
|
"addPKDCertificates" -> addPKDCertificates(callback, args(0))
|
|
151
157
|
"clearPKDCertificates" -> clearPKDCertificates(callback)
|
|
152
158
|
"startNewSession" -> startNewSession(callback)
|
|
153
|
-
"
|
|
159
|
+
"connectBluetoothDevice" -> connectBluetoothDevice(callback)
|
|
154
160
|
"setLocalizationDictionary" -> setLocalizationDictionary(args(0))
|
|
155
161
|
"getLicense" -> getLicense(callback)
|
|
156
162
|
"getAvailableScenarios" -> getAvailableScenarios(callback)
|
|
157
163
|
"getIsRFIDAvailableForUse" -> getIsRFIDAvailableForUse(callback)
|
|
164
|
+
"isAuthenticatorAvailableForUse" -> isAuthenticatorAvailableForUse(callback)
|
|
165
|
+
"isAuthenticatorRFIDAvailableForUse" -> isAuthenticatorRFIDAvailableForUse(callback)
|
|
158
166
|
"getDocReaderVersion" -> getDocReaderVersion(callback)
|
|
159
167
|
"getDocReaderDocumentsDatabase" -> getDocReaderDocumentsDatabase(callback)
|
|
160
168
|
"textFieldValueByType" -> textFieldValueByType(callback, args(0), args(1))
|
|
@@ -175,6 +183,7 @@ fun exec(action: String?, arguments: ReadableArray, successCallback: com.faceboo
|
|
|
175
183
|
"containers" -> containers(callback, args(0), args(1))
|
|
176
184
|
"encryptedContainers" -> encryptedContainers(callback, args(0))
|
|
177
185
|
"finalizePackage" -> finalizePackage(callback)
|
|
186
|
+
"endBackendTransaction" -> endBackendTransaction(callback)
|
|
178
187
|
"getTranslation" -> getTranslation(callback, args(0), args(1))
|
|
179
188
|
}
|
|
180
189
|
}
|
|
@@ -204,10 +213,6 @@ const val eventPACertificateCompletion = "pa_certificate_completion"
|
|
|
204
213
|
const val eventTACertificateCompletion = "ta_certificate_completion"
|
|
205
214
|
const val eventTASignatureCompletion = "ta_signature_completion"
|
|
206
215
|
|
|
207
|
-
const val bleOnServiceConnectedEvent = "bleOnServiceConnectedEvent"
|
|
208
|
-
const val bleOnServiceDisconnectedEvent = "bleOnServiceDisconnectedEvent"
|
|
209
|
-
const val bleOnDeviceReadyEvent = "bleOnDeviceReadyEvent"
|
|
210
|
-
|
|
211
216
|
const val eventVideoEncoderCompletion = "video_encoder_completion"
|
|
212
217
|
const val onCustomButtonTappedEvent = "onCustomButtonTappedEvent"
|
|
213
218
|
|
|
@@ -215,10 +220,6 @@ fun getDocumentReaderIsReady(callback: Callback) = callback.success(Instance().i
|
|
|
215
220
|
|
|
216
221
|
fun getDocumentReaderStatus(callback: Callback) = callback.success(Instance().status)
|
|
217
222
|
|
|
218
|
-
fun isAuthenticatorAvailableForUse(callback: Callback) = callback.success(Instance().isAuthenticatorAvailableForUse)
|
|
219
|
-
|
|
220
|
-
fun isBlePermissionsGranted(callback: Callback) = callback.success(isBlePermissionsGranted((activity)))
|
|
221
|
-
|
|
222
223
|
fun getRfidSessionStatus(callback: Callback) = callback.error("getRfidSessionStatus() is an ios-only method")
|
|
223
224
|
|
|
224
225
|
fun setRfidSessionStatus(callback: Callback) = callback.error("setRfidSessionStatus() is an ios-only method")
|
|
@@ -353,13 +354,6 @@ fun startNewSession(callback: Callback) {
|
|
|
353
354
|
callback.success()
|
|
354
355
|
}
|
|
355
356
|
|
|
356
|
-
fun startBluetoothService() = startBluetoothService(
|
|
357
|
-
activity,
|
|
358
|
-
{ sendEvent(bleOnServiceConnectedEvent, it) },
|
|
359
|
-
{ sendEvent(bleOnServiceDisconnectedEvent) },
|
|
360
|
-
{ sendEvent(bleOnDeviceReadyEvent) }
|
|
361
|
-
)
|
|
362
|
-
|
|
363
357
|
fun setLocalizationDictionary(dictionary: JSONObject) {
|
|
364
358
|
localizationCallbacks = LocalizationCallbacks { if (dictionary.has(it)) dictionary.getString(it) else null }
|
|
365
359
|
Instance().setLocalizationCallback(localizationCallbacks!!)
|
|
@@ -376,6 +370,10 @@ fun getAvailableScenarios(callback: Callback) {
|
|
|
376
370
|
|
|
377
371
|
fun getIsRFIDAvailableForUse(callback: Callback) = callback.success(Instance().isRFIDAvailableForUse)
|
|
378
372
|
|
|
373
|
+
fun isAuthenticatorAvailableForUse(callback: Callback) = callback.success(Instance().isAuthenticatorAvailableForUse)
|
|
374
|
+
|
|
375
|
+
fun isAuthenticatorRFIDAvailableForUse(callback: Callback) = callback.success(Instance().isAuthenticatorRFIDAvailableForUse)
|
|
376
|
+
|
|
379
377
|
fun getDocReaderVersion(callback: Callback) = callback.success(generateDocReaderVersion(Instance().version))
|
|
380
378
|
|
|
381
379
|
fun getDocReaderDocumentsDatabase(callback: Callback) = callback.success(Instance().version?.let { generateDocReaderDocumentsDatabase(it.database) })
|
|
@@ -416,6 +414,11 @@ fun encryptedContainers(callback: Callback, raw: String) = callback.success(from
|
|
|
416
414
|
|
|
417
415
|
fun finalizePackage(callback: Callback) = Instance().finalizePackage { action, info, error -> callback.success(generateFinalizePackageCompletion(action, info, error)) }
|
|
418
416
|
|
|
417
|
+
fun endBackendTransaction(callback: Callback) {
|
|
418
|
+
Instance().endBackendTransaction()
|
|
419
|
+
callback.success()
|
|
420
|
+
}
|
|
421
|
+
|
|
419
422
|
fun getTranslation(callback: Callback, className: String, value: Int) = when (className) {
|
|
420
423
|
"RFIDErrorCodes" -> callback.success(eRFID_ErrorCodes.getTranslation(context, value))
|
|
421
424
|
"LDSParsingErrorCodes" -> callback.success(eLDS_ParsingErrorCodes.getTranslation(context, value))
|
|
@@ -496,12 +499,15 @@ var requestType = RfidReaderRequestType(
|
|
|
496
499
|
)
|
|
497
500
|
|
|
498
501
|
@Suppress("DEPRECATION")
|
|
499
|
-
fun newIntent(intent: Intent)
|
|
502
|
+
fun newIntent(intent: Intent): Boolean {
|
|
503
|
+
if (intent.action != NfcAdapter.ACTION_TECH_DISCOVERED) return false
|
|
500
504
|
Instance().readRFID(
|
|
501
505
|
IsoDep.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)),
|
|
502
506
|
rfidReaderCompletion,
|
|
503
507
|
requestType.getRfidReaderRequest()
|
|
504
|
-
)
|
|
508
|
+
)
|
|
509
|
+
return true
|
|
510
|
+
}
|
|
505
511
|
|
|
506
512
|
fun startForegroundDispatch() {
|
|
507
513
|
backgroundRFIDEnabled = true
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Utils.
|
|
2
|
+
// Utils.kt
|
|
3
3
|
// DocumentReader
|
|
4
4
|
//
|
|
5
5
|
// Created by Pavel Masiuk on 21.09.2023.
|
|
@@ -225,7 +225,12 @@ fun CustomizationFont.setFont(editor: ParamsCustomization.CustomizationEditor, v
|
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
internal object Convert {
|
|
228
|
-
fun byteArrayFromBase64(base64: String?)
|
|
228
|
+
fun byteArrayFromBase64(base64: String?): ByteArray? {
|
|
229
|
+
var str = base64 ?: return null
|
|
230
|
+
if (str.startsWith("data")) str = str.substring(str.indexOf(",") + 1)
|
|
231
|
+
return Base64.decode(str, Base64.NO_WRAP)
|
|
232
|
+
}
|
|
233
|
+
|
|
229
234
|
fun generateByteArray(array: ByteArray?) = array?.let { Base64.encodeToString(it, Base64.NO_WRAP) }
|
|
230
235
|
|
|
231
236
|
fun bitmapFromBase64(base64: String?) = base64?.let {
|