summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLLocationManager.m
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLLocationManager.m')
-rw-r--r--platform/darwin/src/MGLLocationManager.m116
1 files changed, 116 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLLocationManager.m b/platform/darwin/src/MGLLocationManager.m
new file mode 100644
index 0000000000..29e3ccaa30
--- /dev/null
+++ b/platform/darwin/src/MGLLocationManager.m
@@ -0,0 +1,116 @@
+#import "MGLLocationManager_Private.h"
+
+@interface MGLCLLocationManager()<CLLocationManagerDelegate>
+
+@property (nonatomic) CLLocationManager *locationManager;
+
+@end
+
+@implementation MGLCLLocationManager
+
+- (instancetype)init
+{
+ if (self = [super init]) {
+ _locationManager = [[CLLocationManager alloc] init];
+ _locationManager.delegate = self;
+ }
+ return self;
+}
+
+@synthesize delegate;
+
+- (void)setHeadingOrientation:(CLDeviceOrientation)headingOrientation
+{
+ self.locationManager.headingOrientation = headingOrientation;
+}
+
+- (CLDeviceOrientation)headingOrientation
+{
+ return self.locationManager.headingOrientation;
+}
+
+- (void)setDesiredAccuracy:(CLLocationAccuracy)desiredAccuracy {
+ self.locationManager.desiredAccuracy = desiredAccuracy;
+}
+
+- (CLLocationAccuracy)desiredAccuracy {
+ return self.locationManager.desiredAccuracy;
+}
+
+- (CLAuthorizationStatus)authorizationStatus {
+ return [CLLocationManager authorizationStatus];
+}
+
+- (void)setActivityType:(CLActivityType)activityType {
+ self.locationManager.activityType = activityType;
+}
+
+- (CLActivityType)activityType {
+ return self.locationManager.activityType;
+}
+
+- (void)dismissHeadingCalibrationDisplay {
+ [self.locationManager dismissHeadingCalibrationDisplay];
+}
+
+- (void)requestAlwaysAuthorization {
+ [self.locationManager requestAlwaysAuthorization];
+}
+
+- (void)requestWhenInUseAuthorization {
+ [self.locationManager requestWhenInUseAuthorization];
+}
+
+- (void)startUpdatingHeading {
+ [self.locationManager startUpdatingHeading];
+}
+
+- (void)startUpdatingLocation {
+ [self.locationManager startUpdatingLocation];
+}
+
+- (void)stopUpdatingHeading {
+ [self.locationManager stopUpdatingHeading];
+}
+
+- (void)stopUpdatingLocation {
+ [self.locationManager stopUpdatingLocation];
+}
+
+- (void)dealloc
+{
+ [self.locationManager stopUpdatingLocation];
+ [self.locationManager stopUpdatingHeading];
+ self.locationManager.delegate = nil;
+ self.delegate = nil;
+}
+
+#pragma mark - CLLocationManagerDelegate
+
+- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
+ if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateLocations:)]) {
+ [self.delegate locationManager:self didUpdateLocations:locations];
+ }
+}
+
+- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
+ if ([self.delegate respondsToSelector:@selector(locationManager:didUpdateHeading:)]) {
+ [self.delegate locationManager:self didUpdateHeading:newHeading];
+ }
+}
+
+- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager {
+ if ([self.delegate respondsToSelector:@selector(locationManagerShouldDisplayHeadingCalibration:)]) {
+ return [self.delegate locationManagerShouldDisplayHeadingCalibration:self];
+ }
+
+ return NO;
+}
+
+- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
+ if ([self.delegate respondsToSelector:@selector(locationManager:didFailWithError:)]) {
+ [self.delegate locationManager:self didFailWithError:error];
+ }
+}
+
+@end