react-native-okhi 1.0.13-beta.13 → 1.0.13-beta.14
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/lib/commonjs/OkCore/Helpers.js +102 -32
- package/lib/commonjs/OkCore/Helpers.js.map +1 -1
- package/lib/module/OkCore/Helpers.js +102 -33
- package/lib/module/OkCore/Helpers.js.map +1 -1
- package/lib/typescript/OkCore/Helpers.d.ts +3 -0
- package/lib/typescript/OkCore/types.d.ts +2 -2
- package/package.json +1 -1
- package/src/OkCore/Helpers.ts +132 -44
- package/src/OkCore/types.ts +3 -1
|
@@ -11,6 +11,8 @@ var _reactNative = require("react-native");
|
|
|
11
11
|
|
|
12
12
|
var _helpers = require("./_helpers");
|
|
13
13
|
|
|
14
|
+
var _OkHiException = require("./OkHiException");
|
|
15
|
+
|
|
14
16
|
/**
|
|
15
17
|
* Checks whether location services are enabled
|
|
16
18
|
* @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the service is available
|
|
@@ -158,46 +160,114 @@ const getSystemVersion = () => (0, _helpers.isValidPlatform)(_OkHiNativeModule.O
|
|
|
158
160
|
exports.getSystemVersion = getSystemVersion;
|
|
159
161
|
|
|
160
162
|
const request = (locationPermissionType, rationale, callback) => {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
+
const serviceError = new _OkHiException.OkHiException({
|
|
164
|
+
code: _OkHiException.OkHiException.SERVICE_UNAVAILABLE_CODE,
|
|
165
|
+
message: 'Location service is currently not available. Please enable in app settings'
|
|
166
|
+
});
|
|
167
|
+
const googlePlayError = new _OkHiException.OkHiException({
|
|
168
|
+
code: _OkHiException.OkHiException.SERVICE_UNAVAILABLE_CODE,
|
|
169
|
+
message: 'Google Play Services is currently unavailable. Please enable in settings'
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
const handleError = error => {
|
|
173
|
+
callback(null, error);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const handleGooglePlayServiceRequest = () => {
|
|
177
|
+
requestEnableGooglePlayServices().then(googlePlayStatus => {
|
|
178
|
+
if (!googlePlayStatus) {
|
|
179
|
+
handleError(googlePlayError);
|
|
180
|
+
} else {
|
|
181
|
+
handleRationaleRequest();
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const handleRationaleAlert = alertRationale => {
|
|
187
|
+
return new Promise((resolve, _) => {
|
|
188
|
+
_reactNative.Alert.alert(alertRationale.title, alertRationale.text, [{
|
|
189
|
+
text: alertRationale.grantButton ? alertRationale.grantButton.label : 'Grant',
|
|
190
|
+
onPress: () => {
|
|
191
|
+
resolve(true);
|
|
192
|
+
}
|
|
193
|
+
}, {
|
|
194
|
+
text: alertRationale.denyButton ? alertRationale.denyButton.label : 'Deny',
|
|
195
|
+
onPress: () => {
|
|
196
|
+
resolve(false);
|
|
197
|
+
},
|
|
198
|
+
style: 'cancel'
|
|
199
|
+
}], {
|
|
200
|
+
onDismiss: () => {
|
|
201
|
+
resolve(false);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
};
|
|
163
206
|
|
|
164
|
-
|
|
207
|
+
const handlePermissionRequest = () => {
|
|
208
|
+
if (_reactNative.Platform.OS === 'ios') {
|
|
209
|
+
_OkHiNativeModule.OkHiNativeEvents.removeAllListeners('onLocationPermissionStatusUpdate');
|
|
165
210
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
211
|
+
_OkHiNativeModule.OkHiNativeEvents.addListener('onLocationPermissionStatusUpdate', permissionUpdate => {
|
|
212
|
+
callback(permissionUpdate, null);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
if (locationPermissionType === 'whenInUse') {
|
|
216
|
+
_OkHiNativeModule.OkHiNativeModule.requestLocationPermission();
|
|
217
|
+
} else {
|
|
218
|
+
_OkHiNativeModule.OkHiNativeModule.requestBackgroundLocationPermission();
|
|
219
|
+
}
|
|
174
220
|
} else {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
if (
|
|
180
|
-
|
|
181
|
-
text: rationale.successButton ? rationale.successButton.label : 'Okay',
|
|
182
|
-
onPress: async () => {
|
|
183
|
-
const result = await requestBackgroundLocationPermission();
|
|
184
|
-
callback(result ? 'authorizedAlways' : 'authorizedWhenInUse');
|
|
185
|
-
}
|
|
186
|
-
}], {
|
|
187
|
-
onDismiss: () => {
|
|
188
|
-
callback('authorizedWhenInUse');
|
|
189
|
-
}
|
|
190
|
-
});
|
|
221
|
+
if (locationPermissionType === 'whenInUse') {
|
|
222
|
+
requestLocationPermissionAndroid().then(whenInUseResult => callback(whenInUseResult ? 'authorizedWhenInUse' : 'denied', null));
|
|
223
|
+
} else {
|
|
224
|
+
requestLocationPermissionAndroid().then(initialWhenInUseResult => {
|
|
225
|
+
if (!initialWhenInUseResult) {
|
|
226
|
+
callback('denied', null);
|
|
191
227
|
} else {
|
|
192
|
-
|
|
193
|
-
|
|
228
|
+
callback('authorizedWhenInUse', null);
|
|
229
|
+
requestBackgroundLocationPermission().then(alwaysResult => {
|
|
230
|
+
callback(alwaysResult ? 'authorizedAlways' : 'authorizedWhenInUse', null);
|
|
231
|
+
});
|
|
194
232
|
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
const handleRationaleRequest = async () => {
|
|
239
|
+
if (rationale) {
|
|
240
|
+
const result = await handleRationaleAlert(rationale);
|
|
241
|
+
|
|
242
|
+
if (!result) {
|
|
243
|
+
callback('rationaleDissmissed', null);
|
|
244
|
+
} else {
|
|
245
|
+
handlePermissionRequest();
|
|
246
|
+
}
|
|
247
|
+
} else {
|
|
248
|
+
handlePermissionRequest();
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
isLocationServicesEnabled().then(serviceStatus => {
|
|
253
|
+
if (!serviceStatus && _reactNative.Platform.OS === 'ios') {
|
|
254
|
+
handleError(serviceError);
|
|
255
|
+
} else if (!serviceStatus && _reactNative.Platform.OS === 'android') {
|
|
256
|
+
requestEnableLocationServices().then(enableResult => {
|
|
257
|
+
if (!enableResult) {
|
|
258
|
+
handleError(serviceError);
|
|
195
259
|
} else {
|
|
196
|
-
|
|
260
|
+
handleGooglePlayServiceRequest();
|
|
197
261
|
}
|
|
198
|
-
});
|
|
262
|
+
}).catch(handleError);
|
|
263
|
+
} else {
|
|
264
|
+
if (_reactNative.Platform.OS === 'ios') {
|
|
265
|
+
handleRationaleRequest();
|
|
266
|
+
} else {
|
|
267
|
+
handleGooglePlayServiceRequest();
|
|
268
|
+
}
|
|
199
269
|
}
|
|
200
|
-
}
|
|
270
|
+
}).catch(handleError);
|
|
201
271
|
};
|
|
202
272
|
|
|
203
273
|
exports.request = request;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Helpers.ts"],"names":["isLocationServicesEnabled","OkHiNativeModule","isLocationPermissionGranted","isBackgroundLocationPermissionGrantedAndroid","sdkVersion","getSystemVersion","hasPermission","PermissionsAndroid","check","PERMISSIONS","ACCESS_BACKGROUND_LOCATION","isBackgroundLocationPermissionGrantedIOS","isBackgroundLocationPermissionGranted","fn","Platform","OS","requestLocationPermissionAndroid","status","requestMultiple","ACCESS_FINE_LOCATION","ACCESS_COARSE_LOCATION","requestLocationPermissionIOS","requestLocationPermission","isGranted","requestBackgroundLocationPermissionAndroid","permissions","requestBackgroundLocationPermissionIOS","requestBackgroundLocationPermission","requestEnableLocationServices","isGooglePlayServicesAvailable","requestEnableGooglePlayServices","request","locationPermissionType","rationale","callback","OkHiNativeEvents","removeAllListeners","addListener","then","result","whenInUseResult","version","Alert","alert","title","text","successButton","label","onPress","onDismiss","permission","openAppSettings","retriveLocationPermissionStatus","alwaysPerm","whenInUsePerm"],"mappings":"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","sourcesContent":["import { OkHiNativeModule, OkHiNativeEvents } from '../OkHiNativeModule';\nimport { Alert, PermissionsAndroid, Platform } from 'react-native';\nimport { errorHandler, isValidPlatform } from './_helpers';\nimport type {\n LocationPermissionCallback,\n LocationPermissionStatus,\n LocationRequestPermissionType,\n} from './types';\n\n/**\n * Checks whether location services are enabled\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the service is available\n */\nexport const isLocationServicesEnabled = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationServicesEnabled);\n};\n\n/**\n * Checks whether when in use location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isLocationPermissionGranted = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationPermissionGranted);\n};\n\nconst isBackgroundLocationPermissionGrantedAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) {\n return true;\n }\n if (sdkVersion < 29) {\n return await isLocationPermissionGranted();\n }\n const hasPermission = await PermissionsAndroid.check(\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION\n );\n return hasPermission;\n };\n\nconst isBackgroundLocationPermissionGrantedIOS = (): Promise<boolean> => {\n return OkHiNativeModule.isBackgroundLocationPermissionGranted();\n};\n\n/**\n * Checks whether background location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isBackgroundLocationPermissionGranted = (): Promise<boolean> => {\n const fn =\n Platform.OS === 'android'\n ? isBackgroundLocationPermissionGrantedAndroid\n : isBackgroundLocationPermissionGrantedIOS;\n return isValidPlatform(fn);\n};\n\nconst requestLocationPermissionAndroid = async (): Promise<boolean> => {\n const status: any = await PermissionsAndroid.requestMultiple([\n PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,\n PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,\n ]);\n return status['android.permission.ACCESS_FINE_LOCATION'] === 'granted';\n};\n\nconst requestLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestLocationPermission();\n};\n\n/**\n * Requests for when in use location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestLocationPermission = async (): Promise<boolean> => {\n const isGranted = await isLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestLocationPermissionAndroid\n : requestLocationPermissionIOS\n );\n};\n\nconst requestBackgroundLocationPermissionAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) return true;\n if (sdkVersion >= 29) {\n const permissions: any = [\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION,\n ];\n const status: any = await PermissionsAndroid.requestMultiple(permissions);\n return (\n status['android.permission.ACCESS_BACKGROUND_LOCATION'] === 'granted'\n );\n } else {\n return await requestLocationPermissionAndroid();\n }\n };\n\nconst requestBackgroundLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestBackgroundLocationPermission();\n};\n\n/**\n * Requests for background location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestBackgroundLocationPermission =\n async (): Promise<boolean> => {\n const isGranted = await isBackgroundLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestBackgroundLocationPermissionAndroid\n : requestBackgroundLocationPermissionIOS\n );\n };\n\n/**\n * Requests the user to enable location services by showing an in app modal on android and opening location settings on iOS\n * @returns {Promise<boolean>} A promise that resolves to either a boolean value on android or null on iOS\n */\nexport const requestEnableLocationServices = (): Promise<boolean | null> => {\n return isValidPlatform(OkHiNativeModule.requestEnableLocationServices);\n};\n\n/**\n * Android Only - Checks if Google Play Services is available\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const isGooglePlayServicesAvailable = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.isGooglePlayServicesAvailable,\n 'android'\n );\n};\n\n/**\n * Android Only - Requests user to enable Google Play Services\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const requestEnableGooglePlayServices = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.requestEnableGooglePlayServices,\n 'android'\n );\n};\n\n/**\n * Returns the system version of the current platform\n * @returns {Promise<boolean>} A promise that resolves either a string on iOS or number on Android\n */\nexport const getSystemVersion = (): Promise<string | number> =>\n isValidPlatform(OkHiNativeModule.getSystemVersion);\n\nexport const request = (\n locationPermissionType: LocationRequestPermissionType,\n rationale: {\n title: string;\n text: string;\n successButton?: { label: string };\n } | null,\n callback: LocationPermissionCallback\n) => {\n if (Platform.OS === 'ios') {\n OkHiNativeEvents.removeAllListeners('onLocationPermissionStatusUpdate');\n OkHiNativeEvents.addListener('onLocationPermissionStatusUpdate', callback);\n if (locationPermissionType === 'whenInUse') {\n OkHiNativeModule.requestLocationPermission();\n } else {\n OkHiNativeModule.requestBackgroundLocationPermission();\n }\n } else {\n if (locationPermissionType === 'whenInUse') {\n requestLocationPermissionAndroid().then((result) =>\n callback(result ? 'authorizedWhenInUse' : 'denied')\n );\n } else {\n requestLocationPermissionAndroid().then(async (whenInUseResult) => {\n if (whenInUseResult) {\n const version = await getSystemVersion();\n if (version >= 30 && rationale) {\n Alert.alert(\n rationale.title,\n rationale.text,\n [\n {\n text: rationale.successButton\n ? rationale.successButton.label\n : 'Okay',\n onPress: async () => {\n const result = await requestBackgroundLocationPermission();\n callback(\n result ? 'authorizedAlways' : 'authorizedWhenInUse'\n );\n },\n },\n ],\n {\n onDismiss: () => {\n callback('authorizedWhenInUse');\n },\n }\n );\n } else {\n const permission = await requestBackgroundLocationPermission();\n callback(permission ? 'authorizedAlways' : 'authorizedWhenInUse');\n }\n } else {\n callback('denied');\n }\n });\n }\n }\n};\n\nexport const openAppSettings = () => {\n OkHiNativeModule.openAppSettings();\n};\n\nexport const retriveLocationPermissionStatus =\n async (): Promise<LocationPermissionStatus> => {\n if (Platform.OS === 'ios') {\n return OkHiNativeModule.retriveLocationPermissionStatus() as Promise<LocationPermissionStatus>;\n }\n const alwaysPerm = await isBackgroundLocationPermissionGranted();\n if (alwaysPerm) {\n return 'authorizedAlways';\n }\n const whenInUsePerm = await isLocationPermissionGranted();\n return whenInUsePerm ? 'authorizedWhenInUse' : 'denied';\n };\n"]}
|
|
1
|
+
{"version":3,"sources":["Helpers.ts"],"names":["isLocationServicesEnabled","OkHiNativeModule","isLocationPermissionGranted","isBackgroundLocationPermissionGrantedAndroid","sdkVersion","getSystemVersion","hasPermission","PermissionsAndroid","check","PERMISSIONS","ACCESS_BACKGROUND_LOCATION","isBackgroundLocationPermissionGrantedIOS","isBackgroundLocationPermissionGranted","fn","Platform","OS","requestLocationPermissionAndroid","status","requestMultiple","ACCESS_FINE_LOCATION","ACCESS_COARSE_LOCATION","requestLocationPermissionIOS","requestLocationPermission","isGranted","requestBackgroundLocationPermissionAndroid","permissions","requestBackgroundLocationPermissionIOS","requestBackgroundLocationPermission","requestEnableLocationServices","isGooglePlayServicesAvailable","requestEnableGooglePlayServices","request","locationPermissionType","rationale","callback","serviceError","OkHiException","code","SERVICE_UNAVAILABLE_CODE","message","googlePlayError","handleError","error","handleGooglePlayServiceRequest","then","googlePlayStatus","handleRationaleRequest","handleRationaleAlert","alertRationale","Promise","resolve","_","Alert","alert","title","text","grantButton","label","onPress","denyButton","style","onDismiss","handlePermissionRequest","OkHiNativeEvents","removeAllListeners","addListener","permissionUpdate","whenInUseResult","initialWhenInUseResult","alwaysResult","result","serviceStatus","enableResult","catch","openAppSettings","retriveLocationPermissionStatus","alwaysPerm","whenInUsePerm"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAMA;;AAEA;AACA;AACA;AACA;AACO,MAAMA,yBAAyB,GAAG,MAAwB;AAC/D,SAAO,8BAAgBC,mCAAiBD,yBAAjC,CAAP;AACD,CAFM;AAIP;AACA;AACA;AACA;;;;;AACO,MAAME,2BAA2B,GAAG,MAAwB;AACjE,SAAO,8BAAgBD,mCAAiBC,2BAAjC,CAAP;AACD,CAFM;;;;AAIP,MAAMC,4CAA4C,GAChD,YAA8B;AAC5B,QAAMC,UAAU,GAAG,MAAMH,mCAAiBI,gBAAjB,EAAzB;;AACA,MAAID,UAAU,GAAG,EAAjB,EAAqB;AACnB,WAAO,IAAP;AACD;;AACD,MAAIA,UAAU,GAAG,EAAjB,EAAqB;AACnB,WAAO,MAAMF,2BAA2B,EAAxC;AACD;;AACD,QAAMI,aAAa,GAAG,MAAMC,gCAAmBC,KAAnB,CAC1BD,gCAAmBE,WAAnB,CAA+BC,0BADL,CAA5B;AAGA,SAAOJ,aAAP;AACD,CAbH;;AAeA,MAAMK,wCAAwC,GAAG,MAAwB;AACvE,SAAOV,mCAAiBW,qCAAjB,EAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;;;AACO,MAAMA,qCAAqC,GAAG,MAAwB;AAC3E,QAAMC,EAAE,GACNC,sBAASC,EAAT,KAAgB,SAAhB,GACIZ,4CADJ,GAEIQ,wCAHN;AAIA,SAAO,8BAAgBE,EAAhB,CAAP;AACD,CANM;;;;AAQP,MAAMG,gCAAgC,GAAG,YAA8B;AACrE,QAAMC,MAAW,GAAG,MAAMV,gCAAmBW,eAAnB,CAAmC,CAC3DX,gCAAmBE,WAAnB,CAA+BU,oBAD4B,EAE3DZ,gCAAmBE,WAAnB,CAA+BW,sBAF4B,CAAnC,CAA1B;AAIA,SAAOH,MAAM,CAAC,yCAAD,CAAN,KAAsD,SAA7D;AACD,CAND;;AAQA,MAAMI,4BAA4B,GAAG,MAAwB;AAC3D,SAAOpB,mCAAiBqB,yBAAjB,EAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;;;AACO,MAAMA,yBAAyB,GAAG,YAA8B;AACrE,QAAMC,SAAS,GAAG,MAAMrB,2BAA2B,EAAnD;AACA,MAAIqB,SAAJ,EAAe,OAAOA,SAAP;AACf,SAAO,2BACLT,sBAASC,EAAT,KAAgB,SAAhB,GACIC,gCADJ,GAEIK,4BAHC,CAAP;AAKD,CARM;;;;AAUP,MAAMG,0CAA0C,GAC9C,YAA8B;AAC5B,QAAMpB,UAAU,GAAG,MAAMH,mCAAiBI,gBAAjB,EAAzB;AACA,MAAID,UAAU,GAAG,EAAjB,EAAqB,OAAO,IAAP;;AACrB,MAAIA,UAAU,IAAI,EAAlB,EAAsB;AACpB,UAAMqB,WAAgB,GAAG,CACvBlB,gCAAmBE,WAAnB,CAA+BC,0BADR,CAAzB;AAGA,UAAMO,MAAW,GAAG,MAAMV,gCAAmBW,eAAnB,CAAmCO,WAAnC,CAA1B;AACA,WACER,MAAM,CAAC,+CAAD,CAAN,KAA4D,SAD9D;AAGD,GARD,MAQO;AACL,WAAO,MAAMD,gCAAgC,EAA7C;AACD;AACF,CAfH;;AAiBA,MAAMU,sCAAsC,GAAG,MAAwB;AACrE,SAAOzB,mCAAiB0B,mCAAjB,EAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;;;AACO,MAAMA,mCAAmC,GAC9C,YAA8B;AAC5B,QAAMJ,SAAS,GAAG,MAAMX,qCAAqC,EAA7D;AACA,MAAIW,SAAJ,EAAe,OAAOA,SAAP;AACf,SAAO,2BACLT,sBAASC,EAAT,KAAgB,SAAhB,GACIS,0CADJ,GAEIE,sCAHC,CAAP;AAKD,CATI;AAWP;AACA;AACA;AACA;;;;;AACO,MAAME,6BAA6B,GAAG,MAA+B;AAC1E,SAAO,8BAAgB3B,mCAAiB2B,6BAAjC,CAAP;AACD,CAFM;AAIP;AACA;AACA;AACA;;;;;AACO,MAAMC,6BAA6B,GAAG,MAAwB;AACnE,SAAO,8BACL5B,mCAAiB4B,6BADZ,EAEL,SAFK,CAAP;AAID,CALM;AAOP;AACA;AACA;AACA;;;;;AACO,MAAMC,+BAA+B,GAAG,MAAwB;AACrE,SAAO,8BACL7B,mCAAiB6B,+BADZ,EAEL,SAFK,CAAP;AAID,CALM;AAOP;AACA;AACA;AACA;;;;;AACO,MAAMzB,gBAAgB,GAAG,MAC9B,8BAAgBJ,mCAAiBI,gBAAjC,CADK;;;;AAGA,MAAM0B,OAAO,GAAG,CACrBC,sBADqB,EAErBC,SAFqB,EAQrBC,QARqB,KASlB;AACH,QAAMC,YAAY,GAAG,IAAIC,4BAAJ,CAAkB;AACrCC,IAAAA,IAAI,EAAED,6BAAcE,wBADiB;AAErCC,IAAAA,OAAO,EACL;AAHmC,GAAlB,CAArB;AAMA,QAAMC,eAAe,GAAG,IAAIJ,4BAAJ,CAAkB;AACxCC,IAAAA,IAAI,EAAED,6BAAcE,wBADoB;AAExCC,IAAAA,OAAO,EACL;AAHsC,GAAlB,CAAxB;;AAMA,QAAME,WAAW,GAAIC,KAAD,IAA0B;AAC5CR,IAAAA,QAAQ,CAAC,IAAD,EAAOQ,KAAP,CAAR;AACD,GAFD;;AAIA,QAAMC,8BAA8B,GAAG,MAAM;AAC3Cb,IAAAA,+BAA+B,GAAGc,IAAlC,CAAwCC,gBAAD,IAAsB;AAC3D,UAAI,CAACA,gBAAL,EAAuB;AACrBJ,QAAAA,WAAW,CAACD,eAAD,CAAX;AACD,OAFD,MAEO;AACLM,QAAAA,sBAAsB;AACvB;AACF,KAND;AAOD,GARD;;AAUA,QAAMC,oBAAoB,GAAIC,cAAD,IAKvB;AACJ,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,CAAV,KAAgB;AACjCC,yBAAMC,KAAN,CACEL,cAAc,CAACM,KADjB,EAEEN,cAAc,CAACO,IAFjB,EAGE,CACE;AACEA,QAAAA,IAAI,EAAEP,cAAc,CAACQ,WAAf,GACFR,cAAc,CAACQ,WAAf,CAA2BC,KADzB,GAEF,OAHN;AAIEC,QAAAA,OAAO,EAAE,MAAM;AACbR,UAAAA,OAAO,CAAC,IAAD,CAAP;AACD;AANH,OADF,EASE;AACEK,QAAAA,IAAI,EAAEP,cAAc,CAACW,UAAf,GACFX,cAAc,CAACW,UAAf,CAA0BF,KADxB,GAEF,MAHN;AAIEC,QAAAA,OAAO,EAAE,MAAM;AACbR,UAAAA,OAAO,CAAC,KAAD,CAAP;AACD,SANH;AAOEU,QAAAA,KAAK,EAAE;AAPT,OATF,CAHF,EAsBE;AACEC,QAAAA,SAAS,EAAE,MAAM;AACfX,UAAAA,OAAO,CAAC,KAAD,CAAP;AACD;AAHH,OAtBF;AA4BD,KA7BM,CAAP;AA8BD,GApCD;;AAsCA,QAAMY,uBAAuB,GAAG,MAAM;AACpC,QAAIhD,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzBgD,yCAAiBC,kBAAjB,CAAoC,kCAApC;;AACAD,yCAAiBE,WAAjB,CACE,kCADF,EAEGC,gBAAD,IAAsB;AACpBhC,QAAAA,QAAQ,CAACgC,gBAAD,EAAmB,IAAnB,CAAR;AACD,OAJH;;AAMA,UAAIlC,sBAAsB,KAAK,WAA/B,EAA4C;AAC1C/B,2CAAiBqB,yBAAjB;AACD,OAFD,MAEO;AACLrB,2CAAiB0B,mCAAjB;AACD;AACF,KAbD,MAaO;AACL,UAAIK,sBAAsB,KAAK,WAA/B,EAA4C;AAC1ChB,QAAAA,gCAAgC,GAAG4B,IAAnC,CAAyCuB,eAAD,IACtCjC,QAAQ,CAACiC,eAAe,GAAG,qBAAH,GAA2B,QAA3C,EAAqD,IAArD,CADV;AAGD,OAJD,MAIO;AACLnD,QAAAA,gCAAgC,GAAG4B,IAAnC,CAAyCwB,sBAAD,IAA4B;AAClE,cAAI,CAACA,sBAAL,EAA6B;AAC3BlC,YAAAA,QAAQ,CAAC,QAAD,EAAW,IAAX,CAAR;AACD,WAFD,MAEO;AACLA,YAAAA,QAAQ,CAAC,qBAAD,EAAwB,IAAxB,CAAR;AACAP,YAAAA,mCAAmC,GAAGiB,IAAtC,CAA4CyB,YAAD,IAAkB;AAC3DnC,cAAAA,QAAQ,CACNmC,YAAY,GAAG,kBAAH,GAAwB,qBAD9B,EAEN,IAFM,CAAR;AAID,aALD;AAMD;AACF,SAZD;AAaD;AACF;AACF,GAnCD;;AAoCA,QAAMvB,sBAAsB,GAAG,YAAY;AACzC,QAAIb,SAAJ,EAAe;AACb,YAAMqC,MAAM,GAAG,MAAMvB,oBAAoB,CAACd,SAAD,CAAzC;;AACA,UAAI,CAACqC,MAAL,EAAa;AACXpC,QAAAA,QAAQ,CAAC,qBAAD,EAAwB,IAAxB,CAAR;AACD,OAFD,MAEO;AACL4B,QAAAA,uBAAuB;AACxB;AACF,KAPD,MAOO;AACLA,MAAAA,uBAAuB;AACxB;AACF,GAXD;;AAaA9D,EAAAA,yBAAyB,GACtB4C,IADH,CACS2B,aAAD,IAAmB;AACvB,QAAI,CAACA,aAAD,IAAkBzD,sBAASC,EAAT,KAAgB,KAAtC,EAA6C;AAC3C0B,MAAAA,WAAW,CAACN,YAAD,CAAX;AACD,KAFD,MAEO,IAAI,CAACoC,aAAD,IAAkBzD,sBAASC,EAAT,KAAgB,SAAtC,EAAiD;AACtDa,MAAAA,6BAA6B,GAC1BgB,IADH,CACS4B,YAAD,IAAkB;AACtB,YAAI,CAACA,YAAL,EAAmB;AACjB/B,UAAAA,WAAW,CAACN,YAAD,CAAX;AACD,SAFD,MAEO;AACLQ,UAAAA,8BAA8B;AAC/B;AACF,OAPH,EAQG8B,KARH,CAQShC,WART;AASD,KAVM,MAUA;AACL,UAAI3B,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzB+B,QAAAA,sBAAsB;AACvB,OAFD,MAEO;AACLH,QAAAA,8BAA8B;AAC/B;AACF;AACF,GArBH,EAsBG8B,KAtBH,CAsBShC,WAtBT;AAuBD,CAlJM;;;;AAoJA,MAAMiC,eAAe,GAAG,MAAM;AACnCzE,qCAAiByE,eAAjB;AACD,CAFM;;;;AAIA,MAAMC,+BAA+B,GAC1C,YAA+C;AAC7C,MAAI7D,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzB,WAAOd,mCAAiB0E,+BAAjB,EAAP;AACD;;AACD,QAAMC,UAAU,GAAG,MAAMhE,qCAAqC,EAA9D;;AACA,MAAIgE,UAAJ,EAAgB;AACd,WAAO,kBAAP;AACD;;AACD,QAAMC,aAAa,GAAG,MAAM3E,2BAA2B,EAAvD;AACA,SAAO2E,aAAa,GAAG,qBAAH,GAA2B,QAA/C;AACD,CAXI","sourcesContent":["import { OkHiNativeModule, OkHiNativeEvents } from '../OkHiNativeModule';\nimport { Alert, PermissionsAndroid, Platform } from 'react-native';\nimport { errorHandler, isValidPlatform } from './_helpers';\nimport type {\n LocationPermissionCallback,\n LocationPermissionStatus,\n LocationRequestPermissionType,\n} from './types';\nimport { OkHiException } from './OkHiException';\n\n/**\n * Checks whether location services are enabled\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the service is available\n */\nexport const isLocationServicesEnabled = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationServicesEnabled);\n};\n\n/**\n * Checks whether when in use location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isLocationPermissionGranted = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationPermissionGranted);\n};\n\nconst isBackgroundLocationPermissionGrantedAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) {\n return true;\n }\n if (sdkVersion < 29) {\n return await isLocationPermissionGranted();\n }\n const hasPermission = await PermissionsAndroid.check(\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION\n );\n return hasPermission;\n };\n\nconst isBackgroundLocationPermissionGrantedIOS = (): Promise<boolean> => {\n return OkHiNativeModule.isBackgroundLocationPermissionGranted();\n};\n\n/**\n * Checks whether background location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isBackgroundLocationPermissionGranted = (): Promise<boolean> => {\n const fn =\n Platform.OS === 'android'\n ? isBackgroundLocationPermissionGrantedAndroid\n : isBackgroundLocationPermissionGrantedIOS;\n return isValidPlatform(fn);\n};\n\nconst requestLocationPermissionAndroid = async (): Promise<boolean> => {\n const status: any = await PermissionsAndroid.requestMultiple([\n PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,\n PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,\n ]);\n return status['android.permission.ACCESS_FINE_LOCATION'] === 'granted';\n};\n\nconst requestLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestLocationPermission();\n};\n\n/**\n * Requests for when in use location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestLocationPermission = async (): Promise<boolean> => {\n const isGranted = await isLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestLocationPermissionAndroid\n : requestLocationPermissionIOS\n );\n};\n\nconst requestBackgroundLocationPermissionAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) return true;\n if (sdkVersion >= 29) {\n const permissions: any = [\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION,\n ];\n const status: any = await PermissionsAndroid.requestMultiple(permissions);\n return (\n status['android.permission.ACCESS_BACKGROUND_LOCATION'] === 'granted'\n );\n } else {\n return await requestLocationPermissionAndroid();\n }\n };\n\nconst requestBackgroundLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestBackgroundLocationPermission();\n};\n\n/**\n * Requests for background location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestBackgroundLocationPermission =\n async (): Promise<boolean> => {\n const isGranted = await isBackgroundLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestBackgroundLocationPermissionAndroid\n : requestBackgroundLocationPermissionIOS\n );\n };\n\n/**\n * Requests the user to enable location services by showing an in app modal on android and opening location settings on iOS\n * @returns {Promise<boolean>} A promise that resolves to either a boolean value on android or null on iOS\n */\nexport const requestEnableLocationServices = (): Promise<boolean | null> => {\n return isValidPlatform(OkHiNativeModule.requestEnableLocationServices);\n};\n\n/**\n * Android Only - Checks if Google Play Services is available\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const isGooglePlayServicesAvailable = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.isGooglePlayServicesAvailable,\n 'android'\n );\n};\n\n/**\n * Android Only - Requests user to enable Google Play Services\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const requestEnableGooglePlayServices = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.requestEnableGooglePlayServices,\n 'android'\n );\n};\n\n/**\n * Returns the system version of the current platform\n * @returns {Promise<boolean>} A promise that resolves either a string on iOS or number on Android\n */\nexport const getSystemVersion = (): Promise<string | number> =>\n isValidPlatform(OkHiNativeModule.getSystemVersion);\n\nexport const request = (\n locationPermissionType: LocationRequestPermissionType,\n rationale: {\n title: string;\n text: string;\n successButton?: { label: string };\n denyButton?: { label: string };\n } | null,\n callback: LocationPermissionCallback\n) => {\n const serviceError = new OkHiException({\n code: OkHiException.SERVICE_UNAVAILABLE_CODE,\n message:\n 'Location service is currently not available. Please enable in app settings',\n });\n\n const googlePlayError = new OkHiException({\n code: OkHiException.SERVICE_UNAVAILABLE_CODE,\n message:\n 'Google Play Services is currently unavailable. Please enable in settings',\n });\n\n const handleError = (error: OkHiException) => {\n callback(null, error);\n };\n\n const handleGooglePlayServiceRequest = () => {\n requestEnableGooglePlayServices().then((googlePlayStatus) => {\n if (!googlePlayStatus) {\n handleError(googlePlayError);\n } else {\n handleRationaleRequest();\n }\n });\n };\n\n const handleRationaleAlert = (alertRationale: {\n title: string;\n text: string;\n grantButton?: { label: string };\n denyButton?: { label: string };\n }) => {\n return new Promise((resolve, _) => {\n Alert.alert(\n alertRationale.title,\n alertRationale.text,\n [\n {\n text: alertRationale.grantButton\n ? alertRationale.grantButton.label\n : 'Grant',\n onPress: () => {\n resolve(true);\n },\n },\n {\n text: alertRationale.denyButton\n ? alertRationale.denyButton.label\n : 'Deny',\n onPress: () => {\n resolve(false);\n },\n style: 'cancel',\n },\n ],\n {\n onDismiss: () => {\n resolve(false);\n },\n }\n );\n });\n };\n\n const handlePermissionRequest = () => {\n if (Platform.OS === 'ios') {\n OkHiNativeEvents.removeAllListeners('onLocationPermissionStatusUpdate');\n OkHiNativeEvents.addListener(\n 'onLocationPermissionStatusUpdate',\n (permissionUpdate) => {\n callback(permissionUpdate, null);\n }\n );\n if (locationPermissionType === 'whenInUse') {\n OkHiNativeModule.requestLocationPermission();\n } else {\n OkHiNativeModule.requestBackgroundLocationPermission();\n }\n } else {\n if (locationPermissionType === 'whenInUse') {\n requestLocationPermissionAndroid().then((whenInUseResult) =>\n callback(whenInUseResult ? 'authorizedWhenInUse' : 'denied', null)\n );\n } else {\n requestLocationPermissionAndroid().then((initialWhenInUseResult) => {\n if (!initialWhenInUseResult) {\n callback('denied', null);\n } else {\n callback('authorizedWhenInUse', null);\n requestBackgroundLocationPermission().then((alwaysResult) => {\n callback(\n alwaysResult ? 'authorizedAlways' : 'authorizedWhenInUse',\n null\n );\n });\n }\n });\n }\n }\n };\n const handleRationaleRequest = async () => {\n if (rationale) {\n const result = await handleRationaleAlert(rationale);\n if (!result) {\n callback('rationaleDissmissed', null);\n } else {\n handlePermissionRequest();\n }\n } else {\n handlePermissionRequest();\n }\n };\n\n isLocationServicesEnabled()\n .then((serviceStatus) => {\n if (!serviceStatus && Platform.OS === 'ios') {\n handleError(serviceError);\n } else if (!serviceStatus && Platform.OS === 'android') {\n requestEnableLocationServices()\n .then((enableResult) => {\n if (!enableResult) {\n handleError(serviceError);\n } else {\n handleGooglePlayServiceRequest();\n }\n })\n .catch(handleError);\n } else {\n if (Platform.OS === 'ios') {\n handleRationaleRequest();\n } else {\n handleGooglePlayServiceRequest();\n }\n }\n })\n .catch(handleError);\n};\n\nexport const openAppSettings = () => {\n OkHiNativeModule.openAppSettings();\n};\n\nexport const retriveLocationPermissionStatus =\n async (): Promise<LocationPermissionStatus> => {\n if (Platform.OS === 'ios') {\n return OkHiNativeModule.retriveLocationPermissionStatus() as Promise<LocationPermissionStatus>;\n }\n const alwaysPerm = await isBackgroundLocationPermissionGranted();\n if (alwaysPerm) {\n return 'authorizedAlways';\n }\n const whenInUsePerm = await isLocationPermissionGranted();\n return whenInUsePerm ? 'authorizedWhenInUse' : 'denied';\n };\n"]}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { OkHiNativeModule, OkHiNativeEvents } from '../OkHiNativeModule';
|
|
2
2
|
import { Alert, PermissionsAndroid, Platform } from 'react-native';
|
|
3
3
|
import { errorHandler, isValidPlatform } from './_helpers';
|
|
4
|
-
|
|
4
|
+
import { OkHiException } from './OkHiException';
|
|
5
5
|
/**
|
|
6
6
|
* Checks whether location services are enabled
|
|
7
7
|
* @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the service is available
|
|
8
8
|
*/
|
|
9
|
+
|
|
9
10
|
export const isLocationServicesEnabled = () => {
|
|
10
11
|
return isValidPlatform(OkHiNativeModule.isLocationServicesEnabled);
|
|
11
12
|
};
|
|
@@ -125,45 +126,113 @@ export const requestEnableGooglePlayServices = () => {
|
|
|
125
126
|
|
|
126
127
|
export const getSystemVersion = () => isValidPlatform(OkHiNativeModule.getSystemVersion);
|
|
127
128
|
export const request = (locationPermissionType, rationale, callback) => {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
const serviceError = new OkHiException({
|
|
130
|
+
code: OkHiException.SERVICE_UNAVAILABLE_CODE,
|
|
131
|
+
message: 'Location service is currently not available. Please enable in app settings'
|
|
132
|
+
});
|
|
133
|
+
const googlePlayError = new OkHiException({
|
|
134
|
+
code: OkHiException.SERVICE_UNAVAILABLE_CODE,
|
|
135
|
+
message: 'Google Play Services is currently unavailable. Please enable in settings'
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
const handleError = error => {
|
|
139
|
+
callback(null, error);
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const handleGooglePlayServiceRequest = () => {
|
|
143
|
+
requestEnableGooglePlayServices().then(googlePlayStatus => {
|
|
144
|
+
if (!googlePlayStatus) {
|
|
145
|
+
handleError(googlePlayError);
|
|
146
|
+
} else {
|
|
147
|
+
handleRationaleRequest();
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const handleRationaleAlert = alertRationale => {
|
|
153
|
+
return new Promise((resolve, _) => {
|
|
154
|
+
Alert.alert(alertRationale.title, alertRationale.text, [{
|
|
155
|
+
text: alertRationale.grantButton ? alertRationale.grantButton.label : 'Grant',
|
|
156
|
+
onPress: () => {
|
|
157
|
+
resolve(true);
|
|
158
|
+
}
|
|
159
|
+
}, {
|
|
160
|
+
text: alertRationale.denyButton ? alertRationale.denyButton.label : 'Deny',
|
|
161
|
+
onPress: () => {
|
|
162
|
+
resolve(false);
|
|
163
|
+
},
|
|
164
|
+
style: 'cancel'
|
|
165
|
+
}], {
|
|
166
|
+
onDismiss: () => {
|
|
167
|
+
resolve(false);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const handlePermissionRequest = () => {
|
|
174
|
+
if (Platform.OS === 'ios') {
|
|
175
|
+
OkHiNativeEvents.removeAllListeners('onLocationPermissionStatusUpdate');
|
|
176
|
+
OkHiNativeEvents.addListener('onLocationPermissionStatusUpdate', permissionUpdate => {
|
|
177
|
+
callback(permissionUpdate, null);
|
|
178
|
+
});
|
|
131
179
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
} else {
|
|
138
|
-
if (locationPermissionType === 'whenInUse') {
|
|
139
|
-
requestLocationPermissionAndroid().then(result => callback(result ? 'authorizedWhenInUse' : 'denied'));
|
|
180
|
+
if (locationPermissionType === 'whenInUse') {
|
|
181
|
+
OkHiNativeModule.requestLocationPermission();
|
|
182
|
+
} else {
|
|
183
|
+
OkHiNativeModule.requestBackgroundLocationPermission();
|
|
184
|
+
}
|
|
140
185
|
} else {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (
|
|
146
|
-
|
|
147
|
-
text: rationale.successButton ? rationale.successButton.label : 'Okay',
|
|
148
|
-
onPress: async () => {
|
|
149
|
-
const result = await requestBackgroundLocationPermission();
|
|
150
|
-
callback(result ? 'authorizedAlways' : 'authorizedWhenInUse');
|
|
151
|
-
}
|
|
152
|
-
}], {
|
|
153
|
-
onDismiss: () => {
|
|
154
|
-
callback('authorizedWhenInUse');
|
|
155
|
-
}
|
|
156
|
-
});
|
|
186
|
+
if (locationPermissionType === 'whenInUse') {
|
|
187
|
+
requestLocationPermissionAndroid().then(whenInUseResult => callback(whenInUseResult ? 'authorizedWhenInUse' : 'denied', null));
|
|
188
|
+
} else {
|
|
189
|
+
requestLocationPermissionAndroid().then(initialWhenInUseResult => {
|
|
190
|
+
if (!initialWhenInUseResult) {
|
|
191
|
+
callback('denied', null);
|
|
157
192
|
} else {
|
|
158
|
-
|
|
159
|
-
|
|
193
|
+
callback('authorizedWhenInUse', null);
|
|
194
|
+
requestBackgroundLocationPermission().then(alwaysResult => {
|
|
195
|
+
callback(alwaysResult ? 'authorizedAlways' : 'authorizedWhenInUse', null);
|
|
196
|
+
});
|
|
160
197
|
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
const handleRationaleRequest = async () => {
|
|
204
|
+
if (rationale) {
|
|
205
|
+
const result = await handleRationaleAlert(rationale);
|
|
206
|
+
|
|
207
|
+
if (!result) {
|
|
208
|
+
callback('rationaleDissmissed', null);
|
|
209
|
+
} else {
|
|
210
|
+
handlePermissionRequest();
|
|
211
|
+
}
|
|
212
|
+
} else {
|
|
213
|
+
handlePermissionRequest();
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
isLocationServicesEnabled().then(serviceStatus => {
|
|
218
|
+
if (!serviceStatus && Platform.OS === 'ios') {
|
|
219
|
+
handleError(serviceError);
|
|
220
|
+
} else if (!serviceStatus && Platform.OS === 'android') {
|
|
221
|
+
requestEnableLocationServices().then(enableResult => {
|
|
222
|
+
if (!enableResult) {
|
|
223
|
+
handleError(serviceError);
|
|
161
224
|
} else {
|
|
162
|
-
|
|
225
|
+
handleGooglePlayServiceRequest();
|
|
163
226
|
}
|
|
164
|
-
});
|
|
227
|
+
}).catch(handleError);
|
|
228
|
+
} else {
|
|
229
|
+
if (Platform.OS === 'ios') {
|
|
230
|
+
handleRationaleRequest();
|
|
231
|
+
} else {
|
|
232
|
+
handleGooglePlayServiceRequest();
|
|
233
|
+
}
|
|
165
234
|
}
|
|
166
|
-
}
|
|
235
|
+
}).catch(handleError);
|
|
167
236
|
};
|
|
168
237
|
export const openAppSettings = () => {
|
|
169
238
|
OkHiNativeModule.openAppSettings();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Helpers.ts"],"names":["OkHiNativeModule","OkHiNativeEvents","Alert","PermissionsAndroid","Platform","errorHandler","isValidPlatform","isLocationServicesEnabled","isLocationPermissionGranted","isBackgroundLocationPermissionGrantedAndroid","sdkVersion","getSystemVersion","hasPermission","check","PERMISSIONS","ACCESS_BACKGROUND_LOCATION","isBackgroundLocationPermissionGrantedIOS","isBackgroundLocationPermissionGranted","fn","OS","requestLocationPermissionAndroid","status","requestMultiple","ACCESS_FINE_LOCATION","ACCESS_COARSE_LOCATION","requestLocationPermissionIOS","requestLocationPermission","isGranted","requestBackgroundLocationPermissionAndroid","permissions","requestBackgroundLocationPermissionIOS","requestBackgroundLocationPermission","requestEnableLocationServices","isGooglePlayServicesAvailable","requestEnableGooglePlayServices","request","locationPermissionType","rationale","callback","removeAllListeners","addListener","then","result","whenInUseResult","version","alert","title","text","successButton","label","onPress","onDismiss","permission","openAppSettings","retriveLocationPermissionStatus","alwaysPerm","whenInUsePerm"],"mappings":"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","sourcesContent":["import { OkHiNativeModule, OkHiNativeEvents } from '../OkHiNativeModule';\nimport { Alert, PermissionsAndroid, Platform } from 'react-native';\nimport { errorHandler, isValidPlatform } from './_helpers';\nimport type {\n LocationPermissionCallback,\n LocationPermissionStatus,\n LocationRequestPermissionType,\n} from './types';\n\n/**\n * Checks whether location services are enabled\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the service is available\n */\nexport const isLocationServicesEnabled = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationServicesEnabled);\n};\n\n/**\n * Checks whether when in use location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isLocationPermissionGranted = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationPermissionGranted);\n};\n\nconst isBackgroundLocationPermissionGrantedAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) {\n return true;\n }\n if (sdkVersion < 29) {\n return await isLocationPermissionGranted();\n }\n const hasPermission = await PermissionsAndroid.check(\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION\n );\n return hasPermission;\n };\n\nconst isBackgroundLocationPermissionGrantedIOS = (): Promise<boolean> => {\n return OkHiNativeModule.isBackgroundLocationPermissionGranted();\n};\n\n/**\n * Checks whether background location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isBackgroundLocationPermissionGranted = (): Promise<boolean> => {\n const fn =\n Platform.OS === 'android'\n ? isBackgroundLocationPermissionGrantedAndroid\n : isBackgroundLocationPermissionGrantedIOS;\n return isValidPlatform(fn);\n};\n\nconst requestLocationPermissionAndroid = async (): Promise<boolean> => {\n const status: any = await PermissionsAndroid.requestMultiple([\n PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,\n PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,\n ]);\n return status['android.permission.ACCESS_FINE_LOCATION'] === 'granted';\n};\n\nconst requestLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestLocationPermission();\n};\n\n/**\n * Requests for when in use location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestLocationPermission = async (): Promise<boolean> => {\n const isGranted = await isLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestLocationPermissionAndroid\n : requestLocationPermissionIOS\n );\n};\n\nconst requestBackgroundLocationPermissionAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) return true;\n if (sdkVersion >= 29) {\n const permissions: any = [\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION,\n ];\n const status: any = await PermissionsAndroid.requestMultiple(permissions);\n return (\n status['android.permission.ACCESS_BACKGROUND_LOCATION'] === 'granted'\n );\n } else {\n return await requestLocationPermissionAndroid();\n }\n };\n\nconst requestBackgroundLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestBackgroundLocationPermission();\n};\n\n/**\n * Requests for background location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestBackgroundLocationPermission =\n async (): Promise<boolean> => {\n const isGranted = await isBackgroundLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestBackgroundLocationPermissionAndroid\n : requestBackgroundLocationPermissionIOS\n );\n };\n\n/**\n * Requests the user to enable location services by showing an in app modal on android and opening location settings on iOS\n * @returns {Promise<boolean>} A promise that resolves to either a boolean value on android or null on iOS\n */\nexport const requestEnableLocationServices = (): Promise<boolean | null> => {\n return isValidPlatform(OkHiNativeModule.requestEnableLocationServices);\n};\n\n/**\n * Android Only - Checks if Google Play Services is available\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const isGooglePlayServicesAvailable = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.isGooglePlayServicesAvailable,\n 'android'\n );\n};\n\n/**\n * Android Only - Requests user to enable Google Play Services\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const requestEnableGooglePlayServices = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.requestEnableGooglePlayServices,\n 'android'\n );\n};\n\n/**\n * Returns the system version of the current platform\n * @returns {Promise<boolean>} A promise that resolves either a string on iOS or number on Android\n */\nexport const getSystemVersion = (): Promise<string | number> =>\n isValidPlatform(OkHiNativeModule.getSystemVersion);\n\nexport const request = (\n locationPermissionType: LocationRequestPermissionType,\n rationale: {\n title: string;\n text: string;\n successButton?: { label: string };\n } | null,\n callback: LocationPermissionCallback\n) => {\n if (Platform.OS === 'ios') {\n OkHiNativeEvents.removeAllListeners('onLocationPermissionStatusUpdate');\n OkHiNativeEvents.addListener('onLocationPermissionStatusUpdate', callback);\n if (locationPermissionType === 'whenInUse') {\n OkHiNativeModule.requestLocationPermission();\n } else {\n OkHiNativeModule.requestBackgroundLocationPermission();\n }\n } else {\n if (locationPermissionType === 'whenInUse') {\n requestLocationPermissionAndroid().then((result) =>\n callback(result ? 'authorizedWhenInUse' : 'denied')\n );\n } else {\n requestLocationPermissionAndroid().then(async (whenInUseResult) => {\n if (whenInUseResult) {\n const version = await getSystemVersion();\n if (version >= 30 && rationale) {\n Alert.alert(\n rationale.title,\n rationale.text,\n [\n {\n text: rationale.successButton\n ? rationale.successButton.label\n : 'Okay',\n onPress: async () => {\n const result = await requestBackgroundLocationPermission();\n callback(\n result ? 'authorizedAlways' : 'authorizedWhenInUse'\n );\n },\n },\n ],\n {\n onDismiss: () => {\n callback('authorizedWhenInUse');\n },\n }\n );\n } else {\n const permission = await requestBackgroundLocationPermission();\n callback(permission ? 'authorizedAlways' : 'authorizedWhenInUse');\n }\n } else {\n callback('denied');\n }\n });\n }\n }\n};\n\nexport const openAppSettings = () => {\n OkHiNativeModule.openAppSettings();\n};\n\nexport const retriveLocationPermissionStatus =\n async (): Promise<LocationPermissionStatus> => {\n if (Platform.OS === 'ios') {\n return OkHiNativeModule.retriveLocationPermissionStatus() as Promise<LocationPermissionStatus>;\n }\n const alwaysPerm = await isBackgroundLocationPermissionGranted();\n if (alwaysPerm) {\n return 'authorizedAlways';\n }\n const whenInUsePerm = await isLocationPermissionGranted();\n return whenInUsePerm ? 'authorizedWhenInUse' : 'denied';\n };\n"]}
|
|
1
|
+
{"version":3,"sources":["Helpers.ts"],"names":["OkHiNativeModule","OkHiNativeEvents","Alert","PermissionsAndroid","Platform","errorHandler","isValidPlatform","OkHiException","isLocationServicesEnabled","isLocationPermissionGranted","isBackgroundLocationPermissionGrantedAndroid","sdkVersion","getSystemVersion","hasPermission","check","PERMISSIONS","ACCESS_BACKGROUND_LOCATION","isBackgroundLocationPermissionGrantedIOS","isBackgroundLocationPermissionGranted","fn","OS","requestLocationPermissionAndroid","status","requestMultiple","ACCESS_FINE_LOCATION","ACCESS_COARSE_LOCATION","requestLocationPermissionIOS","requestLocationPermission","isGranted","requestBackgroundLocationPermissionAndroid","permissions","requestBackgroundLocationPermissionIOS","requestBackgroundLocationPermission","requestEnableLocationServices","isGooglePlayServicesAvailable","requestEnableGooglePlayServices","request","locationPermissionType","rationale","callback","serviceError","code","SERVICE_UNAVAILABLE_CODE","message","googlePlayError","handleError","error","handleGooglePlayServiceRequest","then","googlePlayStatus","handleRationaleRequest","handleRationaleAlert","alertRationale","Promise","resolve","_","alert","title","text","grantButton","label","onPress","denyButton","style","onDismiss","handlePermissionRequest","removeAllListeners","addListener","permissionUpdate","whenInUseResult","initialWhenInUseResult","alwaysResult","result","serviceStatus","enableResult","catch","openAppSettings","retriveLocationPermissionStatus","alwaysPerm","whenInUsePerm"],"mappings":"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","sourcesContent":["import { OkHiNativeModule, OkHiNativeEvents } from '../OkHiNativeModule';\nimport { Alert, PermissionsAndroid, Platform } from 'react-native';\nimport { errorHandler, isValidPlatform } from './_helpers';\nimport type {\n LocationPermissionCallback,\n LocationPermissionStatus,\n LocationRequestPermissionType,\n} from './types';\nimport { OkHiException } from './OkHiException';\n\n/**\n * Checks whether location services are enabled\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the service is available\n */\nexport const isLocationServicesEnabled = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationServicesEnabled);\n};\n\n/**\n * Checks whether when in use location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isLocationPermissionGranted = (): Promise<boolean> => {\n return isValidPlatform(OkHiNativeModule.isLocationPermissionGranted);\n};\n\nconst isBackgroundLocationPermissionGrantedAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) {\n return true;\n }\n if (sdkVersion < 29) {\n return await isLocationPermissionGranted();\n }\n const hasPermission = await PermissionsAndroid.check(\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION\n );\n return hasPermission;\n };\n\nconst isBackgroundLocationPermissionGrantedIOS = (): Promise<boolean> => {\n return OkHiNativeModule.isBackgroundLocationPermissionGranted();\n};\n\n/**\n * Checks whether background location permission is granted\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const isBackgroundLocationPermissionGranted = (): Promise<boolean> => {\n const fn =\n Platform.OS === 'android'\n ? isBackgroundLocationPermissionGrantedAndroid\n : isBackgroundLocationPermissionGrantedIOS;\n return isValidPlatform(fn);\n};\n\nconst requestLocationPermissionAndroid = async (): Promise<boolean> => {\n const status: any = await PermissionsAndroid.requestMultiple([\n PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,\n PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,\n ]);\n return status['android.permission.ACCESS_FINE_LOCATION'] === 'granted';\n};\n\nconst requestLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestLocationPermission();\n};\n\n/**\n * Requests for when in use location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestLocationPermission = async (): Promise<boolean> => {\n const isGranted = await isLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestLocationPermissionAndroid\n : requestLocationPermissionIOS\n );\n};\n\nconst requestBackgroundLocationPermissionAndroid =\n async (): Promise<boolean> => {\n const sdkVersion = await OkHiNativeModule.getSystemVersion();\n if (sdkVersion < 23) return true;\n if (sdkVersion >= 29) {\n const permissions: any = [\n PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION,\n ];\n const status: any = await PermissionsAndroid.requestMultiple(permissions);\n return (\n status['android.permission.ACCESS_BACKGROUND_LOCATION'] === 'granted'\n );\n } else {\n return await requestLocationPermissionAndroid();\n }\n };\n\nconst requestBackgroundLocationPermissionIOS = (): Promise<boolean> => {\n return OkHiNativeModule.requestBackgroundLocationPermission();\n};\n\n/**\n * Requests for background location permission\n * @returns {Promise<boolean>} A promise that resolves to a boolen value indicating whether the permission is granted\n */\nexport const requestBackgroundLocationPermission =\n async (): Promise<boolean> => {\n const isGranted = await isBackgroundLocationPermissionGranted();\n if (isGranted) return isGranted;\n return errorHandler(\n Platform.OS === 'android'\n ? requestBackgroundLocationPermissionAndroid\n : requestBackgroundLocationPermissionIOS\n );\n };\n\n/**\n * Requests the user to enable location services by showing an in app modal on android and opening location settings on iOS\n * @returns {Promise<boolean>} A promise that resolves to either a boolean value on android or null on iOS\n */\nexport const requestEnableLocationServices = (): Promise<boolean | null> => {\n return isValidPlatform(OkHiNativeModule.requestEnableLocationServices);\n};\n\n/**\n * Android Only - Checks if Google Play Services is available\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const isGooglePlayServicesAvailable = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.isGooglePlayServicesAvailable,\n 'android'\n );\n};\n\n/**\n * Android Only - Requests user to enable Google Play Services\n * @returns {Promise<boolean>} A promise that resolves to a boolean value indicating whether the service is avaialbe\n */\nexport const requestEnableGooglePlayServices = (): Promise<boolean> => {\n return isValidPlatform(\n OkHiNativeModule.requestEnableGooglePlayServices,\n 'android'\n );\n};\n\n/**\n * Returns the system version of the current platform\n * @returns {Promise<boolean>} A promise that resolves either a string on iOS or number on Android\n */\nexport const getSystemVersion = (): Promise<string | number> =>\n isValidPlatform(OkHiNativeModule.getSystemVersion);\n\nexport const request = (\n locationPermissionType: LocationRequestPermissionType,\n rationale: {\n title: string;\n text: string;\n successButton?: { label: string };\n denyButton?: { label: string };\n } | null,\n callback: LocationPermissionCallback\n) => {\n const serviceError = new OkHiException({\n code: OkHiException.SERVICE_UNAVAILABLE_CODE,\n message:\n 'Location service is currently not available. Please enable in app settings',\n });\n\n const googlePlayError = new OkHiException({\n code: OkHiException.SERVICE_UNAVAILABLE_CODE,\n message:\n 'Google Play Services is currently unavailable. Please enable in settings',\n });\n\n const handleError = (error: OkHiException) => {\n callback(null, error);\n };\n\n const handleGooglePlayServiceRequest = () => {\n requestEnableGooglePlayServices().then((googlePlayStatus) => {\n if (!googlePlayStatus) {\n handleError(googlePlayError);\n } else {\n handleRationaleRequest();\n }\n });\n };\n\n const handleRationaleAlert = (alertRationale: {\n title: string;\n text: string;\n grantButton?: { label: string };\n denyButton?: { label: string };\n }) => {\n return new Promise((resolve, _) => {\n Alert.alert(\n alertRationale.title,\n alertRationale.text,\n [\n {\n text: alertRationale.grantButton\n ? alertRationale.grantButton.label\n : 'Grant',\n onPress: () => {\n resolve(true);\n },\n },\n {\n text: alertRationale.denyButton\n ? alertRationale.denyButton.label\n : 'Deny',\n onPress: () => {\n resolve(false);\n },\n style: 'cancel',\n },\n ],\n {\n onDismiss: () => {\n resolve(false);\n },\n }\n );\n });\n };\n\n const handlePermissionRequest = () => {\n if (Platform.OS === 'ios') {\n OkHiNativeEvents.removeAllListeners('onLocationPermissionStatusUpdate');\n OkHiNativeEvents.addListener(\n 'onLocationPermissionStatusUpdate',\n (permissionUpdate) => {\n callback(permissionUpdate, null);\n }\n );\n if (locationPermissionType === 'whenInUse') {\n OkHiNativeModule.requestLocationPermission();\n } else {\n OkHiNativeModule.requestBackgroundLocationPermission();\n }\n } else {\n if (locationPermissionType === 'whenInUse') {\n requestLocationPermissionAndroid().then((whenInUseResult) =>\n callback(whenInUseResult ? 'authorizedWhenInUse' : 'denied', null)\n );\n } else {\n requestLocationPermissionAndroid().then((initialWhenInUseResult) => {\n if (!initialWhenInUseResult) {\n callback('denied', null);\n } else {\n callback('authorizedWhenInUse', null);\n requestBackgroundLocationPermission().then((alwaysResult) => {\n callback(\n alwaysResult ? 'authorizedAlways' : 'authorizedWhenInUse',\n null\n );\n });\n }\n });\n }\n }\n };\n const handleRationaleRequest = async () => {\n if (rationale) {\n const result = await handleRationaleAlert(rationale);\n if (!result) {\n callback('rationaleDissmissed', null);\n } else {\n handlePermissionRequest();\n }\n } else {\n handlePermissionRequest();\n }\n };\n\n isLocationServicesEnabled()\n .then((serviceStatus) => {\n if (!serviceStatus && Platform.OS === 'ios') {\n handleError(serviceError);\n } else if (!serviceStatus && Platform.OS === 'android') {\n requestEnableLocationServices()\n .then((enableResult) => {\n if (!enableResult) {\n handleError(serviceError);\n } else {\n handleGooglePlayServiceRequest();\n }\n })\n .catch(handleError);\n } else {\n if (Platform.OS === 'ios') {\n handleRationaleRequest();\n } else {\n handleGooglePlayServiceRequest();\n }\n }\n })\n .catch(handleError);\n};\n\nexport const openAppSettings = () => {\n OkHiNativeModule.openAppSettings();\n};\n\nexport const retriveLocationPermissionStatus =\n async (): Promise<LocationPermissionStatus> => {\n if (Platform.OS === 'ios') {\n return OkHiNativeModule.retriveLocationPermissionStatus() as Promise<LocationPermissionStatus>;\n }\n const alwaysPerm = await isBackgroundLocationPermissionGranted();\n if (alwaysPerm) {\n return 'authorizedAlways';\n }\n const whenInUsePerm = await isLocationPermissionGranted();\n return whenInUsePerm ? 'authorizedWhenInUse' : 'denied';\n };\n"]}
|
|
@@ -50,6 +50,9 @@ export declare const request: (locationPermissionType: LocationRequestPermission
|
|
|
50
50
|
successButton?: {
|
|
51
51
|
label: string;
|
|
52
52
|
};
|
|
53
|
+
denyButton?: {
|
|
54
|
+
label: string;
|
|
55
|
+
};
|
|
53
56
|
} | null, callback: LocationPermissionCallback) => void;
|
|
54
57
|
export declare const openAppSettings: () => void;
|
|
55
58
|
export declare const retriveLocationPermissionStatus: () => Promise<LocationPermissionStatus>;
|
|
@@ -170,6 +170,6 @@ export declare type OkHiApplicationConfiguration = {
|
|
|
170
170
|
channelDescription: string;
|
|
171
171
|
};
|
|
172
172
|
};
|
|
173
|
-
export declare type LocationPermissionStatus = 'notDetermined' | 'restricted' | 'denied' | 'authorizedAlways' | 'authorizedWhenInUse' | 'authorized' | 'unknown';
|
|
173
|
+
export declare type LocationPermissionStatus = 'notDetermined' | 'restricted' | 'denied' | 'authorizedAlways' | 'authorizedWhenInUse' | 'authorized' | 'rationaleDissmissed' | 'unknown';
|
|
174
174
|
export declare type LocationRequestPermissionType = 'whenInUse' | 'always';
|
|
175
|
-
export declare type LocationPermissionCallback = (status: LocationPermissionStatus) => any;
|
|
175
|
+
export declare type LocationPermissionCallback = (status: LocationPermissionStatus | null, error: OkHiError | null) => any;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-okhi",
|
|
3
|
-
"version": "1.0.13-beta.
|
|
3
|
+
"version": "1.0.13-beta.14",
|
|
4
4
|
"description": "The OkHi React Native library enables you to collect and verify addresses from your users",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
package/src/OkCore/Helpers.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type {
|
|
|
6
6
|
LocationPermissionStatus,
|
|
7
7
|
LocationRequestPermissionType,
|
|
8
8
|
} from './types';
|
|
9
|
+
import { OkHiException } from './OkHiException';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Checks whether location services are enabled
|
|
@@ -159,59 +160,146 @@ export const request = (
|
|
|
159
160
|
title: string;
|
|
160
161
|
text: string;
|
|
161
162
|
successButton?: { label: string };
|
|
163
|
+
denyButton?: { label: string };
|
|
162
164
|
} | null,
|
|
163
165
|
callback: LocationPermissionCallback
|
|
164
166
|
) => {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
167
|
+
const serviceError = new OkHiException({
|
|
168
|
+
code: OkHiException.SERVICE_UNAVAILABLE_CODE,
|
|
169
|
+
message:
|
|
170
|
+
'Location service is currently not available. Please enable in app settings',
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
const googlePlayError = new OkHiException({
|
|
174
|
+
code: OkHiException.SERVICE_UNAVAILABLE_CODE,
|
|
175
|
+
message:
|
|
176
|
+
'Google Play Services is currently unavailable. Please enable in settings',
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
const handleError = (error: OkHiException) => {
|
|
180
|
+
callback(null, error);
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
const handleGooglePlayServiceRequest = () => {
|
|
184
|
+
requestEnableGooglePlayServices().then((googlePlayStatus) => {
|
|
185
|
+
if (!googlePlayStatus) {
|
|
186
|
+
handleError(googlePlayError);
|
|
187
|
+
} else {
|
|
188
|
+
handleRationaleRequest();
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
const handleRationaleAlert = (alertRationale: {
|
|
194
|
+
title: string;
|
|
195
|
+
text: string;
|
|
196
|
+
grantButton?: { label: string };
|
|
197
|
+
denyButton?: { label: string };
|
|
198
|
+
}) => {
|
|
199
|
+
return new Promise((resolve, _) => {
|
|
200
|
+
Alert.alert(
|
|
201
|
+
alertRationale.title,
|
|
202
|
+
alertRationale.text,
|
|
203
|
+
[
|
|
204
|
+
{
|
|
205
|
+
text: alertRationale.grantButton
|
|
206
|
+
? alertRationale.grantButton.label
|
|
207
|
+
: 'Grant',
|
|
208
|
+
onPress: () => {
|
|
209
|
+
resolve(true);
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
text: alertRationale.denyButton
|
|
214
|
+
? alertRationale.denyButton.label
|
|
215
|
+
: 'Deny',
|
|
216
|
+
onPress: () => {
|
|
217
|
+
resolve(false);
|
|
218
|
+
},
|
|
219
|
+
style: 'cancel',
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
{
|
|
223
|
+
onDismiss: () => {
|
|
224
|
+
resolve(false);
|
|
225
|
+
},
|
|
226
|
+
}
|
|
177
227
|
);
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const handlePermissionRequest = () => {
|
|
232
|
+
if (Platform.OS === 'ios') {
|
|
233
|
+
OkHiNativeEvents.removeAllListeners('onLocationPermissionStatusUpdate');
|
|
234
|
+
OkHiNativeEvents.addListener(
|
|
235
|
+
'onLocationPermissionStatusUpdate',
|
|
236
|
+
(permissionUpdate) => {
|
|
237
|
+
callback(permissionUpdate, null);
|
|
238
|
+
}
|
|
239
|
+
);
|
|
240
|
+
if (locationPermissionType === 'whenInUse') {
|
|
241
|
+
OkHiNativeModule.requestLocationPermission();
|
|
242
|
+
} else {
|
|
243
|
+
OkHiNativeModule.requestBackgroundLocationPermission();
|
|
244
|
+
}
|
|
178
245
|
} else {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
{
|
|
188
|
-
text: rationale.successButton
|
|
189
|
-
? rationale.successButton.label
|
|
190
|
-
: 'Okay',
|
|
191
|
-
onPress: async () => {
|
|
192
|
-
const result = await requestBackgroundLocationPermission();
|
|
193
|
-
callback(
|
|
194
|
-
result ? 'authorizedAlways' : 'authorizedWhenInUse'
|
|
195
|
-
);
|
|
196
|
-
},
|
|
197
|
-
},
|
|
198
|
-
],
|
|
199
|
-
{
|
|
200
|
-
onDismiss: () => {
|
|
201
|
-
callback('authorizedWhenInUse');
|
|
202
|
-
},
|
|
203
|
-
}
|
|
204
|
-
);
|
|
246
|
+
if (locationPermissionType === 'whenInUse') {
|
|
247
|
+
requestLocationPermissionAndroid().then((whenInUseResult) =>
|
|
248
|
+
callback(whenInUseResult ? 'authorizedWhenInUse' : 'denied', null)
|
|
249
|
+
);
|
|
250
|
+
} else {
|
|
251
|
+
requestLocationPermissionAndroid().then((initialWhenInUseResult) => {
|
|
252
|
+
if (!initialWhenInUseResult) {
|
|
253
|
+
callback('denied', null);
|
|
205
254
|
} else {
|
|
206
|
-
|
|
207
|
-
|
|
255
|
+
callback('authorizedWhenInUse', null);
|
|
256
|
+
requestBackgroundLocationPermission().then((alwaysResult) => {
|
|
257
|
+
callback(
|
|
258
|
+
alwaysResult ? 'authorizedAlways' : 'authorizedWhenInUse',
|
|
259
|
+
null
|
|
260
|
+
);
|
|
261
|
+
});
|
|
208
262
|
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const handleRationaleRequest = async () => {
|
|
268
|
+
if (rationale) {
|
|
269
|
+
const result = await handleRationaleAlert(rationale);
|
|
270
|
+
if (!result) {
|
|
271
|
+
callback('rationaleDissmissed', null);
|
|
272
|
+
} else {
|
|
273
|
+
handlePermissionRequest();
|
|
274
|
+
}
|
|
275
|
+
} else {
|
|
276
|
+
handlePermissionRequest();
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
isLocationServicesEnabled()
|
|
281
|
+
.then((serviceStatus) => {
|
|
282
|
+
if (!serviceStatus && Platform.OS === 'ios') {
|
|
283
|
+
handleError(serviceError);
|
|
284
|
+
} else if (!serviceStatus && Platform.OS === 'android') {
|
|
285
|
+
requestEnableLocationServices()
|
|
286
|
+
.then((enableResult) => {
|
|
287
|
+
if (!enableResult) {
|
|
288
|
+
handleError(serviceError);
|
|
289
|
+
} else {
|
|
290
|
+
handleGooglePlayServiceRequest();
|
|
291
|
+
}
|
|
292
|
+
})
|
|
293
|
+
.catch(handleError);
|
|
294
|
+
} else {
|
|
295
|
+
if (Platform.OS === 'ios') {
|
|
296
|
+
handleRationaleRequest();
|
|
209
297
|
} else {
|
|
210
|
-
|
|
298
|
+
handleGooglePlayServiceRequest();
|
|
211
299
|
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
300
|
+
}
|
|
301
|
+
})
|
|
302
|
+
.catch(handleError);
|
|
215
303
|
};
|
|
216
304
|
|
|
217
305
|
export const openAppSettings = () => {
|
package/src/OkCore/types.ts
CHANGED
|
@@ -186,10 +186,12 @@ export type LocationPermissionStatus =
|
|
|
186
186
|
| 'authorizedAlways'
|
|
187
187
|
| 'authorizedWhenInUse'
|
|
188
188
|
| 'authorized'
|
|
189
|
+
| 'rationaleDissmissed'
|
|
189
190
|
| 'unknown';
|
|
190
191
|
|
|
191
192
|
export type LocationRequestPermissionType = 'whenInUse' | 'always';
|
|
192
193
|
|
|
193
194
|
export type LocationPermissionCallback = (
|
|
194
|
-
status: LocationPermissionStatus
|
|
195
|
+
status: LocationPermissionStatus | null,
|
|
196
|
+
error: OkHiError | null
|
|
195
197
|
) => any;
|