react-native-nitro-geolocation 1.1.4 → 1.2.1

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.
Files changed (186) hide show
  1. package/README.md +97 -9
  2. package/android/build.gradle +6 -0
  3. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidAccuracy.kt +105 -0
  4. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidHeadingManager.kt +313 -0
  5. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidLocationSettings.kt +313 -0
  6. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/GetCurrentPosition.kt +46 -45
  7. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/LocationMetadata.kt +26 -0
  8. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/LocationValues.kt +31 -0
  9. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocation.kt +1027 -140
  10. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocationCompat.kt +11 -11
  11. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/RequestAuthorization.kt +6 -6
  12. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/WatchPosition.kt +46 -45
  13. package/ios/CLLocation+GeolocationMetadata.swift +32 -0
  14. package/ios/LocationManager.swift +205 -51
  15. package/ios/NitroGeolocation.swift +949 -110
  16. package/ios/NitroGeolocationCompat.swift +7 -7
  17. package/nitrogen/generated/android/c++/JAccuracyAuthorization.hpp +61 -0
  18. package/nitrogen/generated/android/c++/JAndroidAccuracyPreset.hpp +64 -0
  19. package/nitrogen/generated/android/c++/JAndroidGranularity.hpp +61 -0
  20. package/nitrogen/generated/android/c++/{JRNConfigurationInternal.hpp → JCompatGeolocationConfigurationInternal.hpp} +10 -10
  21. package/nitrogen/generated/android/c++/{JGeolocationError.hpp → JCompatGeolocationError.hpp} +10 -10
  22. package/nitrogen/generated/android/c++/JCompatGeolocationOptions.hpp +105 -0
  23. package/nitrogen/generated/android/c++/JCompatGeolocationResponse.hpp +67 -0
  24. package/nitrogen/generated/android/c++/JFunc_void_AccuracyAuthorization.hpp +77 -0
  25. package/nitrogen/generated/android/c++/JFunc_void_CompatGeolocationError.hpp +78 -0
  26. package/nitrogen/generated/android/c++/JFunc_void_CompatGeolocationResponse.hpp +84 -0
  27. package/nitrogen/generated/android/c++/JFunc_void_GeolocationResponse.hpp +2 -0
  28. package/nitrogen/generated/android/c++/JFunc_void_Heading.hpp +78 -0
  29. package/nitrogen/generated/android/c++/JFunc_void_LocationProviderStatus.hpp +78 -0
  30. package/nitrogen/generated/android/c++/JFunc_void_PermissionStatus.hpp +77 -0
  31. package/nitrogen/generated/android/c++/JFunc_void_std__vector_GeocodedLocation_.hpp +97 -0
  32. package/nitrogen/generated/android/c++/JFunc_void_std__vector_ReverseGeocodedAddress_.hpp +98 -0
  33. package/nitrogen/generated/android/c++/JGeocodedLocation.hpp +65 -0
  34. package/nitrogen/generated/android/c++/JGeocodingCoordinates.hpp +61 -0
  35. package/nitrogen/generated/android/c++/{JModernGeolocationConfiguration.hpp → JGeolocationConfiguration.hpp} +10 -10
  36. package/nitrogen/generated/android/c++/JGeolocationResponse.hpp +13 -3
  37. package/nitrogen/generated/android/c++/JHeading.hpp +69 -0
  38. package/nitrogen/generated/android/c++/JHeadingOptions.hpp +57 -0
  39. package/nitrogen/generated/android/c++/JHybridNitroGeolocationCompatSpec.cpp +46 -30
  40. package/nitrogen/generated/android/c++/JHybridNitroGeolocationCompatSpec.hpp +4 -4
  41. package/nitrogen/generated/android/c++/JHybridNitroGeolocationSpec.cpp +169 -33
  42. package/nitrogen/generated/android/c++/JHybridNitroGeolocationSpec.hpp +14 -3
  43. package/nitrogen/generated/android/c++/JIOSAccuracyPreset.hpp +73 -0
  44. package/nitrogen/generated/android/c++/JIOSActivityType.hpp +67 -0
  45. package/nitrogen/generated/android/c++/JLocationAccuracyOptions.hpp +65 -0
  46. package/nitrogen/generated/android/c++/JLocationAvailability.hpp +62 -0
  47. package/nitrogen/generated/android/c++/JLocationProviderStatus.hpp +77 -0
  48. package/nitrogen/generated/android/c++/JLocationProviderUsed.hpp +67 -0
  49. package/nitrogen/generated/android/c++/JLocationRequestOptions.hpp +49 -3
  50. package/nitrogen/generated/android/c++/{JGeolocationOptions.hpp → JLocationSettingsOptions.hpp} +28 -22
  51. package/nitrogen/generated/android/c++/JReverseGeocodedAddress.hpp +82 -0
  52. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AccuracyAuthorization.kt +24 -0
  53. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidAccuracyPreset.kt +25 -0
  54. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidGranularity.kt +24 -0
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{RNConfigurationInternal.kt → CompatGeolocationConfigurationInternal.kt} +5 -5
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{GeolocationError.kt → CompatGeolocationError.kt} +5 -5
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/CompatGeolocationOptions.kt +68 -0
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/CompatGeolocationResponse.kt +41 -0
  59. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_AccuracyAuthorization.kt +80 -0
  60. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{Func_void_GeolocationError.kt → Func_void_CompatGeolocationError.kt} +9 -9
  61. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_CompatGeolocationResponse.kt +80 -0
  62. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_Heading.kt +80 -0
  63. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_LocationProviderStatus.kt +80 -0
  64. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_PermissionStatus.kt +80 -0
  65. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_std__vector_GeocodedLocation_.kt +80 -0
  66. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_std__vector_ReverseGeocodedAddress_.kt +80 -0
  67. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeocodedLocation.kt +44 -0
  68. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeocodingCoordinates.kt +41 -0
  69. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{ModernGeolocationConfiguration.kt → GeolocationConfiguration.kt} +5 -5
  70. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeolocationResponse.kt +9 -3
  71. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Heading.kt +47 -0
  72. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HeadingOptions.kt +38 -0
  73. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroGeolocationCompatSpec.kt +7 -7
  74. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroGeolocationSpec.kt +92 -3
  75. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSAccuracyPreset.kt +28 -0
  76. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSActivityType.kt +26 -0
  77. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationAccuracyOptions.kt +41 -0
  78. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationAvailability.kt +41 -0
  79. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderStatus.kt +53 -0
  80. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderUsed.kt +26 -0
  81. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationRequestOptions.kt +30 -3
  82. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/{GeolocationOptions.kt → LocationSettingsOptions.kt} +11 -11
  83. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/ReverseGeocodedAddress.kt +56 -0
  84. package/nitrogen/generated/android/nitrogeolocationOnLoad.cpp +18 -4
  85. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.cpp +76 -12
  86. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.hpp +519 -77
  87. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Umbrella.hpp +61 -12
  88. package/nitrogen/generated/ios/c++/HybridNitroGeolocationCompatSpecSwift.hpp +28 -16
  89. package/nitrogen/generated/ios/c++/HybridNitroGeolocationSpecSwift.hpp +131 -13
  90. package/nitrogen/generated/ios/swift/AccuracyAuthorization.swift +44 -0
  91. package/nitrogen/generated/ios/swift/AndroidAccuracyPreset.swift +48 -0
  92. package/nitrogen/generated/ios/swift/AndroidGranularity.swift +44 -0
  93. package/nitrogen/generated/ios/swift/{RNConfigurationInternal.swift → CompatGeolocationConfigurationInternal.swift} +5 -5
  94. package/nitrogen/generated/ios/swift/{GeolocationError.swift → CompatGeolocationError.swift} +5 -5
  95. package/nitrogen/generated/ios/swift/CompatGeolocationOptions.swift +208 -0
  96. package/nitrogen/generated/ios/swift/CompatGeolocationResponse.swift +34 -0
  97. package/nitrogen/generated/ios/swift/Func_void_AccuracyAuthorization.swift +46 -0
  98. package/nitrogen/generated/ios/swift/Func_void_CompatGeolocationError.swift +46 -0
  99. package/nitrogen/generated/ios/swift/Func_void_CompatGeolocationResponse.swift +46 -0
  100. package/nitrogen/generated/ios/swift/{Func_void_GeolocationError.swift → Func_void_Heading.swift} +11 -11
  101. package/nitrogen/generated/ios/swift/Func_void_LocationAvailability.swift +46 -0
  102. package/nitrogen/generated/ios/swift/Func_void_LocationProviderStatus.swift +46 -0
  103. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  104. package/nitrogen/generated/ios/swift/Func_void_std__vector_GeocodedLocation_.swift +46 -0
  105. package/nitrogen/generated/ios/swift/Func_void_std__vector_ReverseGeocodedAddress_.swift +46 -0
  106. package/nitrogen/generated/ios/swift/GeocodedLocation.swift +52 -0
  107. package/nitrogen/generated/ios/swift/GeocodingCoordinates.swift +34 -0
  108. package/nitrogen/generated/ios/swift/{ModernGeolocationConfiguration.swift → GeolocationConfiguration.swift} +5 -5
  109. package/nitrogen/generated/ios/swift/GeolocationResponse.swift +31 -2
  110. package/nitrogen/generated/ios/swift/Heading.swift +70 -0
  111. package/nitrogen/generated/ios/swift/HeadingOptions.swift +42 -0
  112. package/nitrogen/generated/ios/swift/HybridNitroGeolocationCompatSpec.swift +4 -4
  113. package/nitrogen/generated/ios/swift/HybridNitroGeolocationCompatSpec_cxx.swift +28 -28
  114. package/nitrogen/generated/ios/swift/HybridNitroGeolocationSpec.swift +14 -3
  115. package/nitrogen/generated/ios/swift/HybridNitroGeolocationSpec_cxx.swift +318 -15
  116. package/nitrogen/generated/ios/swift/IOSAccuracyPreset.swift +60 -0
  117. package/nitrogen/generated/ios/swift/IOSActivityType.swift +52 -0
  118. package/nitrogen/generated/ios/swift/LocationAccuracyOptions.swift +46 -0
  119. package/nitrogen/generated/ios/swift/LocationAvailability.swift +47 -0
  120. package/nitrogen/generated/ios/swift/LocationProviderStatus.swift +106 -0
  121. package/nitrogen/generated/ios/swift/LocationProviderUsed.swift +52 -0
  122. package/nitrogen/generated/ios/swift/LocationRequestOptions.swift +142 -1
  123. package/nitrogen/generated/ios/swift/{GeolocationOptions.swift → LocationSettingsOptions.swift} +39 -46
  124. package/nitrogen/generated/ios/swift/ReverseGeocodedAddress.swift +150 -0
  125. package/nitrogen/generated/shared/c++/AccuracyAuthorization.hpp +80 -0
  126. package/nitrogen/generated/shared/c++/AndroidAccuracyPreset.hpp +84 -0
  127. package/nitrogen/generated/shared/c++/AndroidGranularity.hpp +80 -0
  128. package/nitrogen/generated/shared/c++/{RNConfigurationInternal.hpp → CompatGeolocationConfigurationInternal.hpp} +11 -11
  129. package/nitrogen/generated/shared/c++/{GeolocationError.hpp → CompatGeolocationError.hpp} +11 -11
  130. package/nitrogen/generated/shared/c++/CompatGeolocationOptions.hpp +128 -0
  131. package/nitrogen/generated/shared/c++/CompatGeolocationResponse.hpp +88 -0
  132. package/nitrogen/generated/shared/c++/GeocodedLocation.hpp +91 -0
  133. package/nitrogen/generated/shared/c++/GeocodingCoordinates.hpp +87 -0
  134. package/nitrogen/generated/shared/c++/{ModernGeolocationConfiguration.hpp → GeolocationConfiguration.hpp} +11 -11
  135. package/nitrogen/generated/shared/c++/GeolocationResponse.hpp +14 -2
  136. package/nitrogen/generated/shared/c++/Heading.hpp +95 -0
  137. package/nitrogen/generated/shared/c++/HeadingOptions.hpp +83 -0
  138. package/nitrogen/generated/shared/c++/HybridNitroGeolocationCompatSpec.hpp +16 -16
  139. package/nitrogen/generated/shared/c++/HybridNitroGeolocationSpec.cpp +11 -0
  140. package/nitrogen/generated/shared/c++/HybridNitroGeolocationSpec.hpp +51 -12
  141. package/nitrogen/generated/shared/c++/IOSAccuracyPreset.hpp +96 -0
  142. package/nitrogen/generated/shared/c++/IOSActivityType.hpp +88 -0
  143. package/nitrogen/generated/shared/c++/LocationAccuracyOptions.hpp +92 -0
  144. package/nitrogen/generated/shared/c++/LocationAvailability.hpp +88 -0
  145. package/nitrogen/generated/shared/c++/LocationProviderStatus.hpp +103 -0
  146. package/nitrogen/generated/shared/c++/LocationProviderUsed.hpp +88 -0
  147. package/nitrogen/generated/shared/c++/LocationRequestOptions.hpp +47 -3
  148. package/nitrogen/generated/shared/c++/{GeolocationOptions.hpp → LocationSettingsOptions.hpp} +26 -24
  149. package/nitrogen/generated/shared/c++/ReverseGeocodedAddress.hpp +108 -0
  150. package/package.json +1 -1
  151. package/src/NitroGeolocation.nitro.ts +292 -18
  152. package/src/NitroGeolocationCompat.nitro.ts +12 -12
  153. package/src/api/geocode.ts +18 -0
  154. package/src/api/getAccuracyAuthorization.ts +12 -0
  155. package/src/api/getCurrentPosition.ts +5 -3
  156. package/src/api/getHeading.ts +13 -0
  157. package/src/api/getLastKnownPosition.ts +28 -0
  158. package/src/api/getLocationAvailability.ts +11 -0
  159. package/src/api/getProviderStatus.ts +16 -0
  160. package/src/api/hasServicesEnabled.ts +13 -0
  161. package/src/api/index.ts +11 -0
  162. package/src/api/requestLocationSettings.ts +29 -0
  163. package/src/api/requestPermission.ts +3 -1
  164. package/src/api/requestTemporaryFullAccuracy.ts +21 -0
  165. package/src/api/reverseGeocode.ts +23 -0
  166. package/src/api/setConfiguration.ts +8 -4
  167. package/src/api/watchHeading.ts +19 -0
  168. package/src/api/watchPosition.ts +2 -2
  169. package/src/compat/getCurrentPosition.ts +7 -7
  170. package/src/compat/index.tsx +5 -5
  171. package/src/compat/requestAuthorization.ts +2 -2
  172. package/src/compat/setRNConfiguration.ts +7 -5
  173. package/src/compat/watchPosition.ts +7 -7
  174. package/src/devtools/getCurrentPosition.ts +5 -3
  175. package/src/devtools/index.ts +1 -1
  176. package/src/devtools/watchPosition.ts +6 -7
  177. package/src/hooks/useWatchPosition.ts +2 -2
  178. package/src/index.tsx +35 -6
  179. package/src/publicTypes.ts +108 -0
  180. package/src/types.ts +113 -37
  181. package/src/utils/errors.test.ts +65 -0
  182. package/src/utils/errors.ts +45 -18
  183. package/src/utils/index.ts +2 -2
  184. package/src/utils/provider.test.ts +172 -1
  185. package/src/utils/provider.ts +50 -5
  186. 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: RNConfigurationInternal =
