Skip to content
This repository was archived by the owner on May 15, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DeviceTests/build.cake
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
var TARGET = Argument("target", "Default");

var IOS_SIM_NAME = Argument("ios-device", EnvironmentVariable("IOS_SIM_NAME") ?? "iPhone 11");
var IOS_SIM_RUNTIME = Argument("ios-runtime", EnvironmentVariable("IOS_SIM_RUNTIME") ?? "com.apple.CoreSimulator.SimRuntime.iOS-13-6");
var IOS_SIM_RUNTIME = Argument("ios-runtime", EnvironmentVariable("IOS_SIM_RUNTIME") ?? "com.apple.CoreSimulator.SimRuntime.iOS-13-7");
var IOS_PROJ = "./DeviceTests.iOS/DeviceTests.iOS.csproj";
var IOS_BUNDLE_ID = "com.xamarin.essentials.devicetests";
var IOS_IPA_PATH = "./DeviceTests.iOS/bin/iPhoneSimulator/Release/XamarinEssentialsDeviceTestsiOS.app";
Expand Down
2 changes: 2 additions & 0 deletions Samples/Samples.iOS/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -88,5 +88,7 @@
<string>Pick Photos</string>
<key>NSMicrophoneUsageDescription</key>
<string>Catpure Video</string>
<key>NSContactsUsageDescription</key>
<string>Contacts</string>
</dict>
</plist>
90 changes: 22 additions & 68 deletions Samples/Samples/View/ContactsPage.xaml
Original file line number Diff line number Diff line change
@@ -1,83 +1,37 @@
<?xml version="1.0" encoding="utf-8" ?>
<view:BasePage
x:Class="Samples.View.ContactsPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:view="clr-namespace:Samples.View"
xmlns:viewmodel="clr-namespace:Samples.ViewModel"
Title="Contact Page">
<view:BasePage x:Class="Samples.View.ContactsPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:view="clr-namespace:Samples.View"
xmlns:viewmodel="clr-namespace:Samples.ViewModel"
Title="Contacts">

<view:BasePage.BindingContext>
<viewmodel:ContactsViewModel />
</view:BasePage.BindingContext>

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="1" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackLayout>
<Label Text="Get and add contacts in your device." FontAttributes="Bold" Margin="12" />

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ScrollView>
<StackLayout Padding="12,0,12,12" Spacing="6">

<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label FontAttributes="Bold" Text="Name:" />
<Label Text="{Binding Name}" />

<Label FontAttributes="Bold" Text="Name:" />
<Label FontAttributes="Bold" Text="Numbers:" />
<Label Text="{Binding Phones}" />

<Label
Grid.Column="1"
HorizontalTextAlignment="Start"
Text="{Binding Name}" />
<Label FontAttributes="Bold" Text="Emails:" />
<Label Text="{Binding Emails}" />

<Label
Grid.Row="2"
FontAttributes="Bold"
Text="Numbers:" />
<Label FontAttributes="Bold" Text="Contact Type:" />

<Label
Grid.Row="2"
Grid.Column="1"
HorizontalTextAlignment="Start"
Text="{Binding Phones}" />
<Label Text="{Binding ContactType}" />

<Label
Grid.Row="3"
FontAttributes="Bold"
Text="Emails:" />
<Button Command="{Binding GetContactCommand}" Text="Get Contact" />

<Label
Grid.Row="3"
Grid.Column="1"
HorizontalTextAlignment="Start"
Text="{Binding Emails}" />
</StackLayout>
</ScrollView>
</StackLayout>

<Label
Grid.Row="4"
FontAttributes="Bold"
Text="Contact Type:" />

<Label
Grid.Row="4"
Grid.Column="1"
HorizontalTextAlignment="Start"
Text="{Binding ContactType}" />

<Button
Grid.Row="5"
Grid.ColumnSpan="2"
Command="{Binding GetContactCommand}"
Text="Get Contact" />
</Grid>
</Grid>
</view:BasePage>
11 changes: 1 addition & 10 deletions Samples/Samples/View/ContactsPage.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace Samples.View
namespace Samples.View
{
public partial class ContactsPage
{
Expand Down
47 changes: 22 additions & 25 deletions Xamarin.Essentials/Contacts/Contacts.ios.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Contacts;
using ContactsUI;
Expand Down Expand Up @@ -73,33 +70,33 @@ internal static Contact GetContact(CNContact contact)
CNContactType.Organization => ContactType.Work,
_ => ContactType.Unknown,
};
}

