| File: Handlers\Application\ApplicationHandler.cs | Web Access |
| Project: src\src\Core\src\Core.csproj (Microsoft.Maui) |
using System; using System.Runtime.Versioning; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; #if __IOS__ || MACCATALYST using PlatformView = UIKit.IUIApplicationDelegate; #elif MONOANDROID using PlatformView = Android.App.Application; #elif WINDOWS using PlatformView = Microsoft.UI.Xaml.Application; #elif TIZEN using PlatformView = Tizen.Applications.CoreApplication; #endif namespace Microsoft.Maui.Handlers { /// <summary> /// Represents the view handler for the abstract <see cref="IApplication"/> view and its platform-specific implementation. /// </summary> /// <seealso href="https://learn.microsoft.com/dotnet/maui/user-interface/handlers/">Conceptual documentation on handlers</seealso> public partial class ApplicationHandler { internal const string TerminateCommandKey = "Terminate"; public static IPropertyMapper<IApplication, ApplicationHandler> Mapper = new PropertyMapper<IApplication, ApplicationHandler>(ElementMapper) { #if ANDROID || IOS [nameof(IApplication.UserAppTheme)] = MapAppTheme, #endif }; public static CommandMapper<IApplication, ApplicationHandler> CommandMapper = new(ElementCommandMapper) { [TerminateCommandKey] = MapTerminate, #pragma warning disable CA1416 // TODO: should we propagate SupportedOSPlatform("ios13.0") here [nameof(IApplication.OpenWindow)] = MapOpenWindow, [nameof(IApplication.CloseWindow)] = MapCloseWindow, [nameof(IApplication.ActivateWindow)] = MapActivateWindow, #pragma warning restore CA1416 }; ILogger<ApplicationHandler>? _logger; public ApplicationHandler() : base(Mapper, CommandMapper) { } public ApplicationHandler(IPropertyMapper? mapper) : base(mapper ?? Mapper, CommandMapper) { } public ApplicationHandler(IPropertyMapper? mapper, CommandMapper? commandMapper) : base(mapper ?? Mapper, commandMapper ?? CommandMapper) { } ILogger? Logger => _logger ??= MauiContext?.Services.CreateLogger<ApplicationHandler>(); #if !(NETSTANDARD || !PLATFORM) protected override PlatformView CreatePlatformElement() => MauiContext?.Services.GetService<PlatformView>() ?? throw new InvalidOperationException($"MauiContext did not have a valid application."); #endif /// <summary> /// Maps the abstract "Terminate" command to the platform-specific implementations. /// </summary> /// <param name="handler">The associated handler.</param> /// <param name="application">The associated <see cref="IApplication"/> instance.</param> /// <param name="args">The associated command arguments.</param> public static partial void MapTerminate(ApplicationHandler handler, IApplication application, object? args); /// <summary> /// Maps the abstract <see cref="IApplication.OpenWindow"/> command to the platform-specific implementations. /// </summary> /// <param name="handler">The associated handler.</param> /// <param name="application">The associated <see cref="IApplication"/> instance.</param> /// <param name="args">The associated command arguments.</param> public static partial void MapOpenWindow(ApplicationHandler handler, IApplication application, object? args); /// <summary> /// Maps the abstract <see cref="IApplication.CloseWindow"/> command to the platform-specific implementations. /// </summary> /// <param name="handler">The associated handler.</param> /// <param name="application">The associated <see cref="IApplication"/> instance.</param> /// <param name="args">The associated command arguments.</param> public static partial void MapCloseWindow(ApplicationHandler handler, IApplication application, object? args); /// <summary> /// Maps the abstract <see cref="IApplication.ActivateWindow"/> command to the platform-specific implementations. /// </summary> /// <param name="handler">The associated handler.</param> /// <param name="application">The associated <see cref="IApplication"/> instance.</param> /// <param name="args">The associated command arguments.</param> public static partial void MapActivateWindow(ApplicationHandler handler, IApplication application, object? args); #if ANDROID || IOS internal static partial void MapAppTheme(ApplicationHandler handler, IApplication application); #endif } }