react-native-nitro-geolocation 1.2.6 → 1.3.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 (223) hide show
  1. package/README.md +61 -272
  2. package/android/build.gradle +1 -0
  3. package/android/src/main/AndroidManifest.xml +39 -0
  4. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProvider.kt +310 -0
  5. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedRequestFactory.kt +31 -0
  6. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationConversions.kt +71 -0
  7. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationErrors.kt +85 -0
  8. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationOptions.kt +92 -0
  9. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidLocationSettings.kt +3 -0
  10. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRoute.kt +74 -0
  11. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroBackgroundLocation.kt +132 -0
  12. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocation.kt +219 -476
  13. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundHttpSync.kt +134 -0
  14. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundPermissions.kt +196 -0
  15. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundSerialization.kt +266 -0
  16. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroActivityRecognitionReceiver.kt +13 -0
  17. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundEventHub.kt +65 -0
  18. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundHeadlessTaskService.kt +58 -0
  19. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationController.kt +711 -0
  20. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationService.kt +48 -0
  21. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundNotificationFactory.kt +37 -0
  22. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundStore.kt +655 -0
  23. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBootReceiver.kt +26 -0
  24. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroGeofenceReceiver.kt +14 -0
  25. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroLocationUpdateReceiver.kt +37 -0
  26. package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProviderTest.kt +64 -0
  27. package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRouteTest.kt +116 -0
  28. package/ios/IOSBackgroundHttpSync.swift +126 -0
  29. package/ios/IOSBackgroundLocationDelegate.swift +36 -0
  30. package/ios/IOSBackgroundMotion.swift +55 -0
  31. package/ios/IOSBackgroundSerialization.swift +539 -0
  32. package/ios/IOSGeolocationConversions.swift +131 -0
  33. package/ios/IOSGeolocationDelegate.swift +31 -0
  34. package/ios/IOSGeolocationErrors.swift +39 -0
  35. package/ios/IOSGeolocationOptions.swift +135 -0
  36. package/ios/NitroBackgroundLocation.swift +849 -0
  37. package/ios/NitroGeolocation.swift +14 -347
  38. package/nitrogen/generated/android/c++/JActivityRecognitionOptions.hpp +69 -0
  39. package/nitrogen/generated/android/c++/JAndroidBackgroundLocationOptions.hpp +74 -0
  40. package/nitrogen/generated/android/c++/JAndroidBackgroundLocationStatus.hpp +67 -0
  41. package/nitrogen/generated/android/c++/JAndroidBackgroundProvider.hpp +61 -0
  42. package/nitrogen/generated/android/c++/JAndroidForegroundServiceOptions.hpp +90 -0
  43. package/nitrogen/generated/android/c++/JBackgroundEventEnvelope.hpp +129 -0
  44. package/nitrogen/generated/android/c++/JBackgroundEventType.hpp +70 -0
  45. package/nitrogen/generated/android/c++/JBackgroundHttpMethod.hpp +61 -0
  46. package/nitrogen/generated/android/c++/JBackgroundHttpSyncOptions.hpp +131 -0
  47. package/nitrogen/generated/android/c++/JBackgroundHttpSyncResult.hpp +111 -0
  48. package/nitrogen/generated/android/c++/JBackgroundLocation.hpp +110 -0
  49. package/nitrogen/generated/android/c++/JBackgroundLocationOptions.hpp +162 -0
  50. package/nitrogen/generated/android/c++/JBackgroundLocationSource.hpp +73 -0
  51. package/nitrogen/generated/android/c++/JBackgroundLocationState.hpp +70 -0
  52. package/nitrogen/generated/android/c++/JBackgroundLocationStatus.hpp +126 -0
  53. package/nitrogen/generated/android/c++/JBackgroundPermissionResult.hpp +79 -0
  54. package/nitrogen/generated/android/c++/JBackgroundPermissionStatus.hpp +64 -0
  55. package/nitrogen/generated/android/c++/JBackgroundTrackingMode.hpp +61 -0
  56. package/nitrogen/generated/android/c++/JBatterySnapshot.hpp +61 -0
  57. package/nitrogen/generated/android/c++/JDetectedActivity.hpp +66 -0
  58. package/nitrogen/generated/android/c++/JDetectedActivityType.hpp +76 -0
  59. package/nitrogen/generated/android/c++/JFunc_void_BackgroundEventEnvelope.hpp +114 -0
  60. package/nitrogen/generated/android/c++/JFunc_void_BackgroundLocation.hpp +95 -0
  61. package/nitrogen/generated/android/c++/JGeofenceEvent.hpp +94 -0
  62. package/nitrogen/generated/android/c++/JGeofenceRegion.hpp +112 -0
  63. package/nitrogen/generated/android/c++/JGeofenceTransition.hpp +61 -0
  64. package/nitrogen/generated/android/c++/JGeofencingOptions.hpp +82 -0
  65. package/nitrogen/generated/android/c++/JGetStoredBackgroundEventsOptions.hpp +90 -0
  66. package/nitrogen/generated/android/c++/JGetStoredBackgroundLocationsOptions.hpp +69 -0
  67. package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.cpp +662 -0
  68. package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.hpp +89 -0
  69. package/nitrogen/generated/android/c++/JIOSBackgroundActivityType.hpp +67 -0
  70. package/nitrogen/generated/android/c++/JIOSBackgroundLocationOptions.hpp +79 -0
  71. package/nitrogen/generated/android/c++/JIOSBackgroundLocationStatus.hpp +61 -0
  72. package/nitrogen/generated/android/c++/JLocationProviderStatus.hpp +5 -1
  73. package/nitrogen/generated/android/c++/JStoredBackgroundEventEnvelope.hpp +115 -0
  74. package/nitrogen/generated/android/c++/JStoredBackgroundLocation.hpp +122 -0
  75. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.cpp +34 -0
  76. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.hpp +100 -0
  77. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/ActivityRecognitionOptions.kt +66 -0
  78. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationOptions.kt +66 -0
  79. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationStatus.kt +61 -0
  80. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundProvider.kt +24 -0
  81. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidForegroundServiceOptions.kt +91 -0
  82. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventEnvelope.kt +96 -0
  83. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventType.kt +27 -0
  84. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpMethod.kt +24 -0
  85. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncOptions.kt +101 -0
  86. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncResult.kt +71 -0
  87. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocation.kt +96 -0
  88. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationOptions.kt +136 -0
  89. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationSource.kt +28 -0
  90. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationState.kt +27 -0
  91. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationStatus.kt +116 -0
  92. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionResult.kt +71 -0
  93. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionStatus.kt +25 -0
  94. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundTrackingMode.kt +24 -0
  95. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BatterySnapshot.kt +56 -0
  96. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivity.kt +61 -0
  97. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivityType.kt +29 -0
  98. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundEventEnvelope.kt +80 -0
  99. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundLocation.kt +80 -0
  100. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceEvent.kt +66 -0
  101. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceRegion.kt +96 -0
  102. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceTransition.kt +24 -0
  103. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofencingOptions.kt +56 -0
  104. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundEventsOptions.kt +66 -0
  105. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundLocationsOptions.kt +66 -0
  106. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroBackgroundLocationSpec.kt +174 -0
  107. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundActivityType.kt +26 -0
  108. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationOptions.kt +76 -0
  109. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationStatus.kt +56 -0
  110. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderStatus.kt +7 -2
  111. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundEventEnvelope.kt +76 -0
  112. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundLocation.kt +111 -0
  113. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Variant_NullType_Boolean_String_Double.kt +88 -0
  114. package/nitrogen/generated/android/nitrogeolocation+autolinking.cmake +3 -0
  115. package/nitrogen/generated/android/nitrogeolocationOnLoad.cpp +20 -0
  116. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.cpp +104 -15
  117. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.hpp +1107 -50
  118. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Umbrella.hpp +102 -0
  119. package/nitrogen/generated/ios/NitroGeolocationAutolinking.mm +8 -0
  120. package/nitrogen/generated/ios/NitroGeolocationAutolinking.swift +15 -3
  121. package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.cpp +11 -0
  122. package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.hpp +416 -0
  123. package/nitrogen/generated/ios/swift/ActivityRecognitionOptions.swift +96 -0
  124. package/nitrogen/generated/ios/swift/AndroidBackgroundLocationOptions.swift +76 -0
  125. package/nitrogen/generated/ios/swift/AndroidBackgroundLocationStatus.swift +58 -0
  126. package/nitrogen/generated/ios/swift/AndroidBackgroundProvider.swift +44 -0
  127. package/nitrogen/generated/ios/swift/AndroidForegroundServiceOptions.swift +160 -0
  128. package/nitrogen/generated/ios/swift/BackgroundEventEnvelope.swift +110 -0
  129. package/nitrogen/generated/ios/swift/BackgroundEventType.swift +56 -0
  130. package/nitrogen/generated/ios/swift/BackgroundHttpMethod.swift +44 -0
  131. package/nitrogen/generated/ios/swift/BackgroundHttpSyncOptions.swift +259 -0
  132. package/nitrogen/generated/ios/swift/BackgroundHttpSyncResult.swift +87 -0
  133. package/nitrogen/generated/ios/swift/BackgroundLocation.swift +118 -0
  134. package/nitrogen/generated/ios/swift/BackgroundLocationOptions.swift +292 -0
  135. package/nitrogen/generated/ios/swift/BackgroundLocationSource.swift +60 -0
  136. package/nitrogen/generated/ios/swift/BackgroundLocationState.swift +56 -0
  137. package/nitrogen/generated/ios/swift/BackgroundLocationStatus.swift +124 -0
  138. package/nitrogen/generated/ios/swift/BackgroundPermissionResult.swift +81 -0
  139. package/nitrogen/generated/ios/swift/BackgroundPermissionStatus.swift +48 -0
  140. package/nitrogen/generated/ios/swift/BackgroundTrackingMode.swift +44 -0
  141. package/nitrogen/generated/ios/swift/BatterySnapshot.swift +60 -0
  142. package/nitrogen/generated/ios/swift/DetectedActivity.swift +39 -0
  143. package/nitrogen/generated/ios/swift/DetectedActivityType.swift +64 -0
  144. package/nitrogen/generated/ios/swift/Func_void_BackgroundEventEnvelope.swift +46 -0
  145. package/nitrogen/generated/ios/swift/Func_void_BackgroundHttpSyncResult.swift +46 -0
  146. package/nitrogen/generated/ios/swift/Func_void_BackgroundLocation.swift +46 -0
  147. package/nitrogen/generated/ios/swift/Func_void_BackgroundLocationStatus.swift +46 -0
  148. package/nitrogen/generated/ios/swift/Func_void_BackgroundPermissionResult.swift +46 -0
  149. package/nitrogen/generated/ios/swift/Func_void_std__optional_BackgroundLocationOptions_.swift +46 -0
  150. package/nitrogen/generated/ios/swift/Func_void_std__vector_GeofenceRegion_.swift +46 -0
  151. package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundEventEnvelope_.swift +46 -0
  152. package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundLocation_.swift +46 -0
  153. package/nitrogen/generated/ios/swift/GeofenceEvent.swift +50 -0
  154. package/nitrogen/generated/ios/swift/GeofenceRegion.swift +195 -0
  155. package/nitrogen/generated/ios/swift/GeofenceTransition.swift +44 -0
  156. package/nitrogen/generated/ios/swift/GeofencingOptions.swift +66 -0
  157. package/nitrogen/generated/ios/swift/GetStoredBackgroundEventsOptions.swift +102 -0
  158. package/nitrogen/generated/ios/swift/GetStoredBackgroundLocationsOptions.swift +96 -0
  159. package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec.swift +81 -0
  160. package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec_cxx.swift +654 -0
  161. package/nitrogen/generated/ios/swift/IOSBackgroundActivityType.swift +52 -0
  162. package/nitrogen/generated/ios/swift/IOSBackgroundLocationOptions.swift +125 -0
  163. package/nitrogen/generated/ios/swift/IOSBackgroundLocationStatus.swift +34 -0
  164. package/nitrogen/generated/ios/swift/LocationProviderStatus.swift +19 -1
  165. package/nitrogen/generated/ios/swift/StoredBackgroundEventEnvelope.swift +54 -0
  166. package/nitrogen/generated/ios/swift/StoredBackgroundLocation.swift +120 -0
  167. package/nitrogen/generated/ios/swift/Variant_NullType_Bool_String_Double.swift +34 -0
  168. package/nitrogen/generated/shared/c++/ActivityRecognitionOptions.hpp +95 -0
  169. package/nitrogen/generated/shared/c++/AndroidBackgroundLocationOptions.hpp +100 -0
  170. package/nitrogen/generated/shared/c++/AndroidBackgroundLocationStatus.hpp +93 -0
  171. package/nitrogen/generated/shared/c++/AndroidBackgroundProvider.hpp +80 -0
  172. package/nitrogen/generated/shared/c++/AndroidForegroundServiceOptions.hpp +116 -0
  173. package/nitrogen/generated/shared/c++/BackgroundEventEnvelope.hpp +140 -0
  174. package/nitrogen/generated/shared/c++/BackgroundEventType.hpp +92 -0
  175. package/nitrogen/generated/shared/c++/BackgroundHttpMethod.hpp +80 -0
  176. package/nitrogen/generated/shared/c++/BackgroundHttpSyncOptions.hpp +129 -0
  177. package/nitrogen/generated/shared/c++/BackgroundHttpSyncResult.hpp +101 -0
  178. package/nitrogen/generated/shared/c++/BackgroundLocation.hpp +134 -0
  179. package/nitrogen/generated/shared/c++/BackgroundLocationOptions.hpp +174 -0
  180. package/nitrogen/generated/shared/c++/BackgroundLocationSource.hpp +96 -0
  181. package/nitrogen/generated/shared/c++/BackgroundLocationState.hpp +92 -0
  182. package/nitrogen/generated/shared/c++/BackgroundLocationStatus.hpp +158 -0
  183. package/nitrogen/generated/shared/c++/BackgroundPermissionResult.hpp +107 -0
  184. package/nitrogen/generated/shared/c++/BackgroundPermissionStatus.hpp +84 -0
  185. package/nitrogen/generated/shared/c++/BackgroundTrackingMode.hpp +80 -0
  186. package/nitrogen/generated/shared/c++/BatterySnapshot.hpp +87 -0
  187. package/nitrogen/generated/shared/c++/DetectedActivity.hpp +92 -0
  188. package/nitrogen/generated/shared/c++/DetectedActivityType.hpp +100 -0
  189. package/nitrogen/generated/shared/c++/GeofenceEvent.hpp +103 -0
  190. package/nitrogen/generated/shared/c++/GeofenceRegion.hpp +123 -0
  191. package/nitrogen/generated/shared/c++/GeofenceTransition.hpp +80 -0
  192. package/nitrogen/generated/shared/c++/GeofencingOptions.hpp +90 -0
  193. package/nitrogen/generated/shared/c++/GetStoredBackgroundEventsOptions.hpp +98 -0
  194. package/nitrogen/generated/shared/c++/GetStoredBackgroundLocationsOptions.hpp +95 -0
  195. package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.cpp +47 -0
  196. package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.hpp +133 -0
  197. package/nitrogen/generated/shared/c++/IOSBackgroundActivityType.hpp +88 -0
  198. package/nitrogen/generated/shared/c++/IOSBackgroundLocationOptions.hpp +105 -0
  199. package/nitrogen/generated/shared/c++/IOSBackgroundLocationStatus.hpp +87 -0
  200. package/nitrogen/generated/shared/c++/LocationProviderStatus.hpp +5 -1
  201. package/nitrogen/generated/shared/c++/StoredBackgroundEventEnvelope.hpp +108 -0
  202. package/nitrogen/generated/shared/c++/StoredBackgroundLocation.hpp +146 -0
  203. package/package.json +17 -6
  204. package/src/NitroGeolocation.nitro.ts +4 -4
  205. package/src/api/getCurrentPosition.ts +1 -1
  206. package/src/api/requestLocationSettings.ts +3 -2
  207. package/src/background/NitroBackgroundLocation.nitro.ts +83 -0
  208. package/src/background/index.ts +200 -0
  209. package/src/background/index.web.ts +120 -0
  210. package/src/background/task.ts +13 -0
  211. package/src/background/types.ts +328 -0
  212. package/src/compat/index.web.ts +141 -0
  213. package/src/index.tsx +3 -0
  214. package/src/index.web.tsx +41 -0
  215. package/src/publicTypes.ts +6 -5
  216. package/src/types.ts +3 -0
  217. package/src/web/browser.ts +171 -0
  218. package/src/web/index.ts +167 -0
  219. package/src/web/useWatchPosition.ts +76 -0
  220. package/src/web/watch.ts +81 -0
  221. package/src/devtools/index.test.ts +0 -54
  222. package/src/utils/errors.test.ts +0 -65
  223. package/src/utils/provider.test.ts +0 -303
