@@ -73,10 +73,18 @@ @interface SharePlusData : NSObject <UIActivityItemSource>
73
73
@property (readonly , nonatomic , copy ) NSString *text;
74
74
@property (readonly , nonatomic , copy ) NSString *path;
75
75
@property (readonly , nonatomic , copy ) NSString *mimeType;
76
+ @property (readonly , nonatomic , copy ) LPLinkMetadata *linkMetadata;
77
+ @property (readonly , nonatomic , copy ) NSURL *url;
76
78
77
79
- (instancetype )initWithSubject : (NSString *)subject
78
80
text : (NSString *)text NS_DESIGNATED_INITIALIZER;
79
81
82
+ - (instancetype )initWithSubject : (NSString *)subject
83
+ url : (NSURL *)url NS_DESIGNATED_INITIALIZER;
84
+
85
+ - (instancetype )initWithLinkMetadata : (LPLinkMetadata *)metadata
86
+ NS_DESIGNATED_INITIALIZER;
87
+
80
88
- (instancetype )initWithFile : (NSString *)path
81
89
mimeType : (NSString *)mimeType NS_DESIGNATED_INITIALIZER;
82
90
@@ -105,6 +113,23 @@ - (instancetype)initWithSubject:(NSString *)subject text:(NSString *)text {
105
113
return self;
106
114
}
107
115
116
+ - (instancetype )initWithSubject : (NSString *)subject url : (NSURL *)url {
117
+ self = [super init ];
118
+ if (self) {
119
+ _subject = [subject isKindOfClass: NSNull .class] ? @" " : subject;
120
+ _url = url;
121
+ }
122
+ return self;
123
+ }
124
+
125
+ - (instancetype )initWithLinkMetadata : (LPLinkMetadata *)metadata {
126
+ self = [super init ];
127
+ if (self) {
128
+ _linkMetadata = metadata;
129
+ }
130
+ return self;
131
+ }
132
+
108
133
- (instancetype )initWithFile : (NSString *)path mimeType : (NSString *)mimeType {
109
134
self = [super init ];
110
135
if (self) {
@@ -135,6 +160,14 @@ - (id)activityViewControllerPlaceholderItem:
135
160
136
161
- (id )activityViewController : (UIActivityViewController *)activityViewController
137
162
itemForActivityType : (UIActivityType)activityType {
163
+ if (_linkMetadata != nil ) {
164
+ return _linkMetadata.originalURL ;
165
+ }
166
+
167
+ if (_url != nil ) {
168
+ return _url;
169
+ }
170
+
138
171
if (!_path || !_mimeType) {
139
172
return _text;
140
173
}
@@ -182,6 +215,10 @@ - (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
182
215
- (LPLinkMetadata *)activityViewControllerLinkMetadata :
183
216
(UIActivityViewController *)activityViewController
184
217
API_AVAILABLE(macos(10.15 ), ios(13.0 ), watchos(6.0 )) {
218
+ if (_linkMetadata != nil ) {
219
+ return _linkMetadata;
220
+ }
221
+
185
222
LPLinkMetadata *metadata = [[LPLinkMetadata alloc ] init ];
186
223
187
224
if ([_subject length ] > 0 ) {
@@ -348,13 +385,63 @@ + (void)shareText:(NSString *)shareText
348
385
withController : (UIViewController *)controller
349
386
atSource : (CGRect )origin
350
387
toResult : (FlutterResult)result {
351
- NSObject *data = [[SharePlusData alloc ] initWithSubject: subject
352
- text: shareText];
353
- [self share: @[ data ]
354
- withSubject: subject
355
- withController: controller
356
- atSource: origin
357
- toResult: result];
388
+ NSURL *url = [NSURL URLWithString: shareText];
389
+ if (!url || ![url scheme ] || ![url host ]) {
390
+ NSObject *data = [[SharePlusData alloc ] initWithSubject: subject
391
+ text: shareText];
392
+ [self share: @[ data ]
393
+ withSubject: subject
394
+ withController: controller
395
+ atSource: origin
396
+ toResult: result];
397
+ return ;
398
+ }
399
+
400
+ if (@available (iOS 13 , *) && ([[url scheme ] isEqualToString: @" http" ] ||
401
+ [[url scheme ] isEqualToString: @" https" ])) {
402
+ LPMetadataProvider *metadataProvider = [[LPMetadataProvider alloc ] init ];
403
+ [metadataProvider
404
+ startFetchingMetadataForURL: url
405
+ completionHandler: ^(LPLinkMetadata *metadata,
406
+ NSError *error) {
407
+ if (!error) {
408
+ if (subject != nil && [subject length ] > 0 ) {
409
+ metadata.title = subject;
410
+ }
411
+ NSObject *data =
412
+ [[SharePlusData alloc ] initWithLinkMetadata: metadata];
413
+ dispatch_async (dispatch_get_main_queue (), ^{
414
+ [self share: @[ data ]
415
+ withSubject: subject
416
+ withController: controller
417
+ atSource: origin
418
+ toResult: result];
419
+ });
420
+
421
+ return ;
422
+ }
423
+
424
+ NSLog (@" FetchingMetadataForURL %@ got error: %@ " , url,
425
+ error);
426
+ NSObject *data =
427
+ [[SharePlusData alloc ] initWithSubject: subject url: url];
428
+ dispatch_async (dispatch_get_main_queue (), ^{
429
+ [self share: @[ data ]
430
+ withSubject: subject
431
+ withController: controller
432
+ atSource: origin
433
+ toResult: result];
434
+ });
435
+ }];
436
+ } else {
437
+ NSObject *data = [[SharePlusData alloc ] initWithSubject: subject url: url];
438
+ [self share: @[ data ]
439
+ withSubject: subject
440
+ withController: controller
441
+ atSource: origin
442
+ toResult: result];
443
+ return ;
444
+ }
358
445
}
359
446
360
447
+ (void )shareFiles : (NSArray *)paths
0 commit comments