Browse Source

Use androidx lib for backpressed callback (#20291)

* use androidx lib for backpressed callback

* Update API suppressions

---------

Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
(cherry picked from commit 1ae9694f78)
release/11.3.10
Emmanuel Hansen 10 months ago
committed by Julien Lebosquain
parent
commit
7f9e5f2d1b
No known key found for this signature in database GPG Key ID: 1833CAD10ACC46FD
  1. 4
      api/Avalonia.Android.nupkg.xml
  2. 9
      src/Android/Avalonia.Android/AvaloniaActivity.cs
  3. 15
      src/Android/Avalonia.Android/BackPressedCallback.cs

4
api/Avalonia.Android.nupkg.xml

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- https://learn.microsoft.com/en-us/dotnet/fundamentals/package-validation/diagnostic-ids --> <!-- https://learn.microsoft.com/en-us/dotnet/fundamentals/package-validation/diagnostic-ids -->
<Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Suppression> <Suppression>
@ -13,4 +13,4 @@
<Left>baseline/net8.0-android34.0/Avalonia.Android.dll</Left> <Left>baseline/net8.0-android34.0/Avalonia.Android.dll</Left>
<Right>target/net8.0-android34.0/Avalonia.Android.dll</Right> <Right>target/net8.0-android34.0/Avalonia.Android.dll</Right>
</Suppression> </Suppression>
</Suppressions> </Suppressions>

9
src/Android/Avalonia.Android/AvaloniaActivity.cs

@ -21,13 +21,14 @@ namespace Avalonia.Android;
/// Common implementation of android activity that is integrated with Avalonia views. /// Common implementation of android activity that is integrated with Avalonia views.
/// If you need a base class for main activity of Avalonia app, see <see cref="AvaloniaMainActivity"/> or <see cref="AvaloniaMainActivity{TApp}"/>. /// If you need a base class for main activity of Avalonia app, see <see cref="AvaloniaMainActivity"/> or <see cref="AvaloniaMainActivity{TApp}"/>.
/// </summary> /// </summary>
public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInvokedCallback public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity
{ {
private EventHandler<ActivatedEventArgs>? _onActivated, _onDeactivated; private EventHandler<ActivatedEventArgs>? _onActivated, _onDeactivated;
private GlobalLayoutListener? _listener; private GlobalLayoutListener? _listener;
private object? _content; private object? _content;
private bool _contentViewSet; private bool _contentViewSet;
internal AvaloniaView? _view; internal AvaloniaView? _view;
private BackPressedCallback? _currentBackPressedCallback;
public Action<int, Result, Intent?>? ActivityResult { get; set; } public Action<int, Result, Intent?>? ActivityResult { get; set; }
public Action<int, string[], Permission[]>? RequestPermissionsResult { get; set; } public Action<int, string[], Permission[]>? RequestPermissionsResult { get; set; }
@ -132,7 +133,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInv
if (OperatingSystem.IsAndroidVersionAtLeast(33)) if (OperatingSystem.IsAndroidVersionAtLeast(33))
{ {
OnBackInvokedDispatcher.UnregisterOnBackInvokedCallback(this); _currentBackPressedCallback?.Remove();
_currentBackPressedCallback = null;
} }
base.OnStop(); base.OnStop();
@ -144,7 +146,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInv
if (OperatingSystem.IsAndroidVersionAtLeast(33)) if (OperatingSystem.IsAndroidVersionAtLeast(33))
{ {
OnBackInvokedDispatcher.RegisterOnBackInvokedCallback(IOnBackInvokedDispatcher.PriorityDefault, this); _currentBackPressedCallback = new BackPressedCallback(this);
OnBackPressedDispatcher.AddCallback(this, _currentBackPressedCallback);
} }
base.OnStart(); base.OnStart();
} }

15
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();
}
}
}
Loading…
Cancel
Save