This repository has been archived by the owner on May 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 506
/
Share.ios.cs
86 lines (67 loc) · 3.18 KB
/
Share.ios.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System.Collections.Generic;
using System.Drawing;
using System.Threading.Tasks;
using Foundation;
using UIKit;
namespace Xamarin.Essentials
{
public static partial class Share
{
static Task PlatformRequestAsync(ShareTextRequest request)
{
var items = new List<NSObject>();
if (!string.IsNullOrWhiteSpace(request.Text))
{
items.Add(new ShareActivityItemSource(new NSString(request.Text), request.Title));
}
if (!string.IsNullOrWhiteSpace(request.Uri))
{
items.Add(new ShareActivityItemSource(NSUrl.FromString(request.Uri), request.Title));
}
var activityController = new UIActivityViewController(items.ToArray(), null);
var vc = Platform.GetCurrentViewController();
if (activityController.PopoverPresentationController != null)
{
activityController.PopoverPresentationController.SourceView = vc.View;
if (request.PresentationSourceBounds != Rectangle.Empty || Platform.HasOSVersion(13, 0))
activityController.PopoverPresentationController.SourceRect = request.PresentationSourceBounds.ToPlatformRectangle();
}
return vc.PresentViewControllerAsync(activityController, true);
}
static Task PlatformRequestAsync(ShareMultipleFilesRequest request)
{
var items = new List<NSObject>();
var hasTitel = !string.IsNullOrWhiteSpace(request.Title);
foreach (var file in request.Files)
{
var fileUrl = NSUrl.FromFilename(file.FullPath);
if (hasTitel)
items.Add(new ShareActivityItemSource(fileUrl, request.Title)); // Share with title (subject)
else
items.Add(fileUrl); // No title specified
}
var activityController = new UIActivityViewController(items.ToArray(), null);
var vc = Platform.GetCurrentViewController();
if (activityController.PopoverPresentationController != null)
{
activityController.PopoverPresentationController.SourceView = vc.View;
if (request.PresentationSourceBounds != Rectangle.Empty)
activityController.PopoverPresentationController.SourceRect = request.PresentationSourceBounds.ToPlatformRectangle();
}
return vc.PresentViewControllerAsync(activityController, true);
}
}
class ShareActivityItemSource : UIActivityItemSource
{
readonly NSObject item;
readonly string subject;
internal ShareActivityItemSource(NSObject item, string subject)
{
this.item = item;
this.subject = subject;
}
public override NSObject GetItemForActivity(UIActivityViewController activityViewController, NSString activityType) => item;
public override NSObject GetPlaceholderData(UIActivityViewController activityViewController) => item;
public override string GetSubjectForActivity(UIActivityViewController activityViewController, NSString activityType) => subject;
}
}