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.
- package/README.md +61 -272
- package/android/build.gradle +1 -0
- package/android/src/main/AndroidManifest.xml +39 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProvider.kt +310 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedRequestFactory.kt +31 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationConversions.kt +71 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationErrors.kt +85 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationOptions.kt +92 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidLocationSettings.kt +3 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRoute.kt +74 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroBackgroundLocation.kt +132 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocation.kt +219 -476
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundHttpSync.kt +134 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundPermissions.kt +196 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundSerialization.kt +266 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroActivityRecognitionReceiver.kt +13 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundEventHub.kt +65 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundHeadlessTaskService.kt +58 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationController.kt +711 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationService.kt +48 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundNotificationFactory.kt +37 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundStore.kt +655 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBootReceiver.kt +26 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroGeofenceReceiver.kt +14 -0
- package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroLocationUpdateReceiver.kt +37 -0
- package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProviderTest.kt +64 -0
- package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRouteTest.kt +116 -0
- package/ios/IOSBackgroundHttpSync.swift +126 -0
- package/ios/IOSBackgroundLocationDelegate.swift +36 -0
- package/ios/IOSBackgroundMotion.swift +55 -0
- package/ios/IOSBackgroundSerialization.swift +539 -0
- package/ios/IOSGeolocationConversions.swift +131 -0
- package/ios/IOSGeolocationDelegate.swift +31 -0
- package/ios/IOSGeolocationErrors.swift +39 -0
- package/ios/IOSGeolocationOptions.swift +135 -0
- package/ios/NitroBackgroundLocation.swift +849 -0
- package/ios/NitroGeolocation.swift +14 -347
- package/nitrogen/generated/android/c++/JActivityRecognitionOptions.hpp +69 -0
- package/nitrogen/generated/android/c++/JAndroidBackgroundLocationOptions.hpp +74 -0
- package/nitrogen/generated/android/c++/JAndroidBackgroundLocationStatus.hpp +67 -0
- package/nitrogen/generated/android/c++/JAndroidBackgroundProvider.hpp +61 -0
- package/nitrogen/generated/android/c++/JAndroidForegroundServiceOptions.hpp +90 -0
- package/nitrogen/generated/android/c++/JBackgroundEventEnvelope.hpp +129 -0
- package/nitrogen/generated/android/c++/JBackgroundEventType.hpp +70 -0
- package/nitrogen/generated/android/c++/JBackgroundHttpMethod.hpp +61 -0
- package/nitrogen/generated/android/c++/JBackgroundHttpSyncOptions.hpp +131 -0
- package/nitrogen/generated/android/c++/JBackgroundHttpSyncResult.hpp +111 -0
- package/nitrogen/generated/android/c++/JBackgroundLocation.hpp +110 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationOptions.hpp +162 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationSource.hpp +73 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationState.hpp +70 -0
- package/nitrogen/generated/android/c++/JBackgroundLocationStatus.hpp +126 -0
- package/nitrogen/generated/android/c++/JBackgroundPermissionResult.hpp +79 -0
- package/nitrogen/generated/android/c++/JBackgroundPermissionStatus.hpp +64 -0
- package/nitrogen/generated/android/c++/JBackgroundTrackingMode.hpp +61 -0
- package/nitrogen/generated/android/c++/JBatterySnapshot.hpp +61 -0
- package/nitrogen/generated/android/c++/JDetectedActivity.hpp +66 -0
- package/nitrogen/generated/android/c++/JDetectedActivityType.hpp +76 -0
- package/nitrogen/generated/android/c++/JFunc_void_BackgroundEventEnvelope.hpp +114 -0
- package/nitrogen/generated/android/c++/JFunc_void_BackgroundLocation.hpp +95 -0
- package/nitrogen/generated/android/c++/JGeofenceEvent.hpp +94 -0
- package/nitrogen/generated/android/c++/JGeofenceRegion.hpp +112 -0
- package/nitrogen/generated/android/c++/JGeofenceTransition.hpp +61 -0
- package/nitrogen/generated/android/c++/JGeofencingOptions.hpp +82 -0
- package/nitrogen/generated/android/c++/JGetStoredBackgroundEventsOptions.hpp +90 -0
- package/nitrogen/generated/android/c++/JGetStoredBackgroundLocationsOptions.hpp +69 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.cpp +662 -0
- package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.hpp +89 -0
- package/nitrogen/generated/android/c++/JIOSBackgroundActivityType.hpp +67 -0
- package/nitrogen/generated/android/c++/JIOSBackgroundLocationOptions.hpp +79 -0
- package/nitrogen/generated/android/c++/JIOSBackgroundLocationStatus.hpp +61 -0
- package/nitrogen/generated/android/c++/JLocationProviderStatus.hpp +5 -1
- package/nitrogen/generated/android/c++/JStoredBackgroundEventEnvelope.hpp +115 -0
- package/nitrogen/generated/android/c++/JStoredBackgroundLocation.hpp +122 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.cpp +34 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.hpp +100 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/ActivityRecognitionOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationStatus.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundProvider.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidForegroundServiceOptions.kt +91 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventEnvelope.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventType.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpMethod.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncOptions.kt +101 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncResult.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocation.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationOptions.kt +136 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationSource.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationState.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationStatus.kt +116 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionResult.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionStatus.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundTrackingMode.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BatterySnapshot.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivity.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivityType.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundEventEnvelope.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundLocation.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceEvent.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceRegion.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceTransition.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofencingOptions.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundEventsOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundLocationsOptions.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroBackgroundLocationSpec.kt +174 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundActivityType.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationOptions.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationStatus.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderStatus.kt +7 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundEventEnvelope.kt +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundLocation.kt +111 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Variant_NullType_Boolean_String_Double.kt +88 -0
- package/nitrogen/generated/android/nitrogeolocation+autolinking.cmake +3 -0
- package/nitrogen/generated/android/nitrogeolocationOnLoad.cpp +20 -0
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.cpp +104 -15
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.hpp +1107 -50
- package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Umbrella.hpp +102 -0
- package/nitrogen/generated/ios/NitroGeolocationAutolinking.mm +8 -0
- package/nitrogen/generated/ios/NitroGeolocationAutolinking.swift +15 -3
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.hpp +416 -0
- package/nitrogen/generated/ios/swift/ActivityRecognitionOptions.swift +96 -0
- package/nitrogen/generated/ios/swift/AndroidBackgroundLocationOptions.swift +76 -0
- package/nitrogen/generated/ios/swift/AndroidBackgroundLocationStatus.swift +58 -0
- package/nitrogen/generated/ios/swift/AndroidBackgroundProvider.swift +44 -0
- package/nitrogen/generated/ios/swift/AndroidForegroundServiceOptions.swift +160 -0
- package/nitrogen/generated/ios/swift/BackgroundEventEnvelope.swift +110 -0
- package/nitrogen/generated/ios/swift/BackgroundEventType.swift +56 -0
- package/nitrogen/generated/ios/swift/BackgroundHttpMethod.swift +44 -0
- package/nitrogen/generated/ios/swift/BackgroundHttpSyncOptions.swift +259 -0
- package/nitrogen/generated/ios/swift/BackgroundHttpSyncResult.swift +87 -0
- package/nitrogen/generated/ios/swift/BackgroundLocation.swift +118 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationOptions.swift +292 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationSource.swift +60 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationState.swift +56 -0
- package/nitrogen/generated/ios/swift/BackgroundLocationStatus.swift +124 -0
- package/nitrogen/generated/ios/swift/BackgroundPermissionResult.swift +81 -0
- package/nitrogen/generated/ios/swift/BackgroundPermissionStatus.swift +48 -0
- package/nitrogen/generated/ios/swift/BackgroundTrackingMode.swift +44 -0
- package/nitrogen/generated/ios/swift/BatterySnapshot.swift +60 -0
- package/nitrogen/generated/ios/swift/DetectedActivity.swift +39 -0
- package/nitrogen/generated/ios/swift/DetectedActivityType.swift +64 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundEventEnvelope.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundHttpSyncResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundLocation.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundLocationStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BackgroundPermissionResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_BackgroundLocationOptions_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_GeofenceRegion_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundEventEnvelope_.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundLocation_.swift +46 -0
- package/nitrogen/generated/ios/swift/GeofenceEvent.swift +50 -0
- package/nitrogen/generated/ios/swift/GeofenceRegion.swift +195 -0
- package/nitrogen/generated/ios/swift/GeofenceTransition.swift +44 -0
- package/nitrogen/generated/ios/swift/GeofencingOptions.swift +66 -0
- package/nitrogen/generated/ios/swift/GetStoredBackgroundEventsOptions.swift +102 -0
- package/nitrogen/generated/ios/swift/GetStoredBackgroundLocationsOptions.swift +96 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec.swift +81 -0
- package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec_cxx.swift +654 -0
- package/nitrogen/generated/ios/swift/IOSBackgroundActivityType.swift +52 -0
- package/nitrogen/generated/ios/swift/IOSBackgroundLocationOptions.swift +125 -0
- package/nitrogen/generated/ios/swift/IOSBackgroundLocationStatus.swift +34 -0
- package/nitrogen/generated/ios/swift/LocationProviderStatus.swift +19 -1
- package/nitrogen/generated/ios/swift/StoredBackgroundEventEnvelope.swift +54 -0
- package/nitrogen/generated/ios/swift/StoredBackgroundLocation.swift +120 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Bool_String_Double.swift +34 -0
- package/nitrogen/generated/shared/c++/ActivityRecognitionOptions.hpp +95 -0
- package/nitrogen/generated/shared/c++/AndroidBackgroundLocationOptions.hpp +100 -0
- package/nitrogen/generated/shared/c++/AndroidBackgroundLocationStatus.hpp +93 -0
- package/nitrogen/generated/shared/c++/AndroidBackgroundProvider.hpp +80 -0
- package/nitrogen/generated/shared/c++/AndroidForegroundServiceOptions.hpp +116 -0
- package/nitrogen/generated/shared/c++/BackgroundEventEnvelope.hpp +140 -0
- package/nitrogen/generated/shared/c++/BackgroundEventType.hpp +92 -0
- package/nitrogen/generated/shared/c++/BackgroundHttpMethod.hpp +80 -0
- package/nitrogen/generated/shared/c++/BackgroundHttpSyncOptions.hpp +129 -0
- package/nitrogen/generated/shared/c++/BackgroundHttpSyncResult.hpp +101 -0
- package/nitrogen/generated/shared/c++/BackgroundLocation.hpp +134 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationOptions.hpp +174 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationSource.hpp +96 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationState.hpp +92 -0
- package/nitrogen/generated/shared/c++/BackgroundLocationStatus.hpp +158 -0
- package/nitrogen/generated/shared/c++/BackgroundPermissionResult.hpp +107 -0
- package/nitrogen/generated/shared/c++/BackgroundPermissionStatus.hpp +84 -0
- package/nitrogen/generated/shared/c++/BackgroundTrackingMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/BatterySnapshot.hpp +87 -0
- package/nitrogen/generated/shared/c++/DetectedActivity.hpp +92 -0
- package/nitrogen/generated/shared/c++/DetectedActivityType.hpp +100 -0
- package/nitrogen/generated/shared/c++/GeofenceEvent.hpp +103 -0
- package/nitrogen/generated/shared/c++/GeofenceRegion.hpp +123 -0
- package/nitrogen/generated/shared/c++/GeofenceTransition.hpp +80 -0
- package/nitrogen/generated/shared/c++/GeofencingOptions.hpp +90 -0
- package/nitrogen/generated/shared/c++/GetStoredBackgroundEventsOptions.hpp +98 -0
- package/nitrogen/generated/shared/c++/GetStoredBackgroundLocationsOptions.hpp +95 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.cpp +47 -0
- package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.hpp +133 -0
- package/nitrogen/generated/shared/c++/IOSBackgroundActivityType.hpp +88 -0
- package/nitrogen/generated/shared/c++/IOSBackgroundLocationOptions.hpp +105 -0
- package/nitrogen/generated/shared/c++/IOSBackgroundLocationStatus.hpp +87 -0
- package/nitrogen/generated/shared/c++/LocationProviderStatus.hpp +5 -1
- package/nitrogen/generated/shared/c++/StoredBackgroundEventEnvelope.hpp +108 -0
- package/nitrogen/generated/shared/c++/StoredBackgroundLocation.hpp +146 -0
- package/package.json +17 -6
- package/src/NitroGeolocation.nitro.ts +4 -4
- package/src/api/getCurrentPosition.ts +1 -1
- package/src/api/requestLocationSettings.ts +3 -2
- package/src/background/NitroBackgroundLocation.nitro.ts +83 -0
- package/src/background/index.ts +200 -0
- package/src/background/index.web.ts +120 -0
- package/src/background/task.ts +13 -0
- package/src/background/types.ts +328 -0
- package/src/compat/index.web.ts +141 -0
- package/src/index.tsx +3 -0
- package/src/index.web.tsx +41 -0
- package/src/publicTypes.ts +6 -5
- package/src/types.ts +3 -0
- package/src/web/browser.ts +171 -0
- package/src/web/index.ts +167 -0
- package/src/web/useWatchPosition.ts +76 -0
- package/src/web/watch.ts +81 -0
- package/src/devtools/index.test.ts +0 -54
- package/src/utils/errors.test.ts +0 -65
- 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
|
|
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?(
|
|
353
|
-
code:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|