File: Contacts\Contacts.shared.cs
Web Access
Project: src\src\Essentials\src\Essentials.csproj (Microsoft.Maui.Essentials)
#nullable enable
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
 
namespace Microsoft.Maui.ApplicationModel.Communication
{
	/// <summary>
	/// The Contacts API lets a user pick a contact and retrieve information about it.
	/// </summary>
	public interface IContacts
	{
		/// <summary>
		/// Opens the operating system's default UI for picking a contact from the device.
		/// </summary>
		/// <returns>A single contact, or <see langword="null"/> if the user cancelled the operation.</returns>
		Task<Contact?> PickContactAsync();
 
		/// <summary>
		/// Gets a collection of all the contacts on the device.
		/// </summary>
		/// <param name="cancellationToken">A token that can be used for cancelling the operation.</param>
		/// <returns>A collection of contacts on the device.</returns>
		Task<IEnumerable<Contact>> GetAllAsync(CancellationToken cancellationToken = default);
	}
 
	/// <summary>
	/// The Contacts API lets a user pick a contact and retrieve information about it.
	/// </summary>
	public static class Contacts
	{
		/// <summary>
		/// Opens the operating system's default UI for picking a contact from the device.
		/// </summary>
		/// <returns>A single contact, or <see langword="null"/> if the user cancelled the operation.</returns>
		public static Task<Contact?> PickContactAsync() =>
			Default.PickContactAsync();
 
		/// <summary>
		/// Gets a collection of all the contacts on the device.
		/// </summary>
		/// <param name="cancellationToken">A token that can be used for cancelling the operation.</param>
		/// <returns>A collection of contacts on the device.</returns>
		public static Task<IEnumerable<Contact>> GetAllAsync(CancellationToken cancellationToken = default) =>
			Default.GetAllAsync(cancellationToken);
 
		static IContacts? defaultImplementation;
 
		/// <summary>
		/// Provides the default implementation for static usage of this API.
		/// </summary>
		public static IContacts Default =>
			defaultImplementation ??= new ContactsImplementation();
 
		internal static void SetDefault(IContacts? implementation) =>
			defaultImplementation = implementation;
	}
}