mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
allow users to set live location minimum distance update
This commit is contained in:
@@ -12,6 +12,7 @@ protocol CLLocationManagerProtocol: AnyObject {
|
||||
var delegate: CLLocationManagerDelegate? { get set }
|
||||
var allowsBackgroundLocationUpdates: Bool { get set }
|
||||
var desiredAccuracy: CLLocationAccuracy { get set }
|
||||
var distanceFilter: CLLocationDistance { get set }
|
||||
var pausesLocationUpdatesAutomatically: Bool { get set }
|
||||
var authorizationStatus: CLAuthorizationStatus { get }
|
||||
|
||||
|
||||
@@ -47,9 +47,8 @@ class LiveLocationManager: NSObject, LiveLocationManagerProtocol, CLLocationMana
|
||||
|
||||
self.locationManager.delegate = self
|
||||
self.locationManager.allowsBackgroundLocationUpdates = true
|
||||
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
|
||||
self.locationManager.pausesLocationUpdatesAutomatically = false
|
||||
|
||||
setupMinumDistance(appSettings.liveLocationMinimumDistanceUpdate)
|
||||
setupSubscriptions()
|
||||
}
|
||||
|
||||
@@ -162,6 +161,27 @@ class LiveLocationManager: NSObject, LiveLocationManagerProtocol, CLLocationMana
|
||||
locationUpdatesTask = nil
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
appSettings.$liveLocationMinimumDistanceUpdate
|
||||
.removeDuplicates()
|
||||
.debounce(for: .seconds(3), scheduler: DispatchQueue.main)
|
||||
.sink { [weak self] minimumDistance in
|
||||
self?.setupMinumDistance(minimumDistance)
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
/// Sets up the distance filter and the most optimal accuracy given the minimum distance to save battery,
|
||||
private func setupMinumDistance(_ minimumDistance: Int) {
|
||||
switch minimumDistance {
|
||||
case 0..<10:
|
||||
locationManager.desiredAccuracy = kCLLocationAccuracyBest
|
||||
case 10..<100:
|
||||
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
|
||||
default:
|
||||
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
|
||||
}
|
||||
locationManager.distanceFilter = CLLocationDistance(minimumDistance)
|
||||
}
|
||||
|
||||
private func syncActiveRoomProxies(with sessions: [String: Date]) {
|
||||
|
||||
Reference in New Issue
Block a user