summaryrefslogtreecommitdiff
path: root/platform/darwin/src/MGLLocationManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/darwin/src/MGLLocationManager.h')
-rw-r--r--platform/darwin/src/MGLLocationManager.h181
1 files changed, 181 insertions, 0 deletions
diff --git a/platform/darwin/src/MGLLocationManager.h b/platform/darwin/src/MGLLocationManager.h
new file mode 100644
index 0000000000..121dcc2293
--- /dev/null
+++ b/platform/darwin/src/MGLLocationManager.h
@@ -0,0 +1,181 @@
+#import <Foundation/Foundation.h>
+#import <CoreLocation/CoreLocation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol MGLLocationManagerDelegate;
+
+/**
+ The `MGLLocationManager` protocol defines a set of methods that a class must
+ implement in order to serve as the location manager of an `MGLMapView`. A location
+ manager is responsible for notifying the map view about location-related events,
+ such as a change in the user’s location. This protocol is similar to the
+ Core Location framework’s `CLLocationManager` class, but your implementation
+ does not need to be based on `CLLocationManager`.
+
+ */
+@protocol MGLLocationManager <NSObject>
+
+@optional
+
+#pragma mark Configuring Location Update Precision
+
+/**
+ Specifies the minimum distance (measured in meters) a device must move horizontally
+ before a location update is generated.
+
+ The default value of this property is `kCLDistanceFilterNone` when `MGLMapView` uses its
+ default location manager.
+
+ @see `CLLocationManager.distanceFilter`
+ */
+@property(nonatomic, assign) CLLocationDistance distanceFilter;
+
+/**
+ Specifies the accuracy of the location data.
+
+ The default value is `kCLLocationAccuracyBest` when `MGLMapView` uses its
+ default location manager.
+
+ @note Determining a location with greater accuracy requires more time and more power.
+
+ @see `CLLocationManager.desiredAccuracy`
+ */
+@property (nonatomic, assign) CLLocationAccuracy desiredAccuracy;
+
+/**
+ Specifies the type of user activity associated with the location updates.
+
+ The location manager uses this property as a cue to determine when location updates
+ may be automatically paused.
+
+ The default value is `CLActivityTypeOther` when `MGLMapView` uses its
+ default location manager.
+
+ @see `CLLocationManager.activityType`
+ */
+@property (nonatomic, assign) CLActivityType activityType;
+
+@required
+
+/**
+ The delegate to receive location updates.
+
+ Do not set the location manager’s delegate yourself. `MGLMapView` sets this property
+ after the location manager becomes `MGLMapView`’s location manager.
+ */
+@property (nonatomic, weak) id<MGLLocationManagerDelegate> delegate;
+
+#pragma mark Requesting Authorization for Location Services
+
+/**
+ Returns the current localization authorization status.
+
+ @see `+[CLLocationManger authorizationStatus]`
+ */
+@property (nonatomic, readonly) CLAuthorizationStatus authorizationStatus;
+
+/**
+ Requests permission to use the location services whenever the app is running.
+ */
+- (void)requestAlwaysAuthorization;
+
+/**
+ Requests permission to use the location services while the app is in
+ the foreground.
+ */
+- (void)requestWhenInUseAuthorization;
+
+#pragma mark Initiating Location Updates
+
+/**
+ Starts the generation of location updates that reports the user's current location.
+ */
+- (void)startUpdatingLocation;
+
+/**
+ Stops the generation of location updates.
+ */
+- (void)stopUpdatingLocation;
+
+#pragma mark Initiating Heading Updates
+
+/**
+ Specifies a physical device orientation.
+ */
+@property (nonatomic) CLDeviceOrientation headingOrientation;
+
+/**
+ Starts the generation of heading updates that reports the user's current hading.
+ */
+- (void)startUpdatingHeading;
+
+/**
+ Stops the generation of heading updates.
+ */
+- (void)stopUpdatingHeading;
+
+/**
+ Dissmisses immediately the heading calibration view from screen.
+ */
+- (void)dismissHeadingCalibrationDisplay;
+
+@end
+
+/**
+ The `MGLLocationManagerDelegate` protocol defines a set of methods that respond
+ to location updates from an `MGLLocationManager` object that is serving as the
+ location manager of an `MGLMapView`.
+ */
+@protocol MGLLocationManagerDelegate <NSObject>
+
+#pragma mark Responding to Location Updates
+
+/**
+ Notifies the delegate with the new location data.
+
+ @param manager The location manager reporting the update.
+ @param locations An array of `CLLocation` objects in chronological order,
+ with the last object representing the most recent location. This array
+ contains multiple `CLLocation` objects when `MGLMapView` uses its
+ default location manager.
+ */
+- (void)locationManager:(id<MGLLocationManager>)manager
+ didUpdateLocations:(NSArray<CLLocation *> *)locations;
+
+#pragma mark Responding to Heading Updates
+
+/**
+ Notifies the delegate with the new heading data.
+
+ @param manager The location manager reporting the update.
+ @param newHeading The new heading update.
+ */
+- (void)locationManager:(id<MGLLocationManager>)manager
+ didUpdateHeading:(CLHeading *)newHeading;
+
+/**
+ Asks the delegate if the calibration alert should be displayed.
+
+ @param manager The location manager reporting the calibration.
+ */
+- (BOOL)locationManagerShouldDisplayHeadingCalibration:(id<MGLLocationManager>)manager;
+
+#pragma mark Responding to Location Updates Errors
+
+/**
+ Notifies the delegate that the location manager was unable to retrieve
+ location updates.
+
+ @param manager The location manager reporting the error.
+ @param error An error object containing the error code that indicates
+ why the location manager failed.
+ */
+- (void)locationManager:(id<MGLLocationManager>)manager
+ didFailWithError:(nonnull NSError *)error;
+
+@optional
+
+@end
+
+NS_ASSUME_NONNULL_END