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

Commit 12bfc8a

Browse files
[Enhancement][Launcher][iOS] ability to set PresentationSourceBounds (#1637)
Fixes #1611 Co-authored-by: Matthew Leibowitz <[email protected]>
1 parent 7b73cad commit 12bfc8a

File tree

5 files changed

+48
-9
lines changed

5 files changed

+48
-9
lines changed

Samples/Samples/View/LauncherPage.xaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
<Label Text="File Contents:" />
3636
<Editor Text="{Binding FileAttachmentContents}" AutoSize="TextChanges" />
3737

38-
<Button Text="Open File" Command="{Binding LaunchFileCommand}" />
39-
38+
<Button Text="Open File" Command="{Binding LaunchFileCommand}"
39+
CommandParameter="{Binding Source={RelativeSource Self}}" />
4040
</StackLayout>
4141
</Grid>
4242
</ScrollView>

Samples/Samples/ViewModel/LauncherViewModel.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.IO;
33
using System.Windows.Input;
4+
using Samples.Helpers;
45
using Xamarin.Essentials;
56
using Xamarin.Forms;
67

@@ -29,7 +30,7 @@ public LauncherViewModel()
2930
LaunchMailCommand = new Command(OnLaunchMail);
3031
LaunchBrowserCommand = new Command(OnLaunchBrowser);
3132
CanLaunchCommand = new Command(CanLaunch);
32-
LaunchFileCommand = new Command(OnFileRequest);
33+
LaunchFileCommand = new Command<Xamarin.Forms.View>(OnFileRequest);
3334
}
3435

3536
public string FileAttachmentContents
@@ -79,7 +80,7 @@ async void CanLaunch()
7980
}
8081
}
8182

82-
async void OnFileRequest()
83+
async void OnFileRequest(Xamarin.Forms.View element)
8384
{
8485
if (!string.IsNullOrWhiteSpace(FileAttachmentContents))
8586
{
@@ -88,9 +89,12 @@ async void OnFileRequest()
8889
var file = Path.Combine(FileSystem.CacheDirectory, fn);
8990
File.WriteAllText(file, FileAttachmentContents);
9091

92+
var rect = element.GetAbsoluteBounds().ToSystemRectangle();
93+
rect.Y += 40;
9194
await Launcher.OpenAsync(new OpenFileRequest
9295
{
93-
File = new ReadOnlyFile(file)
96+
File = new ReadOnlyFile(file),
97+
PresentationSourceBounds = rect
9498
});
9599
}
96100
}

Xamarin.Essentials/Launcher/Launcher.ios.tvos.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Diagnostics;
3+
using System.Drawing;
34
using System.Threading.Tasks;
45
using CoreGraphics;
56
using Foundation;
@@ -43,9 +44,19 @@ static Task PlatformOpenAsync(OpenFileRequest request)
4344
};
4445

4546
var view = Platform.GetCurrentUIViewController().View;
46-
var rect = DeviceInfo.Idiom == DeviceIdiom.Tablet
47-
? new CGRect(new CGPoint(view.Bounds.Width / 2, view.Bounds.Height), CGRect.Empty.Size)
48-
: view.Bounds;
47+
48+
CGRect rect;
49+
50+
if (request.PresentationSourceBounds != Rectangle.Empty)
51+
{
52+
rect = request.PresentationSourceBounds.ToPlatformRectangle();
53+
}
54+
else
55+
{
56+
rect = DeviceInfo.Idiom == DeviceIdiom.Tablet
57+
? new CGRect(new CGPoint(view.Bounds.Width / 2, view.Bounds.Height), CGRect.Empty.Size)
58+
: view.Bounds;
59+
}
4960

5061
documentController.PresentOpenInMenu(rect, view, true);
5162
return Task.CompletedTask;

Xamarin.Essentials/Launcher/Launcher.shared.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System;
2-
using System.IO;
32
using System.Threading.Tasks;
3+
#if !NETSTANDARD1_0
4+
using System.Drawing;
5+
#endif
46

57
namespace Xamarin.Essentials
68
{
@@ -86,5 +88,9 @@ public OpenFileRequest(string title, FileBase file)
8688
public string Title { get; set; }
8789

8890
public ReadOnlyFile File { get; set; }
91+
92+
#if !NETSTANDARD1_0
93+
public Rectangle PresentationSourceBounds { get; set; } = Rectangle.Empty;
94+
#endif
8995
}
9096
}

docs/en/Xamarin.Essentials/OpenFileRequest.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,5 +106,23 @@
106106
<remarks></remarks>
107107
</Docs>
108108
</Member>
109+
<Member MemberName="PresentationSourceBounds">
110+
<MemberSignature Language="C#" Value="public System.Drawing.Rectangle PresentationSourceBounds { get; set; }" />
111+
<MemberSignature Language="ILAsm" Value=".property instance valuetype System.Drawing.Rectangle PresentationSourceBounds" />
112+
<MemberSignature Language="DocId" Value="P:Xamarin.Essentials.ShareRequestBase.PresentationSourceBounds" />
113+
<MemberType>Property</MemberType>
114+
<AssemblyInfo>
115+
<AssemblyName>Xamarin.Essentials</AssemblyName>
116+
<AssemblyVersion>1.0.0.0</AssemblyVersion>
117+
</AssemblyInfo>
118+
<ReturnValue>
119+
<ReturnType>System.Drawing.Rectangle</ReturnType>
120+
</ReturnValue>
121+
<Docs>
122+
<summary>Gets or sets the source rectangle to display the Share UI from.</summary>
123+
<value></value>
124+
<remarks>This is only used on iOS currently.</remarks>
125+
</Docs>
126+
</Member>
109127
</Members>
110128
</Type>

0 commit comments

Comments
 (0)