From 4a142bdaa3762861e807c18ca8aff2543b6f40e4 Mon Sep 17 00:00:00 2001 From: David Britch Date: Wed, 13 Mar 2024 12:39:34 +0000 Subject: [PATCH] Native embedding samples. --- .../AndroidManifest.xml | 6 + .../NativeEmbeddingDemo.Droid/MainActivity.cs | 65 +++ .../NativeEmbeddingDemo.Droid.csproj | 29 ++ .../Resources/AboutResources.txt | 44 ++ .../Resources/layout/activity_main.xml | 10 + .../Resources/mipmap-anydpi-v26/appicon.xml | 4 + .../mipmap-anydpi-v26/appicon_round.xml | 4 + .../Resources/mipmap-hdpi/appicon.png | Bin 0 -> 2178 bytes .../mipmap-hdpi/appicon_background.png | Bin 0 -> 97 bytes .../mipmap-hdpi/appicon_foreground.png | Bin 0 -> 1276 bytes .../Resources/mipmap-mdpi/appicon.png | Bin 0 -> 1524 bytes .../mipmap-mdpi/appicon_background.png | Bin 0 -> 92 bytes .../mipmap-mdpi/appicon_foreground.png | Bin 0 -> 1273 bytes .../Resources/mipmap-xhdpi/appicon.png | Bin 0 -> 3098 bytes .../mipmap-xhdpi/appicon_background.png | Bin 0 -> 100 bytes .../mipmap-xhdpi/appicon_foreground.png | Bin 0 -> 1805 bytes .../Resources/mipmap-xxhdpi/appicon.png | Bin 0 -> 4674 bytes .../mipmap-xxhdpi/appicon_background.png | Bin 0 -> 108 bytes .../mipmap-xxhdpi/appicon_foreground.png | Bin 0 -> 1926 bytes .../Resources/mipmap-xxxhdpi/appicon.png | Bin 0 -> 6832 bytes .../mipmap-xxxhdpi/appicon_background.png | Bin 0 -> 117 bytes .../mipmap-xxxhdpi/appicon_foreground.png | Bin 0 -> 2801 bytes .../Resources/values/colors.xml | 5 + .../values/ic_launcher_background.xml | 4 + .../Resources/values/strings.xml | 4 + .../Resources/values/styles.xml | 7 + .../EmbeddedExtensions.cs | 80 ++++ .../EmbeddedPlatformApplication.cs | 49 ++ .../EmbeddedWindowHandler.cs | 32 ++ .../EmbeddedWindowProvider.cs | 27 ++ .../NativeEmbeddingDemo.Library.csproj | 26 ++ .../AppDelegate.cs | 15 + .../AppIcon.appiconset/Contents.json | 117 +++++ .../AppIcon.appiconset/Icon1024.png | Bin 0 -> 10753 bytes .../AppIcon.appiconset/Icon120.png | Bin 0 -> 1155 bytes .../AppIcon.appiconset/Icon152.png | Bin 0 -> 1381 bytes .../AppIcon.appiconset/Icon167.png | Bin 0 -> 1503 bytes .../AppIcon.appiconset/Icon180.png | Bin 0 -> 1558 bytes .../AppIcon.appiconset/Icon20.png | Bin 0 -> 352 bytes .../AppIcon.appiconset/Icon29.png | Bin 0 -> 422 bytes .../AppIcon.appiconset/Icon40.png | Bin 0 -> 537 bytes .../AppIcon.appiconset/Icon58.png | Bin 0 -> 700 bytes .../AppIcon.appiconset/Icon60.png | Bin 0 -> 700 bytes .../AppIcon.appiconset/Icon76.png | Bin 0 -> 870 bytes .../AppIcon.appiconset/Icon80.png | Bin 0 -> 888 bytes .../AppIcon.appiconset/Icon87.png | Bin 0 -> 942 bytes .../Entitlements.plist | 6 + .../Info.plist | 49 ++ .../NativeEmbeddingDemo.MacCatalyst/Main.cs | 6 + .../MainViewController.cs | 130 ++++++ .../NativeEmbeddingDemo.MacCatalyst.csproj | 23 + .../NewTaskSceneDelegate.cs | 55 +++ .../NewTaskViewController.cs | 67 +++ .../Resources/LaunchScreen.xib | 43 ++ .../SceneDelegate.cs | 67 +++ .../NativeEmbeddingDemo.WinUI/App.xaml | 16 + .../NativeEmbeddingDemo.WinUI/App.xaml.cs | 34 ++ .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 432 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 5372 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 1755 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 637 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 283 bytes .../Assets/StoreLogo.png | Bin 0 -> 456 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 2097 bytes .../NativeEmbeddingDemo.WinUI/MainWindow.xaml | 29 ++ .../MainWindow.xaml.cs | 85 ++++ .../NativeEmbeddingDemo.WinUI.csproj | 63 +++ .../Package.appxmanifest | 51 +++ .../Properties/launchSettings.json | 10 + .../NativeEmbeddingDemo.WinUI/app.manifest | 19 + .../NativeEmbeddingDemo.iOS/AppDelegate.cs | 17 + .../AppIcon.appiconset/Contents.json | 117 +++++ .../AppIcon.appiconset/Icon1024.png | Bin 0 -> 10753 bytes .../AppIcon.appiconset/Icon120.png | Bin 0 -> 1155 bytes .../AppIcon.appiconset/Icon152.png | Bin 0 -> 1381 bytes .../AppIcon.appiconset/Icon167.png | Bin 0 -> 1503 bytes .../AppIcon.appiconset/Icon180.png | Bin 0 -> 1558 bytes .../AppIcon.appiconset/Icon20.png | Bin 0 -> 352 bytes .../AppIcon.appiconset/Icon29.png | Bin 0 -> 422 bytes .../AppIcon.appiconset/Icon40.png | Bin 0 -> 537 bytes .../AppIcon.appiconset/Icon58.png | Bin 0 -> 700 bytes .../AppIcon.appiconset/Icon60.png | Bin 0 -> 700 bytes .../AppIcon.appiconset/Icon76.png | Bin 0 -> 870 bytes .../AppIcon.appiconset/Icon80.png | Bin 0 -> 888 bytes .../AppIcon.appiconset/Icon87.png | Bin 0 -> 942 bytes .../Entitlements.plist | 6 + .../NativeEmbeddingDemo.iOS/Info.plist | 42 ++ .../NativeEmbeddingDemo.iOS/Main.cs | 6 + .../MainViewController.cs | 88 ++++ .../NativeEmbeddingDemo.iOS.csproj | 22 + .../Resources/LaunchScreen.xib | 43 ++ .../NativeEmbeddingDemo.sln | 173 +++++++ .../NativeEmbeddingDemo/App.xaml | 14 + .../NativeEmbeddingDemo/App.xaml.cs | 10 + .../NativeEmbeddingDemo/MauiProgram.cs | 26 ++ .../NativeEmbeddingDemo/MyMauiContent.xaml | 32 ++ .../NativeEmbeddingDemo/MyMauiContent.xaml.cs | 29 ++ .../NativeEmbeddingDemo.csproj | 44 ++ .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107168 bytes .../Resources/Fonts/OpenSans-Semibold.ttf | Bin 0 -> 111056 bytes .../Resources/Images/dotnet_bot.png | Bin 0 -> 69811 bytes .../Resources/Styles/Colors.xaml | 45 ++ .../Resources/Styles/Styles.xaml | 426 ++++++++++++++++++ .../NativeEmbeddingDemo/README.md | 25 + 104 files changed, 2446 insertions(+) create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/AndroidManifest.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/MainActivity.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/NativeEmbeddingDemo.Droid.csproj create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/AboutResources.txt create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/layout/activity_main.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon_round.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon_background.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon_foreground.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon_background.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon_foreground.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon_background.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon_foreground.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxhdpi/appicon.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxhdpi/appicon_background.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxhdpi/appicon_foreground.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxxhdpi/appicon.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxxhdpi/appicon_background.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxxhdpi/appicon_foreground.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/colors.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/ic_launcher_background.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/strings.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/styles.xml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedExtensions.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedPlatformApplication.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowHandler.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowProvider.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/NativeEmbeddingDemo.Library.csproj create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/AppDelegate.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon1024.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon120.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon152.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon167.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon180.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon20.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon29.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon40.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon58.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon60.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon76.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon80.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon87.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Entitlements.plist create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Info.plist create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Main.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/MainViewController.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NativeEmbeddingDemo.MacCatalyst.csproj create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskSceneDelegate.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskViewController.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Resources/LaunchScreen.xib create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/SceneDelegate.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/LockScreenLogo.scale-200.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/SplashScreen.scale-200.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/Square150x150Logo.scale-200.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/Square44x44Logo.scale-200.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/StoreLogo.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/Wide310x150Logo.scale-200.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/NativeEmbeddingDemo.WinUI.csproj create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Package.appxmanifest create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Properties/launchSettings.json create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/app.manifest create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/AppDelegate.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Entitlements.plist create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Info.plist create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Main.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/MainViewController.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/NativeEmbeddingDemo.iOS.csproj create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Resources/LaunchScreen.xib create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.sln create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MauiProgram.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MyMauiContent.xaml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MyMauiContent.xaml.cs create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/NativeEmbeddingDemo.csproj create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/Resources/Fonts/OpenSans-Semibold.ttf create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/Resources/Images/dotnet_bot.png create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/Resources/Styles/Colors.xaml create mode 100644 8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/Resources/Styles/Styles.xaml create mode 100755 8.0/PlatformIntegration/NativeEmbeddingDemo/README.md diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/AndroidManifest.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/AndroidManifest.xml new file mode 100644 index 000000000..3fead98ca --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/MainActivity.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/MainActivity.cs new file mode 100644 index 000000000..47364e334 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/MainActivity.cs @@ -0,0 +1,65 @@ +using static Android.Views.ViewGroup.LayoutParams; + +namespace NativeEmbeddingDemo.Droid +{ + [Activity(Label = "@string/app_name", MainLauncher = true, Theme = "@style/AppTheme")] + public class MainActivity : Activity + { + public static readonly Lazy MauiApp = new(() => + { + var mauiApp = MauiProgram.CreateMauiApp(builder => + { + builder.UseMauiEmbedding(); + }); + return mauiApp; + }); + + public static bool UseWindowContext = true; + + MyMauiContent? mauiView; + + protected override void OnCreate(Bundle? savedInstanceState) + { + base.OnCreate(savedInstanceState); + + // Set the view from the "main" layout resource + SetContentView(Resource.Layout.activity_main); + + var rootLayout = FindViewById(Resource.Id.rootLayout)!; + + // Create Android button + var androidButton = new Android.Widget.Button(this); + androidButton.Text = "Android button above .NET MAUI controls"; + androidButton.Click += OnAndroidButtonClicked; + rootLayout.AddView(androidButton, new LinearLayout.LayoutParams(MatchParent, WrapContent)); + + // Ensure .NET MAUI app is built before creating .NET MAUI views + var mauiApp = MainActivity.MauiApp.Value; + + // Create .NET MAUI context + var mauiContext = UseWindowContext + ? mauiApp.CreateEmbeddedWindowContext(this) // Create window context + : new MauiContext(mauiApp.Services, this); // Create app context + + // Create .NET MAUI content + mauiView = new MyMauiContent(); + + // Create native view + var nativeView = mauiView.ToPlatformEmbedded(mauiContext); + + // Add native view to layout + rootLayout.AddView(nativeView, new LinearLayout.LayoutParams(MatchParent, WrapContent)); + } + + async void OnAndroidButtonClicked(object? sender, EventArgs e) + { + if (mauiView?.DotNetBot is not Image bot) + return; + + await bot.RotateTo(360, 1000); + bot.Rotation = 0; + + bot.HeightRequest = 90; + } + } +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/NativeEmbeddingDemo.Droid.csproj b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/NativeEmbeddingDemo.Droid.csproj new file mode 100644 index 000000000..d39fc34e9 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/NativeEmbeddingDemo.Droid.csproj @@ -0,0 +1,29 @@ + + + net8.0-android + 21 + Exe + enable + enable + + true + true + + com.companyname.nativeembeddingdemo + 1 + 1.0 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/AboutResources.txt b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/AboutResources.txt new file mode 100644 index 000000000..219f42544 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.xml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.xml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "Resource" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the Resource class would expose: + +public class Resource { + public class Drawable { + public const int icon = 0x123; + } + + public class Layout { + public const int main = 0x456; + } + + public class Strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use Resource.Drawable.icon to reference the drawable/icon.png file, or +Resource.Layout.main to reference the layout/main.xml file, or Resource.Strings.first_string +to reference the first string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/layout/activity_main.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/layout/activity_main.xml new file mode 100644 index 000000000..66fe256eb --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/layout/activity_main.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon.xml new file mode 100644 index 000000000..7751f6951 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon_round.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon_round.xml new file mode 100644 index 000000000..7751f6951 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-anydpi-v26/appicon_round.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..0abfc1b581c52b479e48d5a33b56e27e03eaa867 GIT binary patch literal 2178 zcma*pX*|^19|!OmMpZ1UX4wv}K|=z=Lls{e_C z$08JNAQVE~&ENakd?Xsw0|(Dv+Pwhib_xK~PO$=XP;5GU0k$13X3wm(%dvg(5uD)^s5Q_)kK48qG7eeFSQOAs~s-ZIsuTiNacqnu!qLVnZ~e8 z6fD!zjOt<1?Qci*$5Jus^_CjXFzU5dnsr!>Zk#$5r#^twpyD*U@#-|Z1{JSC!)sCr z8Z-jXnlu7@fB+vPYSM^s0Nox=vj_St&HgOi0iZ>9(55?T(H((4M|T3~02m}4Itge5 zorGYJbQ#VFhO;i+S(o7g&||oqXSn{tbk%3L>NCmu3^LFL46*^!4RC?!4lrbT0E_@E zkBdxC0208ujAVHMj9K0&mbVFj?QP1Yn6N0O0JaanjOAm-_BChwTClI6+5VOz{#GM_ zHh|GPA7-Vq}`fHyFHs3`SnrMY~H=O zyx6(?xVeJ(xzf~cWhvjv(-&%T78@QfHWn{7l>nBSN|#<$F1J>5-Zia!c)t4K#cKE4 zA3be9s2_d|efml3;nI4!^jRQ|23GN<& zfzi?N|IYp72kGe<85s}%o!s1_qN0}8*4G^!ot>D&hHpV2k&~9@CibNEWs+NsgTo=Y zkiHr}H$1J}H0fDD9LgNBAtoX%1>wnXCB7GNKNHXX!#x5ygySCbv=Z|*eWW%UV(uqT zZs=i0q#S=X=Mu3Tve9~4iaXu?&35rG?>h<>a0#9hai9#U6TA=`x9&Ky0G!@L^yzYHcU&K{Py)G zLq6-*fxXOv!?welF6qsPbDF(gEd^wBf!Q)^vjnHg8~Ix(t)yvMb6b7l6vl4p)cW*HIltJum<+)k*W zHo}Wa;Ud;GFS_NvDJQl`#2U0Up;gDNu?dp?;<26U5-7LH#_qqd)p- zccS_T=v4HYS5U6dq&S$j8z64f{A%x?&{$P;0be3gPK*4UOaK~>3XW)4%VgA!XybAAt)HYL)Mt+#=a6cFhdtQt${mqN+7U|-? z_<`)<(amvE8yV5+glVrQs5&WuHb%=TDYtS;UXAR5N%s8SJT!818z=O2wyVGjT(FF?Zz#n*UxoPaRsDGjGdR)4pr=q zbo*&o@a`c9p^aR2!Q=q+Rh8JGY`8RZ7;XkX8j+*-pMO>Ur*l(7W9nboXX3Buji8fyZ#)?YxEgF%SbJ1`@Ck~237#Gy zqjHz3vOcQMqZ=48<>a|n^#c=i`lC|wDB4*(J+{WIOSfttk<#l+jO;?n3=__bCj1d` zrz@E>t@IUl@+~{jRsykzb`J3O9O*Fx4W>$deB*HP(Y(7cH86jgRVSUs-(KE*8ho5p z9;IHuE*zR-u{~~wGda|(edsRgOR10HCC$=lecZ};te@ZP=pC8&#+*LinUJ>4&Du64 z!-ywSoaWpIoxlHHP$4IruD6G2AM>dkAb~bJ<2CN>KW#LW7qKgG>0QFT%)aE!U!Ma@ M3#@s)spp^n1!tBY8UO$Q literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon_background.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon_background.png new file mode 100644 index 0000000000000000000000000000000000000000..513e69d8412c314411a5940370e552c59fd6bbef GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iu>8A$%HX^8+*%mF?ju7TQDY)?)43FJz8x;TbZ s#JxSh$P45hQuw`m+i~{Oj0_A9c;7HE3Rk-M0EHPmUHx3vIVCg!0A>pr+5i9m literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon_foreground.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-hdpi/appicon_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..99d3a291bc382dd1afc9c28845623ef77fc14c15 GIT binary patch literal 1276 zcmeAS@N?(olHy`uVBq!ia0vp^i$Iuz8AyKBd8Wz0z&InoC&U%V{XYr@UkDtSd^H0Y zH|-@se!&ckOe}2d9GqO-ynOrufrHF3KJ>D89HqxGL}xr=zmy;bgN zx63@@DR=GI;fEeA@((>McJ%&v=#iPY_{nRVh-}?F*E4fh-A!6HUF8_7wWpq>$Q$eb zGvBM+7LJSjp`O&CvhJGlqrE!UE6z$51}^S!p8q4E?0VmdjK%%jWlvuC+wI9(FS;?@ zvAgVu-D5HNP2z91cjpQI&J3T`fBN>@j#;@S_L6}I(`qJFo4AMEQIg#JC*|*!Ev{b$ zS3cIZuYNv#>x_7hn^B@UB^Ote7Ve2PT{Jn~v-`@gYg((_A9s{IVCO&C_y5O|$Ke|; ze*1rF?rOP>6O7N!Il14}T4bw7tft&F=1_AhYpE@jujC3FbdGTzjLW-T^PtT2qgMN4d(KVlG}dif;>xv_d)b$mJKy&y969dXCzfl@ zbv4RFef<>4qVmP}Ildjx&YXDbnU>O~nssN4!=rNqrtzQMB$jFMxF_Oa>uNz;?Iu;} zRNYDWw+i*Vly+^ucGcy!(CrVA15qy0|sZ#H3{cP!MwQcHR-A5lY7I7SXbX5G@ zv}OA$dX9SA+e~G*%GkSQy4hv1_~z->Ea*vvfuZ5Po%ec+%^8`mKyse0elF{r5}E)4 Cmmqim literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5a2e2bf8dc4d63e6490db8b5e269a63b05841e GIT binary patch literal 1524 zcmbuF_#Nit)318A1FIm-vIV1Z-!VgR-uhUEv+lI3T~_P1pDgS29kfun4) zHNXk5W(R<@VF%c70&UoVAdj&Fk8y$kTTU=w2XN2YbH0@V?Lec`VHdE%OU zab4j|U7@6|NJ1--y!=DbP%3FClQaV5(k7rn+FU7Zu9CJ?OFJ9px|-*EUM=+ewfMGe zVW4a2L(dmhFU0DD*g!wT8Gv|$(D2am7<*-WY;{7gD*C)OBU+b;)}_n{Pf%{HFkL4?W4!xeTYB9xR>RMmFv(bC@g z-S@^OC=}WpN2hmmba%gd_x0-r*!iEiqvFU1*LMStbt1XmX64W?AaR;$?U>`6PBnCe zF&rYilOdOs+J-eWOv3i{F38)%m3ZC8S*i%deF}rMd+PTNQ%0Xw+bWD=I2?;OXXn#Y z)@ZYsSxpQ&KEI_eUrhY9GJ>ynkTKT148NB-W0~Icyf>uDUZq&Efd*YO%F1Rgg^W;W-f!C|S3yjxGz9~$7(;As32%PB~J%k0Rd zY2u(Vm(doK*81`p4M*q9UF4=hj8=D+VM(&kwq-`Eyf%4|%Nct8q7q@Gt(~cmambzh zmaM5ZMea;3JD`z_oR-gI;H@mbO0J-_u9e|80b+qHnxT zBA@)pC^*`wzLs$3ko#{+5qW-hgQ={G<%I0q`O8NvNkv??BPHF+KVKFww{?N zV_dmhf#8N_$bsjoK3837EBIDTRo9N}F*B`0B|iAb zD|r4iIIv4mPBvTl!X@AD{DagK?Gk;njB53r23AiF`$Ve`nFdvkFJn4W2%o8KNX2GE zkW@&bBIWBA+Kpm|4I9+M&S{KZ+Gi%<7Cw_?u;H|UDCA6hQ4W1)MYEWV&Vm%*8Pu6eERqL0_sU3kz5}2=pso}G6 eExkeq-7T16_EhYylCAjde>WcIfvt6>-24YipY?nI literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon_background.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon_background.png new file mode 100644 index 0000000000000000000000000000000000000000..9e2d1e4d8d4ec9945deffbde04bfd430830a62b1 GIT binary patch literal 92 zcmeAS@N?(olHy`uVBq!ia0vp^IUvl)3?#R%INArKm;-!5Tm!YQ*q)m76UY_uba4!+ nh)Z4|B*D5kL8PZC(1449Erfy5Q}4VcP@cil)z4*}Q$iB}vRW1{ literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon_foreground.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-mdpi/appicon_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a28d342c1c7106283d3e5b6f03f2d761a9d8a28c GIT binary patch literal 1273 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz3?z5#SpJ`Zf$@5PPlzj!`+pP+yAX(+=)M~m zwR1{>{DK)CH+t|g2}(z@oQn2o^7X!YXa9vg@0d-0zwy+(`*QL zb&^Bzm*{6M>%wmi)7h^dw>a|AmaSIJJaEBx&MQCczN%ZDWwmkI>DOt$Mc#Oy-23uf zCMP5|3r#vWe?zfLO2D%x8ZQ>MOWu?{bID(M+GXbtTgA@l{JG!X+v7G{TyJks?$dk0 z528YJj}_FVcN~&ZS}!BJ#dk3S1Cyzzi(^Pd+}kTp%V#Hu9C+xx=Ik+#?P(^W8E%_& zw0!UGUH$sbT_A{kFK?|;l7Hjn&2x<(QlHz!Klt#p{N8ESANvKJI22n1K*WSIJm)|6 z>P&e5@MoQUL(H+&Ox-_xz3!}y>zel=bgx)awRy43^nFa;QO_*id9WO)o|D{kv$5>l z8=pH)YjRjuMcqCS5a0RY(~6BnDeJ!W-*wnLd%Mo@G9Eqg-Luz3Z29(;vgO@&8Se7jc(rQ+rLUz#?+3p9rPo!Fba3s>TiJ$XRy}9qU6i-U70wlme$8Zj zU+c(K?Z%A)))uV~cU6fMTZ(xrzw_!%%8QpXdAI*q%s2mSzLpIUdxQH!|2#t$n3dPvGv`=h)ae{F+UU^E$3K3FBI ztDWytI(Bc9;j2x~oMPISLN=Hl`z{~ARrXKv^EDsEXn|+R2d_zRC(r*CCDPz?evg6X zVWIO43LL^&G5^%gaPO}bcQm$DSQc)I$z JtaD0e0s!klQ0D*u literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..b28b73c65453fdaf28b076d881696793e8c9bbee GIT binary patch literal 3098 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 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon_background.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon_background.png new file mode 100644 index 0000000000000000000000000000000000000000..658be3fb6a3bf5656c0a725e6a5fca3dc6cfb7e5 GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$?8Axt^w|^awVh->LaShbIVtZ=RPas#u)5S5Q sBJS-0Lq;I)kizff+m7l*@B!Hj3>M-G7#L-mj@N)Vp00i_>zopr0REvH0{{R3 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon_foreground.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xhdpi/appicon_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..70a542ac03c49ac1b30da6135d8b48016e1017fe GIT binary patch literal 1805 zcmeAS@N?(olHy`uVBq!ia0vp^H$a$!8A$H?clSO61Cx1xPlzj!`+pRSh5(5nkh%M5 z5isfODGBlmW?*DuW?^Mx=iubx=HcZR5E2#<6%&_`l9rK`S5Q<|QB~K_)Y8_`)zddH zG%_|ZHM6j^ws&xJa&~cbbNBG{_VM-e4+snj4hanlkBUxAN={AB$jr*k%P%Y{E-A05 ztg5c5Z)|FAY3u0h>h9^AFmck<=`&`|nLB^sqQy&AtX#8h{l-n3x9!-qci+K7hmRaP ze)9CW^A|2%zIy$}&0Dwc-n;+c@sp>|p1*kc>h+tq?>>C|^!dxzZ{L6X{Pp|K-+x{m zR}C2$m`{4TIEGZjy*a?h3G@}y0=X~$bFG=q8Us0~V8P>KclIyrT4b^B`9TwA?-nlw zuU-Zv*UZpmOT;}?Lnj0UtEM>9Nm0d5rd-|$=+PS|`*DYV~ zPQNzm{I7X8v*(}GD}J%+@y&zL{5rbDs}!b~g&ddBciU)Qd61z{T(Z4>^0KDhK##X) zCe5mNZ8$mPW35&0kL%|@tTvW=aOgr$!>PZC$s)h5>{B_+xvy%?M6J5BOL`l`toO&M zGmH4&WGzWQ-PU}w{cnS|Df^n478{PTEBT(Wo2?aO;NAcJSO21)?`5LT3p0LlpC(zQ zy-DJNLnzx0hBJ2Mv3e6En7?gvS$y*3#f%U8AA5df=CIy$W~X&yLaDkY`~16H;SD$K z)Yn;W+?F9QA&ui8*HWG8=7T<07UkdCV`O+(>+Is(>9d<(3cNY2w6#aPVvR=+^EDr_ zh_4-IcSckvxlW6C$!ol=X05#b4Mnz|HScen&5hk5X`}kowU(}3w_j{M|43$iYleZ54`@ZPsiM0n0?5+^}tno=mT*75r)I=4(O}7G7gngVi&N_MB@mZa^J^j5_|J|lf(~|%0%QN+Z5Px#L#d(jT4PT$7Zxqoj zFE=><`Tm7n%LPt)xMo+sWx8i+e8iB&I4(*)F5wRA2YF$?=GGR@xT6Ig$$x zdgOoC$b4s!D!uFDJIhI)A9!b}uD4nxd&`IW$^8X4xumxww$6CA@RY{RIZEOzljqGn z&ZXITwB&`Z*ynBsMS}^Yw>-RbHp$xO^)DBYXgR-b>WsRgoYtuCI|Y1#KArA6CCt+7 zJ3uQ9SY-sPE*kW{P3+Pq{}zwl&c|3xntK9yRvd$@?2>^=dTh9Oh literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxhdpi/appicon.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxhdpi/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f9af1173ead9da4de599b034ca8c81aab47fda54 GIT binary patch literal 4674 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 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxhdpi/appicon_foreground.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxhdpi/appicon_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..cb63bfb9f8e0d0578ca53d46cf8cfeac7cb44689 GIT binary patch literal 1926 zcmeAS@N?(olHy`uVBq!ia0y~yU~~at4rZW8hROCX3=B+S0X`wFK<@uhFd71=At2GU zlnIzJHkJhW1v4-*F|)9;v2$>8ar5x<3kV7ci-?MeOUlT~$tx%-scC3x>FDVj7#f?J zSy)Xy8X(l0c=;%+LxT+jdb^;JJsEX%lga^2i-CW5Ys40gF2FR(T>X$vT8DJ6s~=+f!R z7I8G;($dK2@rn&#jC6H~DRg&r)mR$Trn&U#Kj+{{RmTjb+>3V7DZcmR^p?5${`bE5 zR4;4QRGNA~>E_eKgC&RTJ(C}*C^8gu7Cw*qqOfUx=jq0Z!c^r=)yMt|Z?u~w5X&m4 z93*^mbEu%Q(4zHz5)%ai4ULmroKn_)1c|(NIMT71JB@E+)KgZmUtct4o}2Mr+EpM} z@L>M_4FNrj4Lv{4$Jh0@HETUjb(L1C77>mV-dlMsvucn;-G3{r^l_Q;xtX~+^ zvV=@lZqHIO4b<}e(IId+^HqnU{kbbHKP~3WbL%|r_V1um$GpiCZZr#>Q@X0w=Az<~ zFX=FAQ5Q3lugZ}kh81BN_qrbDDk+`|VL0%rZcD+_BJ+s?=UMu?YdbC`KFU#2{H4Ww zyp8S13_am2B}Jz<3|S|nTLd@-{d|<%C%67PD(GZl@7Q;r)v4o(ON4osT)r;TYsUPE zuBK^o%LEoCaXCuy{OR~NeeSBt9c53I=kZn@`L58RUH>v{SzidRso*ycjtjEdEgl`e zv{*ibaVZKZ9kF$1IG?8I;?&YC%yA({)n(qnrc76cn`$i{zAdKB93K=tIVK7`oY2D1 zYXwxbWt(zCvHkUbaF4V6j}6D^c0UO_gyz9-xj8$EqO*P z0;%`Zgcki|ywoGg;P6dE9~cUgxO0CocLSh7P16Add z&ZZucJKxW-w1tDgytckNDEWbV%eR}rL?`j=^=#H+tuDdMDJ&Cmm^yAMcbgfmx#D7& zv|ng}^`C=HJJ(jaoL(XHpxCHh_~56g*BzREss|oaF}j?PylkRgc;e cRV*+t$ftaLdFqvjxFSfsr>mdKI;Vst0Fk9dIsgCw literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxxhdpi/appicon.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/mipmap-xxxhdpi/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1d948d6b5d88179d9aaae8cdfc063f9fe8e08807 GIT binary patch literal 6832 zcmb7J`9IX(_kT^Jv5hE|eXS7hLP!)dL`uDll!~ksW6e@_W(E}{8EquYByUSul6{#O zQK2x%5;0>Z!wkmEV75>F1>eW_hjY)pkHU%k1Mq+HE*4+sx%Lm_5VK6d)JxvGxOagNfT3jnR^A8 z09(*=-P}>GFK%}H4rg?MTFGqUdeS_VY^^J{gbXgbURaIDP}RDSZQ$K@Ph9r@wOL;D zA1Fl3+xByg`41eB{Q<2>f+gPyv11#)8u?wev)OXIN9Nabl$?d2HQ^%r^eAo?covfv zsj_jPw!fnvS`~ON|M_%%8c`VWf}BPDSjOu8_j?qnA?8bddwqfr!$0b_Yd_)GotTBD zutvnu@4Zsr+4x!ai^t8b*i!;3)0cT{r;etYJOBBfUWh&4uJp=thPA(S`$&zi4*@a! z*C?p+eACq{g5V>rfhVt?r9AJNNFljQ2&P%3^Cz?Pqv8-pDlaOyZTbn3B4BWX_;AA&t8oMvSHu4iv z4kdXww!@V|7(O}N+a|i#0>2sN{Y$TKGm!9zbZ~;;`=}*uMR#*gWdF!dTe6PeOJAEl z-R*tLBT`9Yob4A}c-i5P(>U7p{pPX=NnwaZg@)7lgo1Gq`gBL$$;J617;53`JJT|s zhSimp&%Ky_lJzdWQglBq8T2yL0DeRiY@^6mfqEgoz0g~TxJJ|UY*rcBQ+l{rT=P&$ z?qZ0XaPsw%2LZ(|a2MD*SfQvla9wbo@@$C47Ybos9o-lgtkFre#^T%;kFSrshYNn+ zp4Ap(cvNFy|6*}?f)UtG;On$0@_Ql>vi7=KUR_U8MekdsrppE^(1Vz7Yz5Oy(X7@E z-H#4gm)hlunyZsgn3b~ znFX4He>Tp)8$mw|OdGsL)mawx8$fnGJ&!g<_V9Lj&xYibdU6A!&^L;NfhYP%vG%J_ zjI1zMu4l7f+3n^NK73JX(guA2fh>31Y)epoctA6vp$4sYolEx8K&Q#CpH{$M9#O@A ziIR5w_a?BjlQ9myyhR6%(=#}#_<^e93BMcTE~e)x?Asq2AQTiD*_F9`xD#i(bVnVA zFcL`>ylH~PlnZ~D9V_wgWz^3o-uVFciv!j36yO`93#7;xT3p|aEFZvw3VSW?nox^Q zUg4&E161QMdl(k*^f+mJ=gu3);f5Wm_|z&$!)oWE>}CDfUwrh4jxR^FKxJMQTk_0BPGTv*$On zt1S`@05~%)A87VPX&Q2$LCAtzjc^GCOcbQ#QJtvHbZFu!d5m$Z{PP3ndRQ5*;K$BO zOxhs-T|evrT{=ssrUH>aA8_QUl!3$kwNEHg@!(XyAe@LM1kCFD_@U>!DoN~Od(}fm zaOF5mf$?>2I~&Lh27(ajmx?$snVy-nw@UnoCRkOUFliSy8T2*NHSIDOTCD^Z2Vd?q zz-+dlD;U(J9stxWh^B+=H^{=P?{kC;W8gv!s6lVoei;G;dnQ3{J#9%~^A_DoM_k@O z|Dy=s>N?s{ma)-7T9Wm|vJr9W#GEZ*fV(#7(usLt+7wgh(dlVs<}Zb}X41kF0Cq9` z88!X{e{M+F<%f|Nf=j$$(>9@lSylqP8?FT|1jcc*My=4M;f2_utgB4BM=%v3-3)qED}9wN?Pj`Hm6Zut%U$D zVm(E+B7UQ+M(m`v?FPA5?{2>ig{-nUJ|^hic-X1}HP#9u^O_^K#t&Xmqc3MH@`V#n z?1M)5!&?}IJtdV2TYvn>{D%l|XF&YqDOl&i!VpgvnQ(A{ALtU5@L*{h?u*WO(IYsR z0`e6}-u6}}S)uuKM2ox^-z&890fHu{sx4HN zi`pb#pnE$8dj?fYgjEVjI+1ahaH&-N)a|g-s7zU^P66rLGwMA93=YRI`QASD#}yR@ z!QxnJEmWLlLbQUqG8I-H^oN>TH#4xT z>@%zM#IQ}}GwHUR<+?~xGIf~0gK`}Ff$l}a8i_Z~l zv=QJqxM3n+T^^wJ?KXj6t%SD>Fl8C!L|zLN1D2bYDxDBm!d&Xh_IY9aKN-ONq$Y0w z`^I3IP`vVrLUGe;0NTd_$FDTh21P1$E>L&;1P_KDYenMn>z=4t9C|_8^hSc?S1HAK zp0Pm_#sAIPuZpfN(?VQ{a^nC_FjvFs3l2$)N3E*1&M~UxCo}Zb zs&9L471eI(#Ti8w-T89i0eXT!@8XRSD%?NlF*!kgnnKi8ez!0={rSFyC{iQUoSn(x z)SySShrjy7HH9bN?6KeAOgPqFH(T$>0WIAvAb{6giknXTVPTT^Okw}($*KD$aQZp@ zG!Tl5vpa@6|I1&0?sHU6(k@y%4862v5wUzqgIANKyFm_t=tw;QEl2+*!EDg_admd0 z;JYSpOtod;e7%tpKA}UL5hHB#4JM*bDXFK<=2B*TFpu}!HOZX^4+lwSgN#iuI_u2~ z3B%nfhH(3tA0DVh+%g1f6HRha-3|GmlCCvd9M{9<@dMys$0BoEC4hJ9YHu0B=*}?G z1OsaDO|Y5gE8Gu}hu`w>blNex_E~yYoI^yCyqBxUK`gmY`yQyU$YLKJt*PWC-q#_Q z^D9c(uge&y6AcL-Kb^ObVF})B`H_|e8u)fQc4kPh^#%BEJ(Y1=f&@7cKY5VJ@r+wL z@ZSH*^;`1r`}C}vnEBRz*h?wA^3*5J8WK0VZPLmiCbVwz;34jM$sX!9tix)Xy@k#MFeX^^qL_CLPm#MD|(5y_w@GyKM2%zNq@{4 zV{^=$sNO0=zkD&DHu4E@lEScc@o@>c43-oYq|1B?vNzEnNG~yu183MT#HL)pw{UoB z`%Q@gs26OyBoFk+ET7R6l#~dSNup<{fJ=@n8=sxwmMdjdDNWLq*ilIe9cg8Zps>)P7YdsBeE|*mN$vr(pX7a{oN12^A;k>D28PhLUv|J|SVcJ#0>;{Z z<8)vQeAWQ&Lo|T*`AIiriJAhU;GajyveGT>JR_12mjQ>i{sM&DvYU!~bJ$y$NrL4u zXloj;U=jBilI=hWyz>y;Z)o@M~i*(n0LOu^&aIe0h8|C>%H5*4_Hlx~#aQNgh)TLP`1q zz0W*I*C%Y`@yEP2GLYa4$jVx%Fh7QBNjvKBZQSxPXpzGtt&gWzD-BdwVC*3}4=6J@ zUjsNjFW(6YkExV&G7J zL05nbEFWr+2MgSHfM@`Yc5_O@Nu&5t9c@`~%}(ito*34?P>7f-r{giG#pG0Hy=arU z$NLdJ_ahW@l{b0f=u)TxW=4Q|5*4igar^=_IZ`q=|GbCwRaTxJ-1I=4B4?zP6U$!2 zN|XG+4YJg4j~OfdT|lK^{s4{UNqJ#4=iHZ@l{exs)*F!lYXBKL#A^9UhC^W;Vq6&FZoeiJ2T!gBtDavDfo3a>fV*UtM; zUthd+&{3=jRs`*9W6T5clU*sJGvb@Gb#;TReE0i*!LssE%kIHYyr%0p@T{NUAIMp~ zn;83c;3?E`$NBg;BfWu2)zeZ~Ze7G~NQrMtTGZS)yE`J$5hB(E%7tQgj4xEXUIZ`N z{H>9)RfjDte$^wm#7mMV4X@FD>|jU=SUAcXdwCvSOpo4#f{ipctd7KQvg`RuK-Zz1 z7o~ZizMZ5~4Ehd3I8bfb<%8L?RkNGF0E^bPOTMWs7NWdXT`s>iA=P>y5g+134*JvU z&wmHJjp5g`M3M-Euv#y$$bH`0EdY-|#HC#6jk|lk$t0ou@qQX=L-RP#@!NS}#OLiE z5*p(X8Fk{o`Ih5V4Th+-)n*-Pmn-fd&2<0DJn?beC5ebz#52f(N{-ByiR;=4R#RZ) zMWspP;-T1A!eMRU{g1wL$bt2Nygy|t-)$`J4k*NdlknEur<@%c5uJ8@ z_QCO`BR!V@BMVhTxN{7lIBT9Gr`z)V67yV$hao)utbKt+Wv}!eR;?z9>~87Z!_j^Y zTFl9Ba++t{5x6`BT~;UUhhQkbX1)UgOHw#Q#{k-T3!^xC8M9%&+f#yN%R=qVM1S=-_@Xug`Qx;A3Ve7@F{$}OlsvGma{rq_uyje&zVgz`3e5(PV2KKX#@~pY~cys8|tdC=8EUd9p zO&FS-)&hPm1fAg?}iIL8)KXbucosv4F$#j=jge2 zOY&JduPPWglv?RDqZb)-jl3Mr<=M96!15ZNQCg4~^-Pb$(}C6rE*YNU>q_DxA(*3u z4>p;K60aYvN@V6=pGmGE3JDg8+q~U20-NBZc6iK@RQPVKnE!S1yjj= z8!nc_$6q-OXtiY;7&mH?`lrCd2Hu~EKRhVy!06b$b@K=C<^XZYMMWbkWr_waHnU>P zq)(k9c>^j;_8z}V*)`_^qSLIY6h0HwrsKD-+I$aldlDIucCZ$;qsWZ;0JJ0I9$p6a zpadr}YYGL{R;(0Z<=&AgRT7)qf3NMBv|-=pAwI1K=bs9XU4IWs)n~AO`!l|3flIldOgm!>p*>Z5Y-A$$S6w1aJMeJFZhll}lU-~SMJZ78A zQ1K`?C5&i)qlv{Np&^M#*i#uYaED8upN`X-RvI*w!i1Mh059&Jv`E<0_2APNen_g?hXrn1o82=-5p&$4 z`yG&AXu2yne%IX3_Yx=$>ce8i{@)4x6m^te%-rWJN{7jrfFn6lAG`*PDvP4yqj%#x zGK)r*W|Yz^PgQ1bcI#aX#%So+6)4{sEmVU&cY3t6W<V;2&RV?Z5#)R~=tENfB(b6hM z7AXtbrefCpX@^`v?y(ig`Vc~V+ojX8t9ZT=Mc;k(xrxtU@bxgMOjq-a z!C?c@ZQN8zyQ;TI;_ICcWb+;%mbIp&Lj^9*ETay=>itI9{JQ<>E_eU^^t~iH^4*=V z$M0pivXu8)grwPCX2~k9PPaF1^S&YSNX3CKu!n;KW`%W{iGqLj%Uk;e?ES{<64g25 zVovYQ`TDUx%ECNw91$5G#+y-di~RKLs|**q=C<4mTs$&=+pZLIXkOvedZ zEvA;X*}Aopq#SnaM8@E^vrZ>ZpFPr;26K{{91@9k@RRvHIW>DaAwM1-;sC?%8zivBJ8gXYQHC~3SXyW_NqE828(oMYB7)6VHM>a z0&d8cW?B{cZnG9Ct7nLtgq%MhWR4%0ls=A)@BDNyCA<534O)STf42Ku|4xXRDwiU$20t#X-Ffg)jWj6rHdAjue;+thpzP$lKtdowSwy_E(2Z1DN>y#joA1IClC&(@#=tFgWz~9q0Y)Bw;o zH#ce$bM3RRisA!(s;XAUb0$d0aK+AA`Q2CB$DI-TL`K34UbI(M_DeZIQw?tKA)@1R z(OQkTc_iMaD&y@(jF>LOZ<^IjRqr{o{i%qAl$ESWvz56Q^vFsjISK!iHONx4bvoAa zO5^V7yC7jQ`YqQ{E{IBNlbL@o0TaEigi(R_L{{veJ1(>N;)&sFzOiBD+2uM>hC17e zdSlb^V{21Wvp5`|(k?=JO6D8?+IuMHrQ`=y-S*GSZO>+We}{u&rfzZCFfZ!>8WiG& z?QiCHi+c5HDuFrvJ_^!kk*DlpVR$Hi5Y%C{H|cYZ8^3_#^BWe$p#}l~xQ~T6styT(p~czt}~l(sV0&<-rMb3%^JR_NXCZ#>Cs$ z@G9`LMnp>(cb;qfgnbegKSyBS?`lj5d#+&Z?tgC!l*qu`Sp2lRB-BVW5Ae`d=zDq4 zZVpJtOcLTBj)2(V4`go!Yq{x^bVLuLY^+P5ut#%{+ZRH-M4+VYbw~XXH}{uGOvSpd zc>#ODDvp5`&y$wXg44ot!j4*`Vn zUox@48f^!B35aotnYA3Y>_t6sY#uN|&AC?kUwx%p#K3l`u1gg9F!$X>|TKm?}|ZF7O7 ztZ@k%{_$MVylb3l21YI(4lJ^_i}NMuWTPj2k|6mG#j%dV1W`7h6D@x7nTP1oXcZ~c z6`Zht$zZ-L8uVsDTP;@Nh2Tz=YOg`mx3(i<3<;yTX2)3z8jbcovzuW%^s$c_bsMup zgQC1(AQ(5Qp^7)z@ts|MqK*gXb+8&<#Wxq;D-WFV?dZ}(u=iAf0437y75T8|SEr3v z9>6;1c%-I99utwFS(>|i9wvHz|E5FOQH8Wnb=S@IJ!j9QAV_Zmb)YSSG96qE8gu}5 z=XhhSjXSYl5XFoVrs=4RMK9}mag#4F;NO94EyTyfReL&+lv!J#c;>Kfd3UnQQGLN@ zs3l~$RWPkWu@P>6PEp17l@#Un?4#G)FWgZQZy#Cc; z#mtGA6jf4|ltGQ-G`W2BUNe;&}YTFv|OqGEz?_Q^>3s5iBhc|OtZW;Dm<>-J{ws=wxR*ZtW zF{t#<)Sw}T`3$6UsMfM@t~ClZt`?Ao`QGdRe6U~W5j!}4fuxYqYE>#jYUajGNnfO7 zDt#1S6+Y#tf3a70W^MEPTlvSQMTa&n=6Ob#bg|yK4S(TmkW#cO?W5T~<$t#IKD7x* zDx`32a~pzJsX?ty<2pOv?QqIXXGP;f)7BcIr-xyt2neKb!tax!QfcBe<}y5eZ}w73 z@oG|d!sW@43O%b1TRyfhlAb@&);%utH*7XYBjlO3y{)%-@%r!EY%B@bN9KM>{{=>_ BO?ChP literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/colors.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/colors.xml new file mode 100644 index 000000000..b5b50d0ad --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/colors.xml @@ -0,0 +1,5 @@ + + #3F51B5 + #303F9F + #FF4081 + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/ic_launcher_background.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/ic_launcher_background.xml new file mode 100644 index 000000000..6ec24e641 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #2C3E50 + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/strings.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/strings.xml new file mode 100644 index 000000000..eb1963e24 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/strings.xml @@ -0,0 +1,4 @@ + + NativeEmbeddingDemo.Droid + Hello, Android! + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/styles.xml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/styles.xml new file mode 100644 index 000000000..89aeb9400 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Droid/Resources/values/styles.xml @@ -0,0 +1,7 @@ + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedExtensions.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedExtensions.cs new file mode 100644 index 000000000..14c705fa4 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedExtensions.cs @@ -0,0 +1,80 @@ +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Maui.Platform; + +#if ANDROID +using PlatformView = Android.Views.View; +using PlatformWindow = Android.App.Activity; +using PlatformApplication = Android.App.Application; +#elif IOS || MACCATALYST +using PlatformView = UIKit.UIView; +using PlatformWindow = UIKit.UIWindow; +using PlatformApplication = UIKit.IUIApplicationDelegate; +#elif WINDOWS +using PlatformView = Microsoft.UI.Xaml.FrameworkElement; +using PlatformWindow = Microsoft.UI.Xaml.Window; +using PlatformApplication = Microsoft.UI.Xaml.Application; +#endif + +namespace Microsoft.Maui.Controls; + +public static class EmbeddedExtensions +{ + public static MauiAppBuilder UseMauiEmbedding(this MauiAppBuilder builder, PlatformApplication? platformApplication = null) + { +#if ANDROID + platformApplication ??= (Android.App.Application)Android.App.Application.Context; +#elif IOS || MACCATALYST + platformApplication ??= UIKit.UIApplication.SharedApplication.Delegate; +#elif WINDOWS + platformApplication ??= Microsoft.UI.Xaml.Application.Current; +#endif + + builder.Services.AddSingleton(platformApplication); + builder.Services.AddSingleton(); + builder.Services.AddScoped(); + + // Returning null is acceptable here as the platform window is optional - but we don't know until we resolve it + builder.Services.AddScoped(svc => svc.GetRequiredService().PlatformWindow!); + builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton()); + builder.ConfigureMauiHandlers(handlers => + { + handlers.AddHandler(typeof(Window), typeof(EmbeddedWindowHandler)); + }); + + return builder; + } + + public static IMauiContext CreateEmbeddedWindowContext(this MauiApp mauiApp, PlatformWindow platformWindow, Window? window = null) + { + var windowScope = mauiApp.Services.CreateScope(); + +#if ANDROID + var windowContext = new MauiContext(windowScope.ServiceProvider, platformWindow); +#else + var windowContext = new MauiContext(windowScope.ServiceProvider); +#endif + + window ??= new Window(); + + var wndProvider = windowContext.Services.GetRequiredService(); + wndProvider.SetWindow(platformWindow, window); + window.ToHandler(windowContext); + + return windowContext; + } + + public static PlatformView ToPlatformEmbedded(this IElement element, IMauiContext context) + { + var wndProvider = context.Services.GetService(); + if (wndProvider is not null && wndProvider.Window is Window wnd && element is VisualElement visual) + wnd.AddLogicalChild(visual); + + return element.ToPlatform(context); + } + + private class EmbeddedInitializeService : IMauiInitializeService + { + public void Initialize(IServiceProvider services) => + services.GetRequiredService(); + } +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedPlatformApplication.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedPlatformApplication.cs new file mode 100644 index 000000000..0b38b9748 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedPlatformApplication.cs @@ -0,0 +1,49 @@ +#if ANDROID +using PlatformApplication = Android.App.Application; +#elif IOS || MACCATALYST +using PlatformApplication = UIKit.IUIApplicationDelegate; +#elif WINDOWS +using PlatformApplication = Microsoft.UI.Xaml.Application; +#endif + +namespace Microsoft.Maui.Controls; + +internal class EmbeddedPlatformApplication : IPlatformApplication +{ + private readonly MauiContext rootContext; + private readonly IMauiContext applicationContext; + + public IServiceProvider Services { get; } + public IApplication Application { get; } + + public EmbeddedPlatformApplication(IServiceProvider services) + { + IPlatformApplication.Current = this; + +#if ANDROID + var platformApp = services.GetRequiredService(); + rootContext = new MauiContext(services, platformApp); +#else + rootContext = new MauiContext(services); +#endif + + applicationContext = MakeApplicationScope(rootContext); + Services = applicationContext.Services; + Application = Services.GetRequiredService(); + } + + private static IMauiContext MakeApplicationScope(IMauiContext rootContext) + { + var scopedContext = new MauiContext(rootContext.Services); + InitializeScopedServices(scopedContext); + return scopedContext; + } + + private static void InitializeScopedServices(IMauiContext scopedContext) + { + var scopedServices = scopedContext.Services.GetServices(); + + foreach (var service in scopedServices) + service.Initialize(scopedContext.Services); + } +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowHandler.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowHandler.cs new file mode 100644 index 000000000..38eee9c0b --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowHandler.cs @@ -0,0 +1,32 @@ +using Microsoft.Maui.Handlers; + +#if ANDROID +using PlatformWindow = Android.App.Activity; +#elif IOS || MACCATALYST +using PlatformWindow = UIKit.UIWindow; +#elif WINDOWS +using PlatformWindow = Microsoft.UI.Xaml.Window; +#endif + +namespace Microsoft.Maui.Controls; + +internal class EmbeddedWindowHandler : ElementHandler, IWindowHandler +{ + public static IPropertyMapper Mapper = + new PropertyMapper(ElementHandler.ElementMapper) + { + }; + + public static CommandMapper CommandMapper = + new CommandMapper(ElementHandler.ElementCommandMapper) + { + }; + + public EmbeddedWindowHandler() : base(Mapper) + { + } + + protected override PlatformWindow CreatePlatformElement() => + MauiContext!.Services.GetRequiredService() ?? + throw new InvalidOperationException("EmbeddedWindowHandler could not locate a platform window."); +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowProvider.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowProvider.cs new file mode 100644 index 000000000..aa3e87165 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/EmbeddedWindowProvider.cs @@ -0,0 +1,27 @@ +#if ANDROID +using PlatformWindow = Android.App.Activity; +#elif IOS || MACCATALYST +using PlatformWindow = UIKit.UIWindow; +#elif WINDOWS +using PlatformWindow = Microsoft.UI.Xaml.Window; +#endif + +namespace Microsoft.Maui.Controls; + +public class EmbeddedWindowProvider +{ + WeakReference? platformWindow; + WeakReference? window; + + public PlatformWindow? PlatformWindow => Get(platformWindow); + public Window? Window => Get(window); + + public void SetWindow(PlatformWindow? platformWindow, Window? window) + { + this.platformWindow = new WeakReference(platformWindow); + this.window = new WeakReference(window); + } + + private static T? Get(WeakReference? weak) where T : class => + weak is not null && weak.TryGetTarget(out var target) ? target : null; +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/NativeEmbeddingDemo.Library.csproj b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/NativeEmbeddingDemo.Library.csproj new file mode 100644 index 000000000..524f9d718 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.Library/NativeEmbeddingDemo.Library.csproj @@ -0,0 +1,26 @@ + + + + net8.0-android;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);net8.0-windows10.0.19041.0 + + + true + true + enable + enable + + 11.0 + 13.1 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/AppDelegate.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/AppDelegate.cs new file mode 100644 index 000000000..68279bda7 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/AppDelegate.cs @@ -0,0 +1,15 @@ +namespace NativeEmbeddingDemo.MacCatalyst +{ + [Register("AppDelegate")] + public class AppDelegate : UIApplicationDelegate + { + public override UIWindow? Window { get; set; } + + public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) => true; + + public override UISceneConfiguration GetConfiguration(UIApplication application, UISceneSession connectingSceneSession, UISceneConnectionOptions options) => + Enumerable.FirstOrDefault(options.UserActivities)?.ActivityType == "NewTaskWindow" + ? new UISceneConfiguration("New Task Configuration", UIWindowSceneSessionRole.Application) + : new UISceneConfiguration("Default Configuration", UIWindowSceneSessionRole.Application); + } +} diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Contents.json b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..98f4d035c --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,117 @@ +{ + "images": [ + { + "scale": "2x", + "size": "20x20", + "idiom": "iphone", + "filename": "Icon40.png" + }, + { + "scale": "3x", + "size": "20x20", + "idiom": "iphone", + "filename": "Icon60.png" + }, + { + "scale": "2x", + "size": "29x29", + "idiom": "iphone", + "filename": "Icon58.png" + }, + { + "scale": "3x", + "size": "29x29", + "idiom": "iphone", + "filename": "Icon87.png" + }, + { + "scale": "2x", + "size": "40x40", + "idiom": "iphone", + "filename": "Icon80.png" + }, + { + "scale": "3x", + "size": "40x40", + "idiom": "iphone", + "filename": "Icon120.png" + }, + { + "scale": "2x", + "size": "60x60", + "idiom": "iphone", + "filename": "Icon120.png" + }, + { + "scale": "3x", + "size": "60x60", + "idiom": "iphone", + "filename": "Icon180.png" + }, + { + "scale": "1x", + "size": "20x20", + "idiom": "ipad", + "filename": "Icon20.png" + }, + { + "scale": "2x", + "size": "20x20", + "idiom": "ipad", + "filename": "Icon40.png" + }, + { + "scale": "1x", + "size": "29x29", + "idiom": "ipad", + "filename": "Icon29.png" + }, + { + "scale": "2x", + "size": "29x29", + "idiom": "ipad", + "filename": "Icon58.png" + }, + { + "scale": "1x", + "size": "40x40", + "idiom": "ipad", + "filename": "Icon40.png" + }, + { + "scale": "2x", + "size": "40x40", + "idiom": "ipad", + "filename": "Icon80.png" + }, + { + "scale": "1x", + "size": "76x76", + "idiom": "ipad", + "filename": "Icon76.png" + }, + { + "scale": "2x", + "size": "76x76", + "idiom": "ipad", + "filename": "Icon152.png" + }, + { + "scale": "2x", + "size": "83.5x83.5", + "idiom": "ipad", + "filename": "Icon167.png" + }, + { + "scale": "1x", + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "Icon1024.png" + } + ], + "properties": {}, + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon1024.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b573205418896a726aca2711a04b355f2ac39377 GIT binary patch literal 10753 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 F1OQcq5<>t0 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon152.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon152.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1931312b67f4d54580f0307a9b19af555085d6 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^GeDSw4M<8HQcwg^oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB?k`Ul$B+ufw|9I!Lb7F!e_X!nd(p}47@?)% z9=BMwoxOH*QLm$8NO#N=tv9Kc4=u>WDg4FZjhT?Z6g6DBAb zcnC@?;ou2kVbf%478zv1U#Dj)%#Hq6+RlEx;=Z}noKk`S9bG^ z`1|AE-R~b?_Tu--W2cwTztiizKKt8Gu}v4wFS-)YxOL0Ag6QpAf800Uac%CM?{{=V zSDugVI(jek;eXFhpRaZ&@J;;2{pxM>+kp6{sAgG-7X`Af{}-;1=Pm8fInKB6___7P z>HPakGH1;HEoQqf{L9D6ZFX7uo87W9W9R*r31*8?1}DLm?0QxwOR6>A-BntS8sYgR?SU%2f>>VL2H64RQ5Z>tL5T$`P7!YcmDzJD2JZ6&Om z*-rZ(d7NXmt-irIbygGS8`qLssUVF=l3egI8r|%18GL_Maw7t z^8dT@?5#Kkn_b`cWdIdql?AtG{phxPV={?1@$rma)#aM&w4^@vFz1*Z6U*Maj6=s> zT03R-_Z#NRu9{qTy|w6Gxs>Mq{56qccRjOb9q^j#cIx~wt()HcN3&OH?|vI#`7>eL zi??TvmCSl~jnR3z@jcyZa~@q>(S0CCHzl0urt{wN(~myoZftXV)f~oss!ZX?e8)Wg zbk)h8|>w>cj+Q@2>)x`|q3+DxdOFAPv z?w7fj_cNqIigWAKUrP74KiKB%7Bu}|zsbRMmrR!KW82KS-M0Jdx2;dbP6|JM?=83M z&CRqIK0m81LJp-Ri~H|6Rr}USUQA-&y}r1Xk~Q_uvp#+m&sO@iSbNXKlYeq*=Ql=d q+n)WZo!MoFyY`^X*6?ztj*0VtTXf!f`6a+ok-^i|&t;ucLK6V1xMsHi literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon167.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon167.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3e8bd8efb7f2bfc0cd3ec6233298f4285e47d6 GIT binary patch literal 1503 zcmdUvi&v5d0L4E`(`o8FW|DfeW)HV!tmx1ScIjs2 ze3Dw3Dda?=^8Ff``6$yOB@;-pVV?%W#|JUnf6+Pj-ru?R54d^$zMh8q7Wx1H7&sI?3K1u0b@d#ThJN+b>r9Wz5@%y9L^AS!~_hyj=~UlC7r?dY$ZN?0s$Lb#NGGW(H>I$K?!N*|A`}*3nL$c}~D~NbdawE+MBs5z&W1>F7NZ!L@LXMp% zSj(TKfwx7l%eIyhb%;{xMA?X^w79i2ND^^)%lV!aJOpSG-(eTPLhaEkI z)#}DMDg70OdXImTwdB4^#>Z!((3tkF)~>j5vw=NiTlcwvQ?oFdP}i+vq*oBD2i4uS z89mJl{cr$m9C4WlQ7%q#&oLI$DDwO_DEgVsI!oQEZ6ij{c=-4d;?saWw?RBpY(9TT z@LE9@ehz$R)`3qHNfX3{^CxK0+>FmX+_y>KX7tw7+Q-;FW61O@*$^|!g}+Zz+eK6) z*0$xmZ8DDaJUFk_bT>(Bwjo=5|384j#|F(wS-uPaW zTsIrZ>p+$^IhIjenjGLtL33Ot3e%$YDn}rjApH}jx+ID!PR1#U>Kcf|DLD(v1Vg?PR-NkR z{6V;ogrX<~eKJm9?!h^r8RqpXqs5lJFFRS(MS9C) z#IhMB#Bmjt$xEQ>Qd+KAzev%sSah7~^66GSsOvbrG!FGl+rPFaCUK%vsiS?354-#Q z&@HR#Nw0y0jPo^~cUKM1ot0`vB#-}YWsOjmNRr8!avA3pLVV4s=7d47#=mV?pgwA0 z{bc?L?J!?JzswY8$1?|S1Xb2W=P(dx&87LG%Sr)0A<0zmyOUHQ@A!a?(PgHbpMz+J zMCYh~{tIVRvn^LtN5ElRFc>-47Fq%-?Hlepk`JyKOdeu!lM%NK;H5(=GCaP3JHb-$$IG7A9(Re5}$C zO{Y^&Q%UlhlrA{){X%hyf=D&W5=-z6^3c)0(K+{i?!BKM?&r5pAtu0kkD;X@004W? zKAwR(1wYe3UpL`g{nI+xo#Ydo3IIm?KXV6AQTdH-xg#~u8wD^%t);pE!6W^V0KhCZ z()_Fk0D4VmPvnmoI~HgC<4vQj`O5kCdmn*&3c@B9|CM>H(&hHo zBWE#|%BSj)Z5lq^+W899@^Ec8a0IgF*p~!nS_x`8!0JGb&GI^R&aBfki;(xnIPT+O z=ytziRT!7PxbU(kLNVI;MDS*Cn&9{VUluP*A*^$Z4~Yos4Pr>s$o6mjzmADpF)?~# z@jh)HyG*J2$40y{KF(=rPkD`-WPeq4VsC_QQ&8^fX#Y>!W?H->=tIJfU3-jyX z=^h<7jRqr!X59Us$tr3(NSy!VLGue&!zsO4oQ0v>OYGiM4$&ax0C+<_2~}skFLOFE z`wT-OtvTQL0THmpQt=Czgz^!j+JJiDMe z_9T6(w29g!tY(P9z@M!8@e{}4Po0TDMSqr-jWxWuFv6bITZByoc2S0Qb8;Em(HGO_ zQue}c$TB4q!!~LBa5OLbmQq`ejf#jmTSa&wRxvy+@;R5}lWaYnB)&7nxV#-4STaew z1KNc4YMbjXnv!@P;Y)Z2HP&5s%*GEXH!Zr$*_@?N#tQ8bYF2%*e1(vlv$f1STI@DJ zzLtx#YFi~r6B}N&k0F$e_2*uz;pV$`b+l`PYH3!Q>Xi?YGwN1vTjU8>60H>Ee+r`9 zih2^#nP(5Z7Mz3tA>l&WGAKB9Hu!No?M_dPD1xd1-3tM)%Ly8egB%U2^_H zVA=~E<{!-tudOFP*1aAWCHvI!`0V_9p7SOzd;B*&LF0|XN+Ac!`|e6-ncpm5wkfW} z`jV)^k6e$mJsIX=8P}dgY;HDfT#}gI>~yi+F<-lyMdUd97I$lxM>4NM12_7cIx~5m z7G7jH{S7ChbC?tNFA7=q u%jWg73Ww?aobowYX4QfG)Ghby8T2o6`lp|qwL%RT01Te4elF{r5}E+g-iaXq literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon29.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon29.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd130c3533a790bb74dc41c9449ac92a35f91fa GIT binary patch literal 422 zcmV;X0a^ZuP)|_=KlV-gVKz`+>u~=iGDe_nmW==ej!146$U~SOHR0ib_!_YRjfm!dcV@ zug?uNUgv)J&;$S87PM3wmp40;ybSYCPPZ+0lk85p*q?dRvC_!7g4lBqAtpx98i^|W zL#`hJFxaDHt>%EQbWUd2hzVCpsPP)^9(VC{tJ|E_Cwo2HL4b8(IzEliOsRE7p=W8Q z$;bZzH&aXmp-PF**Am`-_o4nZEb;q`JQihcrQz`mO=xC`uPU3P-x8+^$-K%2M44MD z&G6^l;B6%%65kbsjy%wFUG8hC7Gf_!zNcI*O=IXgin`>VgA|pbQgppVM^MURaWqK6 Q$p8QV07*qoM6N<$f-C~EaR2}S literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon40.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..75d27899e32c19478fd914072864166c937fcc0c GIT binary patch literal 537 zcmV+!0_OdRP){d(V$|3f^#jaM643@xCADcrHBCy!ZMW42&5J4hdo*K`bPQg#@vX zAQlqDVtB#+UV?4*J~qrC=4-#!Ipxx)64MBe7hD$AGh5F>3HpOW5C{v9I(de}?I&eD zv_1?@Ca}4bh3Q#4MB?tI-|_XWqcPPpm*?)=O7VW%|O z#dL$N67v!z_X`kM5#TcYrW!Nlvq_&k;}~=aa(JW6u!dNTyP%*_t_{{0e*x+qOt3$? zXL10%^=$nI9R>YC2ke}VgSCFwHNrEOI(|{T<034x^6>hspqGv%e!Q)MXX0JzKK|Wi zFE#Ba4@4$!f^zXonv1y_T%5f&AJXvVok^F#I@o>TO!VT8gaomWAQlqDLV{RG5DN)n bF}&ap%6*B^)@pj400000NkvXXu0mjf(5>oa literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon58.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon58.png new file mode 100644 index 0000000000000000000000000000000000000000..06afa60917f35358a1f61d08d10c440432bc0d01 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^Rv^s51|%Qu_R;`SoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3`~KZE{-7;jBjVzdPE0`H1uzsc1>WR=;fs7 z3rjg(M$NhHq|W{J3Sa4l;LO#lTURyPKZyQ&_^8DTA@;zMK!cgR*({}jQ+`Z-z~9N4 z_2K!P)hzKfm1-YZAD#TEuxEeuR9tjNATSRi%&PoL;N6Maw=!^<#I1`|CYDq<$>pZIp1Gj=3+5_{GcL| zso6N6Xa9Lyfso_*`(+c_%9G@)qRkXz-|1Aza-Dl_*^=-;<*i*eci`Pp1A+a8^VvEh zVy&7Yo_zUK^Haj;pwUGQwuH^%&d#5UFU&H#^vap}(ya|?Kh9WJPOy;wZhbW{J1RWi z#Vlgl;(a?eaP9f#EP2jB^NI8{vBmpV&&hmK#k$mD_s^E4mamTQnI(0z_59bTAO8BY z?%1{6_x9~mT?;pE4l2+0xb695;nWB%uO8l(4_~)B-|a8@;3IQDN^C+%fZzWApF+yd z_x^p~sv)W>e(u!%dDlN|{>i#!sfHQL(~?i0bGpywM(BC{uu0r%b3rOP{QsFPx$BNh zI(hTlis$tXXZ6;u-DacVBiS8x-R9r}?Sk^pC$_|Lq@TJgA2cb{v_E)Tamch6b~~k} z^u*uYAECP1uz>5;Hr*RvUg%w^+oE1(cJe|3@3~jon?iP;{bUtwB=$8)wKws@=Xo8w zmdPxxU0$!4cH`dC++@~$XD%N;G1JQJaQdo#LF>jH2lL;({*~@L@lSiBB#!6<3m;=$ YQNGXVR!{jmU}9tNboFyt=akR{0D(wBr2qf` literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon60.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon60.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0db2a6123440f30a37f1b6a69753c01d74bc6e GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3`~KZE{-7;jBjUIdMtJnX_)_dSNo*BPKWYR zrnlrWZH(P+)*5<**^ygxi%|b5rPf;&4O3lhyja(Yh`2^4uiYl-BB0$YWn-YW;E`dz zjfcs}`4c-^rhj)lG5_S5|NrmXzdt+M;nS+v#^@7@_Z<5U9=ej4_-cbeX~YaG9Uob- zWqjPh?X4>hgN2{W`A~hK;qXsRF5mCx^NN*cZ94z%8mr6U>zmGgU2l+hKjQ}*-}iL~ z-u>ZlJ2FpSb_>V$iu$hE`jd|DJ-eH8>E3u?xo4hvb;$G1b7sTc?FU!yDBIm3(EfSzjGx|$5|vr~ z8fWwtg-Yo6EqtB%hw=2~QUEdnH#Nd?L>-l_9;%k?#RQ?%vJxx^cH{&M3 zwTBc1+l-aIclrFhV3^RH<5JD1?=SBd`7~TZusdSqZI;*nHawhhE}j4Q{)$yw1XeEC z%a<(IZ}%kPdBR2w*Pm_4r&jGdzIV;GGfSJlNxE%VqtiKaU51Hs?QT}Jwr|1Tjt7aJ z-udX%YA3fA!8MEDt;&CpX>j<~smN3NBAV`X_2lXrZgJoB-dQ@kc-sf9hyUN{Z@MS7 z@tytTQsLi^^t7b|_+ADnzW(}m+VL6HZVz9)zSsP4=l)G0s>yZ_sxF2FZ{nQk5NRQ@ zXUc8sCowsn1gC842w#*tZ_U|c#SbPk<7<{r+Aa9UQSq03+~=)NKF*KofW#K=NR;(! WKFVR5TxtbOYz&^RelF{r5}E)t4@Uw3 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon76.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Assets.xcassets/AppIcon.appiconset/Icon76.png new file mode 100644 index 0000000000000000000000000000000000000000..755bc880a9ec72638840e9c5ae10c5055194275e GIT binary patch literal 870 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{1a0T^vIy7~js`pDmmyaeThi>PuUqSe-Lv zg1CY@vi~={ank17#qsaP5gk3QseDv>!Tjk*?yCO&8{OF@-z2* z*!r~2Pwjkqs^$0aI~N2Ky)ri3mOH+@@8s3X@hNLJTr9bNZ{Mw^aL%jqKg%x-s{Z{} zK~^}dcix$k#qLjzJ{B!>zSuFZdRNr?Z+cEg#J5yDyYF}G4Uz37 zF*EL&RWYUOw?Fy&M*p>`m*IZJlWLph8u|CI-rWQQ?w&2Iy zKJMVilkQKo*M!IA``SPDTr;D3Th{l9#?P+3dCA=o|8dDnZDTdPJJpssvx*(`V&x42 zlQ+Ii-pU@f$o*}4-SjUtj(d)5elY9rmOS(L+!Gfs$~`G~?fLo-_qVF}mGeSpEb`xc z=PnQl;9b@bTp?P08^Hg)~``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di49vWqE{-7;jBjV#X9Nd|9P?kZ$i(f)q@dN# zyFC`hp3P%j&cU@v_RR&qpwgm%6;?mkUuA{PndLa$BCK|#8zmZyiL`~>i5h3KAl^9-d1(r=ffNSJ4vPW3vh6;EOZc{0&!DY zH|0l4dEy+uf0IKVy2zyZKu6nlo;ReN~bITV_ou`*V*6Zl43FUnn6=V5%>7&=#YCOd^&u;p>@G|3P z7Wu8mi;eG}`JI0HopXWfg483)x(wq2C4bXowL2?%A>-yzvn*k;>iA2 z{Wp$1F)3b;GuBhj~Bp;|JpQwO z*ZW?p32)ivnF=fQmx+n2<-IL>p5@rIHIr_An6O28-nPvq-=A(TeY?v)&x?;|w#~BR zhhEF~iLvQtHW*IQ#0=BoH)_-a^uzRwoUhf^Et$~ zpYVGAagkVyv&Ga1{V9UKE}zP=nwMN=^)gel=|T1}@paA1=1Ft@RNaWmn_@-KZJ=&DT+y^{-2M~^``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di49w1+E{-7;jBn={`UD4xwDB)G7T_S_$gG#6 zwnM9MiJD&00Z%sT2Pq~Sj67ndc!Z0(Sv_FzlbHFsXUz-&@s4FHR5cb(S;6w!_PWT2 zrL|ui|Hpm$RL^;`xjee!{@(X@{>x4ZyPG%vJZEEp4+qaFR;Qf~8sZ#JnHI(UeNxecVf1CH;JhSbLPtAAP`**5>takg~eq55}eQ$51cE!2=Kd-H- zrIze`+QPDM%KnWaT59F*S@rb(OyMt{?Rxz64Qu{cZ$JKt`BuNP`rOZn^|4!aJKkFF zqQdd=%KJ?xN`u6Hwd;HN#%^ty+qEV}f7h>FN$F3&-sqBHi%snRJ+0=rjr0$dt@Aqf zWY&FOd&9EYW_HZu-9 zYOC*mx6lyP=MG-Hd-d0Q4_G;kMWU#}2# zo0F3vb@ZO!npwU}FJ8O9@8D-4`5!utomawVpUl*%(6ijDroA94O3Uww)+`aLMWtm| z%UoXjimm;4c3T;o(KU+Fh#8-FS2R z_Xf{n%qf2R=j={YJ8$auRIBrc`O6(~`S~B$?e5(c#-{l8$F=W=E5m(GJ4bAOKQY6y zYV-Th%@zWH1Eys0;~vT}C$bxmv8=DplYYQ69;m5X6t{`{4epL?ox zO6!|n2lX`sk8k-O6R>TnwdJg7F?#A-pG_>eba}a~{Ldu$P;bZ0?>k-|e0IEA-AjIM zJkL_Es`b47s}0Yu(Tx1bu{=`JRn&eiC;R{3R7rHGX||qm$-h4Zra#Y40cI}-Pgg&e IbxsLQ06r+Fc>n+a literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Entitlements.plist b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Entitlements.plist new file mode 100644 index 000000000..36a870670 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Entitlements.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Info.plist b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Info.plist new file mode 100644 index 000000000..4c3967656 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDisplayName + NativeEmbeddingDemo.MacCatalyst + CFBundleIdentifier + com.companyname.nativeembeddingdemo + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + UIDeviceFamily + + 2 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/AppIcon.appiconset + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneConfigurationName + New Task Configuration + UISceneDelegateClassName + NewTaskSceneDelegate + + + UISceneConfigurationName + Default Configuration + UISceneDelegateClassName + SceneDelegate + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Main.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Main.cs new file mode 100644 index 000000000..28d78a6ab --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Main.cs @@ -0,0 +1,6 @@ +using NativeEmbeddingDemo.MacCatalyst; + +// This is the main entry point of the application. +// If you want to use a different Application Delegate class from "AppDelegate" +// you can specify it here. +UIApplication.Main(args, null, typeof(AppDelegate)); diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/MainViewController.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/MainViewController.cs new file mode 100644 index 000000000..369ddcf22 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/MainViewController.cs @@ -0,0 +1,130 @@ +using Microsoft.Maui.Platform; + +namespace NativeEmbeddingDemo.MacCatalyst +{ + public class MainViewController : UIViewController + { + UIWindow GetWindow() => + View?.Window ?? + ParentViewController?.View?.Window ?? + MainViewController.MauiApp.Value.Services.GetRequiredService().GetWindow() ?? + UIApplication.SharedApplication.Delegate.GetWindow(); + + public static readonly Lazy MauiApp = new(() => + { + var mauiApp = MauiProgram.CreateMauiApp(builder => + { + builder.UseMauiEmbedding(); + }); + return mauiApp; + }); + + public static bool UseWindowContext = true; + + MyMauiContent? mauiView; + + public override void ViewDidLoad() + { + base.ViewDidLoad(); + + Title = "Main view controller"; + + View!.BackgroundColor = UIColor.SystemBackground; + + var stackView = new UIStackView + { + Axis = UILayoutConstraintAxis.Vertical, + Alignment = UIStackViewAlignment.Fill, + Distribution = UIStackViewDistribution.Fill, + Spacing = 8, + TranslatesAutoresizingMaskIntoConstraints = false + }; + View.AddSubview(stackView); + + NSLayoutConstraint.ActivateConstraints(new[] + { + stackView.TopAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TopAnchor, 20), + stackView.LeadingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.LeadingAnchor, 20), + stackView.TrailingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TrailingAnchor, -20), + stackView.BottomAnchor.ConstraintLessThanOrEqualTo(View.SafeAreaLayoutGuide.BottomAnchor, -20) + }); + + // Create UIKit button + var uiButton = new UIButton(UIButtonType.System); + uiButton.SetTitle("UIKit button above .NET MAUI controls", UIControlState.Normal); + uiButton.TouchUpInside += OnUIButtonClicked; + stackView.AddArrangedSubview(uiButton); + + // Ensure .NET MAUI app is built before creating .NET MAUI views + var mauiApp = MainViewController.MauiApp.Value; + + // Create .NET MAUI context + var mauiContext = UseWindowContext + ? mauiApp.CreateEmbeddedWindowContext(GetWindow()) // Create window context + : new MauiContext(mauiApp.Services); // Create app context + + + // Create .NET MAUI content + mauiView = new MyMauiContent(); + + // Create native view + var nativeView = mauiView.ToPlatformEmbedded(mauiContext); + + // Add native view to layout + stackView.AddArrangedSubview(nativeView); + + AddNavBarButtons(); + } + + void AddNavBarButtons() + { + var addNewWindowButton = new UIBarButtonItem( + UIImage.GetSystemImage("macwindow.badge.plus"), + UIBarButtonItemStyle.Plain, + (sender, e) => RequestSession()); + + var addNewTaskButton = new UIBarButtonItem( + UIBarButtonSystemItem.Add, + (sender, e) => RequestSession("NewTaskWindow")); + + NavigationItem.RightBarButtonItems = [addNewTaskButton, addNewWindowButton]; + } + + void RequestSession(string? activityType = null) + { + var activity = activityType is null + ? null + : new NSUserActivity(activityType); + + if (OperatingSystem.IsMacCatalystVersionAtLeast(17)) + { + var request = UISceneSessionActivationRequest.Create(); + request.UserActivity = activity; + + UIApplication.SharedApplication.ActivateSceneSession(request, error => + { + Console.WriteLine(new NSErrorException(error)); + }); + } + else + { + UIApplication.SharedApplication.RequestSceneSessionActivation(null, activity, null, error => + { + Console.WriteLine(new NSErrorException(error)); + }); + } + } + + async void OnUIButtonClicked(object? sender, EventArgs e) + { + if (mauiView?.DotNetBot is not Image bot) + return; + + await bot.RotateTo(360, 1000); + bot.Rotation = 0; + + bot.HeightRequest = 90; + } + } +} + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NativeEmbeddingDemo.MacCatalyst.csproj b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NativeEmbeddingDemo.MacCatalyst.csproj new file mode 100644 index 000000000..fc90824a3 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NativeEmbeddingDemo.MacCatalyst.csproj @@ -0,0 +1,23 @@ + + + + net8.0-maccatalyst + Exe + enable + true + + 14.2 + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskSceneDelegate.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskSceneDelegate.cs new file mode 100644 index 000000000..8f4c6a871 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskSceneDelegate.cs @@ -0,0 +1,55 @@ +using AppKit; + +namespace NativeEmbeddingDemo.MacCatalyst +{ + [Register(nameof(NewTaskSceneDelegate))] + public class NewTaskSceneDelegate : UIWindowSceneDelegate + { + public override UIWindow? Window { get; set; } + + [Export("scene:willConnectToSession:options:")] + public override void WillConnect(UIScene scene, UISceneSession session, UISceneConnectionOptions connectionOptions) + { + if (scene is not UIWindowScene windowScene) + return; + + var window = new UIWindow(windowScene); + window.RootViewController = new NewTaskViewController(); + window.WindowScene!.Title = "New Task"; + window.MakeKeyAndVisible(); + + Window = window; + + if (OperatingSystem.IsMacCatalyst()) + { + ConfigureMacWindowSize(); + ConfigureToolbar(); + } + } + + void ConfigureMacWindowSize() + { + if (Window?.WindowScene?.SizeRestrictions is null) + return; + + var fixedSize = new CGSize(400, 250); + Window.WindowScene.SizeRestrictions.MinimumSize = fixedSize; + Window.WindowScene.SizeRestrictions.MaximumSize = fixedSize; + } + + void ConfigureToolbar() + { + if (Window?.WindowScene?.Titlebar is null) + return; + + var toolbar = new NSToolbar(); + toolbar.ShowsBaselineSeparator = false; + + var titlebar = Window.WindowScene.Titlebar; + titlebar.Toolbar = toolbar; + titlebar.ToolbarStyle = UITitlebarToolbarStyle.Automatic; + titlebar.TitleVisibility = UITitlebarTitleVisibility.Visible; + } + } +} + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskViewController.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskViewController.cs new file mode 100644 index 000000000..faa828a4c --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/NewTaskViewController.cs @@ -0,0 +1,67 @@ +namespace NativeEmbeddingDemo.MacCatalyst +{ + public class NewTaskViewController : UIViewController + { + UITextField taskTitleTextField = null; + UITextField notesTextField = null; + + public override void ViewDidLoad() + { + base.ViewDidLoad(); + + View!.BackgroundColor = UIColor.SystemBackground; + + var stackView = new UIStackView + { + Axis = UILayoutConstraintAxis.Vertical, + Alignment = UIStackViewAlignment.Fill, + Distribution = UIStackViewDistribution.Fill, + Spacing = 8, + TranslatesAutoresizingMaskIntoConstraints = false + }; + View.AddSubview(stackView); + + NSLayoutConstraint.ActivateConstraints(new[] + { + stackView.TopAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TopAnchor, 20), + stackView.LeadingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.LeadingAnchor, 20), + stackView.TrailingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TrailingAnchor, -20), + stackView.BottomAnchor.ConstraintLessThanOrEqualTo(View.SafeAreaLayoutGuide.BottomAnchor, -20) + }); + + // Title text field + taskTitleTextField = CreateTextField("Title"); + stackView.AddArrangedSubview(taskTitleTextField); + + // Notes text field + notesTextField = CreateTextField("Notes"); + stackView.AddArrangedSubview(notesTextField); + + // Create task button + var createTaskButton = new UIButton(UIButtonType.System); + createTaskButton.SetTitle("Create Task", UIControlState.Normal); + createTaskButton.TouchUpInside += CreateTaskButtonTapped; + stackView.AddArrangedSubview(createTaskButton); + } + + UITextField CreateTextField(string placeholder) + { + var uiTextField = new UITextField + { + Placeholder = placeholder, + BorderStyle = UITextBorderStyle.RoundedRect, + TranslatesAutoresizingMaskIntoConstraints = false + }; + uiTextField.HeightAnchor.ConstraintEqualTo(40).Active = true; + return uiTextField; + } + + void CreateTaskButtonTapped(object? sender, EventArgs e) + { + Console.WriteLine("Create button tapped."); + + // Implement your logic here for creating a task. + } + } +} + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Resources/LaunchScreen.xib b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Resources/LaunchScreen.xib new file mode 100644 index 000000000..819020174 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/Resources/LaunchScreen.xib @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/SceneDelegate.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/SceneDelegate.cs new file mode 100644 index 000000000..b24413d9a --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.MacCatalyst/SceneDelegate.cs @@ -0,0 +1,67 @@ +namespace NativeEmbeddingDemo.MacCatalyst +{ + [Register("SceneDelegate")] + public class SceneDelegate : UIResponder, IUIWindowSceneDelegate + { + [Export("window")] + public UIWindow? Window { get; set; } + + [Export("scene:willConnectToSession:options:")] + public void WillConnect(UIScene scene, UISceneSession session, UISceneConnectionOptions connectionOptions) + { + // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. + // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. + // This delegate does not imply the connecting scene or session are new (see UIApplicationDelegate `GetConfiguration` instead). + + if (scene is not UIWindowScene windowScene) + return; + + Window = new UIWindow(windowScene); + + var mainVC = new MainViewController(); + var navigationController = new UINavigationController(mainVC); + navigationController.NavigationBar.PrefersLargeTitles = true; + + Window.RootViewController = navigationController; + Window.MakeKeyAndVisible(); + } + + [Export("sceneDidDisconnect:")] + public void DidDisconnect(UIScene scene) + { + // Called as the scene is being released by the system. + // This occurs shortly after the scene enters the background, or when its session is discarded. + // Release any resources associated with this scene that can be re-created the next time the scene connects. + // The scene may re-connect later, as its session was not neccessarily discarded (see UIApplicationDelegate `DidDiscardSceneSessions` instead). + } + + [Export("sceneDidBecomeActive:")] + public void DidBecomeActive(UIScene scene) + { + // Called when the scene has moved from an inactive state to an active state. + // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive. + } + + [Export("sceneWillResignActive:")] + public void WillResignActive(UIScene scene) + { + // Called when the scene will move from an active state to an inactive state. + // This may occur due to temporary interruptions (ex. an incoming phone call). + } + + [Export("sceneWillEnterForeground:")] + public void WillEnterForeground(UIScene scene) + { + // Called as the scene transitions from the background to the foreground. + // Use this method to undo the changes made on entering the background. + } + + [Export("sceneDidEnterBackground:")] + public void DidEnterBackground(UIScene scene) + { + // Called as the scene transitions from the foreground to the background. + // Use this method to save data, release shared resources, and store enough scene-specific state information + // to restore the scene back to its current state. + } + } +} diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml new file mode 100644 index 000000000..202a70f02 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml.cs new file mode 100644 index 000000000..75c7fe352 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/App.xaml.cs @@ -0,0 +1,34 @@ +using Microsoft.UI.Xaml; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace NativeEmbeddingDemo.WinUI +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + public partial class App : Microsoft.UI.Xaml.Application + { + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + } + + /// + /// Invoked when the application is launched. + /// + /// Details about the launch request and process. + protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) + { + m_window = new MainWindow(); + m_window.Activate(); + } + + private Microsoft.UI.Xaml.Window m_window; + } +} diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/LockScreenLogo.scale-200.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..7440f0d4bf7c7e26e4e36328738c68e624ee851e GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FqV6|IEGZ*x-#9g>~Mkr+x6^F zy~CDX2QIMs&Gcs3RnRBoxBA!*(Mfw0KTCYuYk0WlEIV>qBmPl! zq4ukrvfADX@#p8fbLY(H47N+k`FZ(FZh?cDro7>{8mkBO3>^oaIx`3!Jl)Qq)HI!+ z(S=1{o~eT)&W^=Ea8C`-17(Jv5(nHFJ{dOjGdxLVkY_y6&S1whfuFI4MM0kF0f&cO zPDVpV%nz;Id$>+0Ga5e9625-JcI)oq=#Pa3p^>8BB}21BUw@eN!-6@w%X+^`+Vn?! zryu|3T>kVWNBYyBc=7Y6H#s1Ah!OI_nezW zXTqOdkv2Az6KKBV=$yHdF^R3Fqw(TZEoNSZX>reXJ#bwX42%f|Pgg&ebxsLQ010xn AssI20 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/SplashScreen.scale-200.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..32f486a86792a5e34cd9a8261b394c49b48f86be GIT binary patch literal 5372 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 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/Square44x44Logo.scale-200.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..f713bba67f551ef91020b75716a4dc8ebd744b1c GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8kjIJFu8cTIEGZ*dUI*J;2{SImxtDO zm%3!R$UazoY}x{$j0P5ABYXWr(l=jxJ6ps1W{tV=^>{Dl><3nv3A}sm=EZ)#l3`NR zpZda3^rNox*D1%NC98Z~L*6zipLw~Gxn&(Y-;KmJ+aR6eLabU-L#y8HW%7P-E_-VlLqIabbHPHKT*)fT@9iWJ7iWgOT9%0}Lrj>lztPxWq6sPw3pi z#-<=#$jjrP_DD*i!RLsn0mIA=>4~N)IMYWIf=j%-zuKCdMG%tHYot70D1| zvWa0wMhauW#S>1CnI_;>!1Q3zMA17@DOVq{MQ+{U7^a&yA+%dMCG;WNPV0i;w$tu; zX^b}UKziPM)(<;)ruW;-`)bBN+rQNM*Zs_>?n$|FVFo-e*PZb*@U7VAd+tHb4e?=Blc~}S6K)wL}r*Gf`BM#QB z+y>N$mCswb4d{^{S9v_!eQj4fTRMOwOCi?lSk9%<=vAz}jM-*PQtH@Odn1LZcd^j#o> hW$4xn+CT+ep9lJ{OAO?njobhL002ovPDHLkV1nYebbkN< literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/StoreLogo.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4586f26bdf7841cad10f39cdffe2aca3af252c1 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fF!p=8IEGZ*dUM0H=rDtTTVkd2 z(%lbKn@VS_lUaADVB&;Z6F#LM+mPsa?e>FnHo;HND^!P`-lX%BH~FOg%y&x+t*x!? zg$#_1A1kgsSvO(fw`bOmo;lrJX8byO1j^gf7qohR%mmt z@L)WX;>gqgK|tWJvQ5j;4;=gt4HXVKSMYRv5RhY5vS~TqfK_NAP*r{h!!g^BZ;w4r z7CGdsai)y;fJQc`7{Zc2b==h%o`Op$|bg6a&nL{*m7-=0>k4M4-PXlU;G-?%*(*g>iFt^ U$m#7DfHB12>FVdQ&MBb@0G`#n8vpc0sq%A~kJcD9FY~qQRMt?ZR3YyDZt}Od;|mgpc{2dv9AHF){kXU%k({ z=Y8JidEayHTkG@twPZ|U3_^%3ct-OgLSiFAqDN!|tbCX@c@?4P`2x*TMK!+Q4b?k0 ziW7!!KF6dPWcF<%I|iznM~`QJ_V7sHGV_D`dhgpA9Vd@&X}ErK+j~_rdv;Bp?OA@a zFXOk7eWOJe5NcK;6h$FaM&7JxNc#-@QTwzW6x#d_zmQNkz5) zPI;kh;3d;5UCJU+9a(cOxX(|edWoOiAEdGU#kPJ&xnc2||3vDbuhBCkj-pb0as$Zl z5;}4n=**n6(1g`JEtSy;SG6X;#-F~Oz3lESG2b5`j@wAwY4Yp<=4Xeb>iH=6aicF?DxD&q{`!&}ct zBI)aycwuobQAf&678Uf+Mmh-@9RUhyH~>?w0dixO0#jZjEc9R^=5NZw=|a(kcB?9^ zfnTiEFXp-q#B;Tn>(O%$A*ud^Rg&eVH6Y_5Y%!E39RR&s?XpG`gKwU!6FE1 z7X)DC7)*(5g}lh`4`{i~DZcWupZI`K)_4P)VE{@gc7@Xsd^86zl~_mOYH?I4!aGeX z^E(_=L6?PgveDQ+r%P@UISEXrkn`LHJZ##+!-anV>6h)IkKp;E@p8+3&(5%kS2)ld*J*rJccZM0iyaAx7+F~GW1UWFK&3X$PE1^}NH zgAG9ck5K!{07OwU@j@Do>TbH=CDEo#4m0cEyAuXy_<&jlzJVcKweSJ5 z&=q~iIn18$w8yb=rmEmHxVEUA^?RwnB?6Qlp1os8@*dWTGL2bhzZ!s*xqScR?EPL` zo(JwNdKUUYy7GtvZ3asXm)cgFvCx9EmAi;|w=a0iGiv%%VYKh`P0Wma4y`Xyx|T~( zAmfGbgbEEC7)j8b@WA@+5W3a61HJXC1dX@6_T|Czk0I0zBk%tnW~()VWITGI!`$c< gARL?UBrYYkwoDw4eo*CrzXGTrZ@;GF>596)00d&n@&Et; literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml new file mode 100644 index 000000000..1fd7ac507 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml.cs new file mode 100644 index 000000000..a9eba09b4 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/MainWindow.xaml.cs @@ -0,0 +1,85 @@ +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace NativeEmbeddingDemo.WinUI +{ + /// + /// An empty window that can be used on its own or navigated to within a Frame. + /// + public sealed partial class MainWindow : Microsoft.UI.Xaml.Window + { + public static readonly Lazy MauiApp = new(() => + { + var mauiApp = MauiProgram.CreateMauiApp(builder => + { + builder.UseMauiEmbedding(); + }); + return mauiApp; + }); + + public static bool UseWindowContext = true; + + MyMauiContent? mauiView; + + public MainWindow() + { + this.InitializeComponent(); + + // Add a StackPanel to the root layout + var stackPanel = new StackPanel + { + Orientation = Orientation.Vertical, + HorizontalAlignment = Microsoft.UI.Xaml.HorizontalAlignment.Stretch, + VerticalAlignment = Microsoft.UI.Xaml.VerticalAlignment.Stretch, + Spacing = 8, + Padding = new Microsoft.UI.Xaml.Thickness(20) + }; + rootLayout.Children.Add(stackPanel); + + // Create WinUI button + var nativeButton = new Microsoft.UI.Xaml.Controls.Button(); + nativeButton.Content = "WinUI button above .NET MAUI controls"; + nativeButton.HorizontalAlignment = Microsoft.UI.Xaml.HorizontalAlignment.Center; + nativeButton.Click += OnWindowsButtonClicked; + stackPanel.Children.Add(nativeButton); + + // Ensure .NET MAUI app is built before creating .NET MAUI views + var mauiApp = MainWindow.MauiApp.Value; + + // Create .NET MAUI context + var mauiContext = UseWindowContext + ? mauiApp.CreateEmbeddedWindowContext(this) // Create window context + : new MauiContext(mauiApp.Services); // Create app context + + // Create .NET MAUI content + mauiView = new MyMauiContent(); + + // Create native view + var nativeView = mauiView.ToPlatformEmbedded(mauiContext); + + // Add native view to layout + stackPanel.Children.Add(nativeView); + } + + private async void OnWindowsButtonClicked(object? sender, RoutedEventArgs e) + { + if (mauiView?.DotNetBot is not Microsoft.Maui.Controls.Image bot) + return; + + await bot.RotateTo(360, 1000); + bot.Rotation = 0; + + bot.HeightRequest = 90; + } + + private void OnNewWindowClicked(object sender, RoutedEventArgs e) + { + var window = new MainWindow(); + window.Activate(); + } + + } +} diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/NativeEmbeddingDemo.WinUI.csproj b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/NativeEmbeddingDemo.WinUI.csproj new file mode 100644 index 000000000..b80c16694 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/NativeEmbeddingDemo.WinUI.csproj @@ -0,0 +1,63 @@ + + + WinExe + net8.0-windows10.0.19041.0 + 10.0.17763.0 + NativeEmbeddingDemo.WinUI + app.manifest + x86;x64;ARM64 + win10-x86;win10-x64;win10-arm64 + win10-$(Platform).pubxml + true + true + enable + enable + true + + true + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Package.appxmanifest b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Package.appxmanifest new file mode 100644 index 000000000..9a2e467bd --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Package.appxmanifest @@ -0,0 +1,51 @@ + + + + + + + + + + NativeEmbeddingDemo.WinUI + dabritch + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Properties/launchSettings.json b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Properties/launchSettings.json new file mode 100644 index 000000000..8e1684848 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/Properties/launchSettings.json @@ -0,0 +1,10 @@ +{ + "profiles": { + "NativeEmbeddingDemo.WinUI (Package)": { + "commandName": "MsixPackage" + }, + "NativeEmbeddingDemo.WinUI (Unpackaged)": { + "commandName": "Project" + } + } +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/app.manifest b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/app.manifest new file mode 100644 index 000000000..23a711688 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.WinUI/app.manifest @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + PerMonitorV2 + + + \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/AppDelegate.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/AppDelegate.cs new file mode 100644 index 000000000..ba25f30ea --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/AppDelegate.cs @@ -0,0 +1,17 @@ +namespace NativeEmbeddingDemo.iOS +{ + [Register("AppDelegate")] + public class AppDelegate : UIApplicationDelegate + { + public override UIWindow? Window { get; set; } + + public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions) + { + Window = new UIWindow(UIScreen.MainScreen.Bounds); + var vc = new MainViewController(); + Window.RootViewController = vc; + Window.MakeKeyAndVisible(); + return true; + } + } +} diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..98f4d035c --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,117 @@ +{ + "images": [ + { + "scale": "2x", + "size": "20x20", + "idiom": "iphone", + "filename": "Icon40.png" + }, + { + "scale": "3x", + "size": "20x20", + "idiom": "iphone", + "filename": "Icon60.png" + }, + { + "scale": "2x", + "size": "29x29", + "idiom": "iphone", + "filename": "Icon58.png" + }, + { + "scale": "3x", + "size": "29x29", + "idiom": "iphone", + "filename": "Icon87.png" + }, + { + "scale": "2x", + "size": "40x40", + "idiom": "iphone", + "filename": "Icon80.png" + }, + { + "scale": "3x", + "size": "40x40", + "idiom": "iphone", + "filename": "Icon120.png" + }, + { + "scale": "2x", + "size": "60x60", + "idiom": "iphone", + "filename": "Icon120.png" + }, + { + "scale": "3x", + "size": "60x60", + "idiom": "iphone", + "filename": "Icon180.png" + }, + { + "scale": "1x", + "size": "20x20", + "idiom": "ipad", + "filename": "Icon20.png" + }, + { + "scale": "2x", + "size": "20x20", + "idiom": "ipad", + "filename": "Icon40.png" + }, + { + "scale": "1x", + "size": "29x29", + "idiom": "ipad", + "filename": "Icon29.png" + }, + { + "scale": "2x", + "size": "29x29", + "idiom": "ipad", + "filename": "Icon58.png" + }, + { + "scale": "1x", + "size": "40x40", + "idiom": "ipad", + "filename": "Icon40.png" + }, + { + "scale": "2x", + "size": "40x40", + "idiom": "ipad", + "filename": "Icon80.png" + }, + { + "scale": "1x", + "size": "76x76", + "idiom": "ipad", + "filename": "Icon76.png" + }, + { + "scale": "2x", + "size": "76x76", + "idiom": "ipad", + "filename": "Icon152.png" + }, + { + "scale": "2x", + "size": "83.5x83.5", + "idiom": "ipad", + "filename": "Icon167.png" + }, + { + "scale": "1x", + "size": "1024x1024", + "idiom": "ios-marketing", + "filename": "Icon1024.png" + } + ], + "properties": {}, + "info": { + "version": 1, + "author": "xcode" + } +} \ No newline at end of file diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png new file mode 100644 index 0000000000000000000000000000000000000000..b573205418896a726aca2711a04b355f2ac39377 GIT binary patch literal 10753 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 F1OQcq5<>t0 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png new file mode 100644 index 0000000000000000000000000000000000000000..1c1931312b67f4d54580f0307a9b19af555085d6 GIT binary patch literal 1381 zcmeAS@N?(olHy`uVBq!ia0vp^GeDSw4M<8HQcwg^oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB?k`Ul$B+ufw|9I!Lb7F!e_X!nd(p}47@?)% z9=BMwoxOH*QLm$8NO#N=tv9Kc4=u>WDg4FZjhT?Z6g6DBAb zcnC@?;ou2kVbf%478zv1U#Dj)%#Hq6+RlEx;=Z}noKk`S9bG^ z`1|AE-R~b?_Tu--W2cwTztiizKKt8Gu}v4wFS-)YxOL0Ag6QpAf800Uac%CM?{{=V zSDugVI(jek;eXFhpRaZ&@J;;2{pxM>+kp6{sAgG-7X`Af{}-;1=Pm8fInKB6___7P z>HPakGH1;HEoQqf{L9D6ZFX7uo87W9W9R*r31*8?1}DLm?0QxwOR6>A-BntS8sYgR?SU%2f>>VL2H64RQ5Z>tL5T$`P7!YcmDzJD2JZ6&Om z*-rZ(d7NXmt-irIbygGS8`qLssUVF=l3egI8r|%18GL_Maw7t z^8dT@?5#Kkn_b`cWdIdql?AtG{phxPV={?1@$rma)#aM&w4^@vFz1*Z6U*Maj6=s> zT03R-_Z#NRu9{qTy|w6Gxs>Mq{56qccRjOb9q^j#cIx~wt()HcN3&OH?|vI#`7>eL zi??TvmCSl~jnR3z@jcyZa~@q>(S0CCHzl0urt{wN(~myoZftXV)f~oss!ZX?e8)Wg zbk)h8|>w>cj+Q@2>)x`|q3+DxdOFAPv z?w7fj_cNqIigWAKUrP74KiKB%7Bu}|zsbRMmrR!KW82KS-M0Jdx2;dbP6|JM?=83M z&CRqIK0m81LJp-Ri~H|6Rr}USUQA-&y}r1Xk~Q_uvp#+m&sO@iSbNXKlYeq*=Ql=d q+n)WZo!MoFyY`^X*6?ztj*0VtTXf!f`6a+ok-^i|&t;ucLK6V1xMsHi literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3e8bd8efb7f2bfc0cd3ec6233298f4285e47d6 GIT binary patch literal 1503 zcmdUvi&v5d0L4E`(`o8FW|DfeW)HV!tmx1ScIjs2 ze3Dw3Dda?=^8Ff``6$yOB@;-pVV?%W#|JUnf6+Pj-ru?R54d^$zMh8q7Wx1H7&sI?3K1u0b@d#ThJN+b>r9Wz5@%y9L^AS!~_hyj=~UlC7r?dY$ZN?0s$Lb#NGGW(H>I$K?!N*|A`}*3nL$c}~D~NbdawE+MBs5z&W1>F7NZ!L@LXMp% zSj(TKfwx7l%eIyhb%;{xMA?X^w79i2ND^^)%lV!aJOpSG-(eTPLhaEkI z)#}DMDg70OdXImTwdB4^#>Z!((3tkF)~>j5vw=NiTlcwvQ?oFdP}i+vq*oBD2i4uS z89mJl{cr$m9C4WlQ7%q#&oLI$DDwO_DEgVsI!oQEZ6ij{c=-4d;?saWw?RBpY(9TT z@LE9@ehz$R)`3qHNfX3{^CxK0+>FmX+_y>KX7tw7+Q-;FW61O@*$^|!g}+Zz+eK6) z*0$xmZ8DDaJUFk_bT>(Bwjo=5|384j#|F(wS-uPaW zTsIrZ>p+$^IhIjenjGLtL33Ot3e%$YDn}rjApH}jx+ID!PR1#U>Kcf|DLD(v1Vg?PR-NkR z{6V;ogrX<~eKJm9?!h^r8RqpXqs5lJFFRS(MS9C) z#IhMB#Bmjt$xEQ>Qd+KAzev%sSah7~^66GSsOvbrG!FGl+rPFaCUK%vsiS?354-#Q z&@HR#Nw0y0jPo^~cUKM1ot0`vB#-}YWsOjmNRr8!avA3pLVV4s=7d47#=mV?pgwA0 z{bc?L?J!?JzswY8$1?|S1Xb2W=P(dx&87LG%Sr)0A<0zmyOUHQ@A!a?(PgHbpMz+J zMCYh~{tIVRvn^LtN5ElRFc>-47Fq%-?Hlepk`JyKOdeu!lM%NK;H5(=GCaP3JHb-$$IG7A9(Re5}$C zO{Y^&Q%UlhlrA{){X%hyf=D&W5=-z6^3c)0(K+{i?!BKM?&r5pAtu0kkD;X@004W? zKAwR(1wYe3UpL`g{nI+xo#Ydo3IIm?KXV6AQTdH-xg#~u8wD^%t);pE!6W^V0KhCZ z()_Fk0D4VmPvnmoI~HgC<4vQj`O5kCdmn*&3c@B9|CM>H(&hHo zBWE#|%BSj)Z5lq^+W899@^Ec8a0IgF*p~!nS_x`8!0JGb&GI^R&aBfki;(xnIPT+O z=ytziRT!7PxbU(kLNVI;MDS*Cn&9{VUluP*A*^$Z4~Yos4Pr>s$o6mjzmADpF)?~# z@jh)HyG*J2$40y{KF(=rPkD`-WPeq4VsC_QQ&8^fX#Y>!W?H->=tIJfU3-jyX z=^h<7jRqr!X59Us$tr3(NSy!VLGue&!zsO4oQ0v>OYGiM4$&ax0C+<_2~}skFLOFE z`wT-OtvTQL0THmpQt=Czgz^!j+JJiDMe z_9T6(w29g!tY(P9z@M!8@e{}4Po0TDMSqr-jWxWuFv6bITZByoc2S0Qb8;Em(HGO_ zQue}c$TB4q!!~LBa5OLbmQq`ejf#jmTSa&wRxvy+@;R5}lWaYnB)&7nxV#-4STaew z1KNc4YMbjXnv!@P;Y)Z2HP&5s%*GEXH!Zr$*_@?N#tQ8bYF2%*e1(vlv$f1STI@DJ zzLtx#YFi~r6B}N&k0F$e_2*uz;pV$`b+l`PYH3!Q>Xi?YGwN1vTjU8>60H>Ee+r`9 zih2^#nP(5Z7Mz3tA>l&WGAKB9Hu!No?M_dPD1xd1-3tM)%Ly8egB%U2^_H zVA=~E<{!-tudOFP*1aAWCHvI!`0V_9p7SOzd;B*&LF0|XN+Ac!`|e6-ncpm5wkfW} z`jV)^k6e$mJsIX=8P}dgY;HDfT#}gI>~yi+F<-lyMdUd97I$lxM>4NM12_7cIx~5m z7G7jH{S7ChbC?tNFA7=q u%jWg73Ww?aobowYX4QfG)Ghby8T2o6`lp|qwL%RT01Te4elF{r5}E+g-iaXq literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd130c3533a790bb74dc41c9449ac92a35f91fa GIT binary patch literal 422 zcmV;X0a^ZuP)|_=KlV-gVKz`+>u~=iGDe_nmW==ej!146$U~SOHR0ib_!_YRjfm!dcV@ zug?uNUgv)J&;$S87PM3wmp40;ybSYCPPZ+0lk85p*q?dRvC_!7g4lBqAtpx98i^|W zL#`hJFxaDHt>%EQbWUd2hzVCpsPP)^9(VC{tJ|E_Cwo2HL4b8(IzEliOsRE7p=W8Q z$;bZzH&aXmp-PF**Am`-_o4nZEb;q`JQihcrQz`mO=xC`uPU3P-x8+^$-K%2M44MD z&G6^l;B6%%65kbsjy%wFUG8hC7Gf_!zNcI*O=IXgin`>VgA|pbQgppVM^MURaWqK6 Q$p8QV07*qoM6N<$f-C~EaR2}S literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png new file mode 100644 index 0000000000000000000000000000000000000000..75d27899e32c19478fd914072864166c937fcc0c GIT binary patch literal 537 zcmV+!0_OdRP){d(V$|3f^#jaM643@xCADcrHBCy!ZMW42&5J4hdo*K`bPQg#@vX zAQlqDVtB#+UV?4*J~qrC=4-#!Ipxx)64MBe7hD$AGh5F>3HpOW5C{v9I(de}?I&eD zv_1?@Ca}4bh3Q#4MB?tI-|_XWqcPPpm*?)=O7VW%|O z#dL$N67v!z_X`kM5#TcYrW!Nlvq_&k;}~=aa(JW6u!dNTyP%*_t_{{0e*x+qOt3$? zXL10%^=$nI9R>YC2ke}VgSCFwHNrEOI(|{T<034x^6>hspqGv%e!Q)MXX0JzKK|Wi zFE#Ba4@4$!f^zXonv1y_T%5f&AJXvVok^F#I@o>TO!VT8gaomWAQlqDLV{RG5DN)n bF}&ap%6*B^)@pj400000NkvXXu0mjf(5>oa literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png new file mode 100644 index 0000000000000000000000000000000000000000..06afa60917f35358a1f61d08d10c440432bc0d01 GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^Rv^s51|%Qu_R;`SoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3`~KZE{-7;jBjVzdPE0`H1uzsc1>WR=;fs7 z3rjg(M$NhHq|W{J3Sa4l;LO#lTURyPKZyQ&_^8DTA@;zMK!cgR*({}jQ+`Z-z~9N4 z_2K!P)hzKfm1-YZAD#TEuxEeuR9tjNATSRi%&PoL;N6Maw=!^<#I1`|CYDq<$>pZIp1Gj=3+5_{GcL| zso6N6Xa9Lyfso_*`(+c_%9G@)qRkXz-|1Aza-Dl_*^=-;<*i*eci`Pp1A+a8^VvEh zVy&7Yo_zUK^Haj;pwUGQwuH^%&d#5UFU&H#^vap}(ya|?Kh9WJPOy;wZhbW{J1RWi z#Vlgl;(a?eaP9f#EP2jB^NI8{vBmpV&&hmK#k$mD_s^E4mamTQnI(0z_59bTAO8BY z?%1{6_x9~mT?;pE4l2+0xb695;nWB%uO8l(4_~)B-|a8@;3IQDN^C+%fZzWApF+yd z_x^p~sv)W>e(u!%dDlN|{>i#!sfHQL(~?i0bGpywM(BC{uu0r%b3rOP{QsFPx$BNh zI(hTlis$tXXZ6;u-DacVBiS8x-R9r}?Sk^pC$_|Lq@TJgA2cb{v_E)Tamch6b~~k} z^u*uYAECP1uz>5;Hr*RvUg%w^+oE1(cJe|3@3~jon?iP;{bUtwB=$8)wKws@=Xo8w zmdPxxU0$!4cH`dC++@~$XD%N;G1JQJaQdo#LF>jH2lL;({*~@L@lSiBB#!6<3m;=$ YQNGXVR!{jmU}9tNboFyt=akR{0D(wBr2qf` literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0db2a6123440f30a37f1b6a69753c01d74bc6e GIT binary patch literal 700 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3`~KZE{-7;jBjUIdMtJnX_)_dSNo*BPKWYR zrnlrWZH(P+)*5<**^ygxi%|b5rPf;&4O3lhyja(Yh`2^4uiYl-BB0$YWn-YW;E`dz zjfcs}`4c-^rhj)lG5_S5|NrmXzdt+M;nS+v#^@7@_Z<5U9=ej4_-cbeX~YaG9Uob- zWqjPh?X4>hgN2{W`A~hK;qXsRF5mCx^NN*cZ94z%8mr6U>zmGgU2l+hKjQ}*-}iL~ z-u>ZlJ2FpSb_>V$iu$hE`jd|DJ-eH8>E3u?xo4hvb;$G1b7sTc?FU!yDBIm3(EfSzjGx|$5|vr~ z8fWwtg-Yo6EqtB%hw=2~QUEdnH#Nd?L>-l_9;%k?#RQ?%vJxx^cH{&M3 zwTBc1+l-aIclrFhV3^RH<5JD1?=SBd`7~TZusdSqZI;*nHawhhE}j4Q{)$yw1XeEC z%a<(IZ}%kPdBR2w*Pm_4r&jGdzIV;GGfSJlNxE%VqtiKaU51Hs?QT}Jwr|1Tjt7aJ z-udX%YA3fA!8MEDt;&CpX>j<~smN3NBAV`X_2lXrZgJoB-dQ@kc-sf9hyUN{Z@MS7 z@tytTQsLi^^t7b|_+ADnzW(}m+VL6HZVz9)zSsP4=l)G0s>yZ_sxF2FZ{nQk5NRQ@ zXUc8sCowsn1gC842w#*tZ_U|c#SbPk<7<{r+Aa9UQSq03+~=)NKF*KofW#K=NR;(! WKFVR5TxtbOYz&^RelF{r5}E)t4@Uw3 literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png new file mode 100644 index 0000000000000000000000000000000000000000..755bc880a9ec72638840e9c5ae10c5055194275e GIT binary patch literal 870 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957Y)yoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di3{1a0T^vIy7~js`pDmmyaeThi>PuUqSe-Lv zg1CY@vi~={ank17#qsaP5gk3QseDv>!Tjk*?yCO&8{OF@-z2* z*!r~2Pwjkqs^$0aI~N2Ky)ri3mOH+@@8s3X@hNLJTr9bNZ{Mw^aL%jqKg%x-s{Z{} zK~^}dcix$k#qLjzJ{B!>zSuFZdRNr?Z+cEg#J5yDyYF}G4Uz37 zF*EL&RWYUOw?Fy&M*p>`m*IZJlWLph8u|CI-rWQQ?w&2Iy zKJMVilkQKo*M!IA``SPDTr;D3Th{l9#?P+3dCA=o|8dDnZDTdPJJpssvx*(`V&x42 zlQ+Ii-pU@f$o*}4-SjUtj(d)5elY9rmOS(L+!Gfs$~`G~?fLo-_qVF}mGeSpEb`xc z=PnQl;9b@bTp?P08^Hg)~``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di49vWqE{-7;jBjV#X9Nd|9P?kZ$i(f)q@dN# zyFC`hp3P%j&cU@v_RR&qpwgm%6;?mkUuA{PndLa$BCK|#8zmZyiL`~>i5h3KAl^9-d1(r=ffNSJ4vPW3vh6;EOZc{0&!DY zH|0l4dEy+uf0IKVy2zyZKu6nlo;ReN~bITV_ou`*V*6Zl43FUnn6=V5%>7&=#YCOd^&u;p>@G|3P z7Wu8mi;eG}`JI0HopXWfg483)x(wq2C4bXowL2?%A>-yzvn*k;>iA2 z{Wp$1F)3b;GuBhj~Bp;|JpQwO z*ZW?p32)ivnF=fQmx+n2<-IL>p5@rIHIr_An6O28-nPvq-=A(TeY?v)&x?;|w#~BR zhhEF~iLvQtHW*IQ#0=BoH)_-a^uzRwoUhf^Et$~ zpYVGAagkVyv&Ga1{V9UKE}zP=nwMN=^)gel=|T1}@paA1=1Ft@RNaWmn_@-KZJ=&DT+y^{-2M~^``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&di49w1+E{-7;jBn={`UD4xwDB)G7T_S_$gG#6 zwnM9MiJD&00Z%sT2Pq~Sj67ndc!Z0(Sv_FzlbHFsXUz-&@s4FHR5cb(S;6w!_PWT2 zrL|ui|Hpm$RL^;`xjee!{@(X@{>x4ZyPG%vJZEEp4+qaFR;Qf~8sZ#JnHI(UeNxecVf1CH;JhSbLPtAAP`**5>takg~eq55}eQ$51cE!2=Kd-H- zrIze`+QPDM%KnWaT59F*S@rb(OyMt{?Rxz64Qu{cZ$JKt`BuNP`rOZn^|4!aJKkFF zqQdd=%KJ?xN`u6Hwd;HN#%^ty+qEV}f7h>FN$F3&-sqBHi%snRJ+0=rjr0$dt@Aqf zWY&FOd&9EYW_HZu-9 zYOC*mx6lyP=MG-Hd-d0Q4_G;kMWU#}2# zo0F3vb@ZO!npwU}FJ8O9@8D-4`5!utomawVpUl*%(6ijDroA94O3Uww)+`aLMWtm| z%UoXjimm;4c3T;o(KU+Fh#8-FS2R z_Xf{n%qf2R=j={YJ8$auRIBrc`O6(~`S~B$?e5(c#-{l8$F=W=E5m(GJ4bAOKQY6y zYV-Th%@zWH1Eys0;~vT}C$bxmv8=DplYYQ69;m5X6t{`{4epL?ox zO6!|n2lX`sk8k-O6R>TnwdJg7F?#A-pG_>eba}a~{Ldu$P;bZ0?>k-|e0IEA-AjIM zJkL_Es`b47s}0Yu(Tx1bu{=`JRn&eiC;R{3R7rHGX||qm$-h4Zra#Y40cI}-Pgg&e IbxsLQ06r+Fc>n+a literal 0 HcmV?d00001 diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Entitlements.plist b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Entitlements.plist new file mode 100644 index 000000000..36a870670 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Entitlements.plist @@ -0,0 +1,6 @@ + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Info.plist b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Info.plist new file mode 100644 index 000000000..f72bacae2 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Info.plist @@ -0,0 +1,42 @@ + + + + + CFBundleDisplayName + NativeEmbeddingDemo.iOS + CFBundleIdentifier + com.companyname.nativeembeddingdemo + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIDeviceFamily + + 1 + 2 + + UILaunchStoryboardName + LaunchScreen + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/AppIcon.appiconset + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Main.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Main.cs new file mode 100644 index 000000000..8f4720b33 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Main.cs @@ -0,0 +1,6 @@ +using NativeEmbeddingDemo.iOS; + +// This is the main entry point of the application. +// If you want to use a different Application Delegate class from "AppDelegate" +// you can specify it here. +UIApplication.Main(args, null, typeof(AppDelegate)); diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/MainViewController.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/MainViewController.cs new file mode 100644 index 000000000..6f1a8c57e --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/MainViewController.cs @@ -0,0 +1,88 @@ +using Microsoft.Maui.Platform; + +namespace NativeEmbeddingDemo.iOS +{ + public class MainViewController : UIViewController + { + UIWindow GetWindow() => + View?.Window ?? + ParentViewController?.View?.Window ?? + MainViewController.MauiApp.Value.Services.GetRequiredService().GetWindow() ?? + UIApplication.SharedApplication.Delegate.GetWindow(); + + public static readonly Lazy MauiApp = new(() => + { + var mauiApp = MauiProgram.CreateMauiApp(builder => + { + builder.UseMauiEmbedding(); + }); + return mauiApp; + }); + + public static bool UseWindowContext = true; + + MyMauiContent? mauiView; + + public override void ViewDidLoad() + { + base.ViewDidLoad(); + + Title = "Main view controller"; + + View!.BackgroundColor = UIColor.SystemBackground; + + var stackView = new UIStackView + { + Axis = UILayoutConstraintAxis.Vertical, + Alignment = UIStackViewAlignment.Fill, + Distribution = UIStackViewDistribution.Fill, + Spacing = 8, + TranslatesAutoresizingMaskIntoConstraints = false + }; + View.AddSubview(stackView); + + NSLayoutConstraint.ActivateConstraints(new[] + { + stackView.TopAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TopAnchor, 20), + stackView.LeadingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.LeadingAnchor, 20), + stackView.TrailingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TrailingAnchor, -20), + stackView.BottomAnchor.ConstraintLessThanOrEqualTo(View.SafeAreaLayoutGuide.BottomAnchor, -20) + }); + + // Create UIKit button + var uiButton = new UIButton(UIButtonType.System); + uiButton.SetTitle("UIKit button above .NET MAUI controls", UIControlState.Normal); + uiButton.TouchUpInside += OnUIButtonClicked; + stackView.AddArrangedSubview(uiButton); + + // Ensure .NET MAUI app is built before creating .NET MAUI views + var mauiApp = MainViewController.MauiApp.Value; + + // Create .NET MAUI context + var mauiContext = UseWindowContext + ? mauiApp.CreateEmbeddedWindowContext(GetWindow()) // Create window context + : new MauiContext(mauiApp.Services); // Create app context + + // Create .NET MAUI content + mauiView = new MyMauiContent(); + + // Create native view + var nativeView = mauiView.ToPlatformEmbedded(mauiContext); + + // Add native view to layout + stackView.AddArrangedSubview(nativeView); + } + + async void OnUIButtonClicked(object? sender, EventArgs e) + { + if (mauiView?.DotNetBot is not Image bot) + return; + + await bot.RotateTo(360, 1000); + bot.Rotation = 0; + + bot.HeightRequest = 90; + } + } +} + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/NativeEmbeddingDemo.iOS.csproj b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/NativeEmbeddingDemo.iOS.csproj new file mode 100644 index 000000000..9100674e4 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/NativeEmbeddingDemo.iOS.csproj @@ -0,0 +1,22 @@ + + + net8.0-ios + Exe + enable + true + 13.0 + + true + true + + + + + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Resources/LaunchScreen.xib b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Resources/LaunchScreen.xib new file mode 100644 index 000000000..819020174 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.iOS/Resources/LaunchScreen.xib @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.sln b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.sln new file mode 100644 index 000000000..5d7d21ab7 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo.sln @@ -0,0 +1,173 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34622.214 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeEmbeddingDemo", "NativeEmbeddingDemo\NativeEmbeddingDemo.csproj", "{B5348805-A47A-4F1B-99D2-95E2D21A9A51}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeEmbeddingDemo.iOS", "NativeEmbeddingDemo.iOS\NativeEmbeddingDemo.iOS.csproj", "{BCDE4985-CC8C-4FE9-A196-18385F0C9B67}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeEmbeddingDemo.WinUI", "NativeEmbeddingDemo.WinUI\NativeEmbeddingDemo.WinUI.csproj", "{116EAB9E-EE24-4676-B279-5295D922E07C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeEmbeddingDemo.Library", "NativeEmbeddingDemo.Library\NativeEmbeddingDemo.Library.csproj", "{4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NativeEmbeddingDemo.Droid", "NativeEmbeddingDemo.Droid\NativeEmbeddingDemo.Droid.csproj", "{76B43FBB-1DEA-4260-8802-7DC0015A916F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NativeEmbeddingDemo.MacCatalyst", "NativeEmbeddingDemo.MacCatalyst\NativeEmbeddingDemo.MacCatalyst.csproj", "{A63220BF-4101-4D60-A75D-CF2693646A6A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|ARM64.Build.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|ARM64.Deploy.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|x64.ActiveCfg = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|x64.Build.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|x64.Deploy.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|x86.ActiveCfg = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|x86.Build.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Debug|x86.Deploy.0 = Debug|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|Any CPU.Build.0 = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|Any CPU.Deploy.0 = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|ARM64.ActiveCfg = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|ARM64.Build.0 = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|ARM64.Deploy.0 = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|x64.ActiveCfg = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|x64.Build.0 = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|x64.Deploy.0 = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|x86.ActiveCfg = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|x86.Build.0 = Release|Any CPU + {B5348805-A47A-4F1B-99D2-95E2D21A9A51}.Release|x86.Deploy.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|ARM64.Build.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|ARM64.Deploy.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|x64.ActiveCfg = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|x64.Build.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|x64.Deploy.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|x86.ActiveCfg = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|x86.Build.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Debug|x86.Deploy.0 = Debug|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|Any CPU.Build.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|ARM64.ActiveCfg = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|ARM64.Build.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|ARM64.Deploy.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|x64.ActiveCfg = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|x64.Build.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|x64.Deploy.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|x86.ActiveCfg = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|x86.Build.0 = Release|Any CPU + {BCDE4985-CC8C-4FE9-A196-18385F0C9B67}.Release|x86.Deploy.0 = Release|Any CPU + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|Any CPU.ActiveCfg = Debug|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|Any CPU.Build.0 = Debug|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|Any CPU.Deploy.0 = Debug|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|ARM64.Build.0 = Debug|ARM64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|x64.ActiveCfg = Debug|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|x64.Build.0 = Debug|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|x64.Deploy.0 = Debug|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|x86.ActiveCfg = Debug|x86 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|x86.Build.0 = Debug|x86 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Debug|x86.Deploy.0 = Debug|x86 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|Any CPU.ActiveCfg = Release|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|Any CPU.Build.0 = Release|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|Any CPU.Deploy.0 = Release|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|ARM64.ActiveCfg = Release|ARM64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|ARM64.Build.0 = Release|ARM64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|ARM64.Deploy.0 = Release|ARM64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|x64.ActiveCfg = Release|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|x64.Build.0 = Release|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|x64.Deploy.0 = Release|x64 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|x86.ActiveCfg = Release|x86 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|x86.Build.0 = Release|x86 + {116EAB9E-EE24-4676-B279-5295D922E07C}.Release|x86.Deploy.0 = Release|x86 + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|ARM64.Build.0 = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|x64.Build.0 = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Debug|x86.Build.0 = Debug|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|Any CPU.Build.0 = Release|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|ARM64.ActiveCfg = Release|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|ARM64.Build.0 = Release|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|x64.ActiveCfg = Release|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|x64.Build.0 = Release|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|x86.ActiveCfg = Release|Any CPU + {4B4770CF-082D-45AB-86AA-4C7A5ECBC20A}.Release|x86.Build.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|ARM64.Build.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|ARM64.Deploy.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|x64.ActiveCfg = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|x64.Build.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|x64.Deploy.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|x86.ActiveCfg = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|x86.Build.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Debug|x86.Deploy.0 = Debug|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|Any CPU.Build.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|Any CPU.Deploy.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|ARM64.ActiveCfg = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|ARM64.Build.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|ARM64.Deploy.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|x64.ActiveCfg = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|x64.Build.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|x64.Deploy.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|x86.ActiveCfg = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|x86.Build.0 = Release|Any CPU + {76B43FBB-1DEA-4260-8802-7DC0015A916F}.Release|x86.Deploy.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|ARM64.Build.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|ARM64.Deploy.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|x64.ActiveCfg = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|x64.Build.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|x64.Deploy.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|x86.ActiveCfg = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|x86.Build.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Debug|x86.Deploy.0 = Debug|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|Any CPU.Build.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|Any CPU.Deploy.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|ARM64.ActiveCfg = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|ARM64.Build.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|ARM64.Deploy.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|x64.ActiveCfg = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|x64.Build.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|x64.Deploy.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|x86.ActiveCfg = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|x86.Build.0 = Release|Any CPU + {A63220BF-4101-4D60-A75D-CF2693646A6A}.Release|x86.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {16ABD2C7-7D6E-4245-A09A-22B4756A0A80} + EndGlobalSection +EndGlobal diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml new file mode 100644 index 000000000..4989854ea --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml.cs new file mode 100644 index 000000000..985a0ba19 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/App.xaml.cs @@ -0,0 +1,10 @@ +namespace NativeEmbeddingDemo +{ + public partial class App : Application + { + public App() + { + InitializeComponent(); + } + } +} diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MauiProgram.cs b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MauiProgram.cs new file mode 100644 index 000000000..833d00224 --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MauiProgram.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Logging; + +namespace NativeEmbeddingDemo +{ + public static class MauiProgram + { + public static MauiApp CreateMauiApp(Action? additional = null) + { + var builder = MauiApp.CreateBuilder(); + builder + .UseMauiApp() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + +#if DEBUG + builder.Logging.AddDebug(); +#endif + additional?.Invoke(builder); + + return builder.Build(); + } + } +} diff --git a/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MyMauiContent.xaml b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MyMauiContent.xaml new file mode 100644 index 000000000..381bc013e --- /dev/null +++ b/8.0/PlatformIntegration/NativeEmbeddingDemo/NativeEmbeddingDemo/MyMauiContent.xaml @@ -0,0 +1,32 @@ + + + + + + + + + +