|
|
|
@ -1,4 +1,5 @@ |
|
|
|
using System; |
|
|
|
using System.Diagnostics; |
|
|
|
using System.Diagnostics.CodeAnalysis; |
|
|
|
using System.Runtime.Versioning; |
|
|
|
using Android.App; |
|
|
|
@ -7,6 +8,7 @@ using Android.Content.PM; |
|
|
|
using Android.OS; |
|
|
|
using Android.Runtime; |
|
|
|
using Android.Views; |
|
|
|
using Android.Window; |
|
|
|
using AndroidX.AppCompat.App; |
|
|
|
using Avalonia.Android.Platform; |
|
|
|
using Avalonia.Android.Platform.Storage; |
|
|
|
@ -19,7 +21,7 @@ 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"/> or <see cref="AvaloniaMainActivity{TApp}"/>.
|
|
|
|
/// </summary>
|
|
|
|
public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity |
|
|
|
public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity, IOnBackInvokedCallback |
|
|
|
{ |
|
|
|
private EventHandler<ActivatedEventArgs>? _onActivated, _onDeactivated; |
|
|
|
private GlobalLayoutListener? _listener; |
|
|
|
@ -77,6 +79,13 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity |
|
|
|
[ObsoletedOSPlatform("android33.0")] |
|
|
|
public override void OnBackPressed() |
|
|
|
{ |
|
|
|
// For now, if target sdk version is api 36, skip raising BackRequested on OnBackPressed.
|
|
|
|
// This behavior would be different for Net 10
|
|
|
|
if (OperatingSystem.IsAndroidVersionAtLeast(33) |
|
|
|
&& Build.VERSION.SdkInt >= (BuildVersionCodes)36 |
|
|
|
&& ApplicationContext?.ApplicationInfo?.TargetSdkVersion >= (BuildVersionCodes)36) |
|
|
|
return; |
|
|
|
|
|
|
|
var eventArgs = new AndroidBackRequestedEventArgs(); |
|
|
|
|
|
|
|
BackRequested?.Invoke(this, eventArgs); |
|
|
|
@ -120,12 +129,23 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity |
|
|
|
protected override void OnStop() |
|
|
|
{ |
|
|
|
_onDeactivated?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); |
|
|
|
|
|
|
|
if (OperatingSystem.IsAndroidVersionAtLeast(33)) |
|
|
|
{ |
|
|
|
OnBackInvokedDispatcher.UnregisterOnBackInvokedCallback(this); |
|
|
|
} |
|
|
|
|
|
|
|
base.OnStop(); |
|
|
|
} |
|
|
|
|
|
|
|
protected override void OnStart() |
|
|
|
{ |
|
|
|
_onActivated?.Invoke(this, new ActivatedEventArgs(ActivationKind.Background)); |
|
|
|
|
|
|
|
if (OperatingSystem.IsAndroidVersionAtLeast(33)) |
|
|
|
{ |
|
|
|
OnBackInvokedDispatcher.RegisterOnBackInvokedCallback(IOnBackInvokedDispatcher.PriorityDefault, this); |
|
|
|
} |
|
|
|
base.OnStart(); |
|
|
|
} |
|
|
|
|
|
|
|
@ -186,6 +206,13 @@ public class AvaloniaActivity : AppCompatActivity, IAvaloniaActivity |
|
|
|
_view = new AvaloniaView(this) { Content = initialContent }; |
|
|
|
} |
|
|
|
|
|
|
|
public void OnBackInvoked() |
|
|
|
{ |
|
|
|
var eventArgs = new AndroidBackRequestedEventArgs(); |
|
|
|
|
|
|
|
BackRequested?.Invoke(this, eventArgs); |
|
|
|
} |
|
|
|
|
|
|
|
private class GlobalLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener |
|
|
|
{ |
|
|
|
private readonly AvaloniaView _view; |
|
|
|
|