diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle
index 522d7e0c3..2fb2728f1 100644
--- a/mobile/android/app/build.gradle
+++ b/mobile/android/app/build.gradle
@@ -152,8 +152,9 @@ dependencies {
implementation project(':react-native-svg')
implementation project(':react-native-gesture-handler')
implementation fileTree(dir: "libs", include: ["*.jar"])
- implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
+ implementation "com.android.support:support-annotations:${rootProject.ext.supportLibVersion}"
implementation "com.facebook.react:react-native:+" // From node_modules
+ implementation 'androidx.biometric:biometric:1.0.0-alpha03'
// Add v8-android - prebuilt libv8.so into APK
implementation 'org.chromium:v8-android:+'
addUnimodulesDependencies()
diff --git a/mobile/android/app/src/main/AndroidManifest.xml b/mobile/android/app/src/main/AndroidManifest.xml
index 8bf2afda4..0c01481cc 100644
--- a/mobile/android/app/src/main/AndroidManifest.xml
+++ b/mobile/android/app/src/main/AndroidManifest.xml
@@ -11,6 +11,7 @@
+
diff --git a/mobile/android/app/src/main/java/com/lightningapp/FingerprintDialogModule.java b/mobile/android/app/src/main/java/com/lightningapp/FingerprintDialogModule.java
new file mode 100644
index 000000000..837922f70
--- /dev/null
+++ b/mobile/android/app/src/main/java/com/lightningapp/FingerprintDialogModule.java
@@ -0,0 +1,30 @@
+package com.lightningapp;
+
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.bridge.ReactContextBaseJavaModule;
+import com.facebook.react.bridge.ReactMethod;
+import java.util.concurrent.Executors;
+import androidx.biometric.BiometricPrompt;
+
+public class FingerprintDialogModule extends ReactContextBaseJavaModule {
+ public FingerprintDialogModule(ReactApplicationContext reactContext) {
+ super(reactContext); //required by React Native
+ }
+
+ @Override
+ //getName is required to define the name of the module represented in JavaScript
+ public String getName() {
+ return "FingerprintDialog";
+ }
+
+ @ReactMethod
+ public void getBiometricPrompt() {
+ val executor = Executors.newSingleThreadExecutor();
+ BiometricPrompt.Builder()
+ .setTitle("Use your fingerprint to unlock")
+ .setSubtitle("Lightning App requires authentication to continue")
+ .setDescription("Use your fingerprint to unlock the app or press cancel and enter in your pin")
+ .setNegativeButton("Cancel")
+ .build();
+ }
+}
diff --git a/mobile/android/app/src/main/java/com/lightningapp/FingerprintDialogPackage.java b/mobile/android/app/src/main/java/com/lightningapp/FingerprintDialogPackage.java
new file mode 100644
index 000000000..ee781fe46
--- /dev/null
+++ b/mobile/android/app/src/main/java/com/lightningapp/FingerprintDialogPackage.java
@@ -0,0 +1,28 @@
+package com.lightningapp;
+
+import com.facebook.react.ReactPackage;
+import com.facebook.react.bridge.NativeModule;
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.uimanager.ViewManager;
+import com.lightningapp.FingerprintDialogModule;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class FingerprintDialogPackage implements ReactPackage {
+
+ @Override
+ public List createViewManagers(ReactApplicationContext reactContext) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List createNativeModules(
+ ReactApplicationContext reactContext) {
+ List modules = new ArrayList<>();
+ //this is where you register the module
+ modules.add(new FingerprintDialogModule(reactContext));
+ return modules;
+ }
+}
\ No newline at end of file
diff --git a/mobile/android/app/src/main/java/com/lightningapp/MainApplication.java b/mobile/android/app/src/main/java/com/lightningapp/MainApplication.java
index 2413c2234..e7bbb9135 100644
--- a/mobile/android/app/src/main/java/com/lightningapp/MainApplication.java
+++ b/mobile/android/app/src/main/java/com/lightningapp/MainApplication.java
@@ -53,7 +53,8 @@ protected List getPackages() {
new SvgPackage(),
new RNGestureHandlerPackage(),
new ModuleRegistryAdapter(mModuleRegistryProvider),
- new LndNativePackage()
+ new LndNativePackage(),
+ new FingerprintDialogPackage()
);
}
diff --git a/mobile/android/gradle.properties b/mobile/android/gradle.properties
index 89e0d99e2..59d5aab6a 100644
--- a/mobile/android/gradle.properties
+++ b/mobile/android/gradle.properties
@@ -16,3 +16,5 @@
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+android.useAndroidX=true
+android.enableJetifier=true
\ No newline at end of file
diff --git a/mobile/package-lock.json b/mobile/package-lock.json
index 19271ae5c..356f2c313 100644
--- a/mobile/package-lock.json
+++ b/mobile/package-lock.json
@@ -984,17 +984,17 @@
"integrity": "sha512-CBR5avlLcu0YCILJiDIXeU2pTw7UK/NIxfC63m7d7CVamho1qDEzXKkOtEauQRPMy6MI8mLozth+JJkas7HY6g=="
},
"@unimodules/core": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-3.0.2.tgz",
- "integrity": "sha512-EMZjVp+yrtoPKpDBPvj4+hyDWALl7gvpWeUsDz2Nb9MMBPLnhag1uNk3KC98StJdnjbSXKSdKrCMMidOXnyKcg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-4.0.0.tgz",
+ "integrity": "sha512-lHxRmCG9DK3/aA2lnBKPS32K95NpYE10mZQRp5dycSptgN0DIeWWHuE01SndcSUACGyEP+tDO+DnGo8mhLlt4Q==",
"requires": {
"compare-versions": "^3.4.0"
}
},
"@unimodules/react-native-adapter": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-3.0.0.tgz",
- "integrity": "sha512-zkFFE0HQ2Flfx/aY3hBKDgMvQ1meUm3H6vMIacY1KywexCuKW8ivBobkOsHIet4jf7km0Eklt6WtB3LqQVw5yw==",
+ "version": "5.0.0-alpha.0",
+ "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-5.0.0-alpha.0.tgz",
+ "integrity": "sha512-qPF92DiSDMoOmdxb/i6+XEAqLR7+4RZgi2HmPMlqh2oTBQIlrAcM7JQVsIDFkmtcVAzdy4VPzJpFDSJW67My3A==",
"requires": {
"invariant": "^2.2.4",
"lodash": "^4.5.0",
@@ -1602,9 +1602,9 @@
"integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ=="
},
"blueimp-md5": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.11.1.tgz",
- "integrity": "sha512-4UiOAmql2XO0Sws07OVzYdCKK0K2Va5g6AVgYXoGhEQiKrdSOefjUCm1frPk6E+xiIOHRqaFg+TUGo7cClKg5g=="
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.12.0.tgz",
+ "integrity": "sha512-zo+HIdIhzojv6F1siQPqPFROyVy7C50KzHv/k/Iz+BtvtVzSHXiMXOpq2wCfNkeBqdCv+V8XOV96tsEt2W/3rQ=="
},
"bn.js": {
"version": "4.11.8",
@@ -2460,14 +2460,14 @@
}
},
"expo-app-loader-provider": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/expo-app-loader-provider/-/expo-app-loader-provider-6.0.0.tgz",
- "integrity": "sha512-GtpztJVxOz+vVwdLyHskpzVzFWMXZPIFC/zczHZPsTwjS+wXj6n8MVaLxX6GaTyhNEtYjp0VIQUw3b7eP+vO6w=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/expo-app-loader-provider/-/expo-app-loader-provider-7.0.0.tgz",
+ "integrity": "sha512-C+5zpZN2T7PCj7weLs/ZgAC+y9dvu0VdTXD00Jf9Wo7Pxu/lsLh6ljg9JL91c+2tYDzMEODPNmT+JOUIxAr5zQ=="
},
"expo-asset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-6.0.0.tgz",
- "integrity": "sha512-M0sJphdCQ0mq+7kg6rQmq4rU5hbsL72AZCNrga565JchCLeevJhv6j72erh2viqDAPdvjZpGwc7pwI/dxu1+zg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-7.0.0.tgz",
+ "integrity": "sha512-MwWrlpzaZqT0NU0V3Wn8oA1pMb7Al49aYAWMPEUZ2UV5NyVAbzYPuS2duIfwX55ivczjJZHpwrhd0hb/3l9ngQ==",
"requires": {
"blueimp-md5": "^2.10.0",
"path-browserify": "^1.0.0",
@@ -2482,17 +2482,17 @@
}
},
"expo-constants": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-6.0.0.tgz",
- "integrity": "sha512-O0yL3Ok0YUEWpAqsWjOdgFD/lMfg8PUGH/nq31CZ1s7cuFUlksD42i5YhIRlb0Pa/btK8X9LpfY3eWhx9eTmbg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-7.0.0.tgz",
+ "integrity": "sha512-oLINuMtGcAwfHGInSVhq6xGojp3atUpSIp7KImo9rqXhWwD5FNmqA5Jflo4J0ODPq590kN5ieiYCCqwls2/u0w==",
"requires": {
"ua-parser-js": "^0.7.19"
}
},
"expo-file-system": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-6.0.2.tgz",
- "integrity": "sha512-s+6oQpLhcT7MQp7fcoj1E+zttMr0WX6c0FrddzqB4dUfhIggV+nb35nQMASIiTHAj8VPUanTFliY5rETHRMHRA==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-7.0.0.tgz",
+ "integrity": "sha512-ignf5Vf5cPDYO/4HgUkgnL574wMbCNxyazlOvBgV34rLGJzBbFsn++hqC7njr2VTpIIXh2G9vp1+8g6cvsQdqA==",
"requires": {
"uuid-js": "^0.7.5"
}
@@ -2519,9 +2519,9 @@
}
},
"expo-permissions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-6.0.0.tgz",
- "integrity": "sha512-O+RdyfGiq7i+5Vi9fE38DgKn436lNWiqhnS5/Z7CC00bmKahhjVMNDbZvNn/nrdRGyaPneJk1Co1s1sexSnv0A=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/expo-permissions/-/expo-permissions-7.0.0.tgz",
+ "integrity": "sha512-C+qyVz+pdZO4YpVR2HSC3gsBZg0Qb8brCFgzmDmWcAtgrOiHClaLPdhI2XtQuGh8ubXcKPUGZp++UCEGiG0Jxg=="
},
"expo-random": {
"version": "6.0.0",
@@ -5592,28 +5592,28 @@
}
},
"react-native-unimodules": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/react-native-unimodules/-/react-native-unimodules-0.5.4.tgz",
- "integrity": "sha512-47ZJzZriaVtvDJp24HLu6xcKBaDScDcx71yIDmahsKKJtbEHmXl7jPz1y/2FhAKSb174m9niu3F97Di5Bo+91g==",
+ "version": "0.7.0-rc.1",
+ "resolved": "https://registry.npmjs.org/react-native-unimodules/-/react-native-unimodules-0.7.0-rc.1.tgz",
+ "integrity": "sha512-qRKxMY5k7NVlHglOklUPbIawD1A6TujChe1S4tR+Yew+9SmE+JEUUhz1tjrVkOakpFOFAfiBk74Gh1KI9H0DtA==",
"requires": {
- "@unimodules/core": "~3.0.2",
- "@unimodules/react-native-adapter": "~3.0.0",
+ "@unimodules/core": "~4.0.0",
+ "@unimodules/react-native-adapter": "~5.0.0-alpha.0",
"chalk": "^2.4.2",
- "expo-app-loader-provider": "~6.0.0",
- "expo-asset": "~6.0.0",
- "expo-constants": "~6.0.0",
- "expo-file-system": "~6.0.1",
- "expo-permissions": "~6.0.0",
- "unimodules-barcode-scanner-interface": "~3.0.0",
- "unimodules-camera-interface": "~3.0.0",
- "unimodules-constants-interface": "~3.0.0",
- "unimodules-face-detector-interface": "~3.0.0",
- "unimodules-file-system-interface": "~3.0.0",
- "unimodules-font-interface": "~3.0.0",
- "unimodules-image-loader-interface": "~3.0.0",
- "unimodules-permissions-interface": "~3.0.0",
- "unimodules-sensors-interface": "~3.0.0",
- "unimodules-task-manager-interface": "~3.0.0"
+ "expo-app-loader-provider": "~7.0.0",
+ "expo-asset": "~7.0.0",
+ "expo-constants": "~7.0.0",
+ "expo-file-system": "~7.0.0",
+ "expo-permissions": "~7.0.0",
+ "unimodules-barcode-scanner-interface": "~4.0.0",
+ "unimodules-camera-interface": "~4.0.0",
+ "unimodules-constants-interface": "~4.0.0",
+ "unimodules-face-detector-interface": "~4.0.0",
+ "unimodules-file-system-interface": "~4.0.0",
+ "unimodules-font-interface": "~4.0.0",
+ "unimodules-image-loader-interface": "~4.0.0",
+ "unimodules-permissions-interface": "~4.0.0",
+ "unimodules-sensors-interface": "~4.0.0",
+ "unimodules-task-manager-interface": "~4.0.0"
}
},
"react-native-v8": {
@@ -6883,54 +6883,54 @@
"integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw=="
},
"unimodules-barcode-scanner-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-3.0.0.tgz",
- "integrity": "sha512-EtJBfKU5VgZbyIfIZwyWfUo59pIgW6s7YGzlpj9jk4UWKyqqhYT/FoaZqudCJcPcfh2eYxkc9VxBGieRBpQrzg=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-barcode-scanner-interface/-/unimodules-barcode-scanner-interface-4.0.0.tgz",
+ "integrity": "sha512-XAW+8s7w/dQ514I/SPfBKHPmbaCOEpYAkdn1aaBoWocVfdvOKf8SqwHSIaP2W/SFUwWNRF4Wqv2HBt1dvuhSSg=="
},
"unimodules-camera-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-3.0.0.tgz",
- "integrity": "sha512-STjf1FAdYlN27ilJSR4kIUYyHTPrkQSR/mEg4S4pZX6tazmcuG2KzLCXCoV+xMWsrwmsMBjgLzw6yzg87N5Ydw=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-camera-interface/-/unimodules-camera-interface-4.0.0.tgz",
+ "integrity": "sha512-rEYD3mKarxzgiWWL8J0mPAxzV4i1WI9DsNMRxyV2T7qC/WWIucroZX72O1BkYjUbIKerGmJWeGYbWHheP4/rsA=="
},
"unimodules-constants-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-3.0.0.tgz",
- "integrity": "sha512-S4ap11UJH7D+Y4fXC7DyMNAkqIWD8B7rNCTS30wAF9beHXMZa1Od66rkJgSHqFRURy06h+Jr7qfJm9H5mtMz8Q=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-constants-interface/-/unimodules-constants-interface-4.0.0.tgz",
+ "integrity": "sha512-FTM64GP+uawURWhuExrsCMebpcu0DdREUCuUmes5qd3/uTM2gqmhbm/ZwSKviH/ar4h630Fdb6P6v9o4MDInbA=="
},
"unimodules-face-detector-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-3.0.0.tgz",
- "integrity": "sha512-fMQ3ZnhdOjbQ5ZXW62s/t1bbqBaenxzVIcgVEcwvLIFek0mx/EMHFkySgFkFjU11icUvaPEXW1yJtkK4QEpLhg=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-face-detector-interface/-/unimodules-face-detector-interface-4.0.0.tgz",
+ "integrity": "sha512-ZFzqcNnJkBxvfdKCupvtQUj1yVJkzKivPGV6nydKZc9eJRLUgSXCUWtvXd0vaet1NSQqr2R3r6Ilvj0DzuCzUA=="
},
"unimodules-file-system-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-3.0.0.tgz",
- "integrity": "sha512-LkLIKRE3CwsXLRFw8vx0++Cfjj+pAvvidVb7yhGWKFmNlVaWUW9Z8jkhFLBFXDsGFAOU69bUTrz25jmB2MRt0Q=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-file-system-interface/-/unimodules-file-system-interface-4.0.0.tgz",
+ "integrity": "sha512-dDcKjArDwY3CXLlCL8tf9/JJG25K2lgtAL+560kqrftLu3pi0x5V7JmSDz52pJ4pLd5xL8s1Rzse+rIr5OpM3g=="
},
"unimodules-font-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-3.0.0.tgz",
- "integrity": "sha512-DOQI0uTn7CGvA9lNUuiTWfQYuKQEM8LZKn6gNS8G+HVHVb+TZl/37qdhuoMBi5jkAZ4VOD/GpgnPv8qr0pJi1Q=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-font-interface/-/unimodules-font-interface-4.0.0.tgz",
+ "integrity": "sha512-RFD1H405kZy8oYcg7f9Krr+UTUn6EZTcqAb+wRL6Ex9TJmzmxJT6JZ0FsUMezOUEwrdvXRpArH4P1AadHlzzGA=="
},
"unimodules-image-loader-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-3.0.0.tgz",
- "integrity": "sha512-hC/VWdT33GkOZ4FLaqPoKGNKxhw+miFhM+7Re57snWIWYewSv0lRvCqqwc/hbGLocvd2qF3YYrBx9woqPI8NzA=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-image-loader-interface/-/unimodules-image-loader-interface-4.0.0.tgz",
+ "integrity": "sha512-tv7g1YmZq9ZnG/x9l3qSlpEn93ZuMD+FuQpOZj3/oGDkBlc27vtBSEi8lTySWb9U7UK+bNlHGFqf1lGZcFU1Ug=="
},
"unimodules-permissions-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-3.0.0.tgz",
- "integrity": "sha512-rfyGDBMtO8IOlk9hJN44EKz7vk6nt/PXByAumsptRdgsd+knokMlaWGYatrxKW2g/08WUbEkgKspvMxjJ0M1Tg=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-permissions-interface/-/unimodules-permissions-interface-4.0.0.tgz",
+ "integrity": "sha512-bVZ6JQMO12WvAv6YqcHaPV5KekV7WH606eRiMJq5Qwm2z9yGSM+KaOxOH/n2LVcYckForphsCLf58OGVUtM65Q=="
},
"unimodules-sensors-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-3.0.0.tgz",
- "integrity": "sha512-1JJT/lqCfxHqUSJc3o6b0WUply/lFOJjcuzN0QcAfmdAW8d+lEXA7BJ7DV/Nn/OKpMlHriEyxkM+FoGoXKJJcg=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-sensors-interface/-/unimodules-sensors-interface-4.0.0.tgz",
+ "integrity": "sha512-O7l+N2DLwviTc6gz/ptV7a930Sdo30AvzQLEJPHfqj4e9fCdbrHNrcPqiq0CLqHYYIsdpSDpC6wCWmepLaAgJQ=="
},
"unimodules-task-manager-interface": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unimodules-task-manager-interface/-/unimodules-task-manager-interface-3.0.0.tgz",
- "integrity": "sha512-og4UiUOxc7PqT8uQQqXY+pOBvdS204xmgyUG2AjM2L3kVsw/6WH4pIW084WG8/e9M5SLsSXdrjecIUBQ/zLf8w=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unimodules-task-manager-interface/-/unimodules-task-manager-interface-4.0.0.tgz",
+ "integrity": "sha512-c7x5hgEtT+oIVd37TBn2jxlTw2+Bgb55XZ2Md0AV5NCjeRlKw2bIBPwUvSdI1iAziSQOIGOImNaaIUo3L3zW3w=="
},
"union-value": {
"version": "1.0.1",
diff --git a/mobile/package.json b/mobile/package.json
index 77f4ecb8e..0451ce45d 100644
--- a/mobile/package.json
+++ b/mobile/package.json
@@ -5,6 +5,7 @@
"start": "react-native start"
},
"dependencies": {
+ "expo-constants": "^7.0.0",
"expo-font": "^6.0.1",
"expo-keep-awake": "^6.0.0",
"expo-local-authentication": "^6.0.0",
@@ -28,7 +29,7 @@
"react-native-picker-select": "^6.3.2",
"react-native-share": "^1.2.1",
"react-native-svg": "^9.6.2",
- "react-native-unimodules": "^0.5.4",
+ "react-native-unimodules": "^0.7.0-rc.1",
"react-native-v8": "^0.59.10-patch.1",
"react-navigation": "^3.11.1"
},
diff --git a/src/action/auth-mobile.js b/src/action/auth-mobile.js
index 4da785c6a..7f3864df8 100644
--- a/src/action/auth-mobile.js
+++ b/src/action/auth-mobile.js
@@ -192,15 +192,20 @@ class AuthAction {
// TouchID & KeyStore Authentication
//
+ async checkFingerprintHardwareAndEnrollment() {
+ const hasHardware = await this._Fingerprint.hasHardwareAsync();
+ const isEnrolled = await this._Fingerprint.isEnrolledAsync();
+ return hasHardware && isEnrolled ? true : false;
+ }
+
/**
* Try authenticating the user using either via TouchID/FaceID on iOS
* or a fingerprint reader on Android.
* @return {Promise}
*/
async tryFingerprint() {
- const hasHardware = await this._Fingerprint.hasHardwareAsync();
- const isEnrolled = await this._Fingerprint.isEnrolledAsync();
- if (!hasHardware || !isEnrolled) {
+ const hasFingerprint = await this.checkFingerprintHardwareAndEnrollment();
+ if (!hasFingerprint) {
return;
}
const msg = 'Unlock your Wallet';
diff --git a/src/view/pin-mobile.js b/src/view/pin-mobile.js
index 4abfc41b1..df3b0b7fc 100644
--- a/src/view/pin-mobile.js
+++ b/src/view/pin-mobile.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { View, StyleSheet } from 'react-native';
+import { NativeModules, View, StyleSheet } from 'react-native';
import { observer } from 'mobx-react';
import PropTypes from 'prop-types';
import Background from '../component/background';
@@ -37,6 +37,12 @@ class PinView extends React.Component {
render() {
const { store, auth } = this.props;
+ const FingerprintDialog = NativeModules.FingerprintDialog;
+ const hasActiveFingerprint = this.props.auth.checkFingerprintHardwareAndEnrollment();
+
+ if (hasActiveFingerprint) {
+ FingerprintDialog.getBiometricPrompt();
+ }
return (