@regulaforensics/document-reader 8.2.186-beta
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/README.md +18 -0
- package/RNDocumentReader.podspec +21 -0
- package/android/CVDDocumentReader.kt +74 -0
- package/android/build.gradle +36 -0
- package/android/cordova.gradle +12 -0
- package/android/src/main/java/com/regula/plugin/documentreader/BluetoothUtil.kt +160 -0
- package/android/src/main/java/com/regula/plugin/documentreader/Config.kt +826 -0
- package/android/src/main/java/com/regula/plugin/documentreader/JSONConstructor.kt +1795 -0
- package/android/src/main/java/com/regula/plugin/documentreader/Main.kt +573 -0
- package/android/src/main/java/com/regula/plugin/documentreader/RNDocumentReaderModule.kt +100 -0
- package/android/src/main/java/com/regula/plugin/documentreader/Utils.kt +181 -0
- package/examples/capacitor/README.md +12 -0
- package/examples/capacitor/android/app/build.gradle +50 -0
- package/examples/capacitor/android/app/capacitor.build.gradle +22 -0
- package/examples/capacitor/android/app/proguard-rules.pro +21 -0
- package/examples/capacitor/android/app/src/main/AndroidManifest.xml +27 -0
- package/examples/capacitor/android/app/src/main/assets/Regula/.gitkeep +0 -0
- package/examples/capacitor/android/app/src/main/java/com/regula/dr/fullauthrfid/MainActivity.java +5 -0
- package/examples/capacitor/android/app/src/main/res/drawable/ic_launcher.png +0 -0
- package/examples/capacitor/android/app/src/main/res/drawable/splash.png +0 -0
- package/examples/capacitor/android/app/src/main/res/layout/activity_main.xml +12 -0
- package/examples/capacitor/android/app/src/main/res/values/strings.xml +7 -0
- package/examples/capacitor/android/app/src/main/res/values/styles.xml +22 -0
- package/examples/capacitor/android/build.gradle +30 -0
- package/examples/capacitor/android/capacitor.settings.gradle +15 -0
- package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/examples/capacitor/android/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/examples/capacitor/android/gradle.properties +22 -0
- package/examples/capacitor/android/gradlew +252 -0
- package/examples/capacitor/android/gradlew.bat +94 -0
- package/examples/capacitor/android/settings.gradle +5 -0
- package/examples/capacitor/android/variables.gradle +16 -0
- package/examples/capacitor/index.html +10 -0
- package/examples/capacitor/ionic.config.json +7 -0
- package/examples/capacitor/ios/App/App/App.entitlements +5 -0
- package/examples/capacitor/ios/App/App/AppDelegate.swift +49 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png +0 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Contents.json +6 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json +23 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png +0 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png +0 -0
- package/examples/capacitor/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png +0 -0
- package/examples/capacitor/ios/App/App/Base.lproj/LaunchScreen.storyboard +32 -0
- package/examples/capacitor/ios/App/App/Base.lproj/Main.storyboard +19 -0
- package/examples/capacitor/ios/App/App/Info.plist +53 -0
- package/examples/capacitor/ios/App/App.xcodeproj/project.pbxproj +414 -0
- package/examples/capacitor/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/examples/capacitor/ios/App/App.xcworkspace/contents.xcworkspacedata +10 -0
- package/examples/capacitor/ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/examples/capacitor/ios/App/Podfile +26 -0
- package/examples/capacitor/ios/App/Podfile.lock +56 -0
- package/examples/capacitor/package-lock.json +3467 -0
- package/examples/capacitor/package.json +29 -0
- package/examples/capacitor/public/assets/.gitkeep +0 -0
- package/examples/capacitor/public/images/document.png +0 -0
- package/examples/capacitor/public/images/portrait.png +0 -0
- package/examples/capacitor/scripts/android.sh +9 -0
- package/examples/capacitor/scripts/ios.sh +8 -0
- package/examples/capacitor/scripts/setup.sh +6 -0
- package/examples/capacitor/src/extra/bt_device.tsx +32 -0
- package/examples/capacitor/src/extra/custom_rfid.tsx +74 -0
- package/examples/capacitor/src/main.css +131 -0
- package/examples/capacitor/src/main.html +41 -0
- package/examples/capacitor/src/main.tsx +175 -0
- package/examples/capacitor/tsconfig.json +5 -0
- package/examples/capacitor/vite.config.ts +17 -0
- package/examples/cordova/.vscode/launch.json +28 -0
- package/examples/cordova/.vscode/typings/cordova/cordova.d.ts +80 -0
- package/examples/cordova/README.md +12 -0
- package/examples/cordova/config.xml +29 -0
- package/examples/cordova/package-lock.json +1314 -0
- package/examples/cordova/package.json +32 -0
- package/examples/cordova/scripts/android.sh +8 -0
- package/examples/cordova/scripts/ios.sh +8 -0
- package/examples/cordova/scripts/setup.sh +8 -0
- package/examples/cordova/www/images/document.png +0 -0
- package/examples/cordova/www/images/logo.png +0 -0
- package/examples/cordova/www/images/portrait.png +0 -0
- package/examples/cordova/www/index.html +21 -0
- package/examples/cordova/www/src/main.css +130 -0
- package/examples/cordova/www/src/main.html +63 -0
- package/examples/cordova/www/src/main.js +50 -0
- package/examples/ionic/README.md +12 -0
- package/examples/ionic/angular.json +39 -0
- package/examples/ionic/config.xml +28 -0
- package/examples/ionic/index.html +19 -0
- package/examples/ionic/index.ts +17 -0
- package/examples/ionic/ionic.config.json +7 -0
- package/examples/ionic/package-lock.json +16559 -0
- package/examples/ionic/package.json +47 -0
- package/examples/ionic/scripts/android.sh +8 -0
- package/examples/ionic/scripts/ios.sh +8 -0
- package/examples/ionic/scripts/setup.sh +8 -0
- package/examples/ionic/src/assets/.gitkeep +0 -0
- package/examples/ionic/src/images/document.png +0 -0
- package/examples/ionic/src/images/icon.png +0 -0
- package/examples/ionic/src/images/portrait.png +0 -0
- package/examples/ionic/src/main.css +130 -0
- package/examples/ionic/src/main.html +63 -0
- package/examples/ionic/src/main.ts +66 -0
- package/examples/ionic/tsconfig.json +12 -0
- package/examples/react_native/README.md +12 -0
- package/examples/react_native/app.config.ts +53 -0
- package/examples/react_native/assets/.gitkeep +0 -0
- package/examples/react_native/images/document.png +0 -0
- package/examples/react_native/images/icon/adaptive-icon.png +0 -0
- package/examples/react_native/images/icon/icon.png +0 -0
- package/examples/react_native/images/portrait.png +0 -0
- package/examples/react_native/index.html +11 -0
- package/examples/react_native/index.tsx +52 -0
- package/examples/react_native/metro.config.js +7 -0
- package/examples/react_native/package-lock.json +9254 -0
- package/examples/react_native/package.json +27 -0
- package/examples/react_native/scripts/android.sh +12 -0
- package/examples/react_native/scripts/ios.sh +11 -0
- package/examples/react_native/scripts/setup.sh +8 -0
- package/examples/react_native/src/main.css +130 -0
- package/examples/react_native/src/main.html +63 -0
- package/examples/react_native/src/main.tsx +50 -0
- package/ios/CVDDocumentReader.h +7 -0
- package/ios/CVDDocumentReader.m +39 -0
- package/ios/RGLWConfig.h +42 -0
- package/ios/RGLWConfig.m +1398 -0
- package/ios/RGLWJSONConstructor.h +185 -0
- package/ios/RGLWJSONConstructor.m +2379 -0
- package/ios/RGLWMain.h +36 -0
- package/ios/RGLWMain.m +610 -0
- package/ios/RNDocumentReader.h +8 -0
- package/ios/RNDocumentReader.m +49 -0
- package/package.json +36 -0
- package/plugin.xml +51 -0
- package/www/capacitor/config/InitConfig.js +25 -0
- package/www/capacitor/config/OnlineProcessingConfig.js +41 -0
- package/www/capacitor/config/RFIDConfig.js +31 -0
- package/www/capacitor/config/RecognizeConfig.js +103 -0
- package/www/capacitor/config/ScannerConfig.js +38 -0
- package/www/capacitor/index.js +486 -0
- package/www/capacitor/info/DocReaderException.js +57 -0
- package/www/capacitor/info/DocReaderScenario.js +71 -0
- package/www/capacitor/info/DocReaderVersion.js +23 -0
- package/www/capacitor/info/DocumentsDatabase.js +27 -0
- package/www/capacitor/info/License.js +22 -0
- package/www/capacitor/info/PrepareProgress.js +23 -0
- package/www/capacitor/info/RFIDException.js +19 -0
- package/www/capacitor/internal/bridge.js +98 -0
- package/www/capacitor/internal/cordova.js +17 -0
- package/www/capacitor/params/Functionality.js +303 -0
- package/www/capacitor/params/customization/Customization.js +550 -0
- package/www/capacitor/params/customization/CustomizationColors.js +74 -0
- package/www/capacitor/params/customization/CustomizationFonts.js +40 -0
- package/www/capacitor/params/customization/CustomizationImages.js +25 -0
- package/www/capacitor/params/customization/Font.js +28 -0
- package/www/capacitor/params/process_params/AuthenticityParams.js +129 -0
- package/www/capacitor/params/process_params/BackendProcessingConfig.js +25 -0
- package/www/capacitor/params/process_params/FaceApiParams.js +38 -0
- package/www/capacitor/params/process_params/FaceApiSearchParams.js +21 -0
- package/www/capacitor/params/process_params/GlaresCheckParams.js +18 -0
- package/www/capacitor/params/process_params/ImageQA.js +97 -0
- package/www/capacitor/params/process_params/LivenessParams.js +67 -0
- package/www/capacitor/params/process_params/ProcessParams.js +570 -0
- package/www/capacitor/params/process_params/RfidParams.js +15 -0
- package/www/capacitor/params/rfid_scenario/DTCDataGroups.js +53 -0
- package/www/capacitor/params/rfid_scenario/EDLDataGroups.js +116 -0
- package/www/capacitor/params/rfid_scenario/EIDDataGroups.js +165 -0
- package/www/capacitor/params/rfid_scenario/EPassportDataGroups.js +130 -0
- package/www/capacitor/params/rfid_scenario/RFIDScenario.js +493 -0
- package/www/capacitor/results/DocumentType.js +285 -0
- package/www/capacitor/results/Position.js +60 -0
- package/www/capacitor/results/Results.js +318 -0
- package/www/capacitor/results/TransactionInfo.js +16 -0
- package/www/capacitor/results/authenticity/Authenticity.js +23 -0
- package/www/capacitor/results/authenticity/AuthenticityCheck.js +33 -0
- package/www/capacitor/results/authenticity/AuthenticityElement.js +27 -0
- package/www/capacitor/results/authenticity/AuthenticityResult.js +26 -0
- package/www/capacitor/results/authenticity/CheckDiagnose.js +124 -0
- package/www/capacitor/results/authenticity/SecurityFeatureType.js +59 -0
- package/www/capacitor/results/barcode/BarcodeField.js +24 -0
- package/www/capacitor/results/barcode/BarcodeResult.js +24 -0
- package/www/capacitor/results/barcode/BarcodeStatus.js +33 -0
- package/www/capacitor/results/barcode/BarcodeType.js +21 -0
- package/www/capacitor/results/barcode/PDF417Info.js +16 -0
- package/www/capacitor/results/image_quality/ImageQuality.js +31 -0
- package/www/capacitor/results/image_quality/ImageQualityCheckType.js +19 -0
- package/www/capacitor/results/image_quality/ImageQualityGroup.js +30 -0
- package/www/capacitor/results/rfid/AccessControlProcedureType.js +21 -0
- package/www/capacitor/results/rfid/Application.js +47 -0
- package/www/capacitor/results/rfid/Attribute.js +16 -0
- package/www/capacitor/results/rfid/Authority.js +28 -0
- package/www/capacitor/results/rfid/CardProperties.js +38 -0
- package/www/capacitor/results/rfid/CertificateChain.js +51 -0
- package/www/capacitor/results/rfid/CertificateData.js +14 -0
- package/www/capacitor/results/rfid/DataField.js +16 -0
- package/www/capacitor/results/rfid/Extension.js +14 -0
- package/www/capacitor/results/rfid/File.js +39 -0
- package/www/capacitor/results/rfid/FileData.js +18 -0
- package/www/capacitor/results/rfid/RFIDAccessControlProcedureType.js +10 -0
- package/www/capacitor/results/rfid/RFIDCertificateType.js +13 -0
- package/www/capacitor/results/rfid/RFIDDataFileType.js +98 -0
- package/www/capacitor/results/rfid/RFIDSessionData.js +76 -0
- package/www/capacitor/results/rfid/RFIDValidity.js +16 -0
- package/www/capacitor/results/rfid/RFIDValue.js +20 -0
- package/www/capacitor/results/rfid/SecurityObject.js +31 -0
- package/www/capacitor/results/rfid/SecurityObjectCertificates.js +14 -0
- package/www/capacitor/results/rfid/SignerInfo.js +57 -0
- package/www/capacitor/results/status/CheckResult.js +5 -0
- package/www/capacitor/results/status/OpticalStatus.js +30 -0
- package/www/capacitor/results/status/RFIDStatus.js +26 -0
- package/www/capacitor/results/status/ResultsStatus.js +28 -0
- package/www/capacitor/results/visible_digital_seals/BytesData.js +18 -0
- package/www/capacitor/results/visible_digital_seals/LDSParsingErrorCodes.js +134 -0
- package/www/capacitor/results/visible_digital_seals/LDSParsingNotificationCodes.js +232 -0
- package/www/capacitor/results/visible_digital_seals/VDSNCData.js +40 -0
- package/www/capacitor/results/visual_results/Comparison.js +19 -0
- package/www/capacitor/results/visual_results/FieldType.js +658 -0
- package/www/capacitor/results/visual_results/GraphicField.js +33 -0
- package/www/capacitor/results/visual_results/GraphicFieldType.js +25 -0
- package/www/capacitor/results/visual_results/GraphicResult.js +22 -0
- package/www/capacitor/results/visual_results/LCID.js +174 -0
- package/www/capacitor/results/visual_results/Lights.js +11 -0
- package/www/capacitor/results/visual_results/RFIDOrigin.js +18 -0
- package/www/capacitor/results/visual_results/Rect.js +18 -0
- package/www/capacitor/results/visual_results/Symbol.js +18 -0
- package/www/capacitor/results/visual_results/TextField.js +68 -0
- package/www/capacitor/results/visual_results/TextResult.js +42 -0
- package/www/capacitor/results/visual_results/TextSource.js +19 -0
- package/www/capacitor/results/visual_results/Validity.js +17 -0
- package/www/capacitor/results/visual_results/Value.js +39 -0
- package/www/capacitor/rfid/PAAttribute.js +17 -0
- package/www/capacitor/rfid/PAResourcesIssuer.js +27 -0
- package/www/capacitor/rfid/PKDCertificate.js +54 -0
- package/www/capacitor/rfid/RFIDErrorCodes.js +123 -0
- package/www/capacitor/rfid/RFIDNotification.js +60 -0
- package/www/capacitor/rfid/TAChallenge.js +23 -0
- package/www/capacitor/rfid/TccParams.js +24 -0
- package/www/cordova.js +9816 -0
- package/www/react-native/config/InitConfig.js +25 -0
- package/www/react-native/config/OnlineProcessingConfig.js +41 -0
- package/www/react-native/config/RFIDConfig.js +31 -0
- package/www/react-native/config/RecognizeConfig.js +103 -0
- package/www/react-native/config/ScannerConfig.js +38 -0
- package/www/react-native/index.js +486 -0
- package/www/react-native/info/DocReaderException.js +57 -0
- package/www/react-native/info/DocReaderScenario.js +71 -0
- package/www/react-native/info/DocReaderVersion.js +23 -0
- package/www/react-native/info/DocumentsDatabase.js +27 -0
- package/www/react-native/info/License.js +22 -0
- package/www/react-native/info/PrepareProgress.js +23 -0
- package/www/react-native/info/RFIDException.js +19 -0
- package/www/react-native/internal/bridge.js +98 -0
- package/www/react-native/params/Functionality.js +303 -0
- package/www/react-native/params/customization/Customization.js +550 -0
- package/www/react-native/params/customization/CustomizationColors.js +74 -0
- package/www/react-native/params/customization/CustomizationFonts.js +40 -0
- package/www/react-native/params/customization/CustomizationImages.js +25 -0
- package/www/react-native/params/customization/Font.js +28 -0
- package/www/react-native/params/process_params/AuthenticityParams.js +129 -0
- package/www/react-native/params/process_params/BackendProcessingConfig.js +25 -0
- package/www/react-native/params/process_params/FaceApiParams.js +38 -0
- package/www/react-native/params/process_params/FaceApiSearchParams.js +21 -0
- package/www/react-native/params/process_params/GlaresCheckParams.js +18 -0
- package/www/react-native/params/process_params/ImageQA.js +97 -0
- package/www/react-native/params/process_params/LivenessParams.js +67 -0
- package/www/react-native/params/process_params/ProcessParams.js +570 -0
- package/www/react-native/params/process_params/RfidParams.js +15 -0
- package/www/react-native/params/rfid_scenario/DTCDataGroups.js +53 -0
- package/www/react-native/params/rfid_scenario/EDLDataGroups.js +116 -0
- package/www/react-native/params/rfid_scenario/EIDDataGroups.js +165 -0
- package/www/react-native/params/rfid_scenario/EPassportDataGroups.js +130 -0
- package/www/react-native/params/rfid_scenario/RFIDScenario.js +493 -0
- package/www/react-native/results/DocumentType.js +285 -0
- package/www/react-native/results/Position.js +60 -0
- package/www/react-native/results/Results.js +318 -0
- package/www/react-native/results/TransactionInfo.js +16 -0
- package/www/react-native/results/authenticity/Authenticity.js +23 -0
- package/www/react-native/results/authenticity/AuthenticityCheck.js +33 -0
- package/www/react-native/results/authenticity/AuthenticityElement.js +27 -0
- package/www/react-native/results/authenticity/AuthenticityResult.js +26 -0
- package/www/react-native/results/authenticity/CheckDiagnose.js +124 -0
- package/www/react-native/results/authenticity/SecurityFeatureType.js +59 -0
- package/www/react-native/results/barcode/BarcodeField.js +24 -0
- package/www/react-native/results/barcode/BarcodeResult.js +24 -0
- package/www/react-native/results/barcode/BarcodeStatus.js +33 -0
- package/www/react-native/results/barcode/BarcodeType.js +21 -0
- package/www/react-native/results/barcode/PDF417Info.js +16 -0
- package/www/react-native/results/image_quality/ImageQuality.js +31 -0
- package/www/react-native/results/image_quality/ImageQualityCheckType.js +19 -0
- package/www/react-native/results/image_quality/ImageQualityGroup.js +30 -0
- package/www/react-native/results/rfid/AccessControlProcedureType.js +21 -0
- package/www/react-native/results/rfid/Application.js +47 -0
- package/www/react-native/results/rfid/Attribute.js +16 -0
- package/www/react-native/results/rfid/Authority.js +28 -0
- package/www/react-native/results/rfid/CardProperties.js +38 -0
- package/www/react-native/results/rfid/CertificateChain.js +51 -0
- package/www/react-native/results/rfid/CertificateData.js +14 -0
- package/www/react-native/results/rfid/DataField.js +16 -0
- package/www/react-native/results/rfid/Extension.js +14 -0
- package/www/react-native/results/rfid/File.js +39 -0
- package/www/react-native/results/rfid/FileData.js +18 -0
- package/www/react-native/results/rfid/RFIDAccessControlProcedureType.js +10 -0
- package/www/react-native/results/rfid/RFIDCertificateType.js +13 -0
- package/www/react-native/results/rfid/RFIDDataFileType.js +98 -0
- package/www/react-native/results/rfid/RFIDSessionData.js +76 -0
- package/www/react-native/results/rfid/RFIDValidity.js +16 -0
- package/www/react-native/results/rfid/RFIDValue.js +20 -0
- package/www/react-native/results/rfid/SecurityObject.js +31 -0
- package/www/react-native/results/rfid/SecurityObjectCertificates.js +14 -0
- package/www/react-native/results/rfid/SignerInfo.js +57 -0
- package/www/react-native/results/status/CheckResult.js +5 -0
- package/www/react-native/results/status/OpticalStatus.js +30 -0
- package/www/react-native/results/status/RFIDStatus.js +26 -0
- package/www/react-native/results/status/ResultsStatus.js +28 -0
- package/www/react-native/results/visible_digital_seals/BytesData.js +18 -0
- package/www/react-native/results/visible_digital_seals/LDSParsingErrorCodes.js +134 -0
- package/www/react-native/results/visible_digital_seals/LDSParsingNotificationCodes.js +232 -0
- package/www/react-native/results/visible_digital_seals/VDSNCData.js +40 -0
- package/www/react-native/results/visual_results/Comparison.js +19 -0
- package/www/react-native/results/visual_results/FieldType.js +658 -0
- package/www/react-native/results/visual_results/GraphicField.js +33 -0
- package/www/react-native/results/visual_results/GraphicFieldType.js +25 -0
- package/www/react-native/results/visual_results/GraphicResult.js +22 -0
- package/www/react-native/results/visual_results/LCID.js +174 -0
- package/www/react-native/results/visual_results/Lights.js +11 -0
- package/www/react-native/results/visual_results/RFIDOrigin.js +18 -0
- package/www/react-native/results/visual_results/Rect.js +18 -0
- package/www/react-native/results/visual_results/Symbol.js +18 -0
- package/www/react-native/results/visual_results/TextField.js +68 -0
- package/www/react-native/results/visual_results/TextResult.js +42 -0
- package/www/react-native/results/visual_results/TextSource.js +19 -0
- package/www/react-native/results/visual_results/Validity.js +17 -0
- package/www/react-native/results/visual_results/Value.js +39 -0
- package/www/react-native/rfid/PAAttribute.js +17 -0
- package/www/react-native/rfid/PAResourcesIssuer.js +27 -0
- package/www/react-native/rfid/PKDCertificate.js +54 -0
- package/www/react-native/rfid/RFIDErrorCodes.js +123 -0
- package/www/react-native/rfid/RFIDNotification.js +60 -0
- package/www/react-native/rfid/TAChallenge.js +23 -0
- package/www/react-native/rfid/TccParams.js +24 -0
- package/www/types/config/InitConfig.d.ts +63 -0
- package/www/types/config/OnlineProcessingConfig.d.ts +22 -0
- package/www/types/config/RFIDConfig.d.ts +131 -0
- package/www/types/config/RecognizeConfig.d.ts +119 -0
- package/www/types/config/ScannerConfig.d.ts +54 -0
- package/www/types/index.d.ts +421 -0
- package/www/types/info/DocReaderException.d.ts +79 -0
- package/www/types/info/DocReaderScenario.d.ts +90 -0
- package/www/types/info/DocReaderVersion.d.ts +28 -0
- package/www/types/info/DocumentsDatabase.d.ts +42 -0
- package/www/types/info/License.d.ts +23 -0
- package/www/types/info/PrepareProgress.d.ts +15 -0
- package/www/types/info/RFIDException.d.ts +8 -0
- package/www/types/params/Functionality.d.ts +316 -0
- package/www/types/params/customization/Customization.d.ts +558 -0
- package/www/types/params/customization/CustomizationColors.d.ts +16 -0
- package/www/types/params/customization/CustomizationFonts.d.ts +13 -0
- package/www/types/params/customization/CustomizationImages.d.ts +12 -0
- package/www/types/params/customization/Font.d.ts +36 -0
- package/www/types/params/process_params/AuthenticityParams.d.ts +30 -0
- package/www/types/params/process_params/BackendProcessingConfig.d.ts +25 -0
- package/www/types/params/process_params/FaceApiParams.d.ts +68 -0
- package/www/types/params/process_params/FaceApiSearchParams.d.ts +35 -0
- package/www/types/params/process_params/GlaresCheckParams.d.ts +26 -0
- package/www/types/params/process_params/ImageQA.d.ts +79 -0
- package/www/types/params/process_params/LivenessParams.d.ts +20 -0
- package/www/types/params/process_params/ProcessParams.d.ts +465 -0
- package/www/types/params/process_params/RfidParams.d.ts +19 -0
- package/www/types/params/rfid_scenario/DTCDataGroups.d.ts +13 -0
- package/www/types/params/rfid_scenario/EDLDataGroups.d.ts +22 -0
- package/www/types/params/rfid_scenario/EIDDataGroups.d.ts +29 -0
- package/www/types/params/rfid_scenario/EPassportDataGroups.d.ts +24 -0
- package/www/types/params/rfid_scenario/RFIDScenario.d.ts +167 -0
- package/www/types/results/DocumentType.d.ts +525 -0
- package/www/types/results/Position.d.ts +50 -0
- package/www/types/results/Results.d.ts +283 -0
- package/www/types/results/TransactionInfo.d.ts +9 -0
- package/www/types/results/authenticity/Authenticity.d.ts +67 -0
- package/www/types/results/authenticity/AuthenticityCheck.d.ts +23 -0
- package/www/types/results/authenticity/AuthenticityElement.d.ts +26 -0
- package/www/types/results/authenticity/AuthenticityResult.d.ts +16 -0
- package/www/types/results/authenticity/CheckDiagnose.d.ts +229 -0
- package/www/types/results/authenticity/SecurityFeatureType.d.ts +100 -0
- package/www/types/results/barcode/BarcodeField.d.ts +37 -0
- package/www/types/results/barcode/BarcodeResult.d.ts +14 -0
- package/www/types/results/barcode/BarcodeStatus.d.ts +66 -0
- package/www/types/results/barcode/BarcodeType.d.ts +45 -0
- package/www/types/results/barcode/PDF417Info.d.ts +15 -0
- package/www/types/results/image_quality/ImageQuality.d.ts +18 -0
- package/www/types/results/image_quality/ImageQualityCheckType.d.ts +30 -0
- package/www/types/results/image_quality/ImageQualityGroup.d.ts +17 -0
- package/www/types/results/rfid/AccessControlProcedureType.d.ts +21 -0
- package/www/types/results/rfid/Application.d.ts +44 -0
- package/www/types/results/rfid/Attribute.d.ts +9 -0
- package/www/types/results/rfid/Authority.d.ts +11 -0
- package/www/types/results/rfid/CardProperties.d.ts +48 -0
- package/www/types/results/rfid/CertificateChain.d.ts +28 -0
- package/www/types/results/rfid/CertificateData.d.ts +7 -0
- package/www/types/results/rfid/DataField.d.ts +9 -0
- package/www/types/results/rfid/Extension.d.ts +7 -0
- package/www/types/results/rfid/File.d.ts +22 -0
- package/www/types/results/rfid/FileData.d.ts +9 -0
- package/www/types/results/rfid/RFIDAccessControlProcedureType.d.ts +18 -0
- package/www/types/results/rfid/RFIDCertificateType.d.ts +13 -0
- package/www/types/results/rfid/RFIDDataFileType.d.ts +101 -0
- package/www/types/results/rfid/RFIDSessionData.d.ts +48 -0
- package/www/types/results/rfid/RFIDValidity.d.ts +9 -0
- package/www/types/results/rfid/RFIDValue.d.ts +10 -0
- package/www/types/results/rfid/SecurityObject.d.ts +28 -0
- package/www/types/results/rfid/SecurityObjectCertificates.d.ts +8 -0
- package/www/types/results/rfid/SignerInfo.d.ts +41 -0
- package/www/types/results/status/CheckResult.d.ts +8 -0
- package/www/types/results/status/OpticalStatus.d.ts +29 -0
- package/www/types/results/status/RFIDStatus.d.ts +22 -0
- package/www/types/results/status/ResultsStatus.d.ts +24 -0
- package/www/types/results/visible_digital_seals/BytesData.d.ts +9 -0
- package/www/types/results/visible_digital_seals/LDSParsingErrorCodes.d.ts +132 -0
- package/www/types/results/visible_digital_seals/LDSParsingNotificationCodes.d.ts +230 -0
- package/www/types/results/visible_digital_seals/VDSNCData.d.ts +35 -0
- package/www/types/results/visual_results/Comparison.d.ts +15 -0
- package/www/types/results/visual_results/FieldType.d.ts +1310 -0
- package/www/types/results/visual_results/GraphicField.d.ts +29 -0
- package/www/types/results/visual_results/GraphicFieldType.d.ts +52 -0
- package/www/types/results/visual_results/GraphicResult.d.ts +10 -0
- package/www/types/results/visual_results/LCID.d.ts +173 -0
- package/www/types/results/visual_results/Lights.d.ts +23 -0
- package/www/types/results/visual_results/RFIDOrigin.d.ts +10 -0
- package/www/types/results/visual_results/Rect.d.ts +9 -0
- package/www/types/results/visual_results/Symbol.d.ts +14 -0
- package/www/types/results/visual_results/TextField.d.ts +40 -0
- package/www/types/results/visual_results/TextResult.d.ts +23 -0
- package/www/types/results/visual_results/TextSource.d.ts +15 -0
- package/www/types/results/visual_results/Validity.d.ts +13 -0
- package/www/types/results/visual_results/Value.d.ts +27 -0
- package/www/types/rfid/PAAttribute.d.ts +4 -0
- package/www/types/rfid/PAResourcesIssuer.d.ts +7 -0
- package/www/types/rfid/PKDCertificate.d.ts +34 -0
- package/www/types/rfid/RFIDErrorCodes.d.ts +121 -0
- package/www/types/rfid/RFIDNotification.d.ts +153 -0
- package/www/types/rfid/TAChallenge.d.ts +7 -0
- package/www/types/rfid/TccParams.d.ts +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Regula Document Reader plugin
|
|
2
|
+
Document Reader allows you to read various kinds of identification documents, passports, driving licenses, ID cards, etc. All processing is performed completely offline on your device. This plugin makes possible to use it with react-native, cordova and ionic applications.
|
|
3
|
+
|
|
4
|
+
## Demo applications
|
|
5
|
+
In the [examples](examples/) folder you can find 4 demo applications:
|
|
6
|
+
* [React-native](examples/react-native)
|
|
7
|
+
* [Cordova](examples/cordova)
|
|
8
|
+
* [Ionic(ionic app with cordova, angular)](examples/ionic)
|
|
9
|
+
* [Capacitor(ionic app with capacitor, react)](examples/capacitor)
|
|
10
|
+
|
|
11
|
+
Each demo app has its own readme file with instructions on building and installation.
|
|
12
|
+
|
|
13
|
+
## Documentation
|
|
14
|
+
* [Documentation](https://docs.regulaforensics.com/develop/doc-reader-sdk/mobile)
|
|
15
|
+
* [API Reference](https://dev.regulaforensics.com/npm-document-reader)
|
|
16
|
+
|
|
17
|
+
## Support
|
|
18
|
+
If you have any technical questions, feel free to [contact](mailto:support@regulaforensics.com) us or create issues [here](https://github.com/regulaforensics/npm-document-reader/issues).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
|
4
|
+
source = File.join(__dir__, 'ios')
|
|
5
|
+
|
|
6
|
+
Pod::Spec.new do |s|
|
|
7
|
+
s.name = 'RNDocumentReader'
|
|
8
|
+
s.version = '8.2.186-beta'
|
|
9
|
+
s.summary = package['description']
|
|
10
|
+
s.license = package['license']
|
|
11
|
+
|
|
12
|
+
s.authors = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
+
s.homepage = 'https://regulaforensics.com'
|
|
14
|
+
|
|
15
|
+
s.source = { http: "file:#{source}" }
|
|
16
|
+
s.ios.deployment_target = '13.0'
|
|
17
|
+
s.source_files = 'ios/**/*.{h,m}'
|
|
18
|
+
s.exclude_files = [ 'ios/CVDDocumentReader.h', 'ios/CVDDocumentReader.m' ]
|
|
19
|
+
s.dependency 'DocumentReader', '8.1.4772'
|
|
20
|
+
s.dependency 'React'
|
|
21
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
package com.regula.plugin.documentreader
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.content.Context
|
|
5
|
+
import android.content.Intent
|
|
6
|
+
import android.util.Log
|
|
7
|
+
import androidx.appcompat.app.AppCompatActivity
|
|
8
|
+
import androidx.lifecycle.Lifecycle
|
|
9
|
+
import org.apache.cordova.CallbackContext
|
|
10
|
+
import org.apache.cordova.CordovaPlugin
|
|
11
|
+
import org.apache.cordova.PluginResult
|
|
12
|
+
import org.json.JSONArray
|
|
13
|
+
|
|
14
|
+
val eventCallbackIds = mutableMapOf<String, String>()
|
|
15
|
+
|
|
16
|
+
lateinit var args: JSONArray
|
|
17
|
+
lateinit var binding: CordovaPlugin
|
|
18
|
+
val context: Context
|
|
19
|
+
get() = binding.cordova.context
|
|
20
|
+
val activity: Activity
|
|
21
|
+
get() = binding.cordova.activity
|
|
22
|
+
val lifecycle: Lifecycle
|
|
23
|
+
get() = (activity as AppCompatActivity).lifecycle
|
|
24
|
+
|
|
25
|
+
fun sendEvent(callbackId: String, data: Any? = "") {
|
|
26
|
+
val pluginResult = when (data) {
|
|
27
|
+
is Int -> PluginResult(PluginResult.Status.OK, data)
|
|
28
|
+
is Boolean -> PluginResult(PluginResult.Status.OK, data)
|
|
29
|
+
else -> PluginResult(PluginResult.Status.OK, data.toSendable() as String?)
|
|
30
|
+
}
|
|
31
|
+
pluginResult.keepCallback = true
|
|
32
|
+
binding.webView.sendPluginResult(pluginResult, eventCallbackIds[callbackId] ?: callbackId)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@Suppress("UNCHECKED_CAST")
|
|
36
|
+
fun <T> argsNullable(index: Int): T? = if (args.get(index).toString() != "null") {
|
|
37
|
+
args.get(index) as T
|
|
38
|
+
} else null
|
|
39
|
+
|
|
40
|
+
fun requestPermissions(@Suppress("UNUSED_PARAMETER") activity: Activity, permissions: Array<String>, requestCode: Int) = binding.cordova.requestPermissions(binding, requestCode, permissions)
|
|
41
|
+
fun startActivityForResult(@Suppress("UNUSED_PARAMETER") activity: Activity, intent: Intent, requestCode: Int) = binding.cordova.startActivityForResult(binding, intent, requestCode)
|
|
42
|
+
fun myOnRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) = onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
43
|
+
fun myOnActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) = onActivityResult(requestCode, resultCode, intent)
|
|
44
|
+
|
|
45
|
+
class CVDDocumentReader : CordovaPlugin() {
|
|
46
|
+
init {
|
|
47
|
+
binding = this
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
override fun onNewIntent(intent: Intent) {
|
|
51
|
+
newIntent(intent)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
|
|
55
|
+
myOnActivityResult(requestCode, resultCode, intent)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@Suppress("OVERRIDE_DEPRECATION")
|
|
59
|
+
override fun onRequestPermissionResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
|
|
60
|
+
myOnRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
override fun execute(action: String, arguments: JSONArray, callbackContext: CallbackContext): Boolean {
|
|
64
|
+
args = arguments
|
|
65
|
+
val method = args.remove(0) as String
|
|
66
|
+
if (method == "setEvent") eventCallbackIds[args(0)] = callbackContext.callbackId
|
|
67
|
+
try {
|
|
68
|
+
methodCall(method) { data: Any? -> sendEvent(callbackContext.callbackId, data) }
|
|
69
|
+
} catch (error: Exception) {
|
|
70
|
+
Log.e("REGULA", "Caught exception in \"$method\" function:", error)
|
|
71
|
+
}
|
|
72
|
+
return true
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
apply plugin: 'com.android.library'
|
|
2
|
+
apply plugin: 'kotlin-android'
|
|
3
|
+
|
|
4
|
+
android {
|
|
5
|
+
// Conditional for compatibility with AGP <4.2.
|
|
6
|
+
if (project.android.hasProperty("namespace")) {
|
|
7
|
+
namespace 'com.regula.plugin.documentreader'
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
compileSdk 35
|
|
11
|
+
|
|
12
|
+
defaultConfig {
|
|
13
|
+
minSdkVersion 24
|
|
14
|
+
targetSdk 35
|
|
15
|
+
versionCode 1
|
|
16
|
+
versionName "1.0"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
rootProject.allprojects {
|
|
21
|
+
repositories {
|
|
22
|
+
maven {
|
|
23
|
+
url "https://maven.regulaforensics.com/RegulaDocumentReader"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
dependencies {
|
|
29
|
+
//noinspection GradleDynamicVersion
|
|
30
|
+
implementation 'com.facebook.react:react-native:+'
|
|
31
|
+
//noinspection GradleDependency
|
|
32
|
+
implementation('com.regula.documentreader:api:8.1.11551'){
|
|
33
|
+
transitive = true
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
package com.regula.plugin.documentreader
|
|
2
|
+
|
|
3
|
+
import android.Manifest.permission.ACCESS_FINE_LOCATION
|
|
4
|
+
import android.Manifest.permission.BLUETOOTH_CONNECT
|
|
5
|
+
import android.Manifest.permission.BLUETOOTH_SCAN
|
|
6
|
+
import android.annotation.SuppressLint
|
|
7
|
+
import android.app.Activity
|
|
8
|
+
import android.bluetooth.BluetoothAdapter
|
|
9
|
+
import android.content.ComponentName
|
|
10
|
+
import android.content.Intent
|
|
11
|
+
import android.content.ServiceConnection
|
|
12
|
+
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
|
13
|
+
import android.os.Build
|
|
14
|
+
import android.os.IBinder
|
|
15
|
+
import android.provider.Settings
|
|
16
|
+
import android.util.Log
|
|
17
|
+
import androidx.core.content.ContextCompat.checkSelfPermission
|
|
18
|
+
import com.regula.common.ble.BLEWrapper
|
|
19
|
+
import com.regula.common.ble.BleWrapperCallback
|
|
20
|
+
import com.regula.common.ble.RegulaBleService
|
|
21
|
+
import com.regula.documentreader.api.internal.permission.BluetoothPermissionHelper.BLE_ACCESS_PERMISSION
|
|
22
|
+
import com.regula.documentreader.api.internal.permission.BluetoothSettingsHelper.isBluetoothEnabled
|
|
23
|
+
import com.regula.documentreader.api.internal.permission.BluetoothSettingsHelper.isLocationServiceEnabled
|
|
24
|
+
import java.util.Timer
|
|
25
|
+
import java.util.TimerTask
|
|
26
|
+
|
|
27
|
+
const val SEARCHING_TIMEOUT: Long = 7000
|
|
28
|
+
|
|
29
|
+
const val INTENT_REQUEST_ENABLE_LOCATION = 196
|
|
30
|
+
const val INTENT_REQUEST_ENABLE_BLUETOOTH = 197
|
|
31
|
+
|
|
32
|
+
@SuppressLint("StaticFieldLeak")
|
|
33
|
+
var bluetooth: BLEWrapper? = null
|
|
34
|
+
lateinit var savedCallbackForPermissionResult: Callback
|
|
35
|
+
|
|
36
|
+
fun connectBluetoothDevice(callback: Callback) {
|
|
37
|
+
if (bluetooth?.isConnected == true) {
|
|
38
|
+
Log.e("REGULA", "Bluetooth device already connected, returning false")
|
|
39
|
+
callback(false)
|
|
40
|
+
return
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (!isBluetoothSettingsReady(activity)) {
|
|
44
|
+
savedCallbackForPermissionResult = callback
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
val timeout = object : TimerTask() {
|
|
49
|
+
override fun run() {
|
|
50
|
+
callback(false)
|
|
51
|
+
bluetooth?.stopDeviceScan()
|
|
52
|
+
bluetooth?.disconnect()
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
Timer().schedule(timeout, SEARCHING_TIMEOUT)
|
|
56
|
+
|
|
57
|
+
val bleIntent = Intent(context, RegulaBleService::class.java)
|
|
58
|
+
context.startService(bleIntent)
|
|
59
|
+
context.bindService(bleIntent, object : ServiceConnection {
|
|
60
|
+
override fun onServiceConnected(name: ComponentName, service: IBinder) {
|
|
61
|
+
bluetooth = (service as RegulaBleService.LocalBinder).service.bleManager
|
|
62
|
+
if (bluetooth!!.isConnected) callback(true)
|
|
63
|
+
else bluetooth!!.addCallback(object : BleWrapperCallback() {
|
|
64
|
+
override fun onDeviceReady() {
|
|
65
|
+
timeout.cancel()
|
|
66
|
+
bluetooth!!.removeCallback(this)
|
|
67
|
+
callback(true)
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
override fun onServiceDisconnected(name: ComponentName) {}
|
|
73
|
+
}, 0)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
fun onRequestPermissionsResult(
|
|
77
|
+
requestCode: Int,
|
|
78
|
+
permissions: Array<String>,
|
|
79
|
+
grantResults: IntArray
|
|
80
|
+
): Boolean {
|
|
81
|
+
if (requestCode != BLE_ACCESS_PERMISSION || permissions.isEmpty()) return false
|
|
82
|
+
if (grantResults.isEmpty() || grantResults[0] != PERMISSION_GRANTED) {
|
|
83
|
+
savedCallbackForPermissionResult(false)
|
|
84
|
+
return true
|
|
85
|
+
}
|
|
86
|
+
connectBluetoothDevice(savedCallbackForPermissionResult)
|
|
87
|
+
return true
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
fun onActivityResult(requestCode: Int, rc: Int, @Suppress("UNUSED_PARAMETER") data: Intent?): Boolean {
|
|
91
|
+
var resultCode = rc
|
|
92
|
+
if (requestCode == INTENT_REQUEST_ENABLE_LOCATION)
|
|
93
|
+
resultCode = if (isLocationServiceEnabled(activity)) Activity.RESULT_OK
|
|
94
|
+
else requestCode
|
|
95
|
+
|
|
96
|
+
if (requestCode == INTENT_REQUEST_ENABLE_BLUETOOTH || requestCode == INTENT_REQUEST_ENABLE_LOCATION) {
|
|
97
|
+
if (resultCode == Activity.RESULT_OK)
|
|
98
|
+
connectBluetoothDevice(savedCallbackForPermissionResult)
|
|
99
|
+
else
|
|
100
|
+
savedCallbackForPermissionResult(false)
|
|
101
|
+
return true
|
|
102
|
+
}
|
|
103
|
+
return false
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
fun isBluetoothSettingsReady(activity: Activity): Boolean {
|
|
107
|
+
deniedBluetoothPermissions()?.let {
|
|
108
|
+
requestPermissions(activity, it, BLE_ACCESS_PERMISSION)
|
|
109
|
+
return false
|
|
110
|
+
}
|
|
111
|
+
if (!isBluetoothEnabled(activity)) {
|
|
112
|
+
requestEnableBluetooth(activity)
|
|
113
|
+
return false
|
|
114
|
+
}
|
|
115
|
+
if (!isLocationServiceEnabled(activity)) {
|
|
116
|
+
requestEnableLocationService(activity)
|
|
117
|
+
return false
|
|
118
|
+
}
|
|
119
|
+
return true
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
fun deniedBluetoothPermissions(): Array<String>? {
|
|
123
|
+
val result = mutableListOf<String>()
|
|
124
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
125
|
+
result.addAll(deniedBluetoothPermission(BLUETOOTH_SCAN))
|
|
126
|
+
result.addAll(deniedBluetoothPermission(BLUETOOTH_CONNECT))
|
|
127
|
+
} else
|
|
128
|
+
result.addAll(deniedBluetoothPermission(ACCESS_FINE_LOCATION))
|
|
129
|
+
return result.let { if (it.size > 0) it.toTypedArray() else null }
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
fun deniedBluetoothPermission(permission: String): Array<String> {
|
|
133
|
+
if (checkSelfPermission(context, permission) != PERMISSION_GRANTED)
|
|
134
|
+
return arrayOf(permission)
|
|
135
|
+
return arrayOf()
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
fun requestEnableBluetooth(activity: Activity) {
|
|
139
|
+
val enableIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
|
|
140
|
+
startActivityForResult(activity, enableIntent, INTENT_REQUEST_ENABLE_BLUETOOTH)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
fun requestEnableLocationService(activity: Activity) {
|
|
144
|
+
val myIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
|
|
145
|
+
startActivityForResult(activity, myIntent, INTENT_REQUEST_ENABLE_LOCATION)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// btDevice functionality(temporary, will be reworked)
|
|
149
|
+
|
|
150
|
+
fun btDeviceRequestFlashing() {
|
|
151
|
+
bluetooth?.requestFlashing()
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
fun btDeviceRequestFlashingFullIR() {
|
|
155
|
+
bluetooth?.requestFlashingFullIR()
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
fun btDeviceRequestTurnOffAll() {
|
|
159
|
+
bluetooth?.requestTurnOffAll()
|
|
160
|
+
}
|