Skip to content
This repository has been archived by the owner on May 15, 2024. It is now read-only.

fix share title on iOS #2078

Merged
merged 1 commit into from
Apr 3, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
36 changes: 25 additions & 11 deletions Xamarin.Essentials/Share/Share.ios.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Drawing;
using System.Threading.Tasks;
using Foundation;
using LinkPresentation;
using UIKit;

namespace Xamarin.Essentials
Expand All @@ -14,12 +15,12 @@ static async Task PlatformRequestAsync(ShareTextRequest request)
var items = new List<NSObject>();
if (!string.IsNullOrWhiteSpace(request.Text))
{
items.Add(new ShareActivityItemSource(new NSString(request.Text), request.Title));
items.Add(GetShareItem(new NSString(request.Text), request.Title));
}

if (!string.IsNullOrWhiteSpace(request.Uri))
{
items.Add(new ShareActivityItemSource(NSUrl.FromString(request.Uri), request.Title));
items.Add(GetShareItem(NSUrl.FromString(request.Uri), request.Title));
}

var activityController = new UIActivityViewController(items.ToArray(), null)
Expand Down Expand Up @@ -50,14 +51,10 @@ static async 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
items.Add(GetShareItem(fileUrl, request.Title));
}

var activityController = new UIActivityViewController(items.ToArray(), null)
Expand All @@ -81,23 +78,40 @@ static async Task PlatformRequestAsync(ShareMultipleFilesRequest request)
await vc.PresentViewControllerAsync(activityController, true);
await src.Task;
}

static NSObject GetShareItem(NSString obj, string title)
=> new ShareActivityItemSource(obj, string.IsNullOrWhiteSpace(title) ? obj : title);

static NSObject GetShareItem(NSObject obj, string title)
=> string.IsNullOrWhiteSpace(title)
? obj
: new ShareActivityItemSource(obj, title);
}

class ShareActivityItemSource : UIActivityItemSource
{
readonly NSObject item;
readonly string subject;
readonly string title;

internal ShareActivityItemSource(NSObject item, string subject)
internal ShareActivityItemSource(NSObject item, string title)
{
this.item = item;
this.subject = subject;
this.title = title;
}

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;
public override LPLinkMetadata GetLinkMetadata(UIActivityViewController activityViewController)
{
var meta = new LPLinkMetadata();
if (!string.IsNullOrWhiteSpace(title))
meta.Title = title;
if (item is NSUrl url)
meta.Url = url;

return meta;
}
}
}