summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--platform/ios/app/Info.plist2
-rw-r--r--platform/ios/app/MBXState.h33
-rw-r--r--platform/ios/app/MBXState.m77
-rw-r--r--platform/ios/app/MBXStateManager.h20
-rw-r--r--platform/ios/app/MBXStateManager.m35
-rw-r--r--platform/ios/app/MBXViewController.m83
-rw-r--r--platform/ios/ios.xcodeproj/project.pbxproj12
7 files changed, 211 insertions, 51 deletions
diff --git a/platform/ios/app/Info.plist b/platform/ios/app/Info.plist
index e2f294a5a5..39a5487bd9 100644
--- a/platform/ios/app/Info.plist
+++ b/platform/ios/app/Info.plist
@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
+ <key>MGLMapboxAccessToken</key>
+ <string>INSERT_ACCESS_TOKEN</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
diff --git a/platform/ios/app/MBXState.h b/platform/ios/app/MBXState.h
new file mode 100644
index 0000000000..fc9000da27
--- /dev/null
+++ b/platform/ios/app/MBXState.h
@@ -0,0 +1,33 @@
+#import <Foundation/Foundation.h>
+#import <Mapbox/Mapbox.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+FOUNDATION_EXTERN NSString *const MBXCamera;
+FOUNDATION_EXTERN NSString *const MBXUserTrackingMode;
+FOUNDATION_EXTERN NSString *const MBXShowsUserLocation;
+FOUNDATION_EXTERN NSString *const MBXShowsDebugMask;
+FOUNDATION_EXTERN NSString *const MBXShowsZoomLevelHUD;
+FOUNDATION_EXTERN NSString *const MBXShowsTimeFrameGraph;
+
+@interface MBXState : NSObject
+
+@property (nonatomic, nullable) NSMutableDictionary *state;
+
+@property (nonatomic, nullable) MGLMapCamera *camera;
+@property (nonatomic) NSInteger userTrackingMode;
+@property (nonatomic) BOOL showsUserLocation;
+@property (nonatomic) NSInteger debugMask;
+@property (nonatomic) BOOL showsZoomLevelHUD;
+@property (nonatomic) BOOL showsTimeFrameGraph;
+
+- (void)saveMapCameraState:(MGLMapCamera *)camera;
+- (void)saveUserTrackingModeState:(NSInteger)trackingMode;
+- (void)saveShowsUserLocationState:(BOOL)showUserLocation;
+- (void)saveDebugMaskState:(NSInteger)debugMask;
+- (void)saveZoomLevelHUDState:(BOOL)showsZoomLevelHUD;
+- (void)saveDisplayTimeFrameGraphState:(BOOL)displayTimeFramGraphState;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platform/ios/app/MBXState.m b/platform/ios/app/MBXState.m
new file mode 100644
index 0000000000..232b2833f4
--- /dev/null
+++ b/platform/ios/app/MBXState.m
@@ -0,0 +1,77 @@
+#import "MBXState.h"
+
+NSString *const MBXCamera = @"MBXCamera";
+NSString *const MBXUserTrackingMode = @"MBXUserTrackingMode";
+NSString *const MBXShowsUserLocation = @"MBXShowsUserLocation";
+NSString *const MBXDebugMask = @"MBXDebugMask";
+NSString *const MBXShowsZoomLevelHUD = @"MBXShowsZoomLevelHUD";
+NSString *const MBXShowsTimeFrameGraph = @"MBXShowsFrameTimeGraph";
+
+
+@implementation MBXState
+
+- (instancetype) init {
+ if ((self = super.self)) {
+ NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"", MBXCamera,
+ @"", MBXUserTrackingMode,
+ @"", MBXShowsUserLocation,
+ @"", MBXDebugMask,
+ @"", MBXShowsZoomLevelHUD,
+ @"", MBXShowsTimeFrameGraph,
+ nil];
+
+ _state = dictionary;
+ }
+ return self;
+}
+
+- (void)saveMapCameraState:(MGLMapCamera *)camera {
+ _camera = camera;
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ NSData *archivedCamera = [NSKeyedArchiver archivedDataWithRootObject:camera];
+ [self.state setValue:camera forKey:@"MBXCamera"];
+ [defaults setObject:archivedCamera forKey:@"MBXCamera"];
+ [defaults synchronize];
+}
+
+- (void)saveUserTrackingModeState:(NSInteger)trackingMode; {
+ _userTrackingMode = trackingMode;
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ [self.state setValue:@(trackingMode) forKey:@"MBXUserTrackingMode"];
+ [defaults setInteger:trackingMode forKey:@"MBXUserTrackingMode"];
+ [defaults synchronize];
+}
+
+- (void)saveShowsUserLocationState:(BOOL)showUserLocation {
+ _showsUserLocation = showUserLocation;
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ [self.state setValue:@(showUserLocation) forKey:@"MBXShowsUserLocation"];
+ [defaults setBool:showUserLocation forKey:@"MBXShowsUserLocation"];
+ [defaults synchronize];
+}
+
+- (void)saveDebugMaskState:(NSInteger)debugMask {
+ _debugMask = debugMask;
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ [self.state setValue:@(debugMask) forKey:@"MBXDebugMask"];
+ [defaults setInteger:debugMask forKey:@"MBXDebugMask"];
+ [defaults synchronize];
+}
+
+- (void)saveZoomLevelHUDState:(BOOL)showsZoomLevelHUD {
+ _showsZoomLevelHUD = showsZoomLevelHUD;
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ [self.state setValue:@(showsZoomLevelHUD) forKey:@"MBXShowsZoomLevelHUD"];
+ [defaults setBool:showsZoomLevelHUD forKey:@"MBXShowsZoomLevelHUD"];
+ [defaults synchronize];
+}
+
+- (void)saveDisplayTimeFrameGraphState:(BOOL)displayTimeFramGraphState {
+ _showsTimeFrameGraph = displayTimeFramGraphState;
+ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
+ [self.state setValue:@(displayTimeFramGraphState) forKey:@"MBXShowsFrameTimeGraph"];
+ [defaults setBool:displayTimeFramGraphState forKey:@"MBXShowsFrameTimeGraph"];
+ [defaults synchronize];
+}
+
+@end
diff --git a/platform/ios/app/MBXStateManager.h b/platform/ios/app/MBXStateManager.h
new file mode 100644
index 0000000000..757f182f84
--- /dev/null
+++ b/platform/ios/app/MBXStateManager.h
@@ -0,0 +1,20 @@
+#import <Foundation/Foundation.h>
+#import "MBXState.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MBXStateManager : NSObject
+
+@property (nonatomic, nullable) MBXState* currentState;
+
++ (instancetype) sharedManager;
+
+- (void)saveState:(MBXState*)state forKey:(NSObject*)key;
+
+- (void)restoreState;
+
+- (void)resetState;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platform/ios/app/MBXStateManager.m b/platform/ios/app/MBXStateManager.m
new file mode 100644
index 0000000000..bd37ffe8b4
--- /dev/null
+++ b/platform/ios/app/MBXStateManager.m
@@ -0,0 +1,35 @@
+#import "MBXStateManager.h"
+#import <Mapbox/Mapbox.h>
+
+@implementation MBXStateManager
+
++ (instancetype) sharedManager {
+ static dispatch_once_t once;
+ static MBXStateManager* sharedManager;
+ dispatch_once(&once, ^{
+ sharedManager = [[self alloc] init];
+ sharedManager.currentState = [[MBXState alloc] init];
+ });
+
+ return sharedManager;
+}
+
+- (MBXState*)currentState {
+ return _currentState;
+}
+
+- (void)saveState:(MBXState*)state forKey:(NSObject*)key {
+
+}
+
+-(void)restoreState {
+ // Load from NSUserDefaults
+}
+
+-(void)resetState {
+ self.currentState = nil;
+}
+
+
+
+@end
diff --git a/platform/ios/app/MBXViewController.m b/platform/ios/app/MBXViewController.m
index a2d0d107be..da44cc3715 100644
--- a/platform/ios/app/MBXViewController.m
+++ b/platform/ios/app/MBXViewController.m
@@ -6,6 +6,7 @@
#import "LimeGreenStyleLayer.h"
#import "MBXEmbeddedMapViewController.h"
#import "MBXOrnamentsViewController.h"
+#import "MBXStateManager.h"
#import "MBXFrameTimeGraphView.h"
@@ -168,29 +169,21 @@ CLLocationCoordinate2D randomWorldCoordinate() {
#pragma mark - Setup & Teardown
-+ (void)initialize
-{
- if (self == [MBXViewController class])
- {
- [[NSUserDefaults standardUserDefaults] registerDefaults:@{
- @"MBXUserTrackingMode": @(MGLUserTrackingModeNone),
- @"MBXShowsUserLocation": @NO,
- @"MBXDebug": @NO,
- }];
- }
-}
-
- (void)viewDidLoad
{
[super viewDidLoad];
+ [[MBXStateManager sharedManager].currentState saveDebugMaskState:NO];
+ [[MBXStateManager sharedManager].currentState saveUserTrackingModeState:MGLUserTrackingModeNone];
+ [[MBXStateManager sharedManager].currentState saveShowsUserLocationState:NO];
+
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveState:) name:UIApplicationDidEnterBackgroundNotification object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(restoreState:) name:UIApplicationWillEnterForegroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveState:) name:UIApplicationWillTerminateNotification object:nil];
- [self restoreState:nil];
+ [self restoreState:[MBXStateManager sharedManager].currentState];
self.debugLoggingEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"MGLMapboxMetricsDebugLoggingEnabled"];
+
self.mapView.showsScale = YES;
self.mapView.showsUserHeadingIndicator = YES;
self.mapView.experimental_enableFrameRateMeasurement = YES;
@@ -235,45 +228,30 @@ CLLocationCoordinate2D randomWorldCoordinate() {
- (void)saveState:(__unused NSNotification *)notification
{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- NSData *archivedCamera = [NSKeyedArchiver archivedDataWithRootObject:self.mapView.camera];
- [defaults setObject:archivedCamera forKey:@"MBXCamera"];
- [defaults setInteger:self.mapView.userTrackingMode forKey:@"MBXUserTrackingMode"];
- [defaults setBool:self.mapView.showsUserLocation forKey:@"MBXShowsUserLocation"];
- [defaults setInteger:self.mapView.debugMask forKey:@"MBXDebugMask"];
- [defaults setBool:self.mapInfoHUDEnabled forKey:@"MBXShowsZoomLevelHUD"];
- [defaults setBool:self.mapInfoHUDEnabled forKey:@"MBXShowsFrameTimeGraph"];
- [defaults synchronize];
+ MBXState *currentState = [MBXStateManager sharedManager].currentState;
+ [currentState saveMapCameraState:self.mapView.camera];
+ [currentState saveShowsUserLocationState:self.mapView.showsUserLocation];
+ [currentState saveUserTrackingModeState:self.mapView.userTrackingMode];
+ [currentState saveDebugMaskState:self.mapView.debugMask];
+ [currentState saveZoomLevelHUDState:self.mapInfoHUDEnabled];
+ [currentState saveDisplayTimeFrameGraphState:self.frameTimeGraphEnabled];
}
-- (void)restoreState:(__unused NSNotification *)notification
+- (void)restoreState:(MBXState*)state
{
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- NSData *archivedCamera = [defaults objectForKey:@"MBXCamera"];
- MGLMapCamera *camera = archivedCamera ? [NSKeyedUnarchiver unarchiveObjectWithData:archivedCamera] : nil;
- if (camera)
- {
- self.mapView.camera = camera;
- }
- NSInteger uncheckedTrackingMode = [defaults integerForKey:@"MBXUserTrackingMode"];
- if (uncheckedTrackingMode >= 0 &&
- (NSUInteger)uncheckedTrackingMode >= MGLUserTrackingModeNone &&
- (NSUInteger)uncheckedTrackingMode <= MGLUserTrackingModeFollowWithCourse)
- {
- self.mapView.userTrackingMode = (MGLUserTrackingMode)uncheckedTrackingMode;
- }
- self.mapView.showsUserLocation = [defaults boolForKey:@"MBXShowsUserLocation"];
- NSInteger uncheckedDebugMask = [defaults integerForKey:@"MBXDebugMask"];
- if (uncheckedDebugMask >= 0)
+ if (state.camera)
{
- self.mapView.debugMask = (MGLMapDebugMaskOptions)uncheckedDebugMask;
+ self.mapView.camera = state.camera;
}
- if ([defaults boolForKey:@"MBXShowsZoomLevelHUD"])
- {
- self.mapInfoHUDEnabled = YES;
- [self updateHUD];
- }
- if ([defaults boolForKey:@"MBXShowsFrameTimeGraph"])
+
+ self.mapView.showsUserLocation = state.showsUserLocation;
+ self.mapView.userTrackingMode = state.userTrackingMode;
+ self.mapView.debugMask = state.debugMask;
+ self.mapInfoHUDEnabled = state.showsZoomLevelHUD;
+
+ [self updateHUD];
+
+ if (state.showsTimeFrameGraph == YES)
{
self.frameTimeGraphEnabled = YES;
self.frameTimeGraphView.hidden = NO;
@@ -295,8 +273,7 @@ CLLocationCoordinate2D randomWorldCoordinate() {
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
-
- [self saveState:nil];
+ [[MBXStateManager sharedManager] resetState];
}
#pragma mark - Debugging Interface
@@ -429,6 +406,9 @@ CLLocationCoordinate2D randomWorldCoordinate() {
{
self.mapInfoHUDEnabled = !self.mapInfoHUDEnabled;
self.hudLabel.hidden = !self.mapInfoHUDEnabled;
+
+ [[MBXStateManager sharedManager].currentState saveZoomLevelHUDState:self.mapInfoHUDEnabled];
+
self.reuseQueueStatsEnabled = NO;
[self updateHUD];
break;
@@ -437,6 +417,7 @@ CLLocationCoordinate2D randomWorldCoordinate() {
{
self.frameTimeGraphEnabled = !self.frameTimeGraphEnabled;
self.frameTimeGraphView.hidden = !self.frameTimeGraphEnabled;
+ [[MBXStateManager sharedManager].currentState saveDisplayTimeFrameGraphState:self.frameTimeGraphEnabled];
break;
}
case MBXSettingsDebugToolsShowReuseQueueStats:
@@ -444,7 +425,7 @@ CLLocationCoordinate2D randomWorldCoordinate() {
self.reuseQueueStatsEnabled = !self.reuseQueueStatsEnabled;
self.hudLabel.hidden = !self.reuseQueueStatsEnabled;
self.mapInfoHUDEnabled = NO;
- [self updateHUD];
+ [[MBXStateManager sharedManager].currentState saveZoomLevelHUDState:self.mapInfoHUDEnabled];
break;
}
default:
diff --git a/platform/ios/ios.xcodeproj/project.pbxproj b/platform/ios/ios.xcodeproj/project.pbxproj
index 8382206838..ecf9739cd3 100644
--- a/platform/ios/ios.xcodeproj/project.pbxproj
+++ b/platform/ios/ios.xcodeproj/project.pbxproj
@@ -17,6 +17,8 @@
077061DA215DA00E000FEF62 /* MGLTestLocationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 077061D9215DA00E000FEF62 /* MGLTestLocationManager.m */; };
0778DD431F67556700A73B34 /* MGLComputedShapeSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */; settings = {ATTRIBUTES = (Public, ); }; };
0778DD441F67556C00A73B34 /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */; };
+ 07AF264822372BDB00FD01DD /* MBXStateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 07AF264722372BDB00FD01DD /* MBXStateManager.m */; };
+ 07AF264B22382E5800FD01DD /* MBXState.m in Sources */ = {isa = PBXBuildFile; fileRef = 07AF264A22382E5800FD01DD /* MBXState.m */; };
07D8C6FB1F67560100381808 /* MGLComputedShapeSource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */; };
07D8C6FF1F67562C00381808 /* MGLComputedShapeSourceTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */; };
07D947531F67488E00E37934 /* MGLComputedShapeSource_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D9474E1F67487E00E37934 /* MGLComputedShapeSource_Private.h */; };
@@ -803,6 +805,10 @@
077061DB215DA11F000FEF62 /* MGLTestLocationManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MGLTestLocationManager.h; sourceTree = "<group>"; };
0778DD401F67555F00A73B34 /* MGLComputedShapeSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource.h; sourceTree = "<group>"; };
0778DD411F67555F00A73B34 /* MGLComputedShapeSource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MGLComputedShapeSource.mm; sourceTree = "<group>"; };
+ 07AF264622372BDB00FD01DD /* MBXStateManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXStateManager.h; sourceTree = "<group>"; };
+ 07AF264722372BDB00FD01DD /* MBXStateManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXStateManager.m; sourceTree = "<group>"; };
+ 07AF264922382E5800FD01DD /* MBXState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MBXState.h; sourceTree = "<group>"; };
+ 07AF264A22382E5800FD01DD /* MBXState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBXState.m; sourceTree = "<group>"; };
07D8C6FD1F67562800381808 /* MGLComputedShapeSourceTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MGLComputedShapeSourceTests.m; path = ../../darwin/test/MGLComputedShapeSourceTests.m; sourceTree = "<group>"; };
07D9474E1F67487E00E37934 /* MGLComputedShapeSource_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGLComputedShapeSource_Private.h; sourceTree = "<group>"; };
16376B071FFD9DAF0000563E /* integration.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = integration.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1825,6 +1831,10 @@
076171C62141A91700668A35 /* Settings.bundle */,
9604FC341F313A5E003EEA02 /* Fixtures */,
DA1DC94D1CB6C1C2006E619F /* Supporting Files */,
+ 07AF264622372BDB00FD01DD /* MBXStateManager.h */,
+ 07AF264722372BDB00FD01DD /* MBXStateManager.m */,
+ 07AF264922382E5800FD01DD /* MBXState.h */,
+ 07AF264A22382E5800FD01DD /* MBXState.m */,
);
name = "Demo App";
path = app;
@@ -2962,12 +2972,14 @@
buildActionMask = 2147483647;
files = (
DA1DC9971CB6E046006E619F /* main.m in Sources */,
+ 07AF264822372BDB00FD01DD /* MBXStateManager.m in Sources */,
965DF51120F9430500438AAC /* MBXFrameTimeGraphView.m in Sources */,
DA1DC9991CB6E054006E619F /* MBXAppDelegate.m in Sources */,
6FA9341721EF372100AA9CA8 /* MBXOrnamentsViewController.m in Sources */,
DA1DC96B1CB6C6B7006E619F /* MBXOfflinePacksTableViewController.m in Sources */,
DA1DC99B1CB6E064006E619F /* MBXViewController.m in Sources */,
40FDA76B1CCAAA6800442548 /* MBXAnnotationView.m in Sources */,
+ 07AF264B22382E5800FD01DD /* MBXState.m in Sources */,
3E6465D62065767A00685536 /* LimeGreenStyleLayer.m in Sources */,
632281DF1E6F855900D75A5D /* MBXEmbeddedMapViewController.m in Sources */,
);