summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNadia Barbosa <nadiabarbosa@me.com>2019-03-12 14:18:13 -0700
committerNadia Barbosa <nadiabarbosa@me.com>2019-04-23 15:11:01 -0700
commitf05a826a764c496ef71bfa909708627d1a5f328f (patch)
tree46eab83131bbccc711deb833118213e729d5ca8f
parentb76e30c0b57732754b1cd2825171128c950c76c6 (diff)
downloadqtlocation-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.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 */,
);