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;
}
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()
{
private EventHandler<ActivatedEventArgs>? _onActivated, _onDeactivated;
@ -104,7 +109,13 @@ namespace Avalonia.iOS
[Export("application:continueUserActivity:restorationHandler:")]
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
_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();
}
[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)
{
var view = new AvaloniaView();

Loading…
Cancel
Save