12
- RNConfigurationInternal(
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: RNConfigurationInternal) {
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: GeolocationError) -> Unit)?
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: GeolocationResponse) -> Unit,
51
- error: ((error: GeolocationError) -> Unit)?,
52
- options: GeolocationOptions?
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: GeolocationResponse) -> Unit,
59
- error: ((error: GeolocationError) -> Unit)?,
60
- options: GeolocationOptions?
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
- GeolocationError(
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)?, ((GeolocationError) -> Unit)?) -> Unit
28
+ (PermissionResult, (() -> Unit)?, ((CompatGeolocationError) -> Unit)?) -> Unit
29
29
  ) {
30
30
  private var pendingAuthSuccess: (() -> Unit)? = null
31
- private var pendingAuthError: ((error: GeolocationError) -> Unit)? = null
31
+ private var pendingAuthError: ((error: CompatGeolocationError) -> Unit)? = null
32
32
 
33
- fun execute(success: (() -> Unit)?, error: ((error: GeolocationError) -> Unit)?) {
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: GeolocationError) -> Unit)?
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: GeolocationError) -> Unit)?
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
- GeolocationError(
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: GeolocationOptions? = null
23
+ private var currentOptions: CompatGeolocationOptions? = null
24
24
 
25
25
  data class WatchCallback(
26
- val success: (GeolocationResponse) -> Unit,
27
- val error: ((GeolocationError) -> Unit)?,
28
- val options: GeolocationOptions?
26
+ val success: (CompatGeolocationResponse) -> Unit,
27
+ val error: ((CompatGeolocationError) -> Unit)?,
28
+ val options: CompatGeolocationOptions?
29
29
  )
30
30
 
31
31
  fun watch(
32
- success: (GeolocationResponse) -> Unit,
33
- error: ((GeolocationError) -> Unit)?,
34
- options: GeolocationOptions?
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: GeolocationOptions?) {
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.enableHighAccuracy)
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: GeolocationError) {
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: GeolocationOptions?): ParsedOptions {
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
- enableHighAccuracy = options?.enableHighAccuracy ?: false
154
+ androidAccuracy =
155
+ resolveAndroidAccuracy(
156
+ options?.accuracy,
157
+ options?.enableHighAccuracy ?: false
158
+ )
155
159
  )
