diff --git a/src/PostIt/Directory.Packages.props b/src/PostIt/Directory.Packages.props index 59b6b600..023d0654 100644 --- a/src/PostIt/Directory.Packages.props +++ b/src/PostIt/Directory.Packages.props @@ -3,18 +3,20 @@ - - - - - - - + + + + + + + + - + + diff --git a/src/PostIt/PostIt.Android/Application.cs b/src/PostIt/PostIt.Android/Application.cs index fb6b08d3..62ace02b 100644 --- a/src/PostIt/PostIt.Android/Application.cs +++ b/src/PostIt/PostIt.Android/Application.cs @@ -1,21 +1,19 @@ -using Android.App; -using Android.Runtime; -using Avalonia; -using Avalonia.Android; +using Android.App; -namespace PostIt.Android +namespace PostIt.Android; + +/// +/// Bare shell for Android. Avalonia +/// 11 initialises its platform services from +/// (which extends AvaloniaMainActivity<App>); no per-Application +/// Avalonia setup is needed here. Kept only so that the [Application] entry +/// stays present in the merged manifest, which the Android runtime expects +/// when the manifest declares a custom android:name in the application tag. +/// +[Application] +public class Application : Android.App.Application { - [Application] - public class Application : AvaloniaAndroidApplication + public Application(nint javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { - protected Application(nint javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) - { - } - - protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) - { - return base.CustomizeAppBuilder(builder) - .WithInterFont(); - } } -} +} \ No newline at end of file diff --git a/src/PostIt/PostIt.Android/MainActivity.cs b/src/PostIt/PostIt.Android/MainActivity.cs index 1b413a9f..057703a4 100644 --- a/src/PostIt/PostIt.Android/MainActivity.cs +++ b/src/PostIt/PostIt.Android/MainActivity.cs @@ -2,6 +2,7 @@ using Android.App; using Android.Content.PM; using Android.Content; using Avalonia.Android; +using Avalonia; using AndroidX.Emoji2.Text; namespace PostIt.Android; @@ -14,8 +15,15 @@ namespace PostIt.Android; MainLauncher = true, LaunchMode = LaunchMode.SingleTask, ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.ScreenSize | ConfigChanges.UiMode)] -public class MainActivity : AvaloniaMainActivity +public class MainActivity : AvaloniaMainActivity { + protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) + { + return base.CustomizeAppBuilder(builder) + .UseMaui(this) + .WithInterFont(); + } + /// /// Strongly-typed handle to the current MainActivity instance, set in /// and consumed by platform services such as diff --git a/src/PostIt/PostIt.Android/PostIt.Android.csproj b/src/PostIt/PostIt.Android/PostIt.Android.csproj index 7669ef62..1f865b07 100644 --- a/src/PostIt/PostIt.Android/PostIt.Android.csproj +++ b/src/PostIt/PostIt.Android/PostIt.Android.csproj @@ -1,7 +1,7 @@ Exe - net10.0-android + net9.0-android36.0 android-arm64;android-x64 23.0.0 @@ -24,6 +24,7 @@ + diff --git a/src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs b/src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs new file mode 100644 index 00000000..4f58b4f2 --- /dev/null +++ b/src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs @@ -0,0 +1,35 @@ +using Microsoft.Maui.Controls; + +namespace PostIt.Maui; + +/// +/// Empty MAUI application registered as the embedding host for +/// Avalonia.Maui. Avalonia.Maui expects a +/// -derived type so that +/// its .UseMaui<TMauiApp>(activity) extension can build the +/// embedding pipeline (services, handlers, IPlatformApplication). +/// +/// We never actually display any MAUI controls — the embedding sits in front +/// of Avalonia so that Avalonia's Android platform layer (which is otherwise +/// bound to a stub on Avalonia 12 / present-but-broken on Avalonia 11 without +/// MAUI) gets the real Android Context and runs the surface view +/// lifecycle correctly. This class exists to satisfy the generic constraint +/// of UseMaui<TMauiApp> and gives MAUI something to attach its +/// handler tree to. +/// +/// Override CreateWindow with a no-op or leave the default; the +/// virtual MAUI window is consumed by Avalonia.Maui's embedding and +/// never surfaces to the user (Avalonia owns the visual tree). +/// +public class MauiEmbeddingApp : Application +{ + public MauiEmbeddingApp() + { + } + + protected override Window CreateWindow(IActivationState? activationState) + { + // No-op window: Avalonia.Maui wraps it and never shows it. + return new Window(); + } +} \ No newline at end of file diff --git a/src/PostIt/PostIt/PostIt.csproj b/src/PostIt/PostIt/PostIt.csproj index 1b48c21f..90fdd837 100644 --- a/src/PostIt/PostIt/PostIt.csproj +++ b/src/PostIt/PostIt/PostIt.csproj @@ -1,6 +1,6 @@ - net10.0 + net9.0 enable latest true diff --git a/src/Yavsc.Abstract/Yavsc.Abstract.csproj b/src/Yavsc.Abstract/Yavsc.Abstract.csproj index 7a4f83ae..2305fc8c 100644 --- a/src/Yavsc.Abstract/Yavsc.Abstract.csproj +++ b/src/Yavsc.Abstract/Yavsc.Abstract.csproj @@ -1,6 +1,6 @@ - net10.0 + net9.0 enable A shared model for a little client/server app, dealing about establishing some contract, between some human client and provider. diff --git a/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj b/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj index ade7ca17..c078789c 100644 --- a/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj +++ b/src/Yavsc.Api.Client/Yavsc.Api.Client.csproj @@ -1,6 +1,6 @@ - net10.0 + net9.0 enable Yavsc.Api.Client Yavsc.Api.Client