Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kCLDistanceFilterNone value used as default for minDistance. #309

Merged
merged 1 commit into from
Nov 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ public struct LocationManagerSettings: CustomStringConvertible, Equatable {
public internal(set) var accuracy: GPSLocationOptions.Accuracy = .any

/// Minimum distance.
public internal(set) var minDistance: CLLocationDistance?
public internal(set) var minDistance: CLLocationDistance = kCLDistanceFilterNone

/// Activity type.
public internal(set) var activityType: CLActivityType = .other
Expand All @@ -168,7 +168,7 @@ public struct LocationManagerSettings: CustomStringConvertible, Equatable {
let data: [String: Any] = [
"services": activeServices.description,
"accuracy": accuracy.description,
"minDistance": minDistance ?? -1,
"minDistance": minDistance,
"activityType": activityType.description
]
return JSONStringify(data)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ internal extension CLLocationManager {
func setSettings(_ settings: LocationManagerSettings) {
self.desiredAccuracy = settings.accuracy.value
self.activityType = settings.activityType
self.distanceFilter = settings.minDistance ?? kCLLocationAccuracyThreeKilometers
self.distanceFilter = settings.minDistance

// Location updates
let hasContinousLocation = settings.activeServices.contains(.continousLocation)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,9 +246,9 @@ public class GPSLocationOptions: CustomStringConvertible, Codable {
public var activityType: CLActivityType = .other

/// Minimum horizontal distance to report new fresh data.
/// By default is set to `nil` which means no filter is applied.
public var minDistance: CLLocationDistance?
/// By default is set to `kCLDistanceFilterNone` which means client will be informed of any movement.
public var minDistance: CLLocationDistance = kCLDistanceFilterNone

/// Minimum time interval since last valid received data to report new fresh data.
/// By default is set to `nil` which means no filter is applied.
public var minTimeInterval: TimeInterval?
Expand All @@ -260,7 +260,7 @@ public class GPSLocationOptions: CustomStringConvertible, Codable {
"accuracy= \(accuracy)",
"timeout= \(timeout?.description ?? "none")",
"activityType= \(activityType)",
"minDistance= \(minDistance ?? -1)",
"minDistance= \(minDistance)",
"minTimeInterval= \(minTimeInterval ?? 0)"
].joined(separator: ", ") + "}"
}
Expand Down Expand Up @@ -300,7 +300,7 @@ public class GPSLocationOptions: CustomStringConvertible, Codable {
self.timeout = try container.decode(Timeout.self, forKey: .timeout)
self.activityType = try CLActivityType(rawValue: container.decode(Int.self, forKey: .activityType)) ?? .other
self.minTimeInterval = try container.decodeIfPresent(TimeInterval.self, forKey: .minTimeInterval)
self.minDistance = try container.decodeIfPresent(CLLocationDistance.self, forKey: .minDistance)
self.minDistance = try container.decodeIfPresent(CLLocationDistance.self, forKey: .minDistance) ?? kCLDistanceFilterNone
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,8 @@ public class GPSLocationRequest: RequestProtocol, Codable {
}

if let previousLocation = lastLocation {
if let minDistance = options.minDistance,
previousLocation.distance(from: data) > minDistance {
if options.minDistance > kCLDistanceFilterNone,
previousLocation.distance(from: data) > options.minDistance {
return .notMinDistance // minimum distance since last location is not respected.
}

Expand Down
3 changes: 1 addition & 2 deletions Sources/SwiftLocation/SwiftLocation.swift
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ public class LocationManager: LocationManagerDelegate, CustomStringConvertible {
services.insert(request.options.subscription.service)

settings.accuracy = min(settings.accuracy, request.options.accuracy)
settings.minDistance = min(settings.minDistance ?? -1, request.options.minDistance ?? -1)
settings.minDistance = max(settings.minDistance, request.options.minDistance)
settings.activityType = CLActivityType(rawValue: max(settings.activityType.rawValue, request.options.activityType.rawValue)) ?? .other
}

Expand All @@ -558,7 +558,6 @@ public class LocationManager: LocationManagerDelegate, CustomStringConvertible {
services.insert(.beacon)
}

if settings.minDistance == -1 { settings.minDistance = nil }
settings.activeServices = services

return settings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class GPSController: UIViewController, UITableViewDelegate, UITableViewDataSourc
case .activityType:
cell.valueLabel.text = serviceOptions.activityType.description
case .minDistance:
cell.valueLabel.text = serviceOptions.minDistance?.formattedValue ?? NOT_SET
cell.valueLabel.text = (serviceOptions.minDistance == kCLDistanceFilterNone) ? NOT_SET : serviceOptions.minDistance.formattedValue
case .minTimeInterval:
cell.valueLabel.text = serviceOptions.minTimeInterval?.format() ?? NOT_SET
case .subscription:
Expand Down Expand Up @@ -157,7 +157,7 @@ class GPSController: UIViewController, UITableViewDelegate, UITableViewDataSourc

private func selectMinDistance() {
UIAlertController.showDoubleInput(title: "Select Minimum Distance", message: "Minimum horizontal distance to report new fresh data (meters)") { [weak self] value in
self?.serviceOptions.minDistance = (value != nil ? CLLocationDistance(value!) : nil)
self?.serviceOptions.minDistance = (value != nil ? CLLocationDistance(value!) : kCLDistanceFilterNone)
self?.reloadData()
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ fileprivate class ListData {
managerSettings = [
(.activeServices, settings.activeServices.isEmpty ? NOT_SET : settings.activeServices.description),
(.accuracy, settings.accuracy.description),
(.minDistance, settings.minDistance?.formattedValue ?? NOT_SET),
(.minDistance, settings.minDistance.formattedValue),
(.activityType, settings.activityType.description)
]
}
Expand Down Expand Up @@ -298,7 +298,7 @@ fileprivate extension RequestProtocol {
"› type: \(gps.options.subscription.description)",
"› accuracy: \(gps.options.accuracy.description)",
"› activity: \(gps.options.activityType.description)",
"› minDist: \(gps.options.minDistance?.description ?? NOT_SET)",
"› minDist: \(gps.options.minDistance.description)",
"› minInterval: \(gps.options.minTimeInterval?.description ?? NOT_SET)"
].joined(separator: "\n")

Expand Down