diff options
author | Nadia Barbosa <nadiabarbosa@me.com> | 2019-03-12 14:18:13 -0700 |
---|---|---|
committer | Nadia Barbosa <nadiabarbosa@me.com> | 2019-04-23 15:11:01 -0700 |
commit | f05a826a764c496ef71bfa909708627d1a5f328f (patch) | |
tree | 46eab83131bbccc711deb833118213e729d5ca8f | |
parent | b76e30c0b57732754b1cd2825171128c950c76c6 (diff) | |
download | qtlocation-mapboxgl-f05a826a764c496ef71bfa909708627d1a5f328f.tar.gz |
Draft of state manager
Progress checkpoint
Breaking up state saving into MBXStateManager but states aren't saving yet.
Finish save state
More progress
State isn't being restored after app has been force quit
Blank token
Update circle.yml
Yaaaaaayml
Dead 🐄
Ok no dedbeef
-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 */, ); |