From 17a8079f3095128c0bd0f19f8b0961bcfd5a1eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguye=CC=82=CC=83n?= Date: Mon, 18 Apr 2016 17:54:01 -0700 Subject: [PATCH] [ios] Prompt for access token in ios-bench Prompt for an access token before starting benchmarking. /ref #4728 --- platform/ios/benchmark/MBXBenchAppDelegate.h | 2 + platform/ios/benchmark/MBXBenchAppDelegate.m | 26 ++++++------- .../ios/benchmark/MBXBenchViewController.mm | 38 ++++++++++++++++++- 3 files changed, 51 insertions(+), 15 deletions(-) diff --git a/platform/ios/benchmark/MBXBenchAppDelegate.h b/platform/ios/benchmark/MBXBenchAppDelegate.h index b8f6c2e64..e89add93f 100644 --- a/platform/ios/benchmark/MBXBenchAppDelegate.h +++ b/platform/ios/benchmark/MBXBenchAppDelegate.h @@ -1,5 +1,7 @@ #import +extern NSString * const MBXMapboxAccessTokenDefaultsKey; + @interface MBXBenchAppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; diff --git a/platform/ios/benchmark/MBXBenchAppDelegate.m b/platform/ios/benchmark/MBXBenchAppDelegate.m index 5da6ccfce..684c90d33 100644 --- a/platform/ios/benchmark/MBXBenchAppDelegate.m +++ b/platform/ios/benchmark/MBXBenchAppDelegate.m @@ -2,23 +2,23 @@ #import "MBXBenchViewController.h" #import +NSString * const MBXMapboxAccessTokenDefaultsKey = @"MBXMapboxAccessToken"; + @implementation MBXBenchAppDelegate - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { - NSString* accessToken = [[NSProcessInfo processInfo] environment][@"MAPBOX_ACCESS_TOKEN"]; - if (accessToken) { - // Store to preferences so that we can launch the app later on without having to specify - // token. - [[NSUserDefaults standardUserDefaults] setObject:accessToken forKey:@"access_token"]; - } else { - // Try to retrieve from preferences, maybe we've stored them there previously and can reuse - // the token. - accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"access_token"]; - } - if (!accessToken) { - NSLog(@"No access token set. Mapbox vector tiles won't work."); - } else { + if (![MGLAccountManager accessToken]) { + NSString *accessToken = [[NSProcessInfo processInfo] environment][@"MAPBOX_ACCESS_TOKEN"]; + if (accessToken) { + // Store to preferences so that we can launch the app later on without having to specify + // token. + [[NSUserDefaults standardUserDefaults] setObject:accessToken forKey:MBXMapboxAccessTokenDefaultsKey]; + } else { + // Try to retrieve from preferences, maybe we've stored them there previously and can reuse + // the token. + accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:MBXMapboxAccessTokenDefaultsKey]; + } [MGLAccountManager setAccessToken:accessToken]; } diff --git a/platform/ios/benchmark/MBXBenchViewController.mm b/platform/ios/benchmark/MBXBenchViewController.mm index 5745a9748..43e98d7cc 100644 --- a/platform/ios/benchmark/MBXBenchViewController.mm +++ b/platform/ios/benchmark/MBXBenchViewController.mm @@ -1,5 +1,7 @@ #import "MBXBenchViewController.h" +#import "MBXBenchAppDelegate.h" + #import #import "MGLMapView_Internal.h" @@ -44,10 +46,42 @@ self.mapView.rotateEnabled = NO; self.mapView.userInteractionEnabled = YES; - [self startBenchmarkIteration]; - [self.view addSubview:self.mapView]; +} +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + if ([MGLAccountManager accessToken].length) { + [self startBenchmarkIteration]; + } else { + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Access Token" message:@"Enter your Mapbox access token to load Mapbox-hosted tiles and styles:" preferredStyle:UIAlertControllerStyleAlert]; + [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { + textField.keyboardType = UIKeyboardTypeURL; + textField.autocorrectionType = UITextAutocorrectionTypeNo; + textField.autocapitalizationType = UITextAutocapitalizationTypeNone; + }]; + + [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + [self startBenchmarkIteration]; + }]]; + UIAlertAction *OKAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + UITextField *textField = alertController.textFields.firstObject; + NSString *accessToken = textField.text; + [[NSUserDefaults standardUserDefaults] setObject:accessToken forKey:MBXMapboxAccessTokenDefaultsKey]; + [MGLAccountManager setAccessToken:accessToken]; + [self.mapView reloadStyle:self]; + + [self startBenchmarkIteration]; + }]; + [alertController addAction:OKAction]; + + if ([alertController respondsToSelector:@selector(setPreferredAction:)]) { + alertController.preferredAction = OKAction; + } + [self presentViewController:alertController animated:YES completion:nil]; + } } size_t idx = 0;