@@ -6,22 +6,19 @@ private let kCLLocationAccuracyDefault: CLLocationAccuracy =
66 kCLLocationAccuracyBest
77private let kCLDistanceFilterNoneDefault : CLLocationDistance =
88 kCLDistanceFilterNone
9+ private let kCLActivityTypeDefault : CLActivityType = . other
910
1011final class LocationHandler : NSObject , CLLocationManagerDelegate {
1112
1213 private let manager = CLLocationManager ( )
1314
14- var desiredAccuracy : CLLocationAccuracy ? = kCLLocationAccuracyDefault {
15- didSet {
16- manager. desiredAccuracy = desiredAccuracy ?? kCLLocationAccuracyBest
17- }
18- }
15+ private var isActive = false
1916
20- var distanceFilterMeters : CLLocationDistance ? = kCLDistanceFilterNoneDefault {
21- didSet {
22- manager . distanceFilter = distanceFilterMeters ?? kCLDistanceFilterNone
23- }
24- }
17+ private var currentDesiredAccuracy : CLLocationAccuracy =
18+ kCLLocationAccuracyDefault
19+ private var currentDistanceFilter : CLLocationDistance =
20+ kCLDistanceFilterNoneDefault
21+ private var currentActivityType : CLActivityType = kCLActivityTypeDefault
2522
2623 var onUpdate : ( ( CLLocation ) -> Void ) ?
2724 var onError : ( ( _ error: RNLocationErrorCode ) -> Void ) ?
@@ -30,7 +27,21 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
3027 super. init ( )
3128 manager. delegate = self
3229 manager. pausesLocationUpdatesAutomatically = true
33- manager. activityType = . other
30+ }
31+
32+ func updateConfig(
33+ desiredAccuracy: CLLocationAccuracy ? ,
34+ distanceFilterMeters: CLLocationDistance ? ,
35+ activityType: CLActivityType ?
36+ ) {
37+ currentDesiredAccuracy = desiredAccuracy ?? kCLLocationAccuracyDefault
38+ manager. desiredAccuracy = currentDesiredAccuracy
39+
40+ currentDistanceFilter = distanceFilterMeters ?? kCLDistanceFilterNoneDefault
41+ manager. distanceFilter = currentDistanceFilter
42+
43+ currentActivityType = activityType ?? kCLActivityTypeDefault
44+ manager. activityType = currentActivityType
3445 }
3546
3647 func showLocationDialog( ) {
@@ -71,11 +82,19 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
7182 }
7283
7384 func start( ) {
74- stop ( )
75- startUpdates ( )
85+ guard !isActive else { return }
86+ isActive = true
87+
88+ manager. location. map {
89+ onUpdate ? ( $0)
90+ }
91+
92+ manager. startUpdatingLocation ( )
7693 }
7794
7895 func stop( ) {
96+ guard isActive else { return }
97+ isActive = false
7998 manager. stopUpdatingLocation ( )
8099 }
81100
@@ -104,13 +123,6 @@ final class LocationHandler: NSObject, CLLocationManagerDelegate {
104123 }
105124 }
106125
107- private func startUpdates( ) {
108- manager. desiredAccuracy = desiredAccuracy ?? kCLLocationAccuracyDefault
109- manager. distanceFilter =
110- distanceFilterMeters ?? kCLDistanceFilterNoneDefault
111- manager. startUpdatingLocation ( )
112- }
113-
114126 func locationManager(
115127 _ manager: CLLocationManager ,
116128 didFailWithError error: Error
0 commit comments