Repo created
This commit is contained in:
parent
4af19165ec
commit
68073add76
12458 changed files with 12350765 additions and 2 deletions
21
iphone/Maps/Classes/Share/MWMActivityViewController.h
Normal file
21
iphone/Maps/Classes/Share/MWMActivityViewController.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
@protocol MWMPlacePageObject;
|
||||
@class PlacePageData;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
NS_SWIFT_NAME(ActivityViewController)
|
||||
@interface MWMActivityViewController : UIActivityViewController
|
||||
|
||||
+ (instancetype)shareControllerForMyPosition:(CLLocationCoordinate2D)location;
|
||||
|
||||
+ (instancetype)shareControllerForPlacePage:(PlacePageData *)data;
|
||||
|
||||
+ (instancetype)shareControllerForURL:(nullable NSURL *)url
|
||||
message:(NSString *)message
|
||||
completionHandler:(nullable UIActivityViewControllerCompletionWithItemsHandler)completionHandler;
|
||||
|
||||
- (void)presentInParentViewController:(UIViewController *)parentVC anchorView:(nullable UIView *)anchorView;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
64
iphone/Maps/Classes/Share/MWMActivityViewController.mm
Normal file
64
iphone/Maps/Classes/Share/MWMActivityViewController.mm
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
#import "MWMActivityViewController.h"
|
||||
#import "MWMEditorViralActivityItem.h"
|
||||
#import "MWMShareActivityItem.h"
|
||||
|
||||
@interface MWMActivityViewController ()
|
||||
|
||||
@property(weak, nonatomic) UIViewController *ownerViewController;
|
||||
@property(weak, nonatomic) UIView *anchorView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMActivityViewController
|
||||
|
||||
- (instancetype)initWithActivityItem:(id<UIActivityItemSource>)activityItem {
|
||||
return [self initWithActivityItems:@[activityItem]];
|
||||
}
|
||||
|
||||
- (instancetype)initWithActivityItems:(NSArray *)activityItems {
|
||||
self = [super initWithActivityItems:activityItems applicationActivities:nil];
|
||||
if (self)
|
||||
self.excludedActivityTypes = @[
|
||||
UIActivityTypePrint, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
|
||||
UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo
|
||||
];
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (instancetype)shareControllerForMyPosition:(CLLocationCoordinate2D)location {
|
||||
MWMShareActivityItem *item = [[MWMShareActivityItem alloc] initForMyPositionAtLocation:location];
|
||||
MWMActivityViewController *shareVC = [[self alloc] initWithActivityItem:item];
|
||||
shareVC.excludedActivityTypes = [shareVC.excludedActivityTypes arrayByAddingObject:UIActivityTypeAirDrop];
|
||||
return shareVC;
|
||||
}
|
||||
|
||||
+ (instancetype)shareControllerForPlacePage:(PlacePageData *)data {
|
||||
MWMShareActivityItem *item = [[MWMShareActivityItem alloc] initForPlacePage:data];
|
||||
MWMActivityViewController *shareVC = [[self alloc] initWithActivityItem:item];
|
||||
shareVC.excludedActivityTypes = [shareVC.excludedActivityTypes arrayByAddingObject:UIActivityTypeAirDrop];
|
||||
return shareVC;
|
||||
}
|
||||
|
||||
+ (instancetype)shareControllerForURL:(NSURL *)url
|
||||
message:(NSString *)message
|
||||
completionHandler:(UIActivityViewControllerCompletionWithItemsHandler)completionHandler {
|
||||
NSMutableArray *items = [NSMutableArray arrayWithObject:message];
|
||||
if (url) {
|
||||
[items addObject:url];
|
||||
}
|
||||
|
||||
MWMActivityViewController *shareVC = [[self alloc] initWithActivityItems:items.copy];
|
||||
shareVC.excludedActivityTypes = [shareVC.excludedActivityTypes arrayByAddingObject:UIActivityTypePostToFacebook];
|
||||
shareVC.completionWithItemsHandler = completionHandler;
|
||||
return shareVC;
|
||||
}
|
||||
|
||||
- (void)presentInParentViewController:(UIViewController *)parentVC anchorView:(UIView *)anchorView {
|
||||
self.ownerViewController = parentVC;
|
||||
self.anchorView = anchorView;
|
||||
self.popoverPresentationController.sourceView = anchorView;
|
||||
self.popoverPresentationController.sourceRect = anchorView.bounds;
|
||||
[parentVC presentViewController:self animated:YES completion:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
3
iphone/Maps/Classes/Share/MWMEditorViralActivityItem.h
Normal file
3
iphone/Maps/Classes/Share/MWMEditorViralActivityItem.h
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
@interface MWMEditorViralActivityItem : NSObject <UIActivityItemSource>
|
||||
|
||||
@end
|
||||
39
iphone/Maps/Classes/Share/MWMEditorViralActivityItem.mm
Normal file
39
iphone/Maps/Classes/Share/MWMEditorViralActivityItem.mm
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
#import "MWMEditorViralActivityItem.h"
|
||||
|
||||
#include "platform/preferred_languages.hpp"
|
||||
|
||||
@implementation MWMEditorViralActivityItem
|
||||
|
||||
#pragma mark - UIActivityItemSource
|
||||
|
||||
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
|
||||
{
|
||||
return @"";
|
||||
}
|
||||
|
||||
- (id)activityViewController:(UIActivityViewController *)activityViewController
|
||||
itemForActivityType:(NSString *)activityType
|
||||
{
|
||||
if ([activityType isEqualToString:UIActivityTypePostToFacebook] ||
|
||||
[activityType isEqualToString:@"com.facebook.Facebook.ShareExtension"] ||
|
||||
[activityType.lowercaseString rangeOfString:@"facebook"].length)
|
||||
{
|
||||
NSString * url = [NSString stringWithFormat:@"https://comaps.app/fb-editor-v1?lang=%@",
|
||||
@(languages::GetCurrentNorm().c_str())];
|
||||
return [NSURL URLWithString:url];
|
||||
}
|
||||
|
||||
NSString * comapsURL = @"https://comaps.app/get";
|
||||
if ([activityType isEqualToString:UIActivityTypePostToTwitter] || [activityType isEqualToString:UIActivityTypeMail])
|
||||
return [NSString stringWithFormat:@"%@ %@", L(@"whatsnew_editor_message_1"), comapsURL];
|
||||
|
||||
return [NSString stringWithFormat:@"%@.\n%@\n%@", L(@"editor_sharing_title"), L(@"whatsnew_editor_message_1"), comapsURL];
|
||||
}
|
||||
|
||||
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController
|
||||
subjectForActivityType:(NSString *)activityType
|
||||
{
|
||||
return L(@"editor_sharing_title");
|
||||
}
|
||||
|
||||
@end
|
||||
25
iphone/Maps/Classes/Share/MWMShareActivityItem.h
Normal file
25
iphone/Maps/Classes/Share/MWMShareActivityItem.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
namespace ms
|
||||
{
|
||||
class LatLon;
|
||||
} // namespace ms
|
||||
|
||||
@protocol MWMPlacePageObject<NSObject>
|
||||
|
||||
- (BOOL)isMyPosition;
|
||||
- (NSString *)title;
|
||||
- (NSString *)subtitle;
|
||||
- (NSString *)address;
|
||||
- (NSString *)phoneNumber;
|
||||
- (ms::LatLon)latLon;
|
||||
|
||||
@end
|
||||
|
||||
@class PlacePageData;
|
||||
|
||||
@interface MWMShareActivityItem : NSObject<UIActivityItemSource>
|
||||
|
||||
- (instancetype)initForMyPositionAtLocation:(CLLocationCoordinate2D const &)location;
|
||||
- (instancetype)initForPlacePageObject:(id<MWMPlacePageObject>)object;
|
||||
- (instancetype)initForPlacePage:(PlacePageData *)data;
|
||||
|
||||
@end
|
||||
168
iphone/Maps/Classes/Share/MWMShareActivityItem.mm
Normal file
168
iphone/Maps/Classes/Share/MWMShareActivityItem.mm
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
#import "MWMShareActivityItem.h"
|
||||
|
||||
#include <CoreApi/Framework.h>
|
||||
#import <CoreApi/PlacePageData.h>
|
||||
#import <CoreApi/PlacePagePreviewData.h>
|
||||
#import <CoreApi/PlacePageInfoData.h>
|
||||
#import <CoreApi/PlacePagePhone.h>
|
||||
#import <LinkPresentation/LPLinkMetadata.h>
|
||||
|
||||
NSString * httpGe0Url(NSString * shortUrl)
|
||||
{
|
||||
// Replace 'cm://' with 'https://comaps.at/'
|
||||
return [shortUrl stringByReplacingCharactersInRange:NSMakeRange(0, 5) withString:@"https://comaps.at/"];
|
||||
}
|
||||
|
||||
@interface MWMShareActivityItem ()
|
||||
|
||||
@property(nonatomic) PlacePageData *data;
|
||||
@property(nonatomic) CLLocationCoordinate2D location;
|
||||
@property(nonatomic) BOOL isMyPosition;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MWMShareActivityItem
|
||||
|
||||
- (instancetype)initForMyPositionAtLocation:(CLLocationCoordinate2D const &)location
|
||||
{
|
||||
self = [super init];
|
||||
if (self)
|
||||
{
|
||||
_location = location;
|
||||
_isMyPosition = YES;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initForPlacePageObject:(id<MWMPlacePageObject>)object
|
||||
{
|
||||
NSAssert(false, @"deprecated");
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (instancetype)initForPlacePage:(PlacePageData *)data {
|
||||
self = [super init];
|
||||
if (self)
|
||||
{
|
||||
NSAssert(data, @"Entity can't be nil!");
|
||||
_isMyPosition = data.isMyPosition;
|
||||
_data = data;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSString *)url:(BOOL)isShort
|
||||
{
|
||||
auto & f = GetFramework();
|
||||
|
||||
auto const title = ^NSString *(PlacePageData *data)
|
||||
{
|
||||
if (!data || data.isMyPosition)
|
||||
return L(@"core_my_position");
|
||||
else if (data.previewData.title.length > 0)
|
||||
return data.previewData.title;
|
||||
else if (data.previewData.subtitle.length)
|
||||
return data.previewData.subtitle;
|
||||
else if (data.previewData.secondarySubtitle.length)
|
||||
return data.previewData.secondarySubtitle;
|
||||
else
|
||||
return @"";
|
||||
};
|
||||
|
||||
ms::LatLon const ll = self.data ? ms::LatLon(self.data.locationCoordinate.latitude,
|
||||
self.data.locationCoordinate.longitude)
|
||||
: ms::LatLon(self.location.latitude, self.location.longitude);
|
||||
std::string const & s = f.CodeGe0url(ll.m_lat, ll.m_lon, f.GetDrawScale(), title(self.data).UTF8String);
|
||||
|
||||
NSString * url = @(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 * type = activityType;
|
||||
if ([UIActivityTypePostToTwitter isEqualToString:type])
|
||||
return self.itemForTwitter;
|
||||
return [self itemDefaultWithActivityType:type];
|
||||
}
|
||||
|
||||
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController
|
||||
subjectForActivityType:(NSString *)activityType
|
||||
{
|
||||
return [self subjectDefault];
|
||||
}
|
||||
|
||||
- (LPLinkMetadata *)activityViewControllerLinkMetadata:(UIActivityViewController *)activityViewController API_AVAILABLE(ios(13.0))
|
||||
{
|
||||
LPLinkMetadata * metadata = [[LPLinkMetadata alloc] init];
|
||||
metadata.originalURL = [NSURL URLWithString:httpGe0Url([self url:NO])];
|
||||
metadata.title = self.isMyPosition ? L(@"core_my_position") : self.data.previewData.title;
|
||||
metadata.iconProvider = [[NSItemProvider alloc] initWithObject:[UIImage imageNamed:@"Logo"]];
|
||||
return metadata;
|
||||
}
|
||||
|
||||
#pragma mark - Message
|
||||
|
||||
- (NSString *)itemForTwitter
|
||||
{
|
||||
NSString * shortUrl = [self url:YES];
|
||||
return [NSString stringWithFormat:@"%@\n%@", httpGe0Url(shortUrl),
|
||||
self.isMyPosition ? L(@"my_position_share_email_subject")
|
||||
: self.data.previewData.title];
|
||||
}
|
||||
|
||||
- (NSString *)itemDefaultWithActivityType:(NSString *)activityType
|
||||
{
|
||||
NSString * ge0Url = [self url:NO];
|
||||
NSString * url = httpGe0Url(ge0Url);
|
||||
if (self.isMyPosition)
|
||||
{
|
||||
BOOL const hasSubject = [activityType isEqualToString:UIActivityTypeMail];
|
||||
if (hasSubject)
|
||||
return url;
|
||||
return [NSString
|
||||
stringWithFormat:@"%@ %@", L(@"my_position_share_email_subject"), url];
|
||||
}
|
||||
|
||||
NSMutableArray *phones = [NSMutableArray new];
|
||||
[self.data.infoData.phones enumerateObjectsUsingBlock:^(PlacePagePhone * _Nonnull phone, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||
[phones addObject:phone.phone];
|
||||
}];
|
||||
|
||||
NSMutableString * result = [L(@"sharing_call_action_look") mutableCopy];
|
||||
std::vector<NSString *> strings{self.data.previewData.title,
|
||||
self.data.previewData.subtitle,
|
||||
self.data.previewData.secondarySubtitle,
|
||||
[phones componentsJoinedByString:@"; "],
|
||||
url};
|
||||
|
||||
for (auto const & str : strings)
|
||||
{
|
||||
if (str.length)
|
||||
[result appendString:[NSString stringWithFormat:@"\n%@", str]];
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#pragma mark - Subject
|
||||
|
||||
- (NSString *)subjectDefault
|
||||
{
|
||||
return self.isMyPosition ? L(@"my_position_share_email_subject")
|
||||
: L(@"bookmark_share_email_subject");
|
||||
}
|
||||
|
||||
@end
|
||||
Loading…
Add table
Add a link
Reference in a new issue