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>
pull/20258/merge
Emmanuel Hansen 23 hours ago
committed by GitHub
parent
commit
1ae9694f78
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 16
      api/Avalonia.Android.nupkg.xml
  2. 9
      src/Android/Avalonia.Android/AvaloniaActivity.cs
  3. 15
      src/Android/Avalonia.Android/BackPressedCallback.cs

16
api/Avalonia.Android.nupkg.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
<Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Android.AvaloniaActivity</Target>
<Left>baseline/Avalonia.Android/lib/net10.0-android36.0/Avalonia.Android.dll</Left>
<Right>current/Avalonia.Android/lib/net10.0-android36.0/Avalonia.Android.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Android.AvaloniaMainActivity</Target>
<Left>baseline/Avalonia.Android/lib/net10.0-android36.0/Avalonia.Android.dll</Left>
<Right>current/Avalonia.Android/lib/net10.0-android36.0/Avalonia.Android.dll</Right>
</Suppression>
</Suppressions>

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

@ -20,13 +20,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 <see cref="AvaloniaMainActivity"/>.
/// </summary>
public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInvokedCallback
public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity
{
private EventHandler<ActivatedEventArgs>? _onActivated, _onDeactivated;
private GlobalLayoutListener? _listener;
private object? _content;
private bool _contentViewSet;
internal AvaloniaView? _view;
private BackPressedCallback? _currentBackPressedCallback;
public Action<int, Result, Intent?>? ActivityResult { get; set; }
public Action<int, string[], Permission[]>? RequestPermissionsResult { get; set; }
@ -127,7 +128,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInv
if (OperatingSystem.IsAndroidVersionAtLeast(33))
{
OnBackInvokedDispatcher.UnregisterOnBackInvokedCallback(this);
_currentBackPressedCallback?.Remove();
_currentBackPressedCallback = null;
}
base.OnStop();
}
@ -138,7 +140,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();
}

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