diff --git a/api/Avalonia.Android.nupkg.xml b/api/Avalonia.Android.nupkg.xml index da33e03f2c..3b98b436f2 100644 --- a/api/Avalonia.Android.nupkg.xml +++ b/api/Avalonia.Android.nupkg.xml @@ -1,4 +1,4 @@ - + @@ -13,4 +13,4 @@ baseline/net8.0-android34.0/Avalonia.Android.dll target/net8.0-android34.0/Avalonia.Android.dll - \ No newline at end of file + diff --git a/src/Android/Avalonia.Android/AvaloniaActivity.cs b/src/Android/Avalonia.Android/AvaloniaActivity.cs index e810de050c..6ecd8367ae 100644 --- a/src/Android/Avalonia.Android/AvaloniaActivity.cs +++ b/src/Android/Avalonia.Android/AvaloniaActivity.cs @@ -21,13 +21,14 @@ namespace Avalonia.Android; /// Common implementation of android activity that is integrated with Avalonia views. /// If you need a base class for main activity of Avalonia app, see or . /// -public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInvokedCallback +public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity { private EventHandler? _onActivated, _onDeactivated; private GlobalLayoutListener? _listener; private object? _content; private bool _contentViewSet; internal AvaloniaView? _view; + private BackPressedCallback? _currentBackPressedCallback; public Action? ActivityResult { get; set; } public Action? RequestPermissionsResult { get; set; } @@ -132,7 +133,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInv if (OperatingSystem.IsAndroidVersionAtLeast(33)) { - OnBackInvokedDispatcher.UnregisterOnBackInvokedCallback(this); + _currentBackPressedCallback?.Remove(); + _currentBackPressedCallback = null; } base.OnStop(); @@ -144,7 +146,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInv if (OperatingSystem.IsAndroidVersionAtLeast(33)) { - OnBackInvokedDispatcher.RegisterOnBackInvokedCallback(IOnBackInvokedDispatcher.PriorityDefault, this); + _currentBackPressedCallback = new BackPressedCallback(this); + OnBackPressedDispatcher.AddCallback(this, _currentBackPressedCallback); } base.OnStart(); } diff --git a/src/Android/Avalonia.Android/BackPressedCallback.cs b/src/Android/Avalonia.Android/BackPressedCallback.cs new file mode 100644 index 0000000000..18c8c4b0bc --- /dev/null +++ b/src/Android/Avalonia.Android/BackPressedCallback.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using AndroidX.Activity; + +namespace Avalonia.Android +{ + internal class BackPressedCallback(AvaloniaActivity activity) : OnBackPressedCallback(true) + { + public override void HandleOnBackPressed() + { + activity.OnBackInvoked(); + } + } +}