diff options
-rw-r--r-- | platform/ios/app/Info.plist | 2 | ||||
-rw-r--r-- | platform/ios/app/MBXState.h | 33 | ||||
-rw-r--r-- | platform/ios/app/MBXState.m | 77 | ||||
-rw-r--r-- | platform/ios/app/MBXStateManager.h | 20 | ||||
-rw-r--r-- | platform/ios/app/MBXStateManager.m | 35 | ||||
-rw-r--r-- | platform/ios/app/MBXViewController.m | 83 | ||||
-rw-r--r-- | platform/ios/ios.xcodeproj/project.pbxproj | 12 |
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 */, ); |