diff options
author | Ilya Grechuhin <i.grechuhin@mapswithme.com> | 2015-08-05 16:35:24 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:59:17 +0300 |
commit | 98fe42b58d3b8f09492067aced0e4d3200076377 (patch) | |
tree | 2fc2406ca3123d04a068a43f9d3a3c6a6d45e78a /iphone/Maps/Classes/Share | |
parent | a80306ef25505d3df3384b4fdc2f06ad4b944ba3 (diff) |
[ios] Updated sharing to native share controller.
Diffstat (limited to 'iphone/Maps/Classes/Share')
4 files changed, 227 insertions, 0 deletions
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<UIActivityItemSource>)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<UIViewControllerTransitionCoordinator>)coordinator +{ + [self dismissViewControllerAnimated:YES completion:nil]; + [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {} + completion:^(id<UIViewControllerTransitionCoordinatorContext> 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 <Foundation/Foundation.h> + +@interface MWMShareLocationActivityItem : NSObject <UIActivityItemSource> + +- (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 |