public class ContactPickerDelegate : CNContactPickerDelegate
{
public ContactPickerDelegate(Action<CNContact> didSelectContactHandler) =>
DidSelectContactHandler = didSelectContactHandler;

public ContactPickerDelegate(IntPtr handle)
: base(handle)
class ContactPickerDelegate : CNContactPickerDelegate
{
}
public ContactPickerDelegate(Action<CNContact> didSelectContactHandler) =>
DidSelectContactHandler = didSelectContactHandler;

public Action<CNContact> DidSelectContactHandler { get; }
public ContactPickerDelegate(IntPtr handle)
: base(handle)
{
}

public override void ContactPickerDidCancel(CNContactPickerViewController picker)
{
DidSelectContactHandler?.Invoke(default);
picker.DismissModalViewController(true);
}
public Action<CNContact> DidSelectContactHandler { get; }

public override void DidSelectContact(CNContactPickerViewController picker, CNContact contact)
{
DidSelectContactHandler?.Invoke(contact);
picker.DismissModalViewController(true);
}
public override void ContactPickerDidCancel(CNContactPickerViewController picker)
{
DidSelectContactHandler?.Invoke(default);
picker.DismissModalViewController(true);
}

public override void DidSelectContactProperty(CNContactPickerViewController picker, CNContactProperty contactProperty) =>
picker.DismissModalViewController(true);
public override void DidSelectContact(CNContactPickerViewController picker, CNContact contact)
{
DidSelectContactHandler?.Invoke(contact);
picker.DismissModalViewController(true);
}

public override void DidSelectContactProperty(CNContactPickerViewController picker, CNContactProperty contactProperty) =>
picker.DismissModalViewController(true);
}
}
}
20 changes: 19 additions & 1 deletion Xamarin.Essentials/Launcher/Launcher.ios.tvos.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,21 @@ internal static NSUrl GetNativeUrl(Uri uri)
}

#if __IOS__
static UIDocumentInteractionController documentController;

static Task PlatformOpenAsync(OpenFileRequest request)
{
var fileUrl = NSUrl.FromFilename(request.File.FullPath);

var documentController = UIDocumentInteractionController.FromUrl(fileUrl);
documentController = UIDocumentInteractionController.FromUrl(fileUrl);
documentController.Delegate = new DocumentControllerDelegate
{
DismissHandler = () =>
{
documentController?.Dispose();
documentController = null;
}
};
documentController.Uti = request.File.ContentType;

var vc = Platform.GetCurrentViewController();
Expand All @@ -67,6 +77,14 @@ static Task PlatformOpenAsync(OpenFileRequest request)

return Task.CompletedTask;
}

class DocumentControllerDelegate : UIDocumentInteractionControllerDelegate
{
public Action DismissHandler { get; set; }

public override void DidDismissOpenInMenu(UIDocumentInteractionController controller)
=> DismissHandler?.Invoke();
}
#else
static Task PlatformOpenAsync(OpenFileRequest request) =>
throw new FeatureNotSupportedException();
Expand Down
11 changes: 9 additions & 2 deletions Xamarin.Essentials/Permissions/Permissions.ios.cs
Original file line number Diff line number Diff line change
Expand Up @@ -103,14 +103,21 @@ internal static PermissionStatus GetAddressBookPermissionStatus()
};
}

static ABAddressBook addressBook;

internal static Task<PermissionStatus> RequestAddressBookPermission()
{
var addressBook = new ABAddressBook();
addressBook = new ABAddressBook();

var tcs = new TaskCompletionSource<PermissionStatus>();

addressBook.RequestAccess((success, error) =>
tcs.TrySetResult(success ? PermissionStatus.Granted : PermissionStatus.Denied));
{
tcs.TrySetResult(success ? PermissionStatus.Granted : PermissionStatus.Denied);

addressBook?.Dispose();
addressBook = null;
});

