File: AppInfo\AppInfo.shared.cs
Web Access
Project: src\src\Essentials\src\Essentials.csproj (Microsoft.Maui.Essentials)
#nullable enable
using System;
 
namespace Microsoft.Maui.ApplicationModel
{
	/// <summary>
	/// Represents information about the application.
	/// </summary>
	public interface IAppInfo
	{
		/// <summary>
		/// Gets the application package name or identifier.
		/// </summary>
		/// <remarks>On Android and iOS, this is the application package name. On Windows, this is the application GUID.</remarks>
		string PackageName { get; }
 
		/// <summary>
		/// Gets the application name.
		/// </summary>
		string Name { get; }
 
		/// <summary>
		/// Gets the application version as a string representation.
		/// </summary>
		string VersionString { get; }
 
		/// <summary>
		/// Gets the application version as a <see cref="Version"/> object.
		/// </summary>
		Version Version { get; }
 
		/// <summary>
		/// Gets the application build number.
		/// </summary>
		string BuildString { get; }
 
		/// <summary>
		/// Open the settings menu or page for this application.
		/// </summary>
		void ShowSettingsUI();
 
		/// <summary>
		/// Gets the detected theme of the system or application.
		/// </summary>
		/// <remarks>For platforms or platform versions which do not support themes, <see cref="AppTheme.Unspecified"/> is returned.</remarks>
		AppTheme RequestedTheme { get; }
 
		/// <summary>
		/// Gets the packaging model of this application.
		/// </summary>
		/// <remarks>On other platforms than Windows, this will always return <see cref="AppPackagingModel.Packaged"/>.</remarks>
		AppPackagingModel PackagingModel { get; }
 
		/// <summary>
		/// Gets the requested layout direction of the system or application.
		/// </summary>
		LayoutDirection RequestedLayoutDirection { get; }
	}
 
	/// <summary>
	/// Represents information about the application.
	/// </summary>
	public static class AppInfo
	{
		/// <summary>
		/// Gets the application package name or identifier.
		/// </summary>
		/// <remarks>On Android and iOS, this is the application package name. On Windows, this is the application GUID.</remarks>
		public static string PackageName => Current.PackageName;
 
		/// <summary>
		/// Gets the application name.
		/// </summary>
		public static string Name => Current.Name;
 
		/// <summary>
		/// Gets the application version as a string representation.
		/// </summary>
		public static string VersionString => Current.VersionString;
 
		/// <summary>
		/// Gets the application version as a <see cref="Version"/> object.
		/// </summary>
		public static Version Version => Current.Version;
 
		/// <summary>
		/// Gets the application build number.
		/// </summary>
		public static string BuildString => Current.BuildString;
 
		/// <summary>
		/// Open the settings menu or page for this application.
		/// </summary>
		public static void ShowSettingsUI() => Current.ShowSettingsUI();
 
		/// <summary>
		/// Gets the detected theme of the system or application.
		/// </summary>
		/// <remarks>For platforms or platform versions which do not support themes, <see cref="AppTheme.Unspecified"/> is returned.</remarks>
		public static AppTheme RequestedTheme => Current.RequestedTheme;
 
		/// <summary>
		/// Gets the packaging model of this application.
		/// </summary>
		/// <remarks>On other platforms than Windows, this will always return <see cref="AppPackagingModel.Packaged"/>.</remarks>
		public static AppPackagingModel PackagingModel => Current.PackagingModel;
 
		/// <summary>
		/// Gets the requested layout direction of the system or application.
		/// </summary>
		public static LayoutDirection RequestedLayoutDirection => Current.RequestedLayoutDirection;
 
		static IAppInfo? currentImplementation;
 
		/// <summary>
		/// Provides the default implementation for static usage of this API.
		/// </summary>
		public static IAppInfo Current =>
			currentImplementation ??= new AppInfoImplementation();
 
		internal static void SetCurrent(IAppInfo? implementation) =>
			currentImplementation = implementation;
	}
 
	/// <summary>
	/// Describes packaging options for a Windows app.
	/// </summary>
	public enum AppPackagingModel
	{
		/// <summary>The app is packaged and can be distributed through an MSIX or the store.</summary>
		Packaged,
 
		/// <summary>The app is unpackaged and can be distributed as a collection of executable files.</summary>
		Unpackaged,
	}
}