From 98fe42b58d3b8f09492067aced0e4d3200076377 Mon Sep 17 00:00:00 2001 From: Ilya Grechuhin Date: Wed, 5 Aug 2015 16:35:24 +0300 Subject: [PATCH] [ios] Updated sharing to native share controller. --- .../SideMenu/MWMSideMenuManager.mm | 20 ++- .../SideMenu/MWMSideMenuViews.xib | 1 + .../Maps/Classes/MWMPlacePageViewManager.mm | 34 ++-- iphone/Maps/Classes/MapViewController.mm | 1 - .../Classes/Share/MWMActivityViewController.h | 16 ++ .../Classes/Share/MWMActivityViewController.m | 62 ++++++++ .../Share/MWMShareLocationActivityItem.h | 15 ++ .../Share/MWMShareLocationActivityItem.mm | 134 ++++++++++++++++ iphone/Maps/Classes/ShareActionSheet.h | 22 --- iphone/Maps/Classes/ShareActionSheet.mm | 145 ------------------ iphone/Maps/Maps.xcodeproj/project.pbxproj | 34 ++-- 11 files changed, 278 insertions(+), 206 deletions(-) create mode 100644 iphone/Maps/Classes/Share/MWMActivityViewController.h create mode 100644 iphone/Maps/Classes/Share/MWMActivityViewController.m create mode 100644 iphone/Maps/Classes/Share/MWMShareLocationActivityItem.h create mode 100644 iphone/Maps/Classes/Share/MWMShareLocationActivityItem.mm delete mode 100644 iphone/Maps/Classes/ShareActionSheet.h delete mode 100644 iphone/Maps/Classes/ShareActionSheet.mm diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuManager.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuManager.mm index 5e4de484b4..af6519fcad 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuManager.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuManager.mm @@ -11,6 +11,7 @@ #import "LocationManager.h" #import "MapsAppDelegate.h" #import "MapViewController.h" +#import "MWMActivityViewController.h" #import "MWMMapViewControlsCommon.h" #import "MWMMapViewControlsManager.h" #import "MWMSideMenuButton.h" @@ -21,7 +22,6 @@ #import "MWMSideMenuManagerDelegate.h" #import "MWMSideMenuView.h" #import "SettingsAndMoreVC.h" -#import "ShareActionSheet.h" #import "3party/Alohalytics/src/alohalytics_objc.h" @@ -31,7 +31,8 @@ static NSString * const kMWMSideMenuViewsNibName = @"MWMSideMenuViews"; extern NSString * const kAlohalyticsTapEventKey; -@interface MWMSideMenuManager() +@interface MWMSideMenuManager() @property (weak, nonatomic) id delegate; @property (weak, nonatomic) MapViewController * controller; @@ -40,11 +41,14 @@ extern NSString * const kAlohalyticsTapEventKey; @property (nonatomic) IBOutlet MWMSideMenuDownloadBadge * downloadBadge; @property (nonatomic) IBOutlet MWMSideMenuView * sideMenu; +@property (weak, nonatomic) IBOutlet UIButton * shareLocationButton; + @end @implementation MWMSideMenuManager -- (instancetype)initWithParentController:(MapViewController *)controller delegate:(id)delegate +- (instancetype)initWithParentController:(MapViewController *)controller + delegate:(id)delegate { self = [super init]; if (self) @@ -95,14 +99,14 @@ extern NSString * const kAlohalyticsTapEventKey; CLLocation const * const location = [MapsAppDelegate theApp].m_locationManager.lastLocation; if (!location) { - [[[UIAlertView alloc] initWithTitle:L(@"unknown_current_position") message:nil delegate:nil cancelButtonTitle:L(@"ok") otherButtonTitles:nil] show]; + [[[UIAlertView alloc] initWithTitle:L(@"unknown_current_position") message:nil delegate:nil + cancelButtonTitle:L(@"ok") otherButtonTitles:nil] show]; return; } CLLocationCoordinate2D const coord = location.coordinate; - ShareInfo * const info = [[ShareInfo alloc] initWithText:nil lat:coord.latitude lon:coord.longitude myPosition:YES]; - self.controller.shareActionSheet = [[ShareActionSheet alloc] initWithInfo:info viewController:self.controller]; - UIView const * const parentView = self.controller.view; - [self.controller.shareActionSheet showFromRect:CGRectMake(parentView.midX, parentView.height - 40.0, 0.0, 0.0)]; + MWMActivityViewController * shareVC = [MWMActivityViewController shareControllerForLocationTitle:nil location:coord + myPosition:YES]; + [shareVC presentInParentViewController:self.controller anchorView:self.shareLocationButton]; } - (IBAction)menuActionOpenSearch diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuViews.xib b/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuViews.xib index 75dccbf775..27fb68c121 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuViews.xib +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/SideMenu/MWMSideMenuViews.xib @@ -9,6 +9,7 @@ + diff --git a/iphone/Maps/Classes/MWMPlacePageViewManager.mm b/iphone/Maps/Classes/MWMPlacePageViewManager.mm index 4cc251c739..d40bc6578e 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManager.mm +++ b/iphone/Maps/Classes/MWMPlacePageViewManager.mm @@ -9,19 +9,19 @@ #import "Common.h" #import "LocationManager.h" #import "MapsAppDelegate.h" +#import "MWMActivityViewController.h" #import "MWMBasePlacePageView.h" +#import "MWMDirectionView.h" #import "MWMiPadPlacePage.h" #import "MWMiPhoneLandscapePlacePage.h" #import "MWMiPhonePortraitPlacePage.h" #import "MWMPlacePage.h" #import "MWMPlacePageActionBar.h" #import "MWMPlacePageEntity.h" -#import "MWMPlacePageViewManagerDelegate.h" -#import "MWMPlacePageViewManager.h" -#import "ShareActionSheet.h" -#import "UIKitCategories.h" -#import "MWMDirectionView.h" #import "MWMPlacePageNavigationBar.h" +#import "MWMPlacePageViewManager.h" +#import "MWMPlacePageViewManagerDelegate.h" +#import "UIKitCategories.h" #include "Framework.h" @@ -40,7 +40,6 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) @property (nonatomic, readwrite) MWMPlacePageEntity * entity; @property (nonatomic) MWMPlacePage * placePage; @property (nonatomic) MWMPlacePageManagerState state; -@property (nonatomic) ShareActionSheet * actionSheet; @property (nonatomic) MWMDirectionView * directionView; @property (weak, nonatomic) id delegate; @@ -49,7 +48,8 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) @implementation MWMPlacePageViewManager -- (instancetype)initWithViewController:(UIViewController *)viewController delegate:(id)delegate +- (instancetype)initWithViewController:(UIViewController *)viewController + delegate:(id)delegate { self = [super init]; if (self) @@ -134,7 +134,8 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) if (self.entity.type != MWMPlacePageEntityTypeMyPosition) return; BOOL hasSpeed = NO; - [self.placePage updateMyPositionStatus:[[MapsAppDelegate theApp].m_locationManager formattedSpeedAndAltitude:hasSpeed]]; + [self.placePage updateMyPositionStatus:[[MapsAppDelegate theApp].m_locationManager + formattedSpeedAndAltitude:hasSpeed]]; } - (void)setPlacePageForiPhoneWithOrientation:(UIInterfaceOrientation)orientation @@ -180,12 +181,11 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) - (void)share { MWMPlacePageEntity * entity = self.entity; - ShareInfo * info = [[ShareInfo alloc] initWithText:entity.title lat:entity.point.x lon:entity.point.y myPosition:NO]; - - self.actionSheet = [[ShareActionSheet alloc] initWithInfo:info viewController:self.ownerViewController]; - UIView * parentView = self.ownerViewController.view; - CGRect rect = CGRectMake(parentView.midX, parentView.height - 40.0, 0.0, 0.0); - [self.actionSheet showFromRect:rect]; + CLLocationCoordinate2D const coord = CLLocationCoordinate2DMake(entity.point.x, entity.point.y); + MWMActivityViewController * shareVC = [MWMActivityViewController shareControllerForLocationTitle:entity.title + location:coord + myPosition:NO]; + [shareVC presentInParentViewController:self.ownerViewController anchorView:self.placePage.actionBar]; } - (void)addBookmark @@ -193,7 +193,8 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) Framework & f = GetFramework(); BookmarkData data = BookmarkData(self.entity.title.UTF8String, f.LastEditedBMType()); size_t const categoryIndex = f.LastEditedBMCategory(); - size_t const bookmarkIndex = f.GetBookmarkManager().AddBookmark(categoryIndex, m_userMark->GetUserMark()->GetOrg(), data); + size_t const bookmarkIndex = f.GetBookmarkManager().AddBookmark(categoryIndex, m_userMark->GetUserMark()->GetOrg(), + data); self.entity.bac = make_pair(categoryIndex, bookmarkIndex); self.entity.type = MWMPlacePageEntityTypeBookmark; BookmarkCategory const * category = f.GetBmCategory(categoryIndex); @@ -256,7 +257,8 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageManagerState) [[MapsAppDelegate theApp].m_locationManager getNorthRad:north]; string distance; CLLocationCoordinate2D const coord = location.coordinate; - GetFramework().GetDistanceAndAzimut(m_userMark->GetUserMark()->GetOrg(), coord.latitude, coord.longitude, north, distance, azimut); + GetFramework().GetDistanceAndAzimut(m_userMark->GetUserMark()->GetOrg(), coord.latitude, coord.longitude, north, + distance, azimut); return [NSString stringWithUTF8String:distance.c_str()]; } diff --git a/iphone/Maps/Classes/MapViewController.mm b/iphone/Maps/Classes/MapViewController.mm index 13fcd8ef97..c48ead38c2 100644 --- a/iphone/Maps/Classes/MapViewController.mm +++ b/iphone/Maps/Classes/MapViewController.mm @@ -9,7 +9,6 @@ #import "MWMAPIBar.h" #import "MWMMapViewControlsManager.h" #import "RouteState.h" -#import "ShareActionSheet.h" #import "UIFont+MapsMeFonts.h" #import "UIKitCategories.h" #import "UIViewController+Navigation.h" diff --git a/iphone/Maps/Classes/Share/MWMActivityViewController.h b/iphone/Maps/Classes/Share/MWMActivityViewController.h new file mode 100644 index 0000000000..a77da526ed --- /dev/null +++ b/iphone/Maps/Classes/Share/MWMActivityViewController.h @@ -0,0 +1,16 @@ +// +// MWMActivityViewController.h +// Maps +// +// Created by Ilya Grechuhin on 05.08.15. +// Copyright (c) 2015 MapsWithMe. All rights reserved. +// + +@interface MWMActivityViewController : UIActivityViewController + ++ (instancetype)shareControllerForLocationTitle:(NSString *)title location:(CLLocationCoordinate2D)location + myPosition:(BOOL)myPosition; + +- (void)presentInParentViewController:(UIViewController *)parentVC anchorView:(UIView *)anchorView; + +@end diff --git a/iphone/Maps/Classes/Share/MWMActivityViewController.m b/iphone/Maps/Classes/Share/MWMActivityViewController.m new file mode 100644 index 0000000000..4cb0334554 --- /dev/null +++ b/iphone/Maps/Classes/Share/MWMActivityViewController.m @@ -0,0 +1,62 @@ +// +// MWMActivityViewController.m +// Maps +// +// Created by Ilya Grechuhin on 05.08.15. +// Copyright (c) 2015 MapsWithMe. All rights reserved. +// + +#import "MWMActivityViewController.h" +#import "MWMShareLocationActivityItem.h" + +@interface MWMActivityViewController () + +@property (weak, nonatomic) UIViewController * ownerViewController; +@property (weak, nonatomic) UIView * anchorView; + +@end + +@implementation MWMActivityViewController + +- (instancetype)initWithActivityItem:(id)activityItem +{ + self = [super initWithActivityItems:@[activityItem] applicationActivities:nil]; + if (self) + self.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, + UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, + UIActivityTypePostToVimeo]; + return self; +} + ++ (instancetype)shareControllerForLocationTitle:(NSString *)title location:(CLLocationCoordinate2D)location + myPosition:(BOOL)myPosition +{ + MWMShareLocationActivityItem * item = [[MWMShareLocationActivityItem alloc] initWithTitle:title location:location + myPosition:myPosition]; + return [[self alloc] initWithActivityItem:item]; +} + +- (void)presentInParentViewController:(UIViewController *)parentVC anchorView:(UIView *)anchorView +{ + self.ownerViewController = parentVC; + self.anchorView = anchorView; + if ([self respondsToSelector:@selector(popoverPresentationController)]) + { + self.popoverPresentationController.sourceView = anchorView; + self.popoverPresentationController.sourceRect = anchorView.bounds; + } + [parentVC presentViewController:self animated:YES completion:nil]; +} + +- (void)viewWillTransitionToSize:(CGSize)size + withTransitionCoordinator:(id)coordinator +{ + [self dismissViewControllerAnimated:YES completion:nil]; + [coordinator animateAlongsideTransition:^(id context) {} + completion:^(id context) + { + [self presentInParentViewController:self.ownerViewController anchorView:self.anchorView]; + }]; +} + +@end diff --git a/iphone/Maps/Classes/Share/MWMShareLocationActivityItem.h b/iphone/Maps/Classes/Share/MWMShareLocationActivityItem.h new file mode 100644 index 0000000000..7daa8b5b5e --- /dev/null +++ b/iphone/Maps/Classes/Share/MWMShareLocationActivityItem.h @@ -0,0 +1,15 @@ +// +// MWMShareLocationActivityItem.h +// Maps +// +// Created by Ilya Grechuhin on 05.08.15. +// Copyright (c) 2015 MapsWithMe. All rights reserved. +// + +#import + +@interface MWMShareLocationActivityItem : NSObject + +- (instancetype)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D)location myPosition:(BOOL)myPosition; + +@end diff --git a/iphone/Maps/Classes/Share/MWMShareLocationActivityItem.mm b/iphone/Maps/Classes/Share/MWMShareLocationActivityItem.mm new file mode 100644 index 0000000000..bd8001439d --- /dev/null +++ b/iphone/Maps/Classes/Share/MWMShareLocationActivityItem.mm @@ -0,0 +1,134 @@ +// +// MWMShareLocationActivityItem.m +// Maps +// +// Created by Ilya Grechuhin on 05.08.15. +// Copyright (c) 2015 MapsWithMe. All rights reserved. +// + +#import "Macros.h" +#import "MWMShareLocationActivityItem.h" +#import "Statistics.h" + +#import "3party/Alohalytics/src/alohalytics_objc.h" + +#include "Framework.h" + +NSString * httpGe0Url(NSString * shortUrl) +{ + return [shortUrl stringByReplacingCharactersInRange:NSMakeRange(0, 6) withString:@"http://ge0.me/"]; +} + +@interface MWMShareLocationActivityItem () + +@property (copy, nonatomic) NSString * title; +@property (nonatomic) CLLocationCoordinate2D location; +@property (nonatomic) BOOL myPosition; + +@end + +@implementation MWMShareLocationActivityItem + +- (instancetype)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D)location myPosition:(BOOL)myPosition +{ + self = [super init]; + if (self) + { + self.title = title ? title : @""; + self.location = location; + self.myPosition = myPosition; + } + return self; +} + +- (NSString *)url:(BOOL)isShort +{ + auto & f = GetFramework(); + string const s = f.CodeGe0url(self.location.latitude, self.location.longitude, f.GetDrawScale(), + self.title.UTF8String); + NSString * url = [NSString stringWithUTF8String:s.c_str()]; + if (!isShort) + return url; + NSUInteger const kGe0UrlLength = 16; + return [url substringWithRange:NSMakeRange(0, kGe0UrlLength)]; +} + +#pragma mark - UIActivityItemSource + +- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController +{ + return [self url:YES]; +} + +- (id)activityViewController:(UIActivityViewController *)activityViewController + itemForActivityType:(NSString *)activityType +{ + NSString * event = @"MWMShareLocationActivityItem:activityViewController:itemForActivityType:"; + [Alohalytics logEvent:event withValue:activityType]; + if ([UIActivityTypePostToFacebook isEqualToString:activityType]) + return [self itemForSocialAppLong]; + if ([UIActivityTypePostToTwitter isEqualToString:activityType]) + return [self itemForSocialAppShort]; + if ([UIActivityTypeMessage isEqualToString:activityType]) + { + [[Statistics instance] logEvent:@"ge0(zero) MESSAGE Export"]; + return [self itemForMessageApp]; + } + if ([UIActivityTypeMail isEqualToString:activityType]) + { + [[Statistics instance] logEvent:@"ge0(zero) MAIL Export"]; + return [self itemForMailApp]; + } + return [self itemDefault]; +} + +- (NSString *)activityViewController:(UIActivityViewController *)activityViewController + subjectForActivityType:(NSString *)activityType +{ + return [self subjectDefault]; +} + +#pragma mark - Message + +- (NSString *)itemForSocialAppLong +{ + return [self url:NO]; +} + +- (NSString *)itemForSocialAppShort +{ + return [self url:YES]; +} + +- (NSString *)itemForMessageApp +{ + NSString * shortUrl = [self url:YES]; + return [NSString stringWithFormat:self.myPosition ? L(@"my_position_share_sms") : L(@"bookmark_share_sms"), + shortUrl, httpGe0Url(shortUrl)]; +} + +- (NSString *)itemForMailApp +{ + NSString * url = [self url:NO]; + if (!self.myPosition) + return [NSString stringWithFormat:L(@"bookmark_share_email"), self.title, url, httpGe0Url(url)]; + search::AddressInfo info; + GetFramework().GetAddressInfoForGlobalPoint(m2::PointD(MercatorBounds::LonToX(self.location.longitude), + MercatorBounds::LatToY(self.location.latitude)), info); + NSString * nameAndAddress = @(info.FormatNameAndAddress().c_str()); + return [NSString stringWithFormat:L(@"my_position_share_email"), nameAndAddress, url, httpGe0Url(url)]; +} + +- (NSString *)itemDefault +{ + return [self url:NO]; +} + +#pragma mark - Subject + +- (NSString *)subjectDefault +{ + return self.myPosition ? L(@"my_position_share_email_subject") : L(@"bookmark_share_email_subject"); +} + +@end \ No newline at end of file diff --git a/iphone/Maps/Classes/ShareActionSheet.h b/iphone/Maps/Classes/ShareActionSheet.h deleted file mode 100644 index 1599109c00..0000000000 --- a/iphone/Maps/Classes/ShareActionSheet.h +++ /dev/null @@ -1,22 +0,0 @@ - -#import -#import - - -@interface ShareInfo : NSObject - -- (instancetype)initWithText:(NSString *)text lat:(double)lat lon:(double)lon myPosition:(BOOL)myPosition; - -@property (nonatomic) NSString * text; -@property (nonatomic) double lat; -@property (nonatomic) double lon; -@property (nonatomic) BOOL myPosition; - -@end - -@interface ShareActionSheet : NSObject - -- (instancetype)initWithInfo:(ShareInfo *)info viewController:(UIViewController *)viewController; -- (void)showFromRect:(CGRect)rect; - -@end diff --git a/iphone/Maps/Classes/ShareActionSheet.mm b/iphone/Maps/Classes/ShareActionSheet.mm deleted file mode 100644 index 8bce8d0afe..0000000000 --- a/iphone/Maps/Classes/ShareActionSheet.mm +++ /dev/null @@ -1,145 +0,0 @@ - -#import "LocationManager.h" -#import "ShareActionSheet.h" -#import -#import -#import "Statistics.h" -#import "UIKitCategories.h" - -#include "Framework.h" -#include "search/result.hpp" - -@implementation ShareInfo - -- (instancetype)initWithText:(NSString *)text lat:(double)lat lon:(double)lon myPosition:(BOOL)myPosition -{ - self = [super init]; - - self.text = text ? text : @""; - self.lat = lat; - self.lon = lon; - self.myPosition = myPosition; - - return self; -} - -@end - -@interface ShareActionSheet () - -@property ShareInfo * info; -@property (weak) UIViewController * viewController; - -@end - -@implementation ShareActionSheet - -- (instancetype)initWithInfo:(ShareInfo *)info viewController:(UIViewController *)viewController -{ - self = [super init]; - - self.info = info; - self.viewController = viewController; - - return self; -} - -- (void)showFromRect:(CGRect)rect -{ - UIActionSheet * as = [[UIActionSheet alloc] initWithTitle:L(@"share") delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; - - if ([MFMessageComposeViewController canSendText]) - [as addButtonWithTitle:L(@"message")]; - if ([MFMailComposeViewController canSendMail] || [self canUseGmailApp]) - [as addButtonWithTitle:L(@"email")]; - [as addButtonWithTitle:L(@"copy_link")]; - [as addButtonWithTitle:L(@"cancel")]; - [as setCancelButtonIndex:as.numberOfButtons - 1]; - [as showFromRect:rect inView:self.viewController.view animated:YES]; -} - -#define GE0_URL_LENGTH 16 - -- (void)actionSheet:(UIActionSheet *)as willDismissWithButtonIndex:(NSInteger)buttonIndex -{ - Framework & f = GetFramework(); - string const s = f.CodeGe0url(self.info.lat, self.info.lon, f.GetDrawScale(), [self.info.text UTF8String]); - NSString * shortUrl = [NSString stringWithUTF8String:s.c_str()]; - - if ([[as buttonTitleAtIndex:buttonIndex] isEqualToString:L(@"email")]) - [self sendEmailWithUrl:shortUrl]; - else if ([[as buttonTitleAtIndex:buttonIndex] isEqualToString:L(@"message")]) - [self sendMessageWithUrl:[shortUrl substringWithRange:NSMakeRange(0, GE0_URL_LENGTH)]]; - else if ([[as buttonTitleAtIndex:buttonIndex] isEqualToString:L(@"copy_link")]) - [UIPasteboard generalPasteboard].string = shortUrl; -} - -- (BOOL)canUseGmailApp -{ - // This is not official google api - return [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"googlegmail://"]]; -} - -- (void)sendEmailWithUrl:(NSString *)shortUrl -{ - NSString * subject; - NSString * body; - NSString * httpGe0Url = [shortUrl stringByReplacingCharactersInRange:NSMakeRange(0, 6) withString:@"http://ge0.me/"]; - if (self.info.myPosition) - { - search::AddressInfo info; - GetFramework().GetAddressInfoForGlobalPoint(MercatorBounds::FromLatLon(self.info.lat, self.info.lon), info); - NSString * nameAndAddress = [NSString stringWithUTF8String:info.FormatNameAndAddress().c_str()]; - body = [NSString stringWithFormat:L(@"my_position_share_email"), nameAndAddress, shortUrl, httpGe0Url]; - subject = L(@"my_position_share_email_subject"); - } - else - { - body = [NSString stringWithFormat:L(@"bookmark_share_email"), self.info.text, shortUrl, httpGe0Url]; - subject = L(@"bookmark_share_email_subject"); - } - - if ([MFMailComposeViewController canSendMail]) - { - MFMailComposeViewController * mailVC = [[MFMailComposeViewController alloc] init]; - [mailVC setMessageBody:body isHTML:NO]; - [mailVC setSubject:subject]; - mailVC.mailComposeDelegate = self; - [self.viewController presentViewController:mailVC animated:YES completion:nil]; - } - else if ([self canUseGmailApp]) - { - subject = [subject stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - body = [body stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - NSString *urlString = [NSString stringWithFormat:@"googlegmail:///co?subject=%@&body=%@", subject, body]; - [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]]; - } -} - -- (void)sendMessageWithUrl:(NSString *)shortUrl -{ - NSString * httpGe0Url = [shortUrl stringByReplacingCharactersInRange:NSMakeRange(0, 6) withString:@"http://ge0.me/"]; - MFMessageComposeViewController * messageVC = [[MFMessageComposeViewController alloc] init]; - if (self.info.myPosition) - [messageVC setBody:[NSString stringWithFormat:L(@"my_position_share_sms"), shortUrl, httpGe0Url]]; - else - [messageVC setBody:[NSString stringWithFormat:L(@"bookmark_share_sms"), shortUrl, httpGe0Url]]; - messageVC.messageComposeDelegate = self; - [self.viewController presentViewController:messageVC animated:YES completion:nil]; -} - -- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result -{ - [self.viewController dismissViewControllerAnimated:YES completion:nil]; - if (result == MessageComposeResultSent) - [[Statistics instance] logEvent:@"ge0(zero) MESSAGE Export"]; -} - -- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error -{ - [self.viewController dismissViewControllerAnimated:YES completion:nil]; - if (result == MFMailComposeResultSent || result == MFMailComposeResultSaved) - [[Statistics instance] logEvent:@"ge0(zero) MAIL Export"]; -} - -@end diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index a44a6d3436..9bf3f70708 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -13,6 +13,8 @@ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; settings = {ATTRIBUTES = (Required, ); }; }; 288765080DF74369002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765070DF74369002DB57D /* CoreGraphics.framework */; }; 28AD73880D9D96C1002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD73870D9D96C1002E5188 /* MainWindow.xib */; }; + 340837131B7243CE00B5C185 /* MWMActivityViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 340837121B7243CE00B5C185 /* MWMActivityViewController.m */; }; + 340837161B72451A00B5C185 /* MWMShareLocationActivityItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340837151B72451A00B5C185 /* MWMShareLocationActivityItem.mm */; }; 340F24631B14910500F874CD /* RouteState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 340F24621B14910500F874CD /* RouteState.mm */; }; 341522BF1B666A550077AA8F /* MWMAPIBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 341522BE1B666A550077AA8F /* MWMAPIBarView.m */; }; 341C2A571B72092A00AD41A1 /* 02_droidsans-fallback.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9DF04B231B71010E00DACAF1 /* 02_droidsans-fallback.ttf */; }; @@ -176,7 +178,6 @@ CB252D6F16FF82C9001E41E9 /* Statistics.mm in Sources */ = {isa = PBXBuildFile; fileRef = CB252D6C16FF82C8001E41E9 /* Statistics.mm */; }; ED48BBB517C267F5003E7E92 /* ColorPickerView.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED48BBB417C267F5003E7E92 /* ColorPickerView.mm */; }; ED48BBBA17C2B1E2003E7E92 /* CircleView.mm in Sources */ = {isa = PBXBuildFile; fileRef = ED48BBB917C2B1E2003E7E92 /* CircleView.mm */; }; - EDC5C543175F2CA600420E92 /* ShareActionSheet.mm in Sources */ = {isa = PBXBuildFile; fileRef = EDC5C542175F2CA600420E92 /* ShareActionSheet.mm */; }; EE026F0611D6AC0D00645242 /* classificator.txt in Resources */ = {isa = PBXBuildFile; fileRef = EE026F0511D6AC0D00645242 /* classificator.txt */; }; EE164811135CEE4A003B8A3E /* 06_code2000.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EE164810135CEE49003B8A3E /* 06_code2000.ttf */; }; EE583CBB12F773F00042CBE3 /* unicode_blocks.txt in Resources */ = {isa = PBXBuildFile; fileRef = EE583CBA12F773F00042CBE3 /* unicode_blocks.txt */; }; @@ -363,6 +364,10 @@ 28A0AB4B0D9B1048005BE974 /* Maps_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = Maps_Prefix.pch; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; 28AD73870D9D96C1002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = SOURCE_ROOT; }; 29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = main.mm; sourceTree = ""; }; + 340837111B7243CE00B5C185 /* MWMActivityViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMActivityViewController.h; sourceTree = ""; }; + 340837121B7243CE00B5C185 /* MWMActivityViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWMActivityViewController.m; sourceTree = ""; }; + 340837141B72451A00B5C185 /* MWMShareLocationActivityItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMShareLocationActivityItem.h; sourceTree = ""; }; + 340837151B72451A00B5C185 /* MWMShareLocationActivityItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMShareLocationActivityItem.mm; sourceTree = ""; }; 340F24611B14910500F874CD /* RouteState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RouteState.h; sourceTree = ""; }; 340F24621B14910500F874CD /* RouteState.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RouteState.mm; sourceTree = ""; }; 340F24641B15F01D00F874CD /* MWMSideMenuDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMSideMenuDelegate.h; sourceTree = ""; }; @@ -584,8 +589,6 @@ ED48BBB417C267F5003E7E92 /* ColorPickerView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ColorPickerView.mm; sourceTree = ""; }; ED48BBB817C2B1E2003E7E92 /* CircleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleView.h; sourceTree = ""; }; ED48BBB917C2B1E2003E7E92 /* CircleView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CircleView.mm; sourceTree = ""; }; - EDC5C541175F2CA600420E92 /* ShareActionSheet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ShareActionSheet.h; path = Classes/ShareActionSheet.h; sourceTree = ""; }; - EDC5C542175F2CA600420E92 /* ShareActionSheet.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; lineEnding = 0; name = ShareActionSheet.mm; path = Classes/ShareActionSheet.mm; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; EE026F0511D6AC0D00645242 /* classificator.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = classificator.txt; path = ../../data/classificator.txt; sourceTree = SOURCE_ROOT; }; EE16192B126E374500622BD0 /* RenderContext.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; lineEnding = 0; name = RenderContext.hpp; path = Classes/RenderContext.hpp; sourceTree = SOURCE_ROOT; }; EE164810135CEE49003B8A3E /* 06_code2000.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = 06_code2000.ttf; path = ../../data/06_code2000.ttf; sourceTree = SOURCE_ROOT; }; @@ -881,6 +884,7 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( + 340837101B7243B500B5C185 /* Share */, 340F24601B1490ED00F874CD /* RouteState */, F6588E291B15C25C00EE1E58 /* TextView */, F62A73A71AD8950900175470 /* WatchEventHandler */, @@ -936,7 +940,6 @@ FA36B8011540388B004560CC /* Bookmarks */, FA34BEC71338D6DB00FFB2A7 /* Common */, 976D86EE19C8777500C920EF /* Downloader */, - 97354B6B196EDCE200352536 /* Login & sharing */, FA6E1F1B124E6B2800F59149 /* Platform */, 080E96DDFE201D6D7F000001 /* Classes */, 974726401832306C006B7CB7 /* Categories */, @@ -1024,6 +1027,17 @@ name = Frameworks; sourceTree = ""; }; + 340837101B7243B500B5C185 /* Share */ = { + isa = PBXGroup; + children = ( + 340837111B7243CE00B5C185 /* MWMActivityViewController.h */, + 340837121B7243CE00B5C185 /* MWMActivityViewController.m */, + 340837141B72451A00B5C185 /* MWMShareLocationActivityItem.h */, + 340837151B72451A00B5C185 /* MWMShareLocationActivityItem.mm */, + ); + path = Share; + sourceTree = ""; + }; 340F24601B1490ED00F874CD /* RouteState */ = { isa = PBXGroup; children = ( @@ -1280,15 +1294,6 @@ path = MapDownload; sourceTree = ""; }; - 97354B6B196EDCE200352536 /* Login & sharing */ = { - isa = PBXGroup; - children = ( - EDC5C541175F2CA600420E92 /* ShareActionSheet.h */, - EDC5C542175F2CA600420E92 /* ShareActionSheet.mm */, - ); - name = "Login & sharing"; - sourceTree = ""; - }; 974726401832306C006B7CB7 /* Categories */ = { isa = PBXGroup; children = ( @@ -2280,6 +2285,7 @@ files = ( 978D4A251996B0EC00D72CA7 /* CommunityVC.m in Sources */, 1D60589B0D05DD56006BFB54 /* main.mm in Sources */, + 340837161B72451A00B5C185 /* MWMShareLocationActivityItem.mm in Sources */, 978D4A291996C17300D72CA7 /* RichTextVC.m in Sources */, 9747278418338F0C006B7CB7 /* UIViewController+Navigation.mm in Sources */, F6BC1E521ACBF98600EF0360 /* MWMFacebookAlert.mm in Sources */, @@ -2359,6 +2365,7 @@ FAA614B8155F16950031C345 /* AddSetVC.mm in Sources */, 977E26C619E31BDF00BA2219 /* DownloaderParentVC.mm in Sources */, FAAEA7D5161D8D3100CCD661 /* BookmarksRootVC.mm in Sources */, + 340837131B7243CE00B5C185 /* MWMActivityViewController.m in Sources */, 3497A93A1B5CF8A900F51E55 /* MWMNavigationDashboardManager.mm in Sources */, B0FBFA2B1A515B4C0086819E /* TableViewController.m in Sources */, F785EB4016386FC4003A38A8 /* BookmarkCell.mm in Sources */, @@ -2388,7 +2395,6 @@ 349A358C1B53EABC009677EE /* MWMSearchDownloadMapRequest.m in Sources */, F63732961AE9431E00A03764 /* MWMBasePlacePageView.mm in Sources */, 97A8001018B21395000C07A2 /* SearchBar.mm in Sources */, - EDC5C543175F2CA600420E92 /* ShareActionSheet.mm in Sources */, F64F199B1AB81A00006EAF7E /* MWMAlert.mm in Sources */, 34BC72261B0DECAE0012A34B /* MWMSideMenuManager.mm in Sources */, ED48BBB517C267F5003E7E92 /* ColorPickerView.mm in Sources */,