diff --git a/api/MapsWithMeAPI.h b/api/MapsWithMeAPI.h index 239404d..e761823 100644 --- a/api/MapsWithMeAPI.h +++ b/api/MapsWithMeAPI.h @@ -64,6 +64,7 @@ + (BOOL) showPin:(MWMPin *)pin; // Displays any number of pins + (BOOL) showPins:(NSArray *)pins; +// + (void) showMapsWithMeIsNotInstalledDialog; // Set value = YES if you want to open pin URL on balloon click, default value is NO +(void) setOpenUrlOnBalloonClick:(BOOL)value; diff --git a/api/MapsWithMeAPI.m b/api/MapsWithMeAPI.m index 9908d8a..62a6ce9 100644 --- a/api/MapsWithMeAPI.m +++ b/api/MapsWithMeAPI.m @@ -78,6 +78,16 @@ static BOOL openUrlOnBalloonClick = NO; @implementation MWMApi +// Escape special chars with percent encoding ++ (NSString *) percentEncode:(NSString *)str +{ + CFStringRef cfStr = (CFStringRef)str; + CFStringRef cfEncodedStr = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, cfStr, NULL, CFSTR("&?/:="), kCFStringEncodingUTF8); + NSString * encodedStr = [[(NSString *)cfEncodedStr retain] autorelease]; + CFRelease(cfEncodedStr); + return encodedStr; +} + + (BOOL) isMapsWithMeUrl:(NSURL *)url { NSString * appScheme = [MWMApi detectBackUrlScheme]; @@ -156,11 +166,11 @@ static BOOL openUrlOnBalloonClick = NO; NSString * appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; NSMutableString * str = [[NSMutableString alloc] initWithFormat:@"%@map?v=%d&appname=%@&", MWMUrlScheme, MAPSWITHME_API_VERSION, - [appName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + [MWMApi percentEncode:appName]]; NSString * backUrlScheme = [MWMApi detectBackUrlScheme]; if (backUrlScheme) - [str appendFormat:@"backurl=%@&", [backUrlScheme stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + [str appendFormat:@"backurl=%@&", [MWMApi percentEncode:backUrlScheme]]; for (MWMPin * point in pins) { @@ -168,9 +178,9 @@ static BOOL openUrlOnBalloonClick = NO; @autoreleasepool { if (point.title) - [str appendFormat:@"n=%@&", [point.title stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + [str appendFormat:@"n=%@&", [MWMApi percentEncode:point.title]]; if (point.idOrUrl) - [str appendFormat:@"id=%@&", [point.idOrUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; + [str appendFormat:@"id=%@&", [MWMApi percentEncode:point.idOrUrl]]; } } @@ -219,9 +229,10 @@ static NSString * mapsWithMeIsNotInstalledPage = "" \ "" \ "" \ -"
MapsWithMe app should be installed to view the map.
" \ -"Download MapsWithMe Lite (free)" \ +"
Offline maps are required to proceed. We have partnered with MapsWithMe to provide you with offline maps of the entire world.
" \ +"
To continue please download the app:
" \ "Download MapsWithMe Pro" \ +"Download MapsWithMe Lite (free)" \ "" \ ""; @@ -241,7 +252,7 @@ static NSString * mapsWithMeIsNotInstalledPage = webController.view = webView; webController.title = @"Install MapsWithMe"; MWMNavigationController * navController = [[[MWMNavigationController alloc] initWithRootViewController:webController] autorelease]; - navController.navigationBar.topItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStyleDone target:navController action:@selector(onCloseButtonClicked:)]; + navController.navigationBar.topItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStyleDone target:navController action:@selector(onCloseButtonClicked:)] autorelease]; [[[UIApplication sharedApplication] delegate].window.rootViewController presentModalViewController:navController animated:YES]; } diff --git a/capitals-example/Capitals/CityDetailViewController.m b/capitals-example/Capitals/CityDetailViewController.m index 48086c0..1d31b0a 100644 --- a/capitals-example/Capitals/CityDetailViewController.m +++ b/capitals-example/Capitals/CityDetailViewController.m @@ -52,7 +52,7 @@ pinId = [NSString stringWithFormat:@"http://en.wikipedia.org/wiki/%@", [self urlEncode:city->name]]; else pinId = [NSString stringWithFormat:@"%ld", _cityIndex]; - [MWMApi showLat:city->lat lon:city->lon title:city->name and:pinId]; + [MWMApi showLat:city->lat lon:city->lon title:city->name andId:pinId]; } - (void)dealloc diff --git a/capitals-example/Capitals/MasterViewController.m b/capitals-example/Capitals/MasterViewController.m index 8f5c595..3bfff52 100644 --- a/capitals-example/Capitals/MasterViewController.m +++ b/capitals-example/Capitals/MasterViewController.m @@ -44,7 +44,7 @@ { NSString * pinId = [[[NSString alloc] initWithFormat:@"%ld", i] autorelease]; // Note that url is empty - it means "More details" button for a pin in MapsWithMe will lead back to this example app - MWMPin * pin = [[[MWMPin alloc] initWithLat:CAPITALS[i].lat lon:CAPITALS[i].lon title:CAPITALS[i].name and:pinId] autorelease]; + MWMPin * pin = [[[MWMPin alloc] initWithLat:CAPITALS[i].lat lon:CAPITALS[i].lon title:CAPITALS[i].name andId:pinId] autorelease]; [array addObject:pin]; }