diff options
author | Fabian Guerra <fabian.guerra@mapbox.com> | 2019-04-26 13:13:16 -0700 |
---|---|---|
committer | Fabian Guerra <fabian.guerra@mapbox.com> | 2019-04-26 13:13:16 -0700 |
commit | 11522ec743be77d8fd80f2262a553ef463295d34 (patch) | |
tree | dcc8c7df4d0f4372b98e21a93b542a90626dc0dc | |
parent | a14037c73984954e14cee370de035e829c5b990f (diff) | |
download | qtlocation-mapboxgl-11522ec743be77d8fd80f2262a553ef463295d34.tar.gz |
[ios] Implement dictionary based map state persistance.
-rw-r--r-- | platform/ios/app/MBXState.h | 1 | ||||
-rw-r--r-- | platform/ios/app/MBXState.m | 93 | ||||
-rw-r--r-- | platform/ios/app/MBXStateManager.h | 6 | ||||
-rw-r--r-- | platform/ios/app/MBXStateManager.m | 54 | ||||
-rw-r--r-- | platform/ios/app/MBXViewController.m | 11 |
5 files changed, 64 insertions, 101 deletions
diff --git a/platform/ios/app/MBXState.h b/platform/ios/app/MBXState.h index a18ab11ad6..9829d0729e 100644 --- a/platform/ios/app/MBXState.h +++ b/platform/ios/app/MBXState.h @@ -7,6 +7,7 @@ FOUNDATION_EXTERN NSString *const MBXCamera; FOUNDATION_EXTERN NSString *const MBXUserTrackingMode; FOUNDATION_EXTERN NSString *const MBXShowsUserLocation; FOUNDATION_EXTERN NSString *const MBXDebugMaskValue; +FOUNDATION_EXTERN NSString *const MBXShowsZoomLevelHUD; FOUNDATION_EXTERN NSString *const MBXShowsZoomLevelOrnament; FOUNDATION_EXTERN NSString *const MBXShowsTimeFrameGraph; diff --git a/platform/ios/app/MBXState.m b/platform/ios/app/MBXState.m index 6c64253d27..bec82157bf 100644 --- a/platform/ios/app/MBXState.m +++ b/platform/ios/app/MBXState.m @@ -3,8 +3,8 @@ NSString *const MBXCamera = @"MBXCamera"; NSString *const MBXUserTrackingMode = @"MBXUserTrackingMode"; NSString *const MBXShowsUserLocation = @"MBXShowsUserLocation"; -NSString *const MBXDebugMask = @"MBXDebugMaskValue"; -NSString *const MBXShowsZoomLevelHUD = @"MBXShowsZoomLevelOrnament"; +NSString *const MBXDebugMaskValue = @"MBXDebugMaskValue"; +NSString *const MBXShowsZoomLevelOrnament = @"MBXShowsZoomLevelOrnament"; NSString *const MBXShowsTimeFrameGraph = @"MBXShowsFrameTimeGraph"; @interface MBXState() @@ -16,93 +16,4 @@ NSString *const MBXShowsTimeFrameGraph = @"MBXShowsFrameTimeGraph"; @implementation MBXState -- (instancetype)initForMapView:(MGLMapView*)mapView { - if (self = [super init]) { - - NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"", MBXCamera, - @"", MBXUserTrackingMode, - @"", MBXShowsUserLocation, - @"", MBXDebugMask, - @"", MBXShowsZoomLevelHUD, - @"", MBXShowsTimeFrameGraph, - nil]; - - _state = dictionary; - _standardUserDefaults = [NSUserDefaults standardUserDefaults]; - _mapView = mapView; - } - return self; -} - - -// Current map camera -- (void)setCamera:(MGLMapCamera *)camera { - NSData *archivedCamera = [NSKeyedArchiver archivedDataWithRootObject:self.mapView.camera]; - [self.standardUserDefaults setObject:archivedCamera forKey:MBXCamera]; - _camera = camera; -} - -- (MGLMapCamera*)getCamera { - NSData *archivedCamera = [self.standardUserDefaults objectForKey:MBXCamera]; - MGLMapCamera *unarchivedCamera = archivedCamera ? [NSKeyedUnarchiver unarchiveObjectWithData:archivedCamera] : nil; - return unarchivedCamera; -} - -// User tracking mode status -- (void)setUserTrackingMode:(MGLUserTrackingMode)userTrackingMode { - [self.standardUserDefaults setInteger:self.mapView.userTrackingMode forKey:MBXUserTrackingMode]; - _userTrackingMode = userTrackingMode; -} - -- (MGLUserTrackingMode)getUserTrackingMode { - if (_userTrackingMode >= 0 && - _userTrackingMode >= MGLUserTrackingModeNone && - _userTrackingMode <= MGLUserTrackingModeFollowWithCourse) - { - return _userTrackingMode; - } - - return MGLUserTrackingModeNone; -} - -// User location status -- (void)setShowsUserLocation:(BOOL)showsUserLocation { - [self.standardUserDefaults setBool:self.mapView.showsUserLocation forKey:MBXShowsUserLocation]; - _showsUserLocation = showsUserLocation; -} - -- (BOOL)getShowsUserLocation { - return [self.standardUserDefaults boolForKey:MBXShowsUserLocation]; -} - -// Debug mask value -- (void)setDebugMask:(MGLMapDebugMaskOptions)debugMask { - [self.standardUserDefaults setInteger:self.mapView.debugMask forKey:MBXDebugMaskValue]; - _debugMask = debugMask; -} - -- (MGLMapDebugMaskOptions)getDebugMask { - return [self.standardUserDefaults integerForKey:MBXDebugMaskValue]; -} - -// Zoom level ornament -- (void)setShowsZoomLevelOrnament:(BOOL)showsZoomLevelOrnament { - [self.standardUserDefaults setBool:self.mapView.showsZoomLevelOrnament forKey:MBXShowsZoomLevelOrnament]; - _showsZoomLevelOrnament = showsZoomLevelOrnament; -} - --(BOOL)getShowsZoomLevelHUD { - return [self.standardUserDefaults boolForKey:MBXShowsZoomLevelOrnament]; -} - -// Time frame graph --(void)setShowsTimeFrameGraph:(BOOL)showsTimeFrameGraph { - [self.standardUserDefaults setBool:self.mapView.showsTimeFrameGraph forKey:MBXShowsTimeFrameGraph]; - _showsTimeFrameGraph = showsTimeFrameGraph; -} - --(BOOL)getShowsTimeFrameGraph { - return [self.standardUserDefaults boolForKey:MBXShowsTimeFrameGraph]; -} - @end diff --git a/platform/ios/app/MBXStateManager.h b/platform/ios/app/MBXStateManager.h index 229695ae10..29dcf148bf 100644 --- a/platform/ios/app/MBXStateManager.h +++ b/platform/ios/app/MBXStateManager.h @@ -1,16 +1,16 @@ #import <Foundation/Foundation.h> -#import "MBXState.h" +@class MBXState; NS_ASSUME_NONNULL_BEGIN @interface MBXStateManager : NSObject -@property (nonatomic, nullable) MBXState* currentState; - + (instancetype) sharedManager; - (void)saveState:(MBXState*)state; +- (MBXState *)currentState; + - (void)restoreState; - (void)resetState; diff --git a/platform/ios/app/MBXStateManager.m b/platform/ios/app/MBXStateManager.m index f6117c612f..0daf61bc44 100644 --- a/platform/ios/app/MBXStateManager.m +++ b/platform/ios/app/MBXStateManager.m @@ -1,5 +1,12 @@ #import "MBXStateManager.h" #import <Mapbox/Mapbox.h> +#import "MBXState.h" + +@interface MBXStateManager() + +@property (strong, nonatomic) MBXState *currentState; + +@end @implementation MBXStateManager @@ -8,17 +15,60 @@ static MBXStateManager* sharedManager; dispatch_once(&once, ^{ sharedManager = [[self alloc] init]; - sharedManager.currentState = [[MBXState alloc] init]; }); return sharedManager; } - (MBXState*)currentState { + + if (!_currentState) { + _currentState = [[MBXState alloc] init]; + + NSMutableDictionary *dictionary = [[NSUserDefaults standardUserDefaults] objectForKey:@"mapStateKey"]; + if (dictionary[MBXCamera]) { + _currentState.camera = dictionary[MBXCamera]; + } + + if (dictionary[MBXUserTrackingMode]) { + _currentState.userTrackingMode = [dictionary[MBXUserTrackingMode] boolValue]; + } + + if (dictionary[MBXShowsUserLocation]) { + _currentState.showsUserLocation = [dictionary[MBXShowsUserLocation] boolValue]; + } + + if (dictionary[MBXDebugMaskValue]) { + _currentState.debugMask = ((NSNumber *)dictionary[MBXDebugMaskValue]).intValue; + } + + if (dictionary[MBXShowsTimeFrameGraph]) { + _currentState.showsTimeFrameGraph = [dictionary[MBXShowsTimeFrameGraph] boolValue]; + } + + } return _currentState; } - (void)saveState:(MBXState*)state { + _currentState = state; + + if (state) { + NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; + if (state.camera) { + [dictionary setObject:state.camera forKey:MBXCamera]; + } + + [dictionary setValue:@(state.userTrackingMode) forKey:MBXUserTrackingMode]; + [dictionary setValue:@(state.showsUserLocation) forKey:MBXShowsUserLocation]; + [dictionary setValue:@(state.debugMask) forKey:MBXDebugMaskValue]; + [dictionary setValue:@(state.showsTimeFrameGraph) forKey:MBXShowsTimeFrameGraph]; + + [[NSUserDefaults standardUserDefaults] setObject:dictionary forKey:@"mapStateKey"]; + + } else { + [self resetState]; + } } @@ -26,7 +76,7 @@ } -(void)resetState { - self.currentState = nil; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"mapStateKey"]; } diff --git a/platform/ios/app/MBXViewController.m b/platform/ios/app/MBXViewController.m index 0af43ebd93..1015c95be6 100644 --- a/platform/ios/app/MBXViewController.m +++ b/platform/ios/app/MBXViewController.m @@ -7,6 +7,7 @@ #import "MBXEmbeddedMapViewController.h" #import "MBXOrnamentsViewController.h" #import "MBXStateManager.h" +#import "MBXState.h" #import "MBXFrameTimeGraphView.h" @@ -152,7 +153,7 @@ CLLocationCoordinate2D randomWorldCoordinate() { @property (nonatomic, getter=isLocalizingLabels) BOOL localizingLabels; @property (nonatomic) BOOL reuseQueueStatsEnabled; @property (nonatomic) BOOL mapInfoHUDEnabled; -@property (nonatomic) BOOL frameTimeGraphEnabled; +//@property (nonatomic) BOOL frameTimeGraphEnabled; @property (nonatomic) BOOL randomWalk; @property (nonatomic) NSMutableArray<UIWindow *> *helperWindows; @@ -302,7 +303,7 @@ CLLocationCoordinate2D randomWorldCoordinate() { [NSString stringWithFormat:@"%@ Overdraw Visualization", (debugMask & MGLMapDebugOverdrawVisualizationMask ? @"Hide" :@"Show")], [NSString stringWithFormat:@"%@ Map Info HUD", (_mapInfoHUDEnabled ? @"Hide" :@"Show")], - [NSString stringWithFormat:@"%@ Frame Time Graph", (_frameTimeGraphEnabled ? @"Hide" :@"Show")], + [NSString stringWithFormat:@"%@ Frame Time Graph", ([MBXStateManager sharedManager].currentState.showsTimeFrameGraph ? @"Hide" :@"Show")], [NSString stringWithFormat:@"%@ Reuse Queue Stats", (_reuseQueueStatsEnabled ? @"Hide" :@"Show")] ]]; break; @@ -388,8 +389,8 @@ CLLocationCoordinate2D randomWorldCoordinate() { } case MBXSettingsDebugToolsShowFrameTimeGraph: { - self.frameTimeGraphEnabled = !self.frameTimeGraphEnabled; - self.frameTimeGraphView.hidden = !self.frameTimeGraphEnabled; + [MBXStateManager sharedManager].currentState.showsTimeFrameGraph = ![MBXStateManager sharedManager].currentState.showsTimeFrameGraph; + self.frameTimeGraphView.hidden = ![MBXStateManager sharedManager].currentState.showsTimeFrameGraph; // [[MBXStateManager sharedManager].currentState.showsTimeFrameGraph:self.frameTimeGraphEnabled]; break; } @@ -1270,7 +1271,7 @@ CLLocationCoordinate2D randomWorldCoordinate() { } - (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered { - if (self.frameTimeGraphEnabled) { + if ([MBXStateManager sharedManager].currentState.showsTimeFrameGraph) { [self.frameTimeGraphView updatePathWithFrameDuration:mapView.frameTime]; } } |