Browse Source

Android - fix api 36 compat (#20112)

pull/20207/head
Emmanuel Hansen 3 months ago
committed by GitHub
parent
commit
86b709db0b
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 29
      src/Android/Avalonia.Android/AvaloniaActivity.cs
  2. 4
      src/Android/Avalonia.Android/Platform/AndroidInsetsManager.cs

29
src/Android/Avalonia.Android/AvaloniaActivity.cs

@ -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;

4
src/Android/Avalonia.Android/Platform/AndroidInsetsManager.cs

@ -285,7 +285,9 @@ namespace Avalonia.Android.Platform
if (_isDisplayEdgeToEdgeForced)
{
// Allow having fully transparent navbars when on api level 35
if (OperatingSystem.IsAndroidVersionAtLeast(35))
if (OperatingSystem.IsAndroidVersionAtLeast(36))
Window.NavigationBarContrastEnforced = false;
else if (OperatingSystem.IsAndroidVersionAtLeast(35))
Window.NavigationBarContrastEnforced = _systemBarColor != Colors.Transparent;
return;
}

Loading…
Cancel
Save