You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
4.0 KiB

2 years ago
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "GoogleMapsDemos/DemoAppDelegate.h"
#import <GoogleMaps/GoogleMaps.h>
#import "GoogleMapsDemos/MasterViewController.h"
#import "GoogleMapsDemos/SDKDemoAPIKey.h"
@implementation DemoAppDelegate {
id _services;
}
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"Build version: %d", __apple_build_version__);
if ([kAPIKey length] == 0) {
// Blow up if APIKey has not yet been set.
NSString *bundleId = [[NSBundle mainBundle] bundleIdentifier];
NSString *format = @"Configure APIKey inside SDKDemoAPIKey.h for your "
@"bundle `%@`, see README.GoogleMapsDemos for more information";
@throw [NSException exceptionWithName:@"DemoAppDelegate"
reason:[NSString stringWithFormat:format, bundleId]
userInfo:nil];
}
[GMSServices provideAPIKey:kAPIKey];
_services = [GMSServices sharedServices];
// Log the required open source licenses! Yes, just NSLog-ing them is not enough but is good for
// a demo.
NSLog(@"Open source licenses:\n%@", [GMSServices openSourceLicenseInfo]);
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
MasterViewController *master = [[MasterViewController alloc] init];
master.appDelegate = self;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
// This is an iPhone; configure the top-level navigation controller as the
// rootViewController, which contains the 'master' list of samples.
self.navigationController =
[[UINavigationController alloc] initWithRootViewController:master];
// Force non-translucent navigation bar for consistency of demo between
// iOS 6 and iOS 7.
self.navigationController.navigationBar.translucent = NO;
self.window.rootViewController = self.navigationController;
} else {
// This is an iPad; configure a split-view controller that contains the
// the 'master' list of samples on the left side, and the current displayed
// sample on the right (begins empty).
UINavigationController *masterNavigationController =
[[UINavigationController alloc] initWithRootViewController:master];
UIViewController *empty = [[UIViewController alloc] init];
UINavigationController *detailNavigationController =
[[UINavigationController alloc] initWithRootViewController:empty];
// Force non-translucent navigation bar for consistency of demo between
// iOS 6 and iOS 7.
detailNavigationController.navigationBar.translucent = NO;
self.splitViewController = [[UISplitViewController alloc] init];
self.splitViewController.delegate = master;
self.splitViewController.viewControllers =
@[masterNavigationController, detailNavigationController];
self.splitViewController.presentsWithGesture = NO;
self.window.rootViewController = self.splitViewController;
}
[self.window makeKeyAndVisible];
return YES;
}
- (void)setSample:(UIViewController *)sample {
NSAssert([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad,
@"Expected device to be iPad inside setSample:");
// Finds the UINavigationController in the right side of the sample, and
// replace its displayed controller with the new sample.
UINavigationController *nav =
[self.splitViewController.viewControllers objectAtIndex:1];
[nav setViewControllers:[NSArray arrayWithObject:sample] animated:NO];
}
- (UIViewController *)sample {
NSAssert([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad,
@"Expected device to be iPad inside sample");
// The current sample is the top-most VC in the right-hand pane of the
// splitViewController.
UINavigationController *nav =
[self.splitViewController.viewControllers objectAtIndex:1];
return [[nav viewControllers] objectAtIndex:0];
}
@end