From b0ebef0acdb9714471598f499a425f0962373124 Mon Sep 17 00:00:00 2001 From: vijay151096 <94220135+vijay151096@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:28:12 +0530 Subject: [PATCH] fix(inji-522): enable the location service before initiating the vc sharing. (#1004) * fix(inji-522): enable the location service before initiating the vc sharing. Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * fix(inji-522): update literals in the location service enabling popup Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * fix(inji-522): update checkLocation state name Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> * fix(inji-522): removed duplicate namespace Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --------- Signed-off-by: Vijay <94220135+vijay151096@users.noreply.github.com> --- android/app/build.gradle | 13 +- android/settings.gradle | 5 +- locales/ara.json | 3 +- locales/en.json | 2 +- locales/fil.json | 3 +- locales/hin.json | 3 +- locales/kan.json | 3 +- locales/spa.json | 3 +- locales/tam.json | 3 +- machines/bleShare/scan/scanMachine.ts | 49 +++- machines/bleShare/scan/scanMachine.typegen.ts | 236 ------------------ package-lock.json | 15 ++ package.json | 3 +- shared/location.ts | 34 ++- 14 files changed, 104 insertions(+), 271 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 2b2d0d8a..c2533580 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,12 +1,10 @@ -plugins { +plugins { id 'com.gladed.androidgitversion' version '0.4.14' } apply plugin: "com.android.application" apply plugin: "com.facebook.react" -import com.android.build.OutputFile - react { /* Folders */ // The root of your project, i.e. where "package.json" lives. Default is '..' @@ -102,9 +100,6 @@ android { } - namespace 'io.mosip.residentapp' - - namespace 'io.mosip.residentapp' defaultConfig { @@ -130,7 +125,7 @@ android { include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } } - + signingConfigs { release { def keystore = file('release.keystore') @@ -232,7 +227,7 @@ dependencies { implementation 'com.facebook.fresco:animated-webp:2.0.0' } } - + compileOnly project(':react-native-android-location-services-dialog-box') implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { @@ -252,4 +247,4 @@ dependencies { } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) -apply from: "./eas-build.gradle" \ No newline at end of file +apply from: "./eas-build.gradle" diff --git a/android/settings.gradle b/android/settings.gradle index cf75b94c..38e206ee 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -3,6 +3,7 @@ rootProject.name = 'Inji' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' includeBuild('../node_modules/react-native-gradle-plugin') - +include ':react-native-android-location-services-dialog-box' +project(':react-native-android-location-services-dialog-box').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-android-location-services-dialog-box/android') apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle") -useExpoModules() \ No newline at end of file +useExpoModules() diff --git a/locales/ara.json b/locales/ara.json index e181e620..a615941a 100644 --- a/locales/ara.json +++ b/locales/ara.json @@ -478,7 +478,7 @@ "sharingVc": "مشاركة بطاقة ", "errors": { "locationDisabled": { - "message": "يجب تمكين خدمات الموقع لمشاركة البطاقة", + "message": "للمتابعة، اسمح لجهازك بتشغيل الموقع", "button": "تمكين خدمات الموقع" }, "locationDenied": { @@ -593,6 +593,7 @@ "cancel": "إلغاء", "accept": "يقبل", "save": "حفظ", + "ok": "نعم", "dismiss": "رفض", "editLabel": "يحرر {{label}}", "tryAgain": "حاول مجددا", diff --git a/locales/en.json b/locales/en.json index 4911f357..496c6aea 100644 --- a/locales/en.json +++ b/locales/en.json @@ -479,7 +479,7 @@ "scanningGuide": "Hold the phone steady and scan the QR code", "errors": { "locationDisabled": { - "message": "Location services must be enabled to share card", + "message": "To continue, let your device turn on location", "button": "Enable location services" }, "locationDenied": { diff --git a/locales/fil.json b/locales/fil.json index ac62df59..ab488daa 100644 --- a/locales/fil.json +++ b/locales/fil.json @@ -481,7 +481,7 @@ "scanningGuide": "Panatilihin ang telepono at i-scan ang QR code", "errors": { "locationDisabled": { - "message": "Dapat na nakabukas ang Location services ng iyong mobile para maaaring makapag-scan", + "message": "Para magpatuloy, hayaang i-on ng iyong device ang lokasyon", "button": "Buksan ang location services" }, "locationDenied": { @@ -596,6 +596,7 @@ "cancel": "Kanselahin", "accept": "Tanggapin", "save": "I-save", + "ok": "Ok", "dismiss": "Dismissed", "editLabel": "Palitan ang {{label}}", "tryAgain": "Subukan muli", diff --git a/locales/hin.json b/locales/hin.json index b5786031..40393686 100644 --- a/locales/hin.json +++ b/locales/hin.json @@ -478,7 +478,7 @@ "scanningGuide": "फ़ोन को स्थिर रखें और QR कोड को स्कैन करें", "errors": { "locationDisabled": { - "message": "स्थान सेवाओं को स्कैनिंग कार्यक्षमता के लिए सक्षम किया जाना चाहिए", + "message": "जारी रखने के लिए, अपने डिवाइस को स्थान चालू करने दें", "button": "स्थान सेवाएं सक्षम करें" }, "locationDenied": { @@ -592,6 +592,7 @@ "common": { "cancel": "रद्द करें", "save": "सहेजें", + "ok": "ठीक है", "dismiss": "नकार देना", "editLabel": "संपादित करें {{label}}", "tryAgain": "पुनः प्रयास करें", diff --git a/locales/kan.json b/locales/kan.json index 5565c8a7..71e21bda 100644 --- a/locales/kan.json +++ b/locales/kan.json @@ -476,7 +476,7 @@ "scanningGuide": "ಫೋನ್ ಅನ್ನು ಸ್ಥಿರವಾಗಿ ಹಿಡಿದುಕೊಳ್ಳಿ ಮತ್ತು QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ", "errors": { "locationDisabled": { - "message": "ಸ್ಕ್ಯಾನಿಂಗ್ ಕಾರ್ಯಕ್ಕಾಗಿ ಸ್ಥಳ ಸೇವೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು", + "message": "ಮುಂದುವರಿಸಲು, ನಿಮ್ಮ ಸಾಧನವು ಸ್ಥಳವನ್ನು ಆನ್ ಮಾಡಲು ಅನುಮತಿಸಿ", "button": "ಸ್ಥಳ ಸೇವೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ" }, "locationDenied": { @@ -591,6 +591,7 @@ "cancel": "ರದ್ದು", "accept": "ಒಪ್ಪಿಕೊಳ್ಳಿ", "save": "ಉಳಿಸು", + "ok": "ಸರಿ", "dismiss": "ವಜಾಗೊಳಿಸಿ", "editLabel": "ಸಂಪಾದಿಸು {{label}}", "tryAgain": "ಮತ್ತೆ ಪ್ರಯತ್ನಿಸು", diff --git a/locales/spa.json b/locales/spa.json index a3ae25b9..a2b87190 100644 --- a/locales/spa.json +++ b/locales/spa.json @@ -412,7 +412,7 @@ "enableBluetoothButtonText": "Permitir permisos de Bluetooth", "errors": { "locationDisabled": { - "message": "Los servicios de ubicación deben estar habilitados para compartir la tarjeta", + "message": "Para continuar, deja que tu dispositivo active la ubicación.", "button": "Habilitar servicios de ubicación" }, "locationDenied": { @@ -501,6 +501,7 @@ "common": { "cancel": "Cancelar", "save": "Guardar", + "ok": "Ok", "dismiss": "Cerrar", "editLabel": "Editar {{label}}", "tryAgain": "Intentar de nuevo", diff --git a/locales/tam.json b/locales/tam.json index 604c6f45..2a1569a5 100644 --- a/locales/tam.json +++ b/locales/tam.json @@ -476,7 +476,7 @@ "scanningGuide": "ஃபோனை நிலையாகப் பிடித்து, QR குறியீட்டை ஸ்கேன் செய்யவும்s", "errors": { "locationDisabled": { - "message": "ஸ்கேனிங் செயல்பாட்டிற்கு இருப்பிடச் சேவைகள் இயக்கப்பட வேண்டும்", + "message": "தொடர, இருப்பிடத்தை இயக்க உங்கள் சாதனத்தை அனுமதிக்கவும்", "button": "இருப்பிட சேவைகளை இயக்கு" }, "locationDenied": { @@ -591,6 +591,7 @@ "cancel": "ரத்துசெய்", "accept": "ஏற்றுக்கொள்", "save": "சேமி", + "ok": "சரி", "dismiss": "நிராகரி", "editLabel": "திருத்து {{label}}", "tryAgain": "மீண்டும் முயற்சி செய்", diff --git a/machines/bleShare/scan/scanMachine.ts b/machines/bleShare/scan/scanMachine.ts index 43cb24c4..74cca2b1 100644 --- a/machines/bleShare/scan/scanMachine.ts +++ b/machines/bleShare/scan/scanMachine.ts @@ -22,13 +22,14 @@ import {subscribe} from '../../../shared/openIdBLE/walletEventHandler'; import { check, checkMultiple, - PermissionStatus, PERMISSIONS, + PermissionStatus, requestMultiple, RESULTS, } from 'react-native-permissions'; import { checkLocationPermissionStatus, + checkLocationService, requestLocationPermission, } from '../../../shared/location'; import {CameraCapturedPicture} from 'expo-camera'; @@ -40,14 +41,14 @@ import {BLEError} from '../types'; import Storage from '../../../shared/storage'; import {VCMetadata} from '../../../shared/VCMetadata'; import { - getStartEventData, getEndEventData, - sendStartEvent, - sendEndEvent, - sendImpressionEvent, - getImpressionEventData, - sendErrorEvent, getErrorEventData, + getImpressionEventData, + getStartEventData, + sendEndEvent, + sendErrorEvent, + sendImpressionEvent, + sendStartEvent, } from '../../../shared/telemetry/TelemetryUtils'; import {TelemetryConstants} from '../../../shared/telemetry/TelemetryConstants'; @@ -307,7 +308,7 @@ export const scanMachine = always: [ { cond: 'uptoAndroid11', - target: '#scan.checkingLocationService', + target: '#scan.checkingLocationState', }, { target: '#scan.clearingConnection', @@ -337,7 +338,7 @@ export const scanMachine = always: [ { cond: 'uptoAndroid11', - target: '#scan.checkingLocationService', + target: '#scan.checkingLocationState', }, { target: '#scan.clearingConnection', @@ -678,9 +679,22 @@ export const scanMachine = }, }, }, - checkingLocationService: { - initial: 'checkingPermissionStatus', + checkingLocationState: { + initial: 'checkLocationService', states: { + checkLocationService: { + invoke: { + src: 'checkLocationStatus', + }, + on: { + LOCATION_ENABLED: { + target: 'checkingPermissionStatus', + }, + LOCATION_DISABLED: { + target: 'disabled', + }, + }, + }, checkingPermissionStatus: { invoke: { src: 'checkLocationPermission', @@ -717,6 +731,13 @@ export const scanMachine = }, }, }, + disabled: { + on: { + LOCATION_REQUEST: { + target: 'checkLocationService', + }, + }, + }, }, }, }, @@ -1096,6 +1117,12 @@ export const scanMachine = () => callback(model.events.LOCATION_DISABLED()), ); }, + checkLocationStatus: () => callback => { + return checkLocationService( + () => callback(model.events.LOCATION_ENABLED()), + () => callback(model.events.LOCATION_DISABLED()), + ); + }, startConnection: context => callback => { wallet.startConnection(context.openId4VpUri); diff --git a/machines/bleShare/scan/scanMachine.typegen.ts b/machines/bleShare/scan/scanMachine.typegen.ts index 08447ddf..e69de29b 100644 --- a/machines/bleShare/scan/scanMachine.typegen.ts +++ b/machines/bleShare/scan/scanMachine.typegen.ts @@ -1,236 +0,0 @@ -// This file was automatically generated. Edits will be overwritten - -export interface Typegen0 { - '@@xstate/typegen': true; - internalEvents: { - '': {type: ''}; - 'done.invoke.QrLogin': { - type: 'done.invoke.QrLogin'; - data: unknown; - __tip: 'See the XState TS docs to learn how to strongly type this.'; - }; - 'done.invoke.scan.checkStorage:invocation[0]': { - type: 'done.invoke.scan.checkStorage:invocation[0]'; - data: unknown; - __tip: 'See the XState TS docs to learn how to strongly type this.'; - }; - 'done.invoke.scan.reviewing.creatingVp:invocation[0]': { - type: 'done.invoke.scan.reviewing.creatingVp:invocation[0]'; - data: unknown; - __tip: 'See the XState TS docs to learn how to strongly type this.'; - }; - 'xstate.after(CONNECTION_TIMEOUT)#scan.connecting.inProgress': { - type: 'xstate.after(CONNECTION_TIMEOUT)#scan.connecting.inProgress'; - }; - 'xstate.after(DESTROY_TIMEOUT)#scan.clearingConnection': { - type: 'xstate.after(DESTROY_TIMEOUT)#scan.clearingConnection'; - }; - 'xstate.after(SHARING_TIMEOUT)#scan.reviewing.sendingVc.inProgress': { - type: 'xstate.after(SHARING_TIMEOUT)#scan.reviewing.sendingVc.inProgress'; - }; - 'xstate.init': {type: 'xstate.init'}; - 'xstate.stop': {type: 'xstate.stop'}; - }; - invokeSrcNameMap: { - checkBluetoothPermission: 'done.invoke.scan.checkBluetoothPermission.checking:invocation[0]'; - checkBluetoothState: - | 'done.invoke.scan.checkBluetoothState.checking:invocation[0]' - | 'done.invoke.scan.recheckBluetoothState.checking:invocation[0]'; - checkLocationPermission: 'done.invoke.scan.checkingLocationService.checkingPermissionStatus:invocation[0]'; - checkNearByDevicesPermission: 'done.invoke.scan.checkNearbyDevicesPermission.checking:invocation[0]'; - checkStorageAvailability: 'done.invoke.scan.checkStorage:invocation[0]'; - createVp: 'done.invoke.scan.reviewing.creatingVp:invocation[0]'; - disconnect: - | 'done.invoke.scan.clearingConnection:invocation[0]' - | 'done.invoke.scan.disconnectDevice:invocation[0]'; - monitorConnection: 'done.invoke.scan:invocation[0]'; - requestBluetooth: 'done.invoke.scan.checkBluetoothState.requesting:invocation[0]'; - requestNearByDevicesPermission: 'done.invoke.scan.checkNearbyDevicesPermission.requesting:invocation[0]'; - requestToEnableLocationPermission: 'done.invoke.scan.checkingLocationService.requestToEnableLocation:invocation[0]'; - sendVc: 'done.invoke.scan.reviewing.sendingVc:invocation[0]'; - startConnection: 'done.invoke.scan.connecting:invocation[0]'; - }; - missingImplementations: { - actions: never; - delays: never; - guards: never; - services: never; - }; - eventsCausingActions: { - clearCreatedVp: - | '' - | 'BLE_ERROR' - | 'DISCONNECT' - | 'DISMISS' - | 'RESET' - | 'SCREEN_BLUR' - | 'SCREEN_FOCUS' - | 'xstate.stop'; - clearReason: - | '' - | 'BLE_ERROR' - | 'DISCONNECT' - | 'DISMISS' - | 'RESET' - | 'SCREEN_BLUR' - | 'SCREEN_FOCUS' - | 'xstate.stop'; - clearUri: - | 'DISCONNECT' - | 'DISMISS' - | 'xstate.after(DESTROY_TIMEOUT)#scan.clearingConnection'; - logFailedVerification: 'FACE_INVALID'; - logShared: 'VC_ACCEPTED'; - openAppPermission: 'GOTO_SETTINGS' | 'LOCATION_REQUEST'; - openBluetoothSettings: 'GOTO_SETTINGS'; - registerLoggers: - | 'DISCONNECT' - | 'DISMISS' - | 'xstate.after(DESTROY_TIMEOUT)#scan.clearingConnection'; - removeLoggers: - | 'DISCONNECT' - | 'DISMISS' - | 'SCREEN_BLUR' - | 'xstate.after(DESTROY_TIMEOUT)#scan.clearingConnection' - | 'xstate.init'; - resetShouldVerifyPresence: 'CANCEL' | 'CONNECTED' | 'DISMISS' | 'RETRY'; - sendScanData: 'SCAN'; - setBleError: 'BLE_ERROR'; - setChildRef: - | 'DISCONNECT' - | 'DISMISS' - | 'xstate.after(DESTROY_TIMEOUT)#scan.clearingConnection'; - setCreatedVp: 'done.invoke.scan.reviewing.creatingVp:invocation[0]'; - setLinkCode: 'SCAN'; - setPromptHint: 'CANCEL' | 'RETRY'; - setReadyForBluetoothStateCheck: 'BLUETOOTH_PERMISSION_ENABLED'; - setReason: 'UPDATE_REASON'; - setReceiverInfo: 'CONNECTED'; - setSelectedVc: 'SELECT_VC'; - setSenderInfo: 'CONNECTED'; - setShareLogTypeUnverified: 'ACCEPT_REQUEST'; - setShareLogTypeVerified: 'FACE_VALID'; - setStayInProgress: - | 'STAY_IN_PROGRESS' - | 'xstate.after(CONNECTION_TIMEOUT)#scan.connecting.inProgress' - | 'xstate.after(SHARING_TIMEOUT)#scan.reviewing.sendingVc.inProgress'; - setUri: 'SCAN'; - storeLoginItem: 'done.invoke.QrLogin'; - storingActivityLog: 'STORE_RESPONSE'; - toggleShouldVerifyPresence: 'TOGGLE_USER_CONSENT'; - }; - eventsCausingDelays: { - CONNECTION_TIMEOUT: 'SCAN'; - DESTROY_TIMEOUT: '' | 'DISMISS' | 'LOCATION_ENABLED'; - SHARING_TIMEOUT: - | 'ACCEPT_REQUEST' - | 'FACE_VALID' - | 'done.invoke.scan.reviewing.creatingVp:invocation[0]'; - }; - eventsCausingGuards: { - isIOS: 'BLUETOOTH_STATE_DISABLED' | 'START_PERMISSION_CHECK'; - isMinimumStorageRequiredForAuditEntryReached: 'done.invoke.scan.checkStorage:invocation[0]'; - isOpenIdQr: 'SCAN'; - isQrLogin: 'SCAN'; - uptoAndroid11: '' | 'START_PERMISSION_CHECK'; - }; - eventsCausingServices: { - QrLogin: 'SCAN'; - checkBluetoothPermission: - | '' - | 'BLUETOOTH_STATE_DISABLED' - | 'NEARBY_ENABLED' - | 'START_PERMISSION_CHECK'; - checkBluetoothState: '' | 'APP_ACTIVE'; - checkLocationPermission: '' | 'APP_ACTIVE'; - checkNearByDevicesPermission: 'APP_ACTIVE' | 'START_PERMISSION_CHECK'; - checkStorageAvailability: 'RESET' | 'SCREEN_FOCUS'; - createVp: never; - disconnect: '' | 'DISMISS' | 'LOCATION_ENABLED' | 'SCREEN_BLUR'; - monitorConnection: 'DISMISS' | 'SCREEN_BLUR' | 'xstate.init'; - requestBluetooth: 'BLUETOOTH_STATE_DISABLED'; - requestNearByDevicesPermission: 'NEARBY_DISABLED'; - requestToEnableLocationPermission: 'LOCATION_DISABLED'; - sendVc: - | 'ACCEPT_REQUEST' - | 'FACE_VALID' - | 'done.invoke.scan.reviewing.creatingVp:invocation[0]'; - startConnection: 'SCAN'; - }; - matchesStates: - | 'bluetoothDenied' - | 'bluetoothPermissionDenied' - | 'checkBluetoothPermission' - | 'checkBluetoothPermission.checking' - | 'checkBluetoothPermission.enabled' - | 'checkBluetoothState' - | 'checkBluetoothState.checking' - | 'checkBluetoothState.enabled' - | 'checkBluetoothState.requesting' - | 'checkNearbyDevicesPermission' - | 'checkNearbyDevicesPermission.checking' - | 'checkNearbyDevicesPermission.enabled' - | 'checkNearbyDevicesPermission.requesting' - | 'checkStorage' - | 'checkingLocationService' - | 'checkingLocationService.checkingPermissionStatus' - | 'checkingLocationService.denied' - | 'checkingLocationService.requestToEnableLocation' - | 'clearingConnection' - | 'connecting' - | 'connecting.inProgress' - | 'connecting.timeout' - | 'disconnectDevice' - | 'disconnected' - | 'findingConnection' - | 'handlingBleError' - | 'inactive' - | 'invalid' - | 'nearByDevicesPermissionDenied' - | 'recheckBluetoothState' - | 'recheckBluetoothState.checking' - | 'recheckBluetoothState.enabled' - | 'restrictSharingVc' - | 'reviewing' - | 'reviewing.accepted' - | 'reviewing.cancelling' - | 'reviewing.creatingVp' - | 'reviewing.invalidIdentity' - | 'reviewing.navigatingToHome' - | 'reviewing.rejected' - | 'reviewing.selectingVc' - | 'reviewing.sendingVc' - | 'reviewing.sendingVc.inProgress' - | 'reviewing.sendingVc.sent' - | 'reviewing.sendingVc.timeout' - | 'reviewing.verifyingIdentity' - | 'showQrLogin' - | 'showQrLogin.idle' - | 'showQrLogin.navigatingToHistory' - | 'showQrLogin.storing' - | 'startPermissionCheck' - | { - checkBluetoothPermission?: 'checking' | 'enabled'; - checkBluetoothState?: 'checking' | 'enabled' | 'requesting'; - checkNearbyDevicesPermission?: 'checking' | 'enabled' | 'requesting'; - checkingLocationService?: - | 'checkingPermissionStatus' - | 'denied' - | 'requestToEnableLocation'; - connecting?: 'inProgress' | 'timeout'; - recheckBluetoothState?: 'checking' | 'enabled'; - reviewing?: - | 'accepted' - | 'cancelling' - | 'creatingVp' - | 'invalidIdentity' - | 'navigatingToHome' - | 'rejected' - | 'selectingVc' - | 'sendingVc' - | 'verifyingIdentity' - | {sendingVc?: 'inProgress' | 'sent' | 'timeout'}; - showQrLogin?: 'idle' | 'navigatingToHistory' | 'storing'; - }; - tags: never; -} diff --git a/package-lock.json b/package-lock.json index aa67ca42..88aa85b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,6 +48,7 @@ "react": "18.2.0", "react-i18next": "^11.16.6", "react-native": "0.71.8", + "react-native-android-location-services-dialog-box": "^2.8.2", "react-native-app-auth": "^7.0.0", "react-native-app-intro-slider": "^4.0.4", "react-native-argon2": "^2.0.1", @@ -25761,6 +25762,14 @@ "react": "18.2.0" } }, + "node_modules/react-native-android-location-services-dialog-box": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/react-native-android-location-services-dialog-box/-/react-native-android-location-services-dialog-box-2.8.2.tgz", + "integrity": "sha512-zBTi0xJQoF6GdImRhXOCXezYuALlPgbctqG3eOrZu63hdrlvTBhqATkb6DB5JM9kpcMbX1skMIOI3m71zKGsPA==", + "peerDependencies": { + "react-native": ">= 0.56.0" + } + }, "node_modules/react-native-app-auth": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/react-native-app-auth/-/react-native-app-auth-7.0.0.tgz", @@ -49740,6 +49749,12 @@ } } }, + "react-native-android-location-services-dialog-box": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/react-native-android-location-services-dialog-box/-/react-native-android-location-services-dialog-box-2.8.2.tgz", + "integrity": "sha512-zBTi0xJQoF6GdImRhXOCXezYuALlPgbctqG3eOrZu63hdrlvTBhqATkb6DB5JM9kpcMbX1skMIOI3m71zKGsPA==", + "requires": {} + }, "react-native-app-auth": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/react-native-app-auth/-/react-native-app-auth-7.0.0.tgz", diff --git a/package.json b/package.json index c89e9029..57c5331f 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "react": "18.2.0", "react-i18next": "^11.16.6", "react-native": "0.71.8", + "react-native-android-location-services-dialog-box": "^2.8.2", "react-native-app-auth": "^7.0.0", "react-native-app-intro-slider": "^4.0.4", "react-native-argon2": "^2.0.1", @@ -82,7 +83,7 @@ "react-native-vector-icons": "^10.0.0", "short-unique-id": "^4.4.4", "simple-pem2jwk": "^0.2.4", - "telemetry-sdk": "git://github.com/mosip/sunbird-telemetry-sdk.git#f762be5732ee552c0c70bdd540aa4e2701554c71", + "telemetry-sdk": "git://github.com/mosip/sunbird-telemetry-sdk.git#f762be5732ee552c0c70bdd540aa4e2701554c71", "xstate": "^4.35.0" }, "devDependencies": { diff --git a/shared/location.ts b/shared/location.ts index fb3b8090..7b8941a3 100644 --- a/shared/location.ts +++ b/shared/location.ts @@ -1,5 +1,6 @@ import RNLocation from 'react-native-location'; - +import LocationServicesDialogBox from 'react-native-android-location-services-dialog-box'; +import i18n from '../i18n'; // Initialize RNLocation RNLocation.configure({ distanceFilter: 5.0, // Example configuration, adjust as needed @@ -7,26 +8,26 @@ RNLocation.configure({ export function checkLocationPermissionStatus( onEnabled: () => void, - onDisabled: () => void + onDisabled: () => void, ) { RNLocation.checkPermission({ android: { detail: 'fine', }, }) - .then((granted) => { + .then(granted => { if (granted) { return onEnabled(); } else { return onDisabled(); } }) - .catch((err) => console.log('Error getting location:', err)); + .catch(err => console.log('Error getting location:', err)); } export async function requestLocationPermission( onEnabled: () => void, - onDisabled: () => void + onDisabled: () => void, ) { try { const granted = await RNLocation.requestPermission({ @@ -43,3 +44,26 @@ export async function requestLocationPermission( console.log(error); } } + +export async function checkLocationService( + onEnabled: () => void, + onDisabled: () => void, +) { + try { + const config = { + message: i18n.t('ScanScreen:errors:locationDisabled:message'), + ok: i18n.t('common:ok'), + cancel: i18n.t('common:dismiss'), + enableHighAccuracy: true, // true => GPS AND NETWORK PROVIDER, false => GPS OR NETWORK PROVIDER + showDialog: true, // false => Opens the Location access page directly + openLocationServices: true, // false => Directly catch method is called if location services are turned off + preventOutSideTouch: false, //true => To prevent the location services popup from closing when it is clicked outside + preventBackClick: false, //true => To prevent the location services popup from closing when it is clicked back button + providerListener: true, // true ==> Trigger "locationProviderStatusChange" listener when the location state changes + }; + await LocationServicesDialogBox.checkLocationServicesIsEnabled(config); + onEnabled(); + } catch (e) { + onDisabled(); + } +}