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

Commit

Permalink
Merge pull request #1380 from xamarin/ios-memory-scope
Browse files Browse the repository at this point in the history
iOS Keep things in scope
  • Loading branch information
Redth committed Sep 14, 2020
2 parents 8d8a7e1 + d9c0453 commit 6b1458c
Show file tree
Hide file tree
Showing 10 changed files with 76 additions and 184 deletions.
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

0 comments on commit 6b1458c

Please sign in to comment.