From a02834717ff459100e7902862ab057629a8d4666 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Wed, 6 Dec 2023 06:25:59 +0000 Subject: [PATCH] unsubscribe android back handler when toplevel is disposed (#13831) --- .../Platform/AndroidSystemNavigationManager.cs | 13 ++++++++++++- .../Platform/SkiaPlatform/TopLevelImpl.cs | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Android/Avalonia.Android/Platform/AndroidSystemNavigationManager.cs b/src/Android/Avalonia.Android/Platform/AndroidSystemNavigationManager.cs index 880918bebe..ec619fd0f3 100644 --- a/src/Android/Avalonia.Android/Platform/AndroidSystemNavigationManager.cs +++ b/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? 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; + } + } } } diff --git a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs index 5d5f01db94..e9f9050af1 100644 --- a/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs +++ b/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs @@ -45,7 +45,7 @@ namespace Avalonia.Android.Platform.SkiaPlatform private readonly AndroidInputMethod _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; }