Browse Source

iOS: fix universal link activation with scenes (#20752)

pull/19747/merge
Julien Lebosquain 3 weeks ago
committed by GitHub
parent
commit
ef20978982
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 15
      src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs
  2. 7
      src/iOS/Avalonia.iOS/AvaloniaSceneDelegate.cs

15
src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs

@ -12,7 +12,12 @@ namespace Avalonia.iOS
event EventHandler<ActivatedEventArgs> Deactivated; event EventHandler<ActivatedEventArgs> Deactivated;
} }
public class AvaloniaAppDelegate<TApp> : UIResponder, IUIApplicationDelegate, IAvaloniaAppDelegate internal interface IAvaloniaAppInternalDelegate
{
bool ContinueUserActivity(NSUserActivity userActivity);
}
public class AvaloniaAppDelegate<TApp> : UIResponder, IUIApplicationDelegate, IAvaloniaAppDelegate, IAvaloniaAppInternalDelegate
where TApp : Application, new() where TApp : Application, new()
{ {
private EventHandler<ActivatedEventArgs>? _onActivated, _onDeactivated; private EventHandler<ActivatedEventArgs>? _onActivated, _onDeactivated;
@ -104,7 +109,13 @@ namespace Avalonia.iOS
[Export("application:continueUserActivity:restorationHandler:")] [Export("application:continueUserActivity:restorationHandler:")]
public bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler) public bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{ {
if (userActivity.ActivityType == NSUserActivityType.BrowsingWeb && Uri.TryCreate(userActivity.WebPageUrl?.ToString(), UriKind.RelativeOrAbsolute, out var uri)) return ((IAvaloniaAppInternalDelegate)this).ContinueUserActivity(userActivity);
}
bool IAvaloniaAppInternalDelegate.ContinueUserActivity(NSUserActivity userActivity)
{
if (userActivity.ActivityType == NSUserActivityType.BrowsingWeb &&
Uri.TryCreate(userActivity.WebPageUrl?.ToString(), UriKind.RelativeOrAbsolute, out var uri))
{ {
// Activation using a univeral link or web browser-to-native app Handoff // Activation using a univeral link or web browser-to-native app Handoff
_onActivated?.Invoke(this, new ProtocolActivatedEventArgs(uri)); _onActivated?.Invoke(this, new ProtocolActivatedEventArgs(uri));

7
src/iOS/Avalonia.iOS/AvaloniaSceneDelegate.cs

@ -24,6 +24,13 @@ internal sealed class AvaloniaSceneDelegate : UIResponder, IUIWindowSceneDelegat
Window.MakeKeyAndVisible(); Window.MakeKeyAndVisible();
} }
[Export("scene:continueUserActivity:")]
public void ContinueUserActivity(UIScene scene, NSUserActivity userActivity)
{
var appDelegate = UIApplication.SharedApplication.Delegate as IAvaloniaAppInternalDelegate;
appDelegate?.ContinueUserActivity(userActivity);
}
internal static void InitWindow(UIWindow window, SingleViewLifetime lifetime) internal static void InitWindow(UIWindow window, SingleViewLifetime lifetime)
{ {
var view = new AvaloniaView(); var view = new AvaloniaView();

Loading…
Cancel
Save