react-native-nitro-geolocation 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +316 -0
- package/android/build.gradle +6 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidAccuracy.kt +105 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidHeadingManager.kt +313 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidLocationSettings.kt +313 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/GetCurrentPosition.kt +46 -45
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/LocationMetadata.kt +26 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/LocationValues.kt +31 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocation.kt +1025 -140
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocationCompat.kt +11 -11
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/RequestAuthorization.kt +6 -6
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/WatchPosition.kt +46 -45
- package/ios/CLLocation+GeolocationMetadata.swift +32 -0
- package/ios/LocationManager.swift +205 -51
- package/ios/NitroGeolocation.swift +949 -110
- package/ios/NitroGeolocationCompat.swift +7 -7
- package/nitrogen/generated/android/c++/JAccuracyAuthorization.hpp +61 -0
- package/nitrogen/generated/android/c++/JAndroidAccuracyPreset.hpp +64 -0
- package/nitrogen/generated/android/c++/JAndroidGranularity.hpp +61 -0
- package/nitrogen/generated/android/c++/{JRNConfigurationInternal.hpp → JCompatGeolocationConfigurationInternal.hpp} +10 -10
- package/nitrogen/generated/android/c++/{JGeolocationError.hpp → JCompatGeolocationError.hpp} +10 -10
- package/nitrogen/generated/android/c++/JCompatGeolocationOptions.hpp +105 -0
- package/nitrogen/generated/android/c++/JCompatGeolocationResponse.hpp +67 -0
- package/nitrogen/generated/android/c++/JFunc_void_AccuracyAuthorization.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_CompatGeolocationError.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_CompatGeolocationResponse.hpp +84 -0
- package/nitrogen/generated/android/c++/JFunc_void_GeolocationResponse.hpp +2 -0
- package/nitrogen/generated/android/c++/JFunc_void_Heading.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_LocationProviderStatus.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_PermissionStatus.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_GeocodedLocation_.hpp +97 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_ReverseGeocodedAddress_.hpp +98 -0
- package/nitrogen/generated/android/c++/JGeocodedLocation.hpp +65 -0
- package/nitrogen/generated/android/c++/JGeocodingCoordinates.hpp +61 -0
- package/nitrogen/generated/android/c++/{JModernGeolocationConfiguration.hpp → JGeolocationConfiguration.hpp} +10 -10
- package/nitrogen/generated/android/c++/JGeolocationResponse.hpp +13 -3
- package/nitrogen/generated/android/c++/JHeading.hpp +69 -0
- package/nitrogen/generated/android/c++/JHeadingOptions.hpp +57 -0
- package/nitrogen/generated/android/c++/JHybridNitroGeolocationCompatSpec.cpp +46 -30
- package/nitrogen/generated/android/c++/JHybridNitroGeolocationCompatSpec.hpp +4 -4
- package/nitrogen/generated/android/c++/JHybridNitroGeolocationSpec.cpp +169 -33
- package/nitrogen/generated/android/c++/JHybridNitroGeolocationSpec.hpp +14 -3
- package/nitrogen/generated/android/c++/JIOSAccuracyPreset.hpp +73 -0
- package/nitrogen/generated/android/c++/JIOSActivityType.hpp +67 -0
- package/nitrogen/generated/android/c++/JLocationAccuracyOptions.hpp +65 -0
- package/nitrogen/generated/android/c++/JLocationAvailability.hpp +62 -0
- package/nitrogen/generated/android/c++/JLocationProviderStatus.hpp +77 -0
- package/nitrogen/generated/android/c++/JLocationProviderUsed.hpp +67 -0
- package/nitrogen/generated/android/c++/JLocationRequestOptions.hpp +49 -3
- package/nitrogen/generated/android/c++/{JGeolocationOptions.hpp → JLocationSettingsOptions.hpp} +28 -22
- package/nitrogen/generated/android/c++/JReverseGeocodedAddress.hpp +82 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AccuracyAuthorization.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidAccuracyPreset.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidGranularity.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{RNConfigurationInternal.kt → CompatGeolocationConfigurationInternal.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{GeolocationError.kt → CompatGeolocationError.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/CompatGeolocationOptions.kt +68 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/CompatGeolocationResponse.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_AccuracyAuthorization.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{Func_void_GeolocationError.kt → Func_void_CompatGeolocationError.kt} +9 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_CompatGeolocationResponse.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_Heading.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_LocationProviderStatus.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_PermissionStatus.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_std__vector_GeocodedLocation_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_std__vector_ReverseGeocodedAddress_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeocodedLocation.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeocodingCoordinates.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{ModernGeolocationConfiguration.kt → GeolocationConfiguration.kt} +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeolocationResponse.kt +9 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Heading.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HeadingOptions.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroGeolocationCompatSpec.kt +7 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroGeolocationSpec.kt +92 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSAccuracyPreset.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSActivityType.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationAccuracyOptions.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationAvailability.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderStatus.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderUsed.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationRequestOptions.kt +30 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{GeolocationOptions.kt → LocationSettingsOptions.kt} +11 -11
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/ReverseGeocodedAddress.kt +56 -0
- package/nitrogen/generated/android/nitrogeolocationOnLoad.cpp +18 -4
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.cpp +76 -12
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.hpp +519 -77
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Umbrella.hpp +61 -12
- package/nitrogen/generated/ios/c++/HybridNitroGeolocationCompatSpecSwift.hpp +28 -16
- package/nitrogen/generated/ios/c++/HybridNitroGeolocationSpecSwift.hpp +131 -13
- package/nitrogen/generated/ios/swift/AccuracyAuthorization.swift +44 -0
- package/nitrogen/generated/ios/swift/AndroidAccuracyPreset.swift +48 -0
- package/nitrogen/generated/ios/swift/AndroidGranularity.swift +44 -0
- package/nitrogen/generated/ios/swift/{RNConfigurationInternal.swift → CompatGeolocationConfigurationInternal.swift} +5 -5
- package/nitrogen/generated/ios/swift/{GeolocationError.swift → CompatGeolocationError.swift} +5 -5
- package/nitrogen/generated/ios/swift/CompatGeolocationOptions.swift +208 -0
- package/nitrogen/generated/ios/swift/CompatGeolocationResponse.swift +34 -0
- package/nitrogen/generated/ios/swift/Func_void_AccuracyAuthorization.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CompatGeolocationError.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_CompatGeolocationResponse.swift +46 -0
- package/nitrogen/generated/ios/swift/{Func_void_GeolocationError.swift → Func_void_Heading.swift} +11 -11
- package/nitrogen/generated/ios/swift/Func_void_LocationAvailability.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_LocationProviderStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_GeocodedLocation_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_ReverseGeocodedAddress_.swift +46 -0
- package/nitrogen/generated/ios/swift/GeocodedLocation.swift +52 -0
- package/nitrogen/generated/ios/swift/GeocodingCoordinates.swift +34 -0
- package/nitrogen/generated/ios/swift/{ModernGeolocationConfiguration.swift → GeolocationConfiguration.swift} +5 -5
- package/nitrogen/generated/ios/swift/GeolocationResponse.swift +31 -2
- package/nitrogen/generated/ios/swift/Heading.swift +70 -0
- package/nitrogen/generated/ios/swift/HeadingOptions.swift +42 -0
- package/nitrogen/generated/ios/swift/HybridNitroGeolocationCompatSpec.swift +4 -4
- package/nitrogen/generated/ios/swift/HybridNitroGeolocationCompatSpec_cxx.swift +28 -28
- package/nitrogen/generated/ios/swift/HybridNitroGeolocationSpec.swift +14 -3
- package/nitrogen/generated/ios/swift/HybridNitroGeolocationSpec_cxx.swift +318 -15
- package/nitrogen/generated/ios/swift/IOSAccuracyPreset.swift +60 -0
- package/nitrogen/generated/ios/swift/IOSActivityType.swift +52 -0
- package/nitrogen/generated/ios/swift/LocationAccuracyOptions.swift +46 -0
- package/nitrogen/generated/ios/swift/LocationAvailability.swift +47 -0
- package/nitrogen/generated/ios/swift/LocationProviderStatus.swift +106 -0
- package/nitrogen/generated/ios/swift/LocationProviderUsed.swift +52 -0
- package/nitrogen/generated/ios/swift/LocationRequestOptions.swift +142 -1
- package/nitrogen/generated/ios/swift/{GeolocationOptions.swift → LocationSettingsOptions.swift} +39 -46
- package/nitrogen/generated/ios/swift/ReverseGeocodedAddress.swift +150 -0
- package/nitrogen/generated/shared/c++/AccuracyAuthorization.hpp +80 -0
- package/nitrogen/generated/shared/c++/AndroidAccuracyPreset.hpp +84 -0
- package/nitrogen/generated/shared/c++/AndroidGranularity.hpp +80 -0
- package/nitrogen/generated/shared/c++/{RNConfigurationInternal.hpp → CompatGeolocationConfigurationInternal.hpp} +11 -11
- package/nitrogen/generated/shared/c++/{GeolocationError.hpp → CompatGeolocationError.hpp} +11 -11
- package/nitrogen/generated/shared/c++/CompatGeolocationOptions.hpp +128 -0
- package/nitrogen/generated/shared/c++/CompatGeolocationResponse.hpp +88 -0
- package/nitrogen/generated/shared/c++/GeocodedLocation.hpp +91 -0
- package/nitrogen/generated/shared/c++/GeocodingCoordinates.hpp +87 -0
- package/nitrogen/generated/shared/c++/{ModernGeolocationConfiguration.hpp → GeolocationConfiguration.hpp} +11 -11
- package/nitrogen/generated/shared/c++/GeolocationResponse.hpp +14 -2
- package/nitrogen/generated/shared/c++/Heading.hpp +95 -0
- package/nitrogen/generated/shared/c++/HeadingOptions.hpp +83 -0
- package/nitrogen/generated/shared/c++/HybridNitroGeolocationCompatSpec.hpp +16 -16
- package/nitrogen/generated/shared/c++/HybridNitroGeolocationSpec.cpp +11 -0
- package/nitrogen/generated/shared/c++/HybridNitroGeolocationSpec.hpp +51 -12
- package/nitrogen/generated/shared/c++/IOSAccuracyPreset.hpp +96 -0
- package/nitrogen/generated/shared/c++/IOSActivityType.hpp +88 -0
- package/nitrogen/generated/shared/c++/LocationAccuracyOptions.hpp +92 -0
- package/nitrogen/generated/shared/c++/LocationAvailability.hpp +88 -0
- package/nitrogen/generated/shared/c++/LocationProviderStatus.hpp +103 -0
- package/nitrogen/generated/shared/c++/LocationProviderUsed.hpp +88 -0
- package/nitrogen/generated/shared/c++/LocationRequestOptions.hpp +47 -3
- package/nitrogen/generated/shared/c++/{GeolocationOptions.hpp → LocationSettingsOptions.hpp} +26 -24
- package/nitrogen/generated/shared/c++/ReverseGeocodedAddress.hpp +108 -0
- package/package.json +1 -1
- package/src/NitroGeolocation.nitro.ts +291 -17
- package/src/NitroGeolocationCompat.nitro.ts +12 -12
- package/src/api/geocode.ts +18 -0
- package/src/api/getAccuracyAuthorization.ts +12 -0
- package/src/api/getCurrentPosition.ts +5 -3
- package/src/api/getHeading.ts +13 -0
- package/src/api/getLastKnownPosition.ts +28 -0
- package/src/api/getLocationAvailability.ts +11 -0
- package/src/api/getProviderStatus.ts +16 -0
- package/src/api/hasServicesEnabled.ts +13 -0
- package/src/api/index.ts +11 -0
- package/src/api/requestLocationSettings.ts +29 -0
- package/src/api/requestPermission.ts +3 -1
- package/src/api/requestTemporaryFullAccuracy.ts +21 -0
- package/src/api/reverseGeocode.ts +23 -0
- package/src/api/setConfiguration.ts +8 -4
- package/src/api/watchHeading.ts +19 -0
- package/src/api/watchPosition.ts +2 -2
- package/src/compat/getCurrentPosition.ts +7 -7
- package/src/compat/index.tsx +5 -5
- package/src/compat/requestAuthorization.ts +2 -2
- package/src/compat/setRNConfiguration.ts +7 -5
- package/src/compat/watchPosition.ts +7 -7
- package/src/devtools/getCurrentPosition.ts +5 -3
- package/src/devtools/index.ts +1 -1
- package/src/devtools/watchPosition.ts +6 -7
- package/src/hooks/useWatchPosition.ts +2 -2
- package/src/index.tsx +35 -6
- package/src/publicTypes.ts +96 -0
- package/src/types.ts +113 -37
- package/src/utils/errors.test.ts +65 -0
- package/src/utils/errors.ts +45 -18
- package/src/utils/index.ts +2 -2
- package/src/utils/provider.test.ts +172 -1
- package/src/utils/provider.ts +50 -5
- package/nitrogen/generated/android/c++/JFunc_void_GeolocationError.hpp +0 -78
|
@@ -8,8 +8,8 @@ import com.margelo.nitro.NitroModules
|
|
|
8
8
|
class NitroGeolocationCompat(
|
|
9
9
|
private val reactContext: ReactApplicationContext = NitroModules.applicationContext!!
|
|
10
10
|
) : HybridNitroGeolocationCompatSpec() {
|
|
11
|
-
private var configuration:
|
|
12
|
-
|
|
11
|
+
private var configuration: CompatGeolocationConfigurationInternal =
|
|
12
|
+
CompatGeolocationConfigurationInternal(
|
|
13
13
|
skipPermissionRequests = false,
|
|
14
14
|
authorizationLevel = null,
|
|
15
15
|
enableBackgroundLocationUpdates = null,
|
|
@@ -35,29 +35,29 @@ class NitroGeolocationCompat(
|
|
|
35
35
|
|
|
36
36
|
private val watchPositionHandler by lazy { WatchPosition(reactContext) }
|
|
37
37
|
|
|
38
|
-
override fun setRNConfiguration(config:
|
|
38
|
+
override fun setRNConfiguration(config: CompatGeolocationConfigurationInternal) {
|
|
39
39
|
configuration = config
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
override fun requestAuthorization(
|
|
43
43
|
success: (() -> Unit)?,
|
|
44
|
-
error: ((error:
|
|
44
|
+
error: ((error: CompatGeolocationError) -> Unit)?
|
|
45
45
|
) {
|
|
46
46
|
requestAuthorizationHandler.execute(success, error)
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
override fun getCurrentPosition(
|
|
50
|
-
success: (position:
|
|
51
|
-
error: ((error:
|
|
52
|
-
options:
|
|
50
|
+
success: (position: CompatGeolocationResponse) -> Unit,
|
|
51
|
+
error: ((error: CompatGeolocationError) -> Unit)?,
|
|
52
|
+
options: CompatGeolocationOptions?
|
|
53
53
|
) {
|
|
54
54
|
GetCurrentPosition(reactContext).execute(success, error, options)
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
override fun watchPosition(
|
|
58
|
-
success: (position:
|
|
59
|
-
error: ((error:
|
|
60
|
-
options:
|
|
58
|
+
success: (position: CompatGeolocationResponse) -> Unit,
|
|
59
|
+
error: ((error: CompatGeolocationError) -> Unit)?,
|
|
60
|
+
options: CompatGeolocationOptions?
|
|
61
61
|
): Double {
|
|
62
62
|
return watchPositionHandler.watch(success, error, options).toDouble()
|
|
63
63
|
}
|
|
@@ -71,7 +71,7 @@ class NitroGeolocationCompat(
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
private fun createPermissionError(message: String) =
|
|
74
|
-
|
|
74
|
+
CompatGeolocationError(
|
|
75
75
|
code = RequestAuthorization.PERMISSION_DENIED.toDouble(),
|
|
76
76
|
message = message,
|
|
77
77
|
PERMISSION_DENIED = RequestAuthorization.PERMISSION_DENIED.toDouble(),
|
|
@@ -25,12 +25,12 @@ sealed class PermissionResult {
|
|
|
25
25
|
class RequestAuthorization(
|
|
26
26
|
private val reactContext: ReactApplicationContext,
|
|
27
27
|
private val onPermissionResult:
|
|
28
|
-
(PermissionResult, (() -> Unit)?, ((
|
|
28
|
+
(PermissionResult, (() -> Unit)?, ((CompatGeolocationError) -> Unit)?) -> Unit
|
|
29
29
|
) {
|
|
30
30
|
private var pendingAuthSuccess: (() -> Unit)? = null
|
|
31
|
-
private var pendingAuthError: ((error:
|
|
31
|
+
private var pendingAuthError: ((error: CompatGeolocationError) -> Unit)? = null
|
|
32
32
|
|
|
33
|
-
fun execute(success: (() -> Unit)?, error: ((error:
|
|
33
|
+
fun execute(success: (() -> Unit)?, error: ((error: CompatGeolocationError) -> Unit)?) {
|
|
34
34
|
val state = determinePermissionState()
|
|
35
35
|
executePermissionAction(state, success, error)
|
|
36
36
|
}
|
|
@@ -81,7 +81,7 @@ class RequestAuthorization(
|
|
|
81
81
|
private fun executePermissionAction(
|
|
82
82
|
state: PermissionState,
|
|
83
83
|
success: (() -> Unit)?,
|
|
84
|
-
error: ((error:
|
|
84
|
+
error: ((error: CompatGeolocationError) -> Unit)?
|
|
85
85
|
) {
|
|
86
86
|
when (state) {
|
|
87
87
|
is PermissionState.LegacyAndroid -> success?.invoke()
|
|
@@ -93,7 +93,7 @@ class RequestAuthorization(
|
|
|
93
93
|
|
|
94
94
|
private fun showPermissionDialog(
|
|
95
95
|
success: (() -> Unit)?,
|
|
96
|
-
error: ((error:
|
|
96
|
+
error: ((error: CompatGeolocationError) -> Unit)?
|
|
97
97
|
) {
|
|
98
98
|
pendingAuthSuccess = success
|
|
99
99
|
pendingAuthError = error
|
|
@@ -141,7 +141,7 @@ class RequestAuthorization(
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
private fun createPermissionError(message: String) =
|
|
144
|
-
|
|
144
|
+
CompatGeolocationError(
|
|
145
145
|
code = PERMISSION_DENIED.toDouble(),
|
|
146
146
|
message = message,
|
|
147
147
|
PERMISSION_DENIED = PERMISSION_DENIED.toDouble(),
|
|
@@ -20,18 +20,18 @@ class WatchPosition(private val reactContext: ReactApplicationContext) {
|
|
|
20
20
|
private val watchIdGenerator = AtomicInteger(0)
|
|
21
21
|
private var locationListener: LocationListener? = null
|
|
22
22
|
private var watchedProvider: String? = null
|
|
23
|
-
private var currentOptions:
|
|
23
|
+
private var currentOptions: CompatGeolocationOptions? = null
|
|
24
24
|
|
|
25
25
|
data class WatchCallback(
|
|
26
|
-
val success: (
|
|
27
|
-
val error: ((
|
|
28
|
-
val options:
|
|
26
|
+
val success: (CompatGeolocationResponse) -> Unit,
|
|
27
|
+
val error: ((CompatGeolocationError) -> Unit)?,
|
|
28
|
+
val options: CompatGeolocationOptions?
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
fun watch(
|
|
32
|
-
success: (
|
|
33
|
-
error: ((
|
|
34
|
-
options:
|
|
32
|
+
success: (CompatGeolocationResponse) -> Unit,
|
|
33
|
+
error: ((CompatGeolocationError) -> Unit)?,
|
|
34
|
+
options: CompatGeolocationOptions?
|
|
35
35
|
): Int {
|
|
36
36
|
val watchId = watchIdGenerator.incrementAndGet()
|
|
37
37
|
watchCallbacks[watchId] = WatchCallback(success, error, options)
|
|
@@ -65,7 +65,7 @@ class WatchPosition(private val reactContext: ReactApplicationContext) {
|
|
|
65
65
|
watchCallbacks.clear()
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
private fun startObserving(options:
|
|
68
|
+
private fun startObserving(options: CompatGeolocationOptions?) {
|
|
69
69
|
val locationManager =
|
|
70
70
|
reactContext.getSystemService(Context.LOCATION_SERVICE) as? LocationManager
|
|
71
71
|
|
|
@@ -81,7 +81,7 @@ class WatchPosition(private val reactContext: ReactApplicationContext) {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
val opts = parseOptions(options)
|
|
84
|
-
val provider = getValidProvider(locationManager, opts.
|
|
84
|
+
val provider = getValidProvider(locationManager, opts.androidAccuracy)
|
|
85
85
|
|
|
86
86
|
if (provider == null) {
|
|
87
87
|
Log.e(TAG, "No location provider available")
|
|
@@ -143,69 +143,70 @@ class WatchPosition(private val reactContext: ReactApplicationContext) {
|
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
private fun emitErrorToAll(error:
|
|
146
|
+
private fun emitErrorToAll(error: CompatGeolocationError) {
|
|
147
147
|
watchCallbacks.values.forEach { callback -> callback.error?.invoke(error) }
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
private fun parseOptions(options:
|
|
150
|
+
private fun parseOptions(options: CompatGeolocationOptions?): ParsedOptions {
|
|
151
151
|
return ParsedOptions(
|
|
152
152
|
interval = options?.interval ?: DEFAULT_INTERVAL,
|
|
153
153
|
distanceFilter = options?.distanceFilter ?: DEFAULT_DISTANCE_FILTER,
|
|
154
|
-
|
|
154
|
+
androidAccuracy =
|
|
155
|
+
resolveAndroidAccuracy(
|
|
156
|
+
options?.accuracy,
|
|
157
|
+
options?.enableHighAccuracy ?: false
|
|
158
|
+
)
|
|
155
159
|
)
|
|
156
160
|
}
|
|
157
161
|
|
|
158
|
-
private fun getValidProvider(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
return when {
|
|
165
|
-
isProviderValid(locationManager, preferredProvider) -> preferredProvider
|
|
166
|
-
isProviderValid(locationManager, fallbackProvider) -> fallbackProvider
|
|
167
|
-
else -> null
|
|
162
|
+
private fun getValidProvider(
|
|
163
|
+
locationManager: LocationManager,
|
|
164
|
+
accuracy: AndroidAccuracyResolution
|
|
165
|
+
): String? {
|
|
166
|
+
return accuracy.providerOrder().firstOrNull { provider ->
|
|
167
|
+
isProviderValid(locationManager, provider)
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
private fun isProviderValid(locationManager: LocationManager, provider: String): Boolean {
|
|
172
172
|
if (!locationManager.isProviderEnabled(provider)) return false
|
|
173
173
|
|
|
174
|
-
val
|
|
175
|
-
|
|
174
|
+
val fineGranted =
|
|
175
|
+
ContextCompat.checkSelfPermission(
|
|
176
|
+
reactContext,
|
|
176
177
|
Manifest.permission.ACCESS_FINE_LOCATION
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
) == PackageManager.PERMISSION_GRANTED
|
|
179
|
+
val coarseGranted =
|
|
180
|
+
ContextCompat.checkSelfPermission(
|
|
181
|
+
reactContext,
|
|
182
|
+
Manifest.permission.ACCESS_COARSE_LOCATION
|
|
183
|
+
) == PackageManager.PERMISSION_GRANTED
|
|
184
|
+
|
|
185
|
+
return if (provider == LocationManager.GPS_PROVIDER) {
|
|
186
|
+
fineGranted
|
|
187
|
+
} else {
|
|
188
|
+
coarseGranted || fineGranted
|
|
189
|
+
}
|
|
181
190
|
}
|
|
182
191
|
|
|
183
|
-
private fun locationToPosition(location: Location):
|
|
184
|
-
return
|
|
192
|
+
private fun locationToPosition(location: Location): CompatGeolocationResponse {
|
|
193
|
+
return CompatGeolocationResponse(
|
|
185
194
|
coords =
|
|
186
195
|
GeolocationCoordinates(
|
|
187
196
|
latitude = location.latitude,
|
|
188
197
|
longitude = location.longitude,
|
|
189
|
-
altitude =
|
|
198
|
+
altitude = location.altitudeValue(),
|
|
190
199
|
accuracy = location.accuracy.toDouble(),
|
|
191
|
-
altitudeAccuracy =
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
location.hasVerticalAccuracy()
|
|
195
|
-
)
|
|
196
|
-
NullableDouble.create(location.verticalAccuracyMeters.toDouble())
|
|
197
|
-
else null,
|
|
198
|
-
heading =
|
|
199
|
-
if (location.hasBearing()) NullableDouble.create(location.bearing.toDouble())
|
|
200
|
-
else null,
|
|
201
|
-
speed = if (location.hasSpeed()) NullableDouble.create(location.speed.toDouble()) else null
|
|
200
|
+
altitudeAccuracy = location.altitudeAccuracyValue(),
|
|
201
|
+
heading = location.headingValue(),
|
|
202
|
+
speed = location.speedValue()
|
|
202
203
|
),
|
|
203
204
|
timestamp = location.time.toDouble()
|
|
204
205
|
)
|
|
205
206
|
}
|
|
206
207
|
|
|
207
|
-
private fun createError(code: Int, message: String):
|
|
208
|
-
return
|
|
208
|
+
private fun createError(code: Int, message: String): CompatGeolocationError {
|
|
209
|
+
return CompatGeolocationError(
|
|
209
210
|
code = code.toDouble(),
|
|
210
211
|
message = message,
|
|
211
212
|
PERMISSION_DENIED = GetCurrentPosition.PERMISSION_DENIED.toDouble(),
|
|
@@ -217,7 +218,7 @@ class WatchPosition(private val reactContext: ReactApplicationContext) {
|
|
|
217
218
|
private data class ParsedOptions(
|
|
218
219
|
val interval: Double,
|
|
219
220
|
val distanceFilter: Double,
|
|
220
|
-
val
|
|
221
|
+
val androidAccuracy: AndroidAccuracyResolution
|
|
221
222
|
)
|
|
222
223
|
|
|
223
224
|
companion object {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import CoreLocation
|
|
2
|
+
import NitroModules
|
|
3
|
+
|
|
4
|
+
extension CLLocation {
|
|
5
|
+
var nitroGeolocationMocked: Bool? {
|
|
6
|
+
if #available(iOS 15.0, *) {
|
|
7
|
+
return sourceInformation?.isSimulatedBySoftware
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return nil
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
var nitroGeolocationProvider: LocationProviderUsed {
|
|
14
|
+
return .unknown
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
var nitroGeolocationAltitude: NullableDouble {
|
|
18
|
+
return verticalAccuracy < 0 ? .first(NullType.null) : .second(altitude)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var nitroGeolocationAltitudeAccuracy: NullableDouble {
|
|
22
|
+
return verticalAccuracy < 0 ? .first(NullType.null) : .second(verticalAccuracy)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var nitroGeolocationHeading: NullableDouble {
|
|
26
|
+
return course >= 0 ? .second(course) : .first(NullType.null)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var nitroGeolocationSpeed: NullableDouble {
|
|
30
|
+
return speed >= 0 ? .second(speed) : .first(NullType.null)
|
|
31
|
+
}
|
|
32
|
+
}
|