156
160
  }
157
161
 
158
- private fun getValidProvider(locationManager: LocationManager, highAccuracy: Boolean): String? {
159
- val preferredProvider =
160
- if (highAccuracy) LocationManager.GPS_PROVIDER else LocationManager.NETWORK_PROVIDER
161
- val fallbackProvider =
162
- if (highAccuracy) LocationManager.NETWORK_PROVIDER else LocationManager.GPS_PROVIDER
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 permission =
175
- if (provider == LocationManager.GPS_PROVIDER)
174
+ val fineGranted =
175
+ ContextCompat.checkSelfPermission(
176
+ reactContext,
176
177
  Manifest.permission.ACCESS_FINE_LOCATION
177
- else Manifest.permission.ACCESS_COARSE_LOCATION
178
-
179
- return ContextCompat.checkSelfPermission(reactContext, permission) ==
180
- PackageManager.PERMISSION_GRANTED
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): GeolocationResponse {
184
- return GeolocationResponse(
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 = if (location.hasAltitude()) NullableDouble.create(location.altitude) else null,
198
+ altitude = location.altitudeValue(),
190
199
  accuracy = location.accuracy.toDouble(),
191
- altitudeAccuracy =
192
- if (android.os.Build.VERSION.SDK_INT >=
193
- android.os.Build.VERSION_CODES.O &&
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): GeolocationError {
208
- return GeolocationError(
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 enableHighAccuracy: Boolean
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
+ }