Browse Source

unsubscribe android back handler when toplevel is disposed (#13831)

pull/13848/head
Emmanuel Hansen 2 years ago
committed by GitHub
parent
commit
a02834717f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 13
      src/Android/Avalonia.Android/Platform/AndroidSystemNavigationManager.cs
  2. 3
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

13
src/Android/Avalonia.Android/Platform/AndroidSystemNavigationManager.cs

@ -6,8 +6,10 @@ using Avalonia.Platform;
namespace Avalonia.Android.Platform
{
internal class AndroidSystemNavigationManagerImpl : ISystemNavigationManagerImpl
internal class AndroidSystemNavigationManagerImpl : ISystemNavigationManagerImpl, IDisposable
{
private readonly IActivityNavigationService? _navigationService;
public event EventHandler<RoutedEventArgs>? BackRequested;
public AndroidSystemNavigationManagerImpl(IActivityNavigationService? navigationService)
@ -16,6 +18,7 @@ namespace Avalonia.Android.Platform
{
navigationService.BackRequested += OnBackRequested;
}
_navigationService = navigationService;
}
private void OnBackRequested(object? sender, AndroidBackRequestedEventArgs e)
@ -26,5 +29,13 @@ namespace Avalonia.Android.Platform
e.Handled = routedEventArgs.Handled;
}
public void Dispose()
{
if (_navigationService != null)
{
_navigationService.BackRequested -= OnBackRequested;
}
}
}
}

3
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@ -45,7 +45,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
private readonly AndroidInputMethod<ViewImpl> _textInputMethod;
private readonly INativeControlHostImpl _nativeControlHost;
private readonly IStorageProvider _storageProvider;
private readonly ISystemNavigationManagerImpl _systemNavigationManager;
private readonly AndroidSystemNavigationManagerImpl _systemNavigationManager;
private readonly AndroidInsetsManager _insetsManager;
private readonly ClipboardImpl _clipboard;
private ViewImpl _view;
@ -155,6 +155,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public virtual void Dispose()
{
_systemNavigationManager.Dispose();
_view.Dispose();
_view = null;
}

Loading…
Cancel
Save