summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Guerra <fabian.guerra@mapbox.com>2019-04-26 13:13:16 -0700
committerFabian Guerra <fabian.guerra@mapbox.com>2019-04-26 13:13:16 -0700
commit11522ec743be77d8fd80f2262a553ef463295d34 (patch)
treedcc8c7df4d0f4372b98e21a93b542a90626dc0dc
parenta14037c73984954e14cee370de035e829c5b990f (diff)
downloadqtlocation-mapboxgl-11522ec743be77d8fd80f2262a553ef463295d34.tar.gz
[ios] Implement dictionary based map state persistance.
-rw-r--r--platform/ios/app/MBXState.h1
-rw-r--r--platform/ios/app/MBXState.m93
-rw-r--r--platform/ios/app/MBXStateManager.h6
-rw-r--r--platform/ios/app/MBXStateManager.m54
-rw-r--r--platform/ios/app/MBXViewController.m11
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];
}
}