Use androidx lib for backpressed callback (#20291)
* use androidx lib for backpressed callback * Update API suppressions --------- Co-authored-by: Julien Lebosquain <julien@lebosquain.net>
This commit is contained in:
@@ -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>
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user