From 64e999cee89a67407c2079b86869b7aedce28c5c Mon Sep 17 00:00:00 2001 From: Daniil Pavliuchyk Date: Thu, 18 Jan 2024 21:32:26 +0200 Subject: [PATCH] Revert "Add an event so that users can detect when an Application icon is clicked (#14106)" This reverts commit 0e014f9cb627d99fb4e1afa389b4c073c836e9b6. --- native/Avalonia.Native/src/OSX/app.mm | 23 -------- native/Avalonia.Native/src/OSX/common.h | 1 - .../ControlCatalog.Android/MainActivity.cs | 7 +-- samples/ControlCatalog/App.xaml.cs | 8 --- .../AvaloniaMainActivity.App.cs | 2 +- .../Avalonia.Android/AvaloniaMainActivity.cs | 40 +------------ .../IAndroidNavigationService.cs | 1 - .../Avalonia.Android/IAvaloniaActivity.cs | 10 ---- .../Avalonia.Android/SingleViewLifetime.cs | 23 +------- .../ActivatedEventArgs.cs | 23 -------- .../ApplicationLifetimes/ActivationKind.cs | 25 -------- .../ClassicDesktopStyleApplicationLifetime.cs | 13 ++--- .../IActivatableApplicationLifetime.cs | 35 ----------- .../ProtocolActivatedEventArgs.cs | 13 ----- .../Platform/INativeApplicationCommands.cs | 1 - .../AvaloniaNativeApplicationPlatform.cs | 32 ---------- .../AvaloniaNativePlatformExtensions.cs | 4 -- ...SClassicDesktopStyleApplicationLifetime.cs | 50 ---------------- .../MacOSNativeMenuCommands.cs | 6 +- src/Avalonia.Native/avn.idl | 4 -- .../Avalonia.Browser/BrowserAppBuilder.cs | 3 +- .../BrowserSingleViewLifetime.cs | 31 +--------- .../Avalonia.Browser/Interop/InputHelper.cs | 5 +- .../webapp/modules/avalonia/input.ts | 8 --- src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs | 58 ++++--------------- src/iOS/Avalonia.iOS/SingleViewLifetime.cs | 27 --------- 26 files changed, 25 insertions(+), 428 deletions(-) delete mode 100644 src/Android/Avalonia.Android/IAvaloniaActivity.cs delete mode 100644 src/Avalonia.Controls/ApplicationLifetimes/ActivatedEventArgs.cs delete mode 100644 src/Avalonia.Controls/ApplicationLifetimes/ActivationKind.cs delete mode 100644 src/Avalonia.Controls/ApplicationLifetimes/IActivatableApplicationLifetime.cs delete mode 100644 src/Avalonia.Controls/ApplicationLifetimes/ProtocolActivatedEventArgs.cs delete mode 100644 src/Avalonia.Native/MacOSClassicDesktopStyleApplicationLifetime.cs delete mode 100644 src/iOS/Avalonia.iOS/SingleViewLifetime.cs diff --git a/native/Avalonia.Native/src/OSX/app.mm b/native/Avalonia.Native/src/OSX/app.mm index 7630de1d0b..88cdf4d9de 100644 --- a/native/Avalonia.Native/src/OSX/app.mm +++ b/native/Avalonia.Native/src/OSX/app.mm @@ -43,22 +43,6 @@ ComPtr _events; [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateIgnoringOtherApps]; } --(BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)flag -{ - _events->OnReopen(); - return YES; -} - -- (void)applicationDidHide:(NSNotification *)notification -{ - _events->OnHide(); -} - -- (void)applicationDidUnhide:(NSNotification *)notification -{ - _events->OnUnhide(); -} - - (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames { auto array = CreateAvnStringArray(filenames); @@ -139,13 +123,6 @@ extern void ReleaseAvnAppEvents() } } -HRESULT AvnApplicationCommands::UnhideApp() -{ - START_COM_CALL; - [[NSApplication sharedApplication] unhide:[NSApp delegate]]; - return S_OK; -} - HRESULT AvnApplicationCommands::HideApp() { START_COM_CALL; diff --git a/native/Avalonia.Native/src/OSX/common.h b/native/Avalonia.Native/src/OSX/common.h index a3473d3928..44441ee15d 100644 --- a/native/Avalonia.Native/src/OSX/common.h +++ b/native/Avalonia.Native/src/OSX/common.h @@ -101,7 +101,6 @@ class AvnApplicationCommands : public ComSingleObject { - protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) + protected override Avalonia.AppBuilder CustomizeAppBuilder(Avalonia.AppBuilder builder) { return base.CustomizeAppBuilder(builder) .AfterSetup(_ => diff --git a/samples/ControlCatalog/App.xaml.cs b/samples/ControlCatalog/App.xaml.cs index 6a941c21ae..605254c995 100644 --- a/samples/ControlCatalog/App.xaml.cs +++ b/samples/ControlCatalog/App.xaml.cs @@ -51,14 +51,6 @@ namespace ControlCatalog singleViewLifetime.MainView = new MainView { DataContext = new MainWindowViewModel() }; } - if (ApplicationLifetime is IActivatableApplicationLifetime activatableApplicationLifetime) - { - activatableApplicationLifetime.Activated += (sender, args) => - Console.WriteLine($"App activated: {args.Kind}"); - activatableApplicationLifetime.Deactivated += (sender, args) => - Console.WriteLine($"App deactivated: {args.Kind}"); - } - base.OnFrameworkInitializationCompleted(); } diff --git a/src/Android/Avalonia.Android/AvaloniaMainActivity.App.cs b/src/Android/Avalonia.Android/AvaloniaMainActivity.App.cs index cf258a5a1f..3a32c269d7 100644 --- a/src/Android/Avalonia.Android/AvaloniaMainActivity.App.cs +++ b/src/Android/Avalonia.Android/AvaloniaMainActivity.App.cs @@ -36,7 +36,7 @@ namespace Avalonia.Android { var builder = CreateAppBuilder(); - builder.SetupWithLifetime(new SingleViewLifetime(this)); + builder.SetupWithLifetime(new SingleViewLifetime()); s_appBuilder = builder; } diff --git a/src/Android/Avalonia.Android/AvaloniaMainActivity.cs b/src/Android/Avalonia.Android/AvaloniaMainActivity.cs index b8b3906613..a4175f864f 100644 --- a/src/Android/Avalonia.Android/AvaloniaMainActivity.cs +++ b/src/Android/Avalonia.Android/AvaloniaMainActivity.cs @@ -7,29 +7,15 @@ using Android.OS; using Android.Runtime; using Android.Views; using AndroidX.AppCompat.App; -using Avalonia.Controls.ApplicationLifetimes; namespace Avalonia.Android { - public class AvaloniaMainActivity : AppCompatActivity, IAvaloniaActivity + public class AvaloniaMainActivity : AppCompatActivity, IActivityResultHandler, IActivityNavigationService { - private EventHandler _onActivated, _onDeactivated; - public Action ActivityResult { get; set; } public Action RequestPermissionsResult { get; set; } public event EventHandler BackRequested; - event EventHandler IAvaloniaActivity.Activated - { - add { _onActivated += value; } - remove { _onActivated -= value; } - } - - event EventHandler IAvaloniaActivity.Deactivated - { - add { _onDeactivated += value; } - remove { _onDeactivated -= value; } - } public override void OnBackPressed() { @@ -43,30 +29,6 @@ namespace Avalonia.Android } } - protected override void OnCreate(Bundle savedInstanceState) - { - base.OnCreate(savedInstanceState); - - if (Intent?.Data is {} androidUri - && androidUri.IsAbsolute - && Uri.TryCreate(androidUri.ToString(), UriKind.Absolute, out var protocolUri)) - { - _onActivated?.Invoke(this, new ProtocolActivatedEventArgs(ActivationKind.OpenUri, protocolUri)); - } - } - - protected override void OnStop() - { - _onDeactivated?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); - base.OnStop(); - } - - protected override void OnStart() - { - _onActivated?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); - base.OnStart(); - } - protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); diff --git a/src/Android/Avalonia.Android/IAndroidNavigationService.cs b/src/Android/Avalonia.Android/IAndroidNavigationService.cs index b45ee6e78d..5fa93971d9 100644 --- a/src/Android/Avalonia.Android/IAndroidNavigationService.cs +++ b/src/Android/Avalonia.Android/IAndroidNavigationService.cs @@ -1,5 +1,4 @@ using System; -using Avalonia.Controls.ApplicationLifetimes; namespace Avalonia.Android { diff --git a/src/Android/Avalonia.Android/IAvaloniaActivity.cs b/src/Android/Avalonia.Android/IAvaloniaActivity.cs deleted file mode 100644 index 005096a0bd..0000000000 --- a/src/Android/Avalonia.Android/IAvaloniaActivity.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using Avalonia.Controls.ApplicationLifetimes; - -namespace Avalonia.Android; - -public interface IAvaloniaActivity : IActivityResultHandler, IActivityNavigationService -{ - event EventHandler Activated; - event EventHandler Deactivated; -} diff --git a/src/Android/Avalonia.Android/SingleViewLifetime.cs b/src/Android/Avalonia.Android/SingleViewLifetime.cs index f8a2ee2894..eef763a932 100644 --- a/src/Android/Avalonia.Android/SingleViewLifetime.cs +++ b/src/Android/Avalonia.Android/SingleViewLifetime.cs @@ -1,26 +1,12 @@ -using System; -using Android.App; -using Avalonia.Controls; +using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; namespace Avalonia.Android { - internal class SingleViewLifetime : ISingleViewApplicationLifetime, IActivatableApplicationLifetime + internal class SingleViewLifetime : ISingleViewApplicationLifetime { - private readonly Activity _activity; private AvaloniaView _view; - public SingleViewLifetime(Activity activity) - { - _activity = activity; - - if (activity is IAvaloniaActivity activableActivity) - { - activableActivity.Activated += (_, args) => Activated?.Invoke(this, args); - activableActivity.Deactivated += (_, args) => Deactivated?.Invoke(this, args); - } - } - public AvaloniaView View { get => _view; internal set @@ -36,10 +22,5 @@ namespace Avalonia.Android } public Control MainView { get; set; } - public event EventHandler Activated; - public event EventHandler Deactivated; - - public bool TryLeaveBackground() => _activity.MoveTaskToBack(true); - public bool TryEnterBackground() => false; } } diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ActivatedEventArgs.cs b/src/Avalonia.Controls/ApplicationLifetimes/ActivatedEventArgs.cs deleted file mode 100644 index fb2eae1b52..0000000000 --- a/src/Avalonia.Controls/ApplicationLifetimes/ActivatedEventArgs.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; - -namespace Avalonia.Controls.ApplicationLifetimes; - -/// -/// Event args for an Application Lifetime Activated or Deactivated events. -/// -public class ActivatedEventArgs : EventArgs -{ - /// - /// Ctor for ActivatedEventArgs - /// - /// The that this event represents - public ActivatedEventArgs(ActivationKind kind) - { - Kind = kind; - } - - /// - /// The that this event represents. - /// - public ActivationKind Kind { get; } -} diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ActivationKind.cs b/src/Avalonia.Controls/ApplicationLifetimes/ActivationKind.cs deleted file mode 100644 index 6d72b56921..0000000000 --- a/src/Avalonia.Controls/ApplicationLifetimes/ActivationKind.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace Avalonia.Controls.ApplicationLifetimes; - -public enum ActivationKind -{ - /// - /// When the application is passed a URI to open. - /// - OpenUri = 20, - - /// - /// When the application is asked to reopen. - /// An example of this is on MacOS when all the windows are closed, - /// application continues to run in the background and the user clicks - /// the application's dock icon. - /// - Reopen = 30, - - /// - /// When the application enters or leaves a background state. - /// An example is when on MacOS the user hides or shows and application (not window), - /// or when a browser application switchs tabs or when a mobile applications goes into - /// the background. - /// - Background = 40 -} diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs index f235d0e2cf..77f3b93efa 100644 --- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs +++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs @@ -211,16 +211,11 @@ namespace Avalonia public static int StartWithClassicDesktopLifetime( this AppBuilder builder, string[] args, ShutdownMode shutdownMode = ShutdownMode.OnLastWindowClose) { - var lifetime = AvaloniaLocator.Current.GetService(); - - if (lifetime == null) + var lifetime = new ClassicDesktopStyleApplicationLifetime() { - lifetime = new ClassicDesktopStyleApplicationLifetime(); - } - - lifetime.Args = args; - lifetime.ShutdownMode = shutdownMode; - + Args = args, + ShutdownMode = shutdownMode + }; builder.SetupWithLifetime(lifetime); return lifetime.Start(args); } diff --git a/src/Avalonia.Controls/ApplicationLifetimes/IActivatableApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/IActivatableApplicationLifetime.cs deleted file mode 100644 index fbdfe3aa7d..0000000000 --- a/src/Avalonia.Controls/ApplicationLifetimes/IActivatableApplicationLifetime.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; - -namespace Avalonia.Controls.ApplicationLifetimes; - -/// -/// An interface for ApplicationLifetimes where the application can be Activated and Deactivated. -/// -public interface IActivatableApplicationLifetime -{ - /// - /// An event that is raised when the application is Activated for various reasons - /// as described by the enumeration. - /// - event EventHandler Activated; - - /// - /// An event that is raised when the application is Deactivated for various reasons - /// as described by the enumeration. - /// - event EventHandler Deactivated; - - /// - /// Tells the application that it should attempt to leave its background state. - /// For example on OSX this would be [NSApp unhide] - /// - /// true if it was possible and the platform supports this. false otherwise - public bool TryLeaveBackground(); - - /// - /// Tells the application that it should attempt to enter its background state. - /// For example on OSX this would be [NSApp hide] - /// - /// true if it was possible and the platform supports this. false otherwise - public bool TryEnterBackground(); -} diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ProtocolActivatedEventArgs.cs b/src/Avalonia.Controls/ApplicationLifetimes/ProtocolActivatedEventArgs.cs deleted file mode 100644 index e9706f1cf9..0000000000 --- a/src/Avalonia.Controls/ApplicationLifetimes/ProtocolActivatedEventArgs.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace Avalonia.Controls.ApplicationLifetimes; - -public class ProtocolActivatedEventArgs : ActivatedEventArgs -{ - public ProtocolActivatedEventArgs(ActivationKind kind, Uri uri) : base(kind) - { - Uri = uri; - } - - public Uri Uri { get; } -} diff --git a/src/Avalonia.Controls/Platform/INativeApplicationCommands.cs b/src/Avalonia.Controls/Platform/INativeApplicationCommands.cs index d287bf98b5..d837e4155e 100644 --- a/src/Avalonia.Controls/Platform/INativeApplicationCommands.cs +++ b/src/Avalonia.Controls/Platform/INativeApplicationCommands.cs @@ -5,7 +5,6 @@ namespace Avalonia.Controls.Platform /// internal interface INativeApplicationCommands { - void ShowApp(); void HideApp(); void ShowAll(); void HideOthers(); diff --git a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs index 3365da7d36..ae24d06bad 100644 --- a/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativeApplicationPlatform.cs @@ -13,38 +13,6 @@ namespace Avalonia.Native void IAvnApplicationEvents.FilesOpened(IAvnStringArray urls) { ((IApplicationPlatformEvents)Application.Current).RaiseUrlsOpened(urls.ToStringArray()); - - if (Application.Current?.ApplicationLifetime is MacOSClassicDesktopStyleApplicationLifetime lifetime) - { - foreach (var url in urls.ToStringArray()) - { - lifetime.RaiseUrl(new Uri(url)); - } - } - } - - void IAvnApplicationEvents.OnReopen() - { - if (Application.Current?.ApplicationLifetime is MacOSClassicDesktopStyleApplicationLifetime lifetime) - { - lifetime.RaiseActivated(ActivationKind.Reopen); - } - } - - void IAvnApplicationEvents.OnHide() - { - if (Application.Current?.ApplicationLifetime is MacOSClassicDesktopStyleApplicationLifetime lifetime) - { - lifetime.RaiseDeactivated(ActivationKind.Background); - } - } - - void IAvnApplicationEvents.OnUnhide() - { - if (Application.Current?.ApplicationLifetime is MacOSClassicDesktopStyleApplicationLifetime lifetime) - { - lifetime.RaiseActivated(ActivationKind.Background); - } } public int TryShutdown() diff --git a/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs b/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs index ccd358ff8e..1d271c9d75 100644 --- a/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs +++ b/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Native; namespace Avalonia @@ -25,9 +24,6 @@ namespace Avalonia }); }); - AvaloniaLocator.CurrentMutable.Bind() - .ToConstant(new MacOSClassicDesktopStyleApplicationLifetime()); - return builder; } } diff --git a/src/Avalonia.Native/MacOSClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Native/MacOSClassicDesktopStyleApplicationLifetime.cs deleted file mode 100644 index caf6e03ec8..0000000000 --- a/src/Avalonia.Native/MacOSClassicDesktopStyleApplicationLifetime.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using Avalonia.Controls.ApplicationLifetimes; -using Avalonia.Controls.Platform; - -namespace Avalonia.Native; - -#nullable enable - -internal class MacOSClassicDesktopStyleApplicationLifetime : ClassicDesktopStyleApplicationLifetime, - IActivatableApplicationLifetime -{ - /// - public event EventHandler? Activated; - - /// - public event EventHandler? Deactivated; - - /// - public bool TryLeaveBackground() - { - var nativeApplicationCommands = AvaloniaLocator.Current.GetService(); - nativeApplicationCommands?.ShowApp(); - - return true; - } - - /// - public bool TryEnterBackground() - { - var nativeApplicationCommands = AvaloniaLocator.Current.GetService(); - nativeApplicationCommands?.HideApp(); - - return true; - } - - internal void RaiseUrl(Uri uri) - { - Activated?.Invoke(this, new ProtocolActivatedEventArgs(ActivationKind.OpenUri, uri)); - } - - internal void RaiseActivated(ActivationKind kind) - { - Activated?.Invoke(this, new ActivatedEventArgs(kind)); - } - - internal void RaiseDeactivated(ActivationKind kind) - { - Deactivated?.Invoke(this, new ActivatedEventArgs(kind)); - } -} diff --git a/src/Avalonia.Native/MacOSNativeMenuCommands.cs b/src/Avalonia.Native/MacOSNativeMenuCommands.cs index 0baca79264..6d467d307b 100644 --- a/src/Avalonia.Native/MacOSNativeMenuCommands.cs +++ b/src/Avalonia.Native/MacOSNativeMenuCommands.cs @@ -13,11 +13,6 @@ namespace Avalonia.Native _commands = commands; } - public void ShowApp() - { - _commands.UnhideApp(); - } - public void HideApp() { _commands.HideApp(); @@ -33,6 +28,7 @@ namespace Avalonia.Native _commands.HideOthers(); } + public static readonly AttachedProperty IsServicesSubmenuProperty = AvaloniaProperty.RegisterAttached("IsServicesSubmenu", false); } diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl index 7791426c0b..7583dfdef6 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -1087,15 +1087,11 @@ interface IAvnApplicationEvents : IUnknown { void FilesOpened (IAvnStringArray* urls); bool TryShutdown(); - void OnReopen (); - void OnHide (); - void OnUnhide (); } [uuid(b4284791-055b-4313-8c2e-50f0a8c72ce9)] interface IAvnApplicationCommands : IUnknown { - HRESULT UnhideApp(); HRESULT HideApp(); HRESULT ShowAll(); HRESULT HideOthers(); diff --git a/src/Browser/Avalonia.Browser/BrowserAppBuilder.cs b/src/Browser/Avalonia.Browser/BrowserAppBuilder.cs index eaa72c1931..996faaec58 100644 --- a/src/Browser/Avalonia.Browser/BrowserAppBuilder.cs +++ b/src/Browser/Avalonia.Browser/BrowserAppBuilder.cs @@ -75,9 +75,8 @@ public static class BrowserAppBuilder { builder = await PreSetupBrowser(builder, options); - var lifetime = new BrowserSingleViewLifetime(); builder - .SetupWithLifetime(lifetime); + .SetupWithoutStarting(); } internal static async Task PreSetupBrowser(AppBuilder builder, BrowserPlatformOptions? options) diff --git a/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs b/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs index 6607bcf539..6fa79f6f54 100644 --- a/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs +++ b/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs @@ -4,34 +4,11 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using System.Runtime.Versioning; using Avalonia.Browser; -using Avalonia.Browser.Interop; -using Avalonia.Threading; namespace Avalonia; -internal class BrowserSingleViewLifetime : ISingleViewApplicationLifetime, IActivatableApplicationLifetime +internal class BrowserSingleViewLifetime : ISingleViewApplicationLifetime { - public BrowserSingleViewLifetime() - { - bool? initiallyVisible = InputHelper.SubscribeVisibilityChange(visible => - { - initiallyVisible = null; - (visible ? Activated : Deactivated)?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); - }); - - // Trigger Activated as an initial state, if web page is visible, and wasn't hidden during initialization. - if (initiallyVisible == true) - { - Dispatcher.UIThread.Invoke(() => - { - if (initiallyVisible == true) - { - Activated?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); - } - }); - } - } - public AvaloniaView? View; public Control? MainView @@ -56,10 +33,4 @@ internal class BrowserSingleViewLifetime : ISingleViewApplicationLifetime, IActi throw new InvalidOperationException("Browser lifetime was not initialized. Make sure AppBuilder.StartBrowserApp was called."); } } - - public event EventHandler? Activated; - public event EventHandler? Deactivated; - - public bool TryLeaveBackground() => false; - public bool TryEnterBackground() => true; } diff --git a/src/Browser/Avalonia.Browser/Interop/InputHelper.cs b/src/Browser/Avalonia.Browser/Interop/InputHelper.cs index 7f294e155e..9fc0df28d8 100644 --- a/src/Browser/Avalonia.Browser/Interop/InputHelper.cs +++ b/src/Browser/Avalonia.Browser/Interop/InputHelper.cs @@ -50,14 +50,11 @@ internal static partial class InputHelper [JSImport("InputHelper.subscribeDropEvents", AvaloniaModule.MainModuleName)] public static partial void SubscribeDropEvents(JSObject containerElement, [JSMarshalAs>] Func dragEvent); - + [JSImport("InputHelper.subscribeKeyboardGeometryChange", AvaloniaModule.MainModuleName)] public static partial void SubscribeKeyboardGeometryChange(JSObject containerElement, [JSMarshalAs>] Func handler); - [JSImport("InputHelper.subscribeVisibilityChange", AvaloniaModule.MainModuleName)] - public static partial bool SubscribeVisibilityChange([JSMarshalAs>] Action handler); - [JSImport("InputHelper.getCoalescedEvents", AvaloniaModule.MainModuleName)] [return: JSMarshalAs>] public static partial JSObject[] GetCoalescedEvents(JSObject pointerEvent); diff --git a/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts b/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts index e03aa9e532..99439b6034 100644 --- a/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts +++ b/src/Browser/Avalonia.Browser/webapp/modules/avalonia/input.ts @@ -263,14 +263,6 @@ export class InputHelper { } } - public static subscribeVisibilityChange( - handler: (state: boolean) => void): boolean { - document.addEventListener("visibilitychange", () => { - handler(document.visibilityState === "visible"); - }); - return document.visibilityState === "visible"; - } - public static clearInput(inputElement: HTMLInputElement) { inputElement.value = ""; } diff --git a/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs b/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs index ecb9e56aa9..c1e7cd5aba 100644 --- a/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs +++ b/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs @@ -1,39 +1,25 @@ -using System; using Foundation; +using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using UIKit; namespace Avalonia.iOS { - public interface IAvaloniaAppDelegate - { - event EventHandler Activated; - event EventHandler Deactivated; - } - - public class AvaloniaAppDelegate : UIResponder, IUIApplicationDelegate, IAvaloniaAppDelegate + public class AvaloniaAppDelegate : UIResponder, IUIApplicationDelegate where TApp : Application, new() { - private EventHandler _onActivated, _onDeactivated; - - public AvaloniaAppDelegate() + class SingleViewLifetime : ISingleViewApplicationLifetime { - NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.DidEnterBackgroundNotification, OnEnteredBackground); - NSNotificationCenter.DefaultCenter.AddObserver(UIApplication.WillEnterForegroundNotification, OnLeavingBackground); - } + public AvaloniaView View; - event EventHandler IAvaloniaAppDelegate.Activated - { - add { _onActivated += value; } - remove { _onActivated -= value; } - } - event EventHandler IAvaloniaAppDelegate.Deactivated - { - add { _onDeactivated += value; } - remove { _onDeactivated -= value; } + public Control MainView + { + get => View.Content; + set => View.Content = value; + } } - + protected virtual AppBuilder CustomizeAppBuilder(AppBuilder builder) => builder; [Export("window")] @@ -44,7 +30,7 @@ namespace Avalonia.iOS { var builder = AppBuilder.Configure().UseiOS(); - var lifetime = new SingleViewLifetime(this); + var lifetime = new SingleViewLifetime(); builder.AfterSetup(_ => { @@ -68,27 +54,5 @@ namespace Avalonia.iOS return true; } - - [Export("application:openURL:options:")] - public bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) - { - if (Uri.TryCreate(url.ToString(), UriKind.Absolute, out var uri)) - { - _onActivated?.Invoke(this, new ProtocolActivatedEventArgs(ActivationKind.OpenUri, uri)); - return true; - } - - return false; - } - - private void OnEnteredBackground(NSNotification notification) - { - _onDeactivated?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); - } - - private void OnLeavingBackground(NSNotification notification) - { - _onActivated?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); - } } } diff --git a/src/iOS/Avalonia.iOS/SingleViewLifetime.cs b/src/iOS/Avalonia.iOS/SingleViewLifetime.cs deleted file mode 100644 index d3924482e4..0000000000 --- a/src/iOS/Avalonia.iOS/SingleViewLifetime.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; - -namespace Avalonia.iOS; - -internal class SingleViewLifetime : ISingleViewApplicationLifetime, IActivatableApplicationLifetime -{ - public SingleViewLifetime(IAvaloniaAppDelegate avaloniaAppDelegate) - { - avaloniaAppDelegate.Activated += (_, args) => Activated?.Invoke(this, args); - avaloniaAppDelegate.Deactivated += (_, args) => Deactivated?.Invoke(this, args); - } - - public AvaloniaView View; - - public Control MainView - { - get => View.Content; - set => View.Content = value; - } - - public event EventHandler Activated; - public event EventHandler Deactivated; - public bool TryLeaveBackground() => false; - public bool TryEnterBackground() => false; -}