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

Commit

Permalink
fix share title on iOS
Browse files Browse the repository at this point in the history
  • Loading branch information
dimonovdd committed Mar 8, 2023
1 parent bc74dce commit bc88ae9
Showing 1 changed file with 25 additions and 11 deletions.
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 @@ -13,12 +14,12 @@ 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));
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 All @@ -40,14 +41,10 @@ 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
items.Add(GetShareItem(fileUrl, request.Title));
}

var activityController = new UIActivityViewController(items.ToArray(), null);
Expand All @@ -64,23 +61,40 @@ static Task PlatformRequestAsync(ShareMultipleFilesRequest request)

return vc.PresentViewControllerAsync(activityController, true);
}

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;
}
}
}

0 comments on commit bc88ae9

Please sign in to comment.