Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Grechuhin <i.grechuhin@mapswithme.com>2015-08-05 16:35:24 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:59:17 +0300
commit98fe42b58d3b8f09492067aced0e4d3200076377 (patch)
tree2fc2406ca3123d04a068a43f9d3a3c6a6d45e78a /iphone/Maps/Classes/Share
parenta80306ef25505d3df3384b4fdc2f06ad4b944ba3 (diff)
[ios] Updated sharing to native share controller.
Diffstat (limited to 'iphone/Maps/Classes/Share')
-rw-r--r--iphone/Maps/Classes/Share/MWMActivityViewController.h16
-rw-r--r--iphone/Maps/Classes/Share/MWMActivityViewController.m62
-rw-r--r--iphone/Maps/Classes/Share/MWMShareLocationActivityItem.h15
-rw-r--r--iphone/Maps/Classes/Share/MWMShareLocationActivityItem.mm134
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