File: DeviceInfo\DeviceInfo.shared.cs
Web Access
Project: src\src\Essentials\src\Essentials.csproj (Microsoft.Maui.Essentials)
#nullable enable
using System;
 
namespace Microsoft.Maui.Devices
{
	/// <summary>
	///Types of devices.
	/// </summary>
	public enum DeviceType
	{
		/// <summary>An unknown device type.</summary>
		Unknown = 0,
 
		/// <summary>The device is a physical device, such as an iPhone, Android tablet, or Windows/macOS desktop.</summary>
		Physical = 1,
 
		/// <summary>The device is virtual, such as the iOS Simulator, Android emulators, or Windows emulators.</summary>
		Virtual = 2
	}
 
	/// <summary>
	/// Represents information about the device.
	/// </summary>
	public interface IDeviceInfo
	{
		/// <summary>
		/// Gets the model of the device.
		/// </summary>
		string Model { get; }
 
		/// <summary>
		/// Gets the manufacturer of the device.
		/// </summary>
		string Manufacturer { get; }
 
		/// <summary>
		/// Gets the name of the device.
		/// </summary>
		/// <remarks>This value is often specified by the user of the device.</remarks>
		string Name { get; }
 
		/// <summary>
		/// Gets the string representation of the version of the operating system.
		/// </summary>
		string VersionString { get; }
 
		/// <summary>
		/// Gets the version of the operating system.
		/// </summary>
		Version Version { get; }
 
		/// <summary>
		/// Gets the platform or operating system of the device.
		/// </summary>
		DevicePlatform Platform { get; }
 
		/// <summary>
		/// Gets the idiom (form factor) of the device.
		/// </summary>
		DeviceIdiom Idiom { get; }
 
		/// <summary>
		/// Gets the type of device the application is running on.
		/// </summary>
		DeviceType DeviceType { get; }
	}
 
	/// <summary>
	/// Represents information about the device.
	/// </summary>
	public static class DeviceInfo
	{
		/// <summary>
		/// Gets the model of the device.
		/// </summary>
		public static string Model => Current.Model;
 
		/// <summary>
		/// Gets the manufacturer of the device.
		/// </summary>
		public static string Manufacturer => Current.Manufacturer;
 
		/// <summary>
		/// Gets the name of the device.
		/// </summary>
		/// <remarks>This value is often specified by the user of the device.</remarks>
		public static string Name => Current.Name;
 
		/// <summary>
		/// Gets the string representation of the version of the operating system.
		/// </summary>
		public static string VersionString => Current.VersionString;
 
		/// <summary>
		/// Gets the version of the operating system.
		/// </summary>
		public static Version Version => Current.Version;
 
		/// <summary>
		/// Gets the platform or operating system of the device.
		/// </summary>
		public static DevicePlatform Platform => Current.Platform;
 
		/// <summary>
		/// Gets the idiom (form factor) of the device.
		/// </summary>
		public static DeviceIdiom Idiom => Current.Idiom;
 
		/// <summary>
		/// Gets the type of device the application is running on.
		/// </summary>
		public static DeviceType DeviceType => Current.DeviceType;
 
		static IDeviceInfo? currentImplementation;
 
		/// <summary>
		/// Provides the default implementation for static usage of this API.
		/// </summary>
		public static IDeviceInfo Current =>
			currentImplementation ??= new DeviceInfoImplementation();
 
		internal static void SetCurrent(IDeviceInfo? implementation) =>
			currentImplementation = implementation;
	}
}