@@ -2,38 +2,6 @@ import Foundation
2
2
  import CoreLocation
3
3
  import NitroModules
4
4
 
5
- /**
6
- * LocationManager Delegate class to handle CLLocationManager callbacks.
7
- */
8
- private class LocationManagerDelegate: NSObject, CLLocationManagerDelegate {
9
- weak var geolocation: NitroGeolocation?
10
-
11
- init(geolocation: NitroGeolocation) {
12
- self.geolocation = geolocation
13
- super.init()
14
- }
15
-
16
- func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
17
- geolocation?.handleAuthorizationChange(manager)
18
- }
19
-
20
- func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
21
- geolocation?.handleLocationUpdate(locations)
22
- }
23
-
24
- func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
25
- geolocation?.handleLocationError(error)
26
- }
27
-
28
- func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
29
- geolocation?.handleHeadingUpdate(newHeading)
30
- }
31
-
32
- func locationManagerShouldDisplayHeadingCalibration(_ manager: CLLocationManager) -> Bool {
33
- return false
34
- }
35
- }
36
-
37
5
  /**
38
6
  * Geolocation implementation for the native Modern API contract.
39
7
  *
@@ -44,138 +12,6 @@ private class LocationManagerDelegate: NSObject, CLLocationManagerDelegate {
44
12
  * - Automatic subscription management
45
13
  */
