From e2cff4a126bf22a140d7922b8eb2cfdff87e3ce7 Mon Sep 17 00:00:00 2001 From: Mike Grabowski Date: Thu, 4 Feb 2016 11:15:50 +0100 Subject: [PATCH] Support custom activities This pull request adds ability to include custom app specific activities that subclass UIActivity. --- ActivityView.m | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/ActivityView.m b/ActivityView.m index 60d985e..f816825 100644 --- a/ActivityView.m +++ b/ActivityView.m @@ -47,6 +47,22 @@ - (NSArray*)excludedActivitiesForKeys:(NSArray*)passedKeys { return excludedActivities; } +- (NSArray*)applicationActivitiesForKeys:(NSArray*)passedKeys +{ + NSMutableArray *applicationActivities = [NSMutableArray new]; + + [passedKeys enumerateObjectsUsingBlock:^(NSString *activityName, NSUInteger idx, BOOL *stop) { + id customActivity = [self.bridge moduleForName:activityName]; + if (!customActivity) { + RCTLogWarn(@"[ActivityView] Unknown application activity to add: %@", activityName); + return; + } + [applicationActivities addObject:customActivity]; + }]; + + return applicationActivities; +} + RCT_EXPORT_METHOD(show:(NSDictionary *)args) { NSMutableArray *shareObject = [NSMutableArray array]; @@ -54,6 +70,7 @@ - (NSArray*)excludedActivitiesForKeys:(NSArray*)passedKeys { NSURL *url = args[@"url"]; NSString *imageUrl = args[@"imageUrl"]; NSArray *activitiesToExclude = args[@"exclude"]; + NSArray *customActivitiesToAdd = args[@"customActivities"]; NSString *image = args[@"image"]; NSString *imageBase64 = args[@"imageBase64"]; NSData *imageData; @@ -95,7 +112,9 @@ - (NSArray*)excludedActivitiesForKeys:(NSArray*)passedKeys { [shareObject addObject: [UIImage imageWithData: imageData]]; } - UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:shareObject applicationActivities:nil]; + NSArray *applicationActivities = [self applicationActivitiesForKeys:customActivitiesToAdd]; + + UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:shareObject applicationActivities:applicationActivities]; activityView.excludedActivityTypes = activitiesToExclude ? [self excludedActivitiesForKeys:activitiesToExclude]