Browse Source

android - cancel back callbacks when handled (#20452)

release/11.3
Emmanuel Hansen 4 weeks ago
committed by Julien Lebosquain
parent
commit
810c294a74
No known key found for this signature in database GPG Key ID: 1833CAD10ACC46FD
  1. 17
      src/Android/Avalonia.Android/AvaloniaActivity.cs
  2. 8
      src/Android/Avalonia.Android/BackPressedCallback.cs

17
src/Android/Avalonia.Android/AvaloniaActivity.cs

@ -29,6 +29,7 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity
private bool _contentViewSet; private bool _contentViewSet;
internal AvaloniaView? _view; internal AvaloniaView? _view;
private BackPressedCallback? _currentBackPressedCallback; private BackPressedCallback? _currentBackPressedCallback;
private bool _shouldNavigateBack;
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; }
@ -65,6 +66,20 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity
} }
} }
/// <summary>
/// Gets whether to call the default back handler after our back handler is called.
/// </summary>
internal bool ShouldNavigateBack
{
get
{
var goBack = _shouldNavigateBack;
_shouldNavigateBack = false;
return goBack;
}
}
event EventHandler<ActivatedEventArgs>? IAvaloniaActivity.Activated event EventHandler<ActivatedEventArgs>? IAvaloniaActivity.Activated
{ {
add { _onActivated += value; } add { _onActivated += value; }
@ -214,6 +229,8 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity
var eventArgs = new AndroidBackRequestedEventArgs(); var eventArgs = new AndroidBackRequestedEventArgs();
BackRequested?.Invoke(this, eventArgs); BackRequested?.Invoke(this, eventArgs);
_shouldNavigateBack = !eventArgs.Handled;
} }
private class GlobalLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener private class GlobalLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener

8
src/Android/Avalonia.Android/BackPressedCallback.cs

@ -10,6 +10,14 @@ namespace Avalonia.Android
public override void HandleOnBackPressed() public override void HandleOnBackPressed()
{ {
activity.OnBackInvoked(); activity.OnBackInvoked();
if (activity.ShouldNavigateBack)
{
this.Enabled = false;
activity.OnBackPressedDispatcher?.OnBackPressed();
}
this.Enabled = true;
} }
} }
} }

Loading…
Cancel
Save