From a2fdea06e3c62014645cb9fb7f18b6dcd1ae939f Mon Sep 17 00:00:00 2001 From: Matthew Leibowitz Date: Fri, 26 Jul 2024 20:19:47 +0800 Subject: [PATCH] Add embedding sample and code (#23642) * Add support for MAUI embedding * Move things around a bit * Make these APIs public to CT.Maui.Embedding * Update EmbeddedWindowHandler.iOS.cs * Update EmbeddedWindowHandler.iOS.cs * Embedding things are platform only * tests use it --- .../Platforms/Android/FirstFragment.cs | 35 ++- .../Platforms/Android/SettingsFragment.cs | 35 ++- .../MacCatalyst/MainViewController.cs | 56 +++- .../Platforms/Windows/MainWindow.xaml.cs | 37 ++- .../Platforms/iOS/MainViewController.cs | 56 +++- .../Shared/EmbeddingReflection.cs | 53 ++++ .../Shared/EmbeddingScenarios.cs | 76 +++++ .../Shared/MauiProgram.cs | 3 +- .../Shared/MyMauiContent.xaml | 67 +++++ .../Shared/MyMauiContent.xaml.cs | 31 ++ .../src/Core/Application/Application.cs | 2 +- .../src/Core/Embedding/EmbeddedWindow.cs | 17 ++ .../src/Core/Embedding/EmbeddingExtensions.cs | 122 ++++++++ .../Core/Hosting/AppHostBuilderExtensions.cs | 257 ++++++++++++++++ .../src/Core/Properties/AssemblyInfo.cs | 1 + .../src/Xaml/Embedding/EmbeddingExtensions.cs | 45 +++ .../Xaml/Hosting/AppHostBuilderExtensions.cs | 283 +++--------------- .../src/Xaml/Properties/AssemblyInfo.cs | 1 + .../Embedding/EmbeddedPlatformApplication.cs | 60 ++++ .../EmbeddedWindowHandler.Android.cs | 24 ++ .../EmbeddedWindowHandler.Windows.cs | 53 ++++ .../src/Embedding/EmbeddedWindowHandler.cs | 56 ++++ .../Embedding/EmbeddedWindowHandler.iOS.cs | 20 ++ .../src/Embedding/EmbeddedWindowProvider.cs | 36 +++ src/Core/src/Embedding/EmbeddingExtensions.cs | 100 +++++++ 25 files changed, 1271 insertions(+), 255 deletions(-) create mode 100644 src/Controls/samples/Controls.Sample.Embedding/Shared/EmbeddingReflection.cs create mode 100644 src/Controls/samples/Controls.Sample.Embedding/Shared/EmbeddingScenarios.cs create mode 100644 src/Controls/samples/Controls.Sample.Embedding/Shared/MyMauiContent.xaml create mode 100644 src/Controls/samples/Controls.Sample.Embedding/Shared/MyMauiContent.xaml.cs create mode 100644 src/Controls/src/Core/Embedding/EmbeddedWindow.cs create mode 100644 src/Controls/src/Core/Embedding/EmbeddingExtensions.cs create mode 100644 src/Controls/src/Core/Hosting/AppHostBuilderExtensions.cs create mode 100644 src/Controls/src/Xaml/Embedding/EmbeddingExtensions.cs create mode 100644 src/Core/src/Embedding/EmbeddedPlatformApplication.cs create mode 100644 src/Core/src/Embedding/EmbeddedWindowHandler.Android.cs create mode 100644 src/Core/src/Embedding/EmbeddedWindowHandler.Windows.cs create mode 100644 src/Core/src/Embedding/EmbeddedWindowHandler.cs create mode 100644 src/Core/src/Embedding/EmbeddedWindowHandler.iOS.cs create mode 100644 src/Core/src/Embedding/EmbeddedWindowProvider.cs create mode 100644 src/Core/src/Embedding/EmbeddingExtensions.cs diff --git a/src/Controls/samples/Controls.Sample.Embedding/Platforms/Android/FirstFragment.cs b/src/Controls/samples/Controls.Sample.Embedding/Platforms/Android/FirstFragment.cs index 33c949447ada..ad03de135b6a 100644 --- a/src/Controls/samples/Controls.Sample.Embedding/Platforms/Android/FirstFragment.cs +++ b/src/Controls/samples/Controls.Sample.Embedding/Platforms/Android/FirstFragment.cs @@ -11,6 +11,10 @@ namespace Maui.Controls.Sample.Droid; [Register("com.microsoft.maui.sample.emdedding." + nameof(FirstFragment))] public class FirstFragment : Fragment { + EmbeddingScenarios.IScenario? _scenario; + MyMauiContent? _mauiView; + Android.Views.View? _nativeView; + public override View? OnCreateView(LayoutInflater inflater, ViewGroup? container, Bundle? savedInstanceState) => inflater.Inflate(Resource.Layout.fragment_first, container, false); @@ -26,14 +30,43 @@ public override void OnViewCreated(View view, Bundle? savedInstanceState) var button3 = view.FindViewById