46
14
  class NitroGeolocation: HybridNitroGeolocationSpec {
47
- // MARK: - Types
48
-
49
- private struct ParsedOptions {
50
- let timeout: Double
51
- let maximumAge: Double
52
- let accuracy: CLLocationAccuracy
53
- let distanceFilter: CLLocationDistance
54
- let useSignificantChanges: Bool
55
- let activityType: CLActivityType?
56
- let pausesLocationUpdatesAutomatically: Bool?
57
- let showsBackgroundLocationIndicator: Bool?
58
-
59
- static let DEFAULT_TIMEOUT: Double = 10 * 60 * 1000 // 10 minutes in ms
60
- static let DEFAULT_MAXIMUM_AGE: Double = 0
61
-
62
- static func parse(
63
- from options: LocationRequestOptions?,
64
- defaultMaximumAge: Double = DEFAULT_MAXIMUM_AGE
65
- ) -> ParsedOptions {
66
- let timeout = options?.timeout ?? DEFAULT_TIMEOUT
67
- let maximumAge = options?.maximumAge ?? defaultMaximumAge
68
- let enableHighAccuracy = options?.enableHighAccuracy ?? false
69
- let accuracy = resolveAccuracy(
70
- preset: options?.accuracy?.ios,
71
- enableHighAccuracy: enableHighAccuracy
72
- )
73
- let distanceFilter = options?.distanceFilter ?? kCLDistanceFilterNone
74
- let useSignificantChanges = options?.useSignificantChanges ?? false
75
-
76
- return ParsedOptions(
77
- timeout: timeout,
78
- maximumAge: maximumAge,
79
- accuracy: accuracy,
80
- distanceFilter: distanceFilter,
81
- useSignificantChanges: useSignificantChanges,
82
- activityType: resolveActivityType(options?.activityType),
83
- pausesLocationUpdatesAutomatically: options?.pausesLocationUpdatesAutomatically,
84
- showsBackgroundLocationIndicator: options?.showsBackgroundLocationIndicator
85
- )
86
- }
87
-
88
- static func parseLastKnown(from options: LocationRequestOptions?) -> ParsedOptions {
89
- return parse(from: options, defaultMaximumAge: Double.infinity)
90
- }
91
-
92
- private static func resolveAccuracy(
93
- preset: IOSAccuracyPreset?,
94
- enableHighAccuracy: Bool
95
- ) -> CLLocationAccuracy {
96
- guard let preset else {
97
- return enableHighAccuracy
98
- ? kCLLocationAccuracyBest
99
- : kCLLocationAccuracyHundredMeters
100
- }
101
-
102
- switch preset {
103
- case .bestfornavigation:
104
- return kCLLocationAccuracyBestForNavigation
105
- case .best:
106
- return kCLLocationAccuracyBest
107
- case .nearesttenmeters:
108
- return kCLLocationAccuracyNearestTenMeters
109
- case .hundredmeters:
110
- return kCLLocationAccuracyHundredMeters
111
- case .kilometer:
112
- return kCLLocationAccuracyKilometer
113
- case .threekilometers:
114
- return kCLLocationAccuracyThreeKilometers
115
- case .reduced:
116
- return kCLLocationAccuracyReduced
117
- }
118
- }
119
-
120
- private static func resolveActivityType(_ activityType: IOSActivityType?) -> CLActivityType? {
121
- guard let activityType else {
122
- return nil
123
- }
124
-
125
- switch activityType {
126
- case .other:
127
- return .other
128
- case .automotivenavigation:
129
- return .automotiveNavigation
130
- case .fitness:
131
- return .fitness
132
- case .othernavigation:
133
- return .otherNavigation
134
- case .airborne:
135
- return .airborne
136
- }
137
- }
138
- }
139
-
140
- // Watch subscription storage (first-class functions!)
141
- private struct WatchSubscription {
142
- let token: String
143
- let success: (GeolocationResponse) -> Void
144
- let error: ((LocationError) -> Void)?
145
- let options: ParsedOptions
146
- }
147
-
148
- private struct ParsedHeadingOptions {
149
- let headingFilter: CLLocationDegrees
150
-
151
- // Apple's documented `CLLocationManager.headingFilter` default is 1°.
152
- // Defaulting to `0` here propagates through `mergeHeadingFilter` into
153
- // `kCLHeadingFilterNone` (-1), which fires the delegate on every
154
- // CLHeading tick (sub-degree firehose for stationary users). 1° matches
155
- // CL's documented behavior and lets the delegate fire only on
156
- // perceptible changes.
157
- static func parse(from options: HeadingOptions?) -> ParsedHeadingOptions {
158
- return ParsedHeadingOptions(
159
- headingFilter: options?.headingFilter ?? 1
160
- )
161
- }
162
- }
163
-
164
- private struct HeadingRequest {
165
- let id: UUID
166
- let success: (Heading) -> Void
167
- let error: (LocationError) -> Void
168
- var timer: DispatchSourceTimer?
169
- }
170
-
171
- private struct HeadingSubscription {
172
- let token: String
173
- let success: (Heading) -> Void
174
- let error: ((LocationError) -> Void)?
175
- let options: ParsedHeadingOptions
176
- var lastDeliveredHeading: Double?
177
- }
178
-
179
15
  // MARK: - Properties
180
16
 
181
17
  private var configuration: GeolocationConfiguration?
@@ -190,14 +26,6 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
190
26
  // getCurrentPosition promise resolvers with timeout
191
27
  private var pendingPositionRequests: [UUID: PositionRequest] = [:]
192
28
 
193
- private struct PositionRequest {
194
- let id: UUID
195
- let success: (GeolocationResponse) -> Void
196
- let error: (LocationError) -> Void
197
- let options: ParsedOptions
198
- var timer: DispatchSourceTimer?
199
- }
200
-
201
29
  // Watch subscriptions (token -> callback)
202
30
  private var watchSubscriptions: [String: WatchSubscription] = [:]
203
31
 
@@ -206,15 +34,6 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
206
34
  private var headingSubscriptions: [String: HeadingSubscription] = [:]
207
35
  private var activeGeocoders: [UUID: CLGeocoder] = [:]
208
36
 
209
- // Error codes
210
- private let INTERNAL_ERROR = -1
211
- private let PERMISSION_DENIED = 1
212
- private let POSITION_UNAVAILABLE = 2
213
- private let TIMEOUT = 3
214
- private let PLAY_SERVICE_NOT_AVAILABLE = 4
215
- private let SETTINGS_NOT_SATISFIED = 5
216
- private let DEFAULT_HEADING_TIMEOUT_MS: Double = 10_000
217
-
218
37
  // MARK: - Configuration
219
38
 
220
39
  func setConfiguration(config: GeolocationConfiguration) {
@@ -263,7 +82,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
263
82
 
264
83
  func getProviderStatus() throws -> Promise<LocationProviderStatus> {
265
84
  return Promise.async {
266
- return self.createLocationProviderStatus()
85
+ return createLocationProviderStatus()
267
86
  }
268
87
  }
269
88
 
@@ -349,8 +168,8 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
349
168
  withPurposeKey: trimmedPurposeKey
350
169
  ) { requestError in
351
170
  if let requestError {
352
- error?(self.createLocationError(
353
- code: self.INTERNAL_ERROR,
171
+ error?(createLocationError(
172
+ code: INTERNAL_ERROR,
354
173
  message: "Unable to request temporary full accuracy: \(requestError.localizedDescription)"
355
174
  ))
356
175
  return
@@ -375,7 +194,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
375
194
  ? "This application is not authorized to use location services"
376
195
  : "User denied access to location services."
377
196
  error?(createLocationError(
378
- code: self.PERMISSION_DENIED,
197
+ code: PERMISSION_DENIED,
379
198
  message: message
380
199
  ))
381
200
  return
@@ -383,7 +202,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
383
202
 
384
203
  if !CLLocationManager.locationServicesEnabled() {
385
204
  error?(createLocationError(
386
- code: self.SETTINGS_NOT_SATISFIED,
205
+ code: SETTINGS_NOT_SATISFIED,
387
206
  message: "Location services disabled."
388
207
  ))
389
208
  return
@@ -404,7 +223,6 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
404
223
  // Create position request
405
224
  let id = UUID()
406
225
  var request = PositionRequest(
407
- id: id,
408
226
  success: success,
409
227
  error: { locationError in
410
228
  error?(locationError)
@@ -440,7 +258,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
440
258
  ? "This application is not authorized to use location services"
441
259
  : "User denied access to location services."
442
260
  error?(createLocationError(
443
- code: self.PERMISSION_DENIED,
261
+ code: PERMISSION_DENIED,
444
262
  message: message
445
263
  ))
446
264
  return
@@ -449,7 +267,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
449
267
  let parsedOptions = ParsedOptions.parseLastKnown(from: options)
450
268
  guard let cached = self.getBestCachedLocation(options: parsedOptions) else {
451
269
  error?(createLocationError(
452
- code: self.POSITION_UNAVAILABLE,
270
+ code: POSITION_UNAVAILABLE,
453
271
  message: "No cached location available."
454
272
  ))
455
273
  return
@@ -500,7 +318,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
500
318
  }
501
319
 
502
320
  let locations = (placemarks ?? []).compactMap {
503
- self.placemarkToGeocodedLocation($0)
321
+ $0.toGeocodedLocation()
504
322
  }
505
323
  success(locations)
506
324
  }
@@ -548,7 +366,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
548
366
  }
549
367
 
550
368
  let addresses = (placemarks ?? []).map {
551
- self.placemarkToReverseGeocodedAddress($0)
369
+ $0.toReverseGeocodedAddress()
552
370
  }
553
371
  success(addresses)
554
372
  }
@@ -568,7 +386,6 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
568
386
 
569
387
  let id = UUID()
570
388
  var request = HeadingRequest(
571
- id: id,
572
389
  success: success,
573
390
  error: { headingError in
574
391
  error?(headingError)
@@ -610,7 +427,6 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
610
427
  }
611
428
 
612
429
  let subscription = HeadingSubscription(
613
- token: token,
614
430
  success: success,
615
431
  error: error,
616
432
  options: parsedOptions,
@@ -637,7 +453,6 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
637
453
  let parsedOptions = ParsedOptions.parse(from: options)
638
454
 
639
455
  let subscription = WatchSubscription(
640
- token: token,
641
456
  success: success,
642
457
  error: error,
643
458
  options: parsedOptions
@@ -690,7 +505,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
690
505
 
691
506
  // MARK: - Location Manager Callbacks
692
507
 
693
- fileprivate func handleAuthorizationChange(_ manager: CLLocationManager) {
508
+ func handleAuthorizationChange(_ manager: CLLocationManager) {
694
509
  let status = getCurrentAuthorizationStatus(from: manager)
695
510
  let mappedStatus = mapCLAuthorizationStatus(status)
696
511
 
@@ -708,7 +523,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
708
523
  }
709
524
  }
710
525
 
711
- fileprivate func handleLocationUpdate(_ locations: [CLLocation]) {
526
+ func handleLocationUpdate(_ locations: [CLLocation]) {
712
527
  guard let location = locations.last else { return }
713
528
 
714
529
  lastLocation = location
@@ -734,7 +549,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
734
549
  }
735
550
  }
736
551
 
737
- fileprivate func handleLocationError(_ error: Error) {
552
+ func handleLocationError(_ error: Error) {
738
553
  let locationError: LocationError
739
554
 
740
555
  if let clError = error as? CLError {
@@ -776,7 +591,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
776
591
  stopMonitoring()
777
592
  }
778
593
 
779
- fileprivate func handleHeadingUpdate(_ clHeading: CLHeading) {
594
+ func handleHeadingUpdate(_ clHeading: CLHeading) {
780
595
  let heading = headingToResponse(clHeading)
781
596
 
782
597
  for (id, request) in Array(pendingHeadingRequests) {
@@ -936,32 +751,6 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
936
751
  stopHeadingMonitoring()
937
752
  }
938
753
 
939
- private func headingToResponse(_ clHeading: CLHeading) -> Heading {
940
- let trueHeading = clHeading.trueHeading >= 0
941
- ? clHeading.trueHeading
942
- : nil
943
- let accuracy = clHeading.headingAccuracy >= 0
944
- ? clHeading.headingAccuracy
945
- : nil
946
-
947
- return Heading(
948
- magneticHeading: normalizeHeading(clHeading.magneticHeading),
949
- trueHeading: trueHeading.map(normalizeHeading),
950
- accuracy: accuracy,
951
- timestamp: clHeading.timestamp.timeIntervalSince1970 * 1000
952
- )
953
- }
954
-
955
- private func angularDistance(_ first: Double, _ second: Double) -> Double {
956
- let distance = Swift.abs(first - second).truncatingRemainder(dividingBy: 360)
957
- return distance > 180 ? 360 - distance : distance
958
- }
959
-
960
- private func normalizeHeading(_ value: Double) -> Double {
961
- let normalized = value.truncatingRemainder(dividingBy: 360)
962
- return normalized < 0 ? normalized + 360 : normalized
963
- }
964
-
965
754
  private func updateLocationManagerConfiguration() {
966
755
  guard let manager = locationManager else { return }
967
756
 
@@ -1248,82 +1037,7 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
1248
1037
  }
1249
1038
 
1250
1039
  private func locationToPosition(_ location: CLLocation) -> GeolocationResponse {
1251
- let coords = GeolocationCoordinates(
1252
- latitude: location.coordinate.latitude,
1253
- longitude: location.coordinate.longitude,
1254
- altitude: location.nitroGeolocationAltitude,
1255
- accuracy: location.horizontalAccuracy,
1256
- altitudeAccuracy: location.nitroGeolocationAltitudeAccuracy,
1257
- heading: location.nitroGeolocationHeading,
1258
- speed: location.nitroGeolocationSpeed
1259
- )
1260
-
1261
- return GeolocationResponse(
1262
- coords: coords,
1263
- timestamp: location.timestamp.timeIntervalSince1970 * 1000,
1264
- mocked: location.nitroGeolocationMocked,
1265
- provider: location.nitroGeolocationProvider
1266
- )
1267
- }
1268
-
1269
- private func placemarkToGeocodedLocation(_ placemark: CLPlacemark) -> GeocodedLocation? {
1270
- guard let location = placemark.location else {
1271
- return nil
1272
- }
1273
-
1274
- let accuracy = location.horizontalAccuracy >= 0
1275
- ? location.horizontalAccuracy
1276
- : nil
1277
-
1278
- return GeocodedLocation(
1279
- latitude: location.coordinate.latitude,
1280
- longitude: location.coordinate.longitude,
1281
- accuracy: accuracy
1282
- )
1283
- }
1284
-
1285
- private func placemarkToReverseGeocodedAddress(_ placemark: CLPlacemark) -> ReverseGeocodedAddress {
1286
- return ReverseGeocodedAddress(
1287
- country: placemark.country.nonEmptyTrimmed,
1288
- region: placemark.administrativeArea.nonEmptyTrimmed,
1289
- city: placemark.locality.nonEmptyTrimmed,
1290
- district: placemark.subLocality.nonEmptyTrimmed,
1291
- street: formatStreet(placemark),
1292
- postalCode: placemark.postalCode.nonEmptyTrimmed,
1293
- formattedAddress: formatAddress(placemark)
1294
- )
1295
- }
1296
-
1297
- private func formatStreet(_ placemark: CLPlacemark) -> String? {
1298
- return [
1299
- placemark.subThoroughfare.nonEmptyTrimmed,
1300
- placemark.thoroughfare.nonEmptyTrimmed
1301
- ]
1302
- .compactMap { $0 }
1303
- .joined(separator: " ")
1304
- .nonEmptyTrimmed
1305
- }
1306
-
1307
- private func formatAddress(_ placemark: CLPlacemark) -> String? {
1308
- var parts: [String] = []
1309
-
1310
- appendDistinct(placemark.name.nonEmptyTrimmed, to: &parts)
1311
- appendDistinct(formatStreet(placemark), to: &parts)
1312
- appendDistinct(placemark.subLocality.nonEmptyTrimmed, to: &parts)
1313
- appendDistinct(placemark.locality.nonEmptyTrimmed, to: &parts)
1314
- appendDistinct(placemark.administrativeArea.nonEmptyTrimmed, to: &parts)
1315
- appendDistinct(placemark.postalCode.nonEmptyTrimmed, to: &parts)
1316
- appendDistinct(placemark.country.nonEmptyTrimmed, to: &parts)
1317
-
1318
- return parts.joined(separator: ", ").nonEmptyTrimmed
1319
- }
1320
-
1321
- private func appendDistinct(_ value: String?, to parts: inout [String]) {
1322
- guard let value, !parts.contains(value) else {
1323
- return
1324
- }
1325
-
1326
- parts.append(value)
1040
+ return location.toGeolocationResponse()
1327
1041
  }
1328
1042
 
1329
1043
  private func validateGeocodingCoordinates(_ coords: GeocodingCoordinates) -> LocationError? {
@@ -1379,51 +1093,4 @@ class NitroGeolocation: HybridNitroGeolocationSpec {
1379
1093
  )
1380
1094
  }
1381
1095
 
1382
- private func createLocationError(code: Int, message: String) -> LocationError {
1383
- return LocationError(
1384
- code: Double(code),
1385
- message: message
1386
- )
1387
- }
1388
-
1389
- private func createLocationProviderStatus() -> LocationProviderStatus {
1390
- return LocationProviderStatus(
1391
- locationServicesEnabled: CLLocationManager.locationServicesEnabled(),
1392
- backgroundModeEnabled: isLocationBackgroundModeEnabled(),
1393
- gpsAvailable: nil,
1394
- networkAvailable: nil,
1395
- passiveAvailable: nil,
1396
- googleLocationAccuracyEnabled: nil
1397
- )
1398
- }
1399
-
1400
- private func isLocationBackgroundModeEnabled() -> Bool {
1401
- guard let backgroundModes = Bundle.main.object(
1402
- forInfoDictionaryKey: "UIBackgroundModes"
1403
- ) as? [String] else {
1404
- return false
1405
- }
1406
-
1407
- return backgroundModes.contains("location")
1408
- }
1409
- }
1410
-
1411
- private extension Optional where Wrapped == String {
1412
- var nonEmptyTrimmed: String? {
1413
- guard let trimmed = self?.trimmingCharacters(in: .whitespacesAndNewlines) else {
1414
- return nil
1415
- }
1416
-
1417
- return trimmed.isEmpty ? nil : trimmed
1418
- }
1419
- }
1420
-
1421
- private extension String {
1422
- var nonEmptyTrimmed: String? {
1423
- return trimmingCharacters(in: .whitespacesAndNewlines).nilIfEmpty
1424
- }
1425
-
1426
- var nilIfEmpty: String? {
1427
- return isEmpty ? nil : self
1428
- }
1429
1096
  }
@@ -0,0 +1,69 @@
1
+ ///
2
+ /// JActivityRecognitionOptions.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "ActivityRecognitionOptions.hpp"
12
+
13
+ #include <optional>
14
+
15
+ namespace margelo::nitro::nitrogeolocation {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "ActivityRecognitionOptions" and the the Kotlin data class "ActivityRecognitionOptions".
21
+ */
22
+ struct JActivityRecognitionOptions final: public jni::JavaClass<JActivityRecognitionOptions> {
23
+ public:
24
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrogeolocation/ActivityRecognitionOptions;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct ActivityRecognitionOptions by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ ActivityRecognitionOptions toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldEnabled = clazz->getField<jni::JBoolean>("enabled");
35
+ jni::local_ref<jni::JBoolean> enabled = this->getFieldValue(fieldEnabled);
36
+ static const auto fieldInterval = clazz->getField<jni::JDouble>("interval");
37
+ jni::local_ref<jni::JDouble> interval = this->getFieldValue(fieldInterval);
38
+ static const auto fieldStopOnStill = clazz->getField<jni::JBoolean>("stopOnStill");
39
+ jni::local_ref<jni::JBoolean> stopOnStill = this->getFieldValue(fieldStopOnStill);
40
+ static const auto fieldMinimumConfidence = clazz->getField<jni::JDouble>("minimumConfidence");
41
+ jni::local_ref<jni::JDouble> minimumConfidence = this->getFieldValue(fieldMinimumConfidence);
42
+ return ActivityRecognitionOptions(
43
+ enabled != nullptr ? std::make_optional(static_cast<bool>(enabled->value())) : std::nullopt,
44
+ interval != nullptr ? std::make_optional(interval->value()) : std::nullopt,
45
+ stopOnStill != nullptr ? std::make_optional(static_cast<bool>(stopOnStill->value())) : std::nullopt,
46
+ minimumConfidence != nullptr ? std::make_optional(minimumConfidence->value()) : std::nullopt
47
+ );
48
+ }
49
+
50
+ public:
51
+ /**
52
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
53
+ */
54
+ [[maybe_unused]]
55
+ static jni::local_ref<JActivityRecognitionOptions::javaobject> fromCpp(const ActivityRecognitionOptions& value) {
56
+ using JSignature = JActivityRecognitionOptions(jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JDouble>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JDouble>);
57
+ static const auto clazz = javaClassStatic();
58
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
59
+ return create(
60
+ clazz,
61
+ value.enabled.has_value() ? jni::JBoolean::valueOf(value.enabled.value()) : nullptr,
62
+ value.interval.has_value() ? jni::JDouble::valueOf(value.interval.value()) : nullptr,
63
+ value.stopOnStill.has_value() ? jni::JBoolean::valueOf(value.stopOnStill.value()) : nullptr,
64
+ value.minimumConfidence.has_value() ? jni::JDouble::valueOf(value.minimumConfidence.value()) : nullptr
65
+ );
66
+ }
67
+ };
68
+
69
+ } // namespace margelo::nitro::nitrogeolocation
@@ -0,0 +1,74 @@
1
+ ///
2
+ /// JAndroidBackgroundLocationOptions.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "AndroidBackgroundLocationOptions.hpp"
12
+
13
+ #include "AndroidBackgroundProvider.hpp"
14
+ #include "AndroidForegroundServiceOptions.hpp"
15
+ #include "JAndroidBackgroundProvider.hpp"
16
+ #include "JAndroidForegroundServiceOptions.hpp"
17
+ #include <optional>
18
+ #include <string>
19
+
20
+ namespace margelo::nitro::nitrogeolocation {
21
+
22
+ using namespace facebook;
23
+
24
+ /**
25
+ * The C++ JNI bridge between the C++ struct "AndroidBackgroundLocationOptions" and the the Kotlin data class "AndroidBackgroundLocationOptions".
26
+ */
27
+ struct JAndroidBackgroundLocationOptions final: public jni::JavaClass<JAndroidBackgroundLocationOptions> {
28
+ public:
29
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationOptions;";
30
+
31
+ public:
32
+ /**
33
+ * Convert this Java/Kotlin-based struct to the C++ struct AndroidBackgroundLocationOptions by copying all values to C++.
34
+ */
35
+ [[maybe_unused]]
36
+ [[nodiscard]]
37
+ AndroidBackgroundLocationOptions toCpp() const {
38
+ static const auto clazz = javaClassStatic();
39
+ static const auto fieldLocationProvider = clazz->getField<JAndroidBackgroundProvider>("locationProvider");
40
+ jni::local_ref<JAndroidBackgroundProvider> locationProvider = this->getFieldValue(fieldLocationProvider);
41
+ static const auto fieldForegroundService = clazz->getField<JAndroidForegroundServiceOptions>("foregroundService");
42
+ jni::local_ref<JAndroidForegroundServiceOptions> foregroundService = this->getFieldValue(fieldForegroundService);
43
+ static const auto fieldRequestNotificationPermission = clazz->getField<jni::JBoolean>("requestNotificationPermission");
44
+ jni::local_ref<jni::JBoolean> requestNotificationPermission = this->getFieldValue(fieldRequestNotificationPermission);
45
+ static const auto fieldRequestIgnoreBatteryOptimizations = clazz->getField<jni::JBoolean>("requestIgnoreBatteryOptimizations");
46
+ jni::local_ref<jni::JBoolean> requestIgnoreBatteryOptimizations = this->getFieldValue(fieldRequestIgnoreBatteryOptimizations);
47
+ return AndroidBackgroundLocationOptions(
48
+ locationProvider != nullptr ? std::make_optional(locationProvider->toCpp()) : std::nullopt,
49
+ foregroundService->toCpp(),
50
+ requestNotificationPermission != nullptr ? std::make_optional(static_cast<bool>(requestNotificationPermission->value())) : std::nullopt,
51
+ requestIgnoreBatteryOptimizations != nullptr ? std::make_optional(static_cast<bool>(requestIgnoreBatteryOptimizations->value())) : std::nullopt
52
+ );
53
+ }
54
+
55
+ public:
56
+ /**
57
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
58
+ */
59
+ [[maybe_unused]]
60
+ static jni::local_ref<JAndroidBackgroundLocationOptions::javaobject> fromCpp(const AndroidBackgroundLocationOptions& value) {
61
+ using JSignature = JAndroidBackgroundLocationOptions(jni::alias_ref<JAndroidBackgroundProvider>, jni::alias_ref<JAndroidForegroundServiceOptions>, jni::alias_ref<jni::JBoolean>, jni::alias_ref<jni::JBoolean>);
62
+ static const auto clazz = javaClassStatic();
63
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
64
+ return create(
65
+ clazz,
66
+ value.locationProvider.has_value() ? JAndroidBackgroundProvider::fromCpp(value.locationProvider.value()) : nullptr,
67
+ JAndroidForegroundServiceOptions::fromCpp(value.foregroundService),
68
+ value.requestNotificationPermission.has_value() ? jni::JBoolean::valueOf(value.requestNotificationPermission.value()) : nullptr,
69
+ value.requestIgnoreBatteryOptimizations.has_value() ? jni::JBoolean::valueOf(value.requestIgnoreBatteryOptimizations.value()) : nullptr
70
+ );
71
+ }
72
+ };
73
+
74
+ } // namespace margelo::nitro::nitrogeolocation