return tcs.Task;
}
Expand Down
24 changes: 0 additions & 24 deletions docs/en/Xamarin.Essentials/Browser.xml
Original file line number Diff line number Diff line change
Expand Up @@ -117,30 +117,6 @@
</remarks>
</Docs>
</Member>
<Member MemberName="OpenAsync">
<MemberSignature Language="C#" Value="public static System.Threading.Tasks.Task OpenAsync (Uri uri, Xamarin.Essentials.BrowserLaunchMode launchMode);" />
<MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Threading.Tasks.Task OpenAsync(class System.Uri uri, valuetype Xamarin.Essentials.BrowserLaunchMode launchMode) cil managed" />
<MemberSignature Language="DocId" Value="M:Xamarin.Essentials.Browser.OpenAsync(System.Uri,Xamarin.Essentials.BrowserLaunchMode)" />
<MemberType>Method</MemberType>
<AssemblyInfo>
<AssemblyName>Xamarin.Essentials</AssemblyName>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</AssemblyInfo>
<ReturnValue>
<ReturnType>System.Threading.Tasks.Task</ReturnType>
</ReturnValue>
<Parameters>
<Parameter Name="uri" Type="System.Uri" />
<Parameter Name="launchMode" Type="Xamarin.Essentials.BrowserLaunchMode" />
</Parameters>
<Docs>
<param name="uri">To be added.</param>
<param name="launchMode">To be added.</param>
<summary>To be added.</summary>
<returns>To be added.</returns>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Member MemberName="OpenAsync">
<MemberSignature Language="C#" Value="public static System.Threading.Tasks.Task OpenAsync (Uri uri, Xamarin.Essentials.BrowserLaunchMode launchMode);" />
<MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Threading.Tasks.Task OpenAsync(class System.Uri uri, valuetype Xamarin.Essentials.BrowserLaunchMode launchMode) cil managed" />
Expand Down
15 changes: 0 additions & 15 deletions docs/en/Xamarin.Essentials/FileResult.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,6 @@
<remarks></remarks>
</Docs>
<Members>
<Member MemberName=".ctor">
<MemberSignature Language="C#" Value="public FileResult ();" />
<MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
<MemberSignature Language="DocId" Value="M:Xamarin.Essentials.FileResult.#ctor" />
<MemberType>Constructor</MemberType>
<AssemblyInfo>
<AssemblyName>Xamarin.Essentials</AssemblyName>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</AssemblyInfo>
<Parameters />
<Docs>
<summary></summary>
<remarks></remarks>
</Docs>
</Member>
<Member MemberName=".ctor">
<MemberSignature Language="C#" Value="public FileResult (string fullPath);" />
<MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(string fullPath) cil managed" />
Expand Down
38 changes: 0 additions & 38 deletions docs/en/Xamarin.Essentials/Screenshot.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,6 @@
<remarks>Output is always a PNG file.</remarks>
</Docs>
<Members>
<Member MemberName="CaptureAsync">
<MemberSignature Language="C#" Value="public static System.Threading.Tasks.Task&lt;Xamarin.Essentials.FileResult&gt; CaptureAsync ();" />
<MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Threading.Tasks.Task`1&lt;class Xamarin.Essentials.FileResult&gt; CaptureAsync() cil managed" />
<MemberSignature Language="DocId" Value="M:Xamarin.Essentials.Screenshot.CaptureAsync" />
<MemberType>Method</MemberType>
<AssemblyInfo>
<AssemblyName>Xamarin.Essentials</AssemblyName>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</AssemblyInfo>
<ReturnValue>
<ReturnType>System.Threading.Tasks.Task&lt;Xamarin.Essentials.FileResult&gt;</ReturnType>
</ReturnValue>
<Parameters />
<Docs>
<summary>To be added.</summary>
<returns>To be added.</returns>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Member MemberName="CaptureAsync">
<MemberSignature Language="C#" Value="public static System.Threading.Tasks.Task&lt;Xamarin.Essentials.ScreenshotFile&gt; CaptureAsync ();" />
<MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Threading.Tasks.Task`1&lt;class Xamarin.Essentials.ScreenshotFile&gt; CaptureAsync() cil managed" />
Expand All @@ -53,25 +34,6 @@
<remarks>Be sure to copy the resulting file to a file you control.</remarks>
</Docs>
</Member>
<Member MemberName="CaptureAsync">
<MemberSignature Language="C#" Value="public static System.Threading.Tasks.Task&lt;Xamarin.Essentials.ScreenshotResult&gt; CaptureAsync ();" />
<MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Threading.Tasks.Task`1&lt;class Xamarin.Essentials.ScreenshotResult&gt; CaptureAsync() cil managed" />
<MemberSignature Language="DocId" Value="M:Xamarin.Essentials.Screenshot.CaptureAsync" />
<MemberType>Method</MemberType>
<AssemblyInfo>
<AssemblyName>Xamarin.Essentials</AssemblyName>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</AssemblyInfo>
<ReturnValue>
<ReturnType>System.Threading.Tasks.Task&lt;Xamarin.Essentials.ScreenshotResult&gt;</ReturnType>
</ReturnValue>
<Parameters />
<Docs>
<summary>To be added.</summary>
<returns>To be added.</returns>
<remarks>To be added.</remarks>
</Docs>
</Member>
<Member MemberName="IsCaptureAvailable">
<MemberSignature Language="C#" Value="public static bool IsCaptureAvailable { get; }" />
<MemberSignature Language="ILAsm" Value=".property bool IsCaptureAvailable" />
Expand Down