diff --git a/critterfolio/CritterFolio/CritterFolio.Android/MainActivity.cs b/critterfolio/CritterFolio/CritterFolio.Android/MainActivity.cs index 22bd048..3d6926c 100644 --- a/critterfolio/CritterFolio/CritterFolio.Android/MainActivity.cs +++ b/critterfolio/CritterFolio/CritterFolio.Android/MainActivity.cs @@ -1,7 +1,9 @@ -using Android.App; +using System; +using Android.App; using Android.Content.PM; using Avalonia; using Avalonia.Android; +using Avalonia.Controls.ApplicationLifetimes; namespace CritterFolio.Android; @@ -18,4 +20,22 @@ public class MainActivity : AvaloniaMainActivity return base.CustomizeAppBuilder(builder) .WithInterFont(); } + + public override void OnBackPressed() + { + if (Sys.Navigation != null && Sys.Navigation.IsLastPage()) + { + if (Avalonia.Application.Current?.ApplicationLifetime is ISingleViewApplicationLifetime lifetime) + { + //base.OnBackPressed(); + // CA1422: This call site is reachable on: 'Android' 21.0 and later. 'AvaloniaActivity.OnBackPressed()' is obsoleted on: 'Android' 33.0 and later. + // Just call exit from Sytem.Environment for now which does not shutdown cleanly + Environment.Exit(0); + } + } + else + { + Sys.Navigation?.PopPage(); + } + } } diff --git a/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs b/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs index 939e40b..72d9937 100644 --- a/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs +++ b/critterfolio/CritterFolio/CritterFolio/Navigation.axaml.cs @@ -33,6 +33,11 @@ public partial class Navigation : UserControl }; } + public bool IsLastPage() + { + return _pageStack.Count == 1; + } + public void Init(ContentControl pageContainer) { _pageContainer = pageContainer; @@ -79,6 +84,7 @@ public partial class Navigation : UserControl public void PopPage() { + if (_pageStack.Count == 1) return; Console.WriteLine($"Removing page {CurrentPage?.Title ?? "??"} from the page stack"); _pageStack.Pop(); RefreshPage();