diff --git a/src/Uno.Templates/content/unoapp/.template.config/Assets/Features.MeadowSupport.svg b/src/Uno.Templates/content/unoapp/.template.config/Assets/Features.MeadowSupport.svg
new file mode 100644
index 000000000..814e9d48d
--- /dev/null
+++ b/src/Uno.Templates/content/unoapp/.template.config/Assets/Features.MeadowSupport.svg
@@ -0,0 +1,18 @@
+
diff --git a/src/Uno.Templates/content/unoapp/.template.config/TemplateWizard.json b/src/Uno.Templates/content/unoapp/.template.config/TemplateWizard.json
index 30efedcdd..79c410edf 100644
--- a/src/Uno.Templates/content/unoapp/.template.config/TemplateWizard.json
+++ b/src/Uno.Templates/content/unoapp/.template.config/TemplateWizard.json
@@ -75,6 +75,7 @@
"logging": "none",
"markup": "xaml",
"mediaElement": "false",
+ "meadowSupport": "false",
"navigation": "blank",
"platforms": "android|ios|maccatalyst|wasm|windows|desktop",
"rider": "true",
@@ -113,6 +114,7 @@
"logging": "default",
"markup": "xaml",
"mediaElement": "false",
+ "meadowSupport": "false",
"navigation": "regions",
"platforms": "android|ios|maccatalyst|wasm|windows|desktop",
"rider": "true",
@@ -198,7 +200,7 @@
{
"Title": "",
"SectionType": "MultiSelect",
- "SymbolIds": [ "toolkit", "mauiEmbedding", "server", "wasmMultiThreading", "wasmPwaManifest", "vscode", "enableDeveloperMode", "mediaElement" ]
+ "SymbolIds": [ "toolkit", "mauiEmbedding", "server", "wasmMultiThreading", "wasmPwaManifest", "vscode", "enableDeveloperMode", "mediaElement", "meadowSupport" ]
}
],
"Framework": [
@@ -561,6 +563,9 @@
"mediaElement": {
"Icon": "/Assets/Features.MediaElement.svg"
},
+ "meadowSupport": {
+ "Icon": "/Assets/Features.MeadowSupport.svg"
+ },
"wasmPwaManifest": {
"Icon": "/Assets/Features.Wasm.svg",
"Requires": {
@@ -648,7 +653,8 @@
"themeService",
"continuousIntegration",
"isCustomized",
- "mediaElement"
+ "mediaElement",
+ "meadowSupport"
],
"PackagesToUpdate": [
{
diff --git a/src/Uno.Templates/content/unoapp/.template.config/dotnetcli.host.json b/src/Uno.Templates/content/unoapp/.template.config/dotnetcli.host.json
index 5fd916978..b2d9d6e98 100644
--- a/src/Uno.Templates/content/unoapp/.template.config/dotnetcli.host.json
+++ b/src/Uno.Templates/content/unoapp/.template.config/dotnetcli.host.json
@@ -97,6 +97,10 @@
"longName": "media-element",
"shortName": "media"
},
+ "meadowSupport": {
+ "longName": "meadow-support",
+ "shortName": "meadow"
+ },
"skipRestore": {
"longName": "skip-restore",
"shortName": "skip"
diff --git a/src/Uno.Templates/content/unoapp/.template.config/template.json b/src/Uno.Templates/content/unoapp/.template.config/template.json
index 512706a1f..01259e670 100644
--- a/src/Uno.Templates/content/unoapp/.template.config/template.json
+++ b/src/Uno.Templates/content/unoapp/.template.config/template.json
@@ -726,6 +726,13 @@
"datatype": "bool",
"defaultValue": "true"
},
+ "meadowSupport": {
+ "displayName": "Meadow Support",
+ "description": "Includes a support for Meadow by Wilderness Labs",
+ "type": "parameter",
+ "datatype": "bool",
+ "defaultValue": "false"
+ },
"mauiEmbedding": {
"displayName": ".NET MAUI Embedding",
"description": "Configures application to embed .NET MAUI controls",
@@ -1106,6 +1113,11 @@
"datatype": "bool",
"value": "(platforms == wasm && server)"
},
+ "useMeadowAndCsharpMarkup": {
+ "type": "computed",
+ "datatype": "bool",
+ "value": "(useCsharpMarkup && meadowSupport)"
+ },
"useWinAppSdk": {
"type": "computed",
"datatype": "bool",
@@ -3191,6 +3203,12 @@
"exclude": [
"MyExtensionsApp.1/Styles/ColorPaletteOverride.json"
]
+ },
+ {
+ "condition": "(!meadowSupport)",
+ "exclude": [
+ "MyExtensionsApp.1/UnoMeadowApplication.cs"
+ ]
}
]
}
diff --git a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.blank.cs b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.blank.cs
index 613277ef7..79019ff91 100644
--- a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.blank.cs
+++ b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.blank.cs
@@ -3,11 +3,18 @@
using System;
using Microsoft.Extensions.Logging;
#endif
+#if (meadowSupport)
+using Meadow;
+#endif
using Uno.Resizetizer;
namespace MyExtensionsApp._1;
+#if (meadowSupport)
+public partial class App : UnoMeadowDesktopApplication
+#else
public partial class App : Application
+#endif
{
///
/// Initializes the singleton application object. This is the first line of authored code
@@ -20,6 +27,24 @@ public App()
protected Window? MainWindow { get; private set; }
+#if (meadowSupport)
+ public override Task MeadowInitialize()
+ {
+ var r = Resolver.Services.Get();
+
+ if (r == null)
+ {
+ Resolver.Log.Info("IMeadowDevice is null");
+ }
+ else
+ {
+ Resolver.Log.Info($"IMeadowDevice is {r.GetType().Name}");
+ }
+
+ return Task.CompletedTask;
+
+ }
+#endif
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
#if useCsharpMarkup
@@ -49,6 +74,10 @@ protected override void OnLaunched(LaunchActivatedEventArgs args)
#endif
#endif
MainWindow = new Window();
+
+#if (meadowSupport)
+ LoadMeadowOS();
+#endif
//-:cnd:noEmit
#if DEBUG
MainWindow.UseStudio();
diff --git a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.recommended.cs b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.recommended.cs
index cef48a9ae..d26832977 100644
--- a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.recommended.cs
+++ b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.recommended.cs
@@ -1,9 +1,16 @@
+//+:cnd:noEmit
using Uno.Resizetizer;
+#if (meadowSupport)
+using Meadow;
+#endif
-//-:cnd:noEmit
namespace MyExtensionsApp._1;
+#if (meadowSupport)
+public partial class App : UnoMeadowDesktopApplication
+#else
public partial class App : Application
+#endif
{
///
/// Initializes the singleton application object. This is the first line of authored code
@@ -17,6 +24,26 @@ public App()
protected Window? MainWindow { get; private set; }
protected IHost? Host { get; private set; }
+
+#if (meadowSupport)
+ public override Task MeadowInitialize()
+ {
+ var r = Resolver.Services.Get();
+
+ if (r == null)
+ {
+ Resolver.Log.Info("IMeadowDevice is null");
+ }
+ else
+ {
+ Resolver.Log.Info($"IMeadowDevice is {r.GetType().Name}");
+ }
+
+ return Task.CompletedTask;
+
+ }
+#endif
+
//+:cnd:noEmit
#if useFrameNav
protected override void OnLaunched(LaunchActivatedEventArgs args)
@@ -196,6 +223,10 @@ protected async override void OnLaunched(LaunchActivatedEventArgs args)
);
MainWindow = builder.Window;
+
+#if (meadowSupport)
+ LoadMeadowOS();
+#endif
//-:cnd:noEmit
#if DEBUG
MainWindow.UseStudio();
diff --git a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.xaml b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.xaml
index 480403525..4a65d547e 100644
--- a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.xaml
+++ b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/App.xaml
@@ -1,14 +1,31 @@
-
+
+
+
+
+
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="using:MyExtensionsApp._1">
-
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="using:MyExtensionsApp._1"$useThemesResourceNamespace$>
+
+
+
+
+
-
+
+
@@ -55,7 +72,15 @@
+
+
+
-
+
+
+
+
+
+
diff --git a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/MyExtensionsApp.1.csproj b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/MyExtensionsApp.1.csproj
index 0936fad3a..7a1f7c106 100644
--- a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/MyExtensionsApp.1.csproj
+++ b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/MyExtensionsApp.1.csproj
@@ -129,4 +129,11 @@
+
+
+
+
+
+
+
diff --git a/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/UnoMeadowApplication.cs b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/UnoMeadowApplication.cs
new file mode 100644
index 000000000..1722dbc14
--- /dev/null
+++ b/src/Uno.Templates/content/unoapp/MyExtensionsApp.1/UnoMeadowApplication.cs
@@ -0,0 +1,84 @@
+using Meadow;
+using Microsoft.UI.Dispatching;
+
+namespace MyExtensionsApp._1;
+
+public class UnoMeadowDesktopApplication: UnoMeadowApplication
+{
+
+}
+
+
+public class UnoMeadowApplication : Application, IApp
+ where T : class, IMeadowDevice
+{
+ public CancellationToken CancellationToken => throw new NotImplementedException();
+
+ public static T Device => Resolver.Services.Get() as T;
+
+ ///
+ public Dictionary Settings { get; } = new();
+
+ ///
+ public void InvokeOnMainThread(Action