diff --git a/.gitignore b/.gitignore index 97c46e781e413e4fe0a9928c6e2504b8c5a33bd3..46239f91912a66ee0470b3940a6bef708df51822 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -App\MauiApp1\.vs +/App/.vs/ +/App/.vscode +/App/bin/ +/App/obj/ +.DS_Store diff --git a/App/.gitignore b/App/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d6459e005434a49a66a3ddec92279a86160ad71f --- /dev/null +++ b/App/.gitignore @@ -0,0 +1 @@ +xxx diff --git a/App/App.sln b/App/App.sln new file mode 100644 index 0000000000000000000000000000000000000000..07f63a716241cb6b22c76d3638618e97007cf7a2 --- /dev/null +++ b/App/App.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RobobinApp", "RobobinApp\RobobinApp.csproj", "{6D394E71-6C39-4FAC-A1D4-054609783EFF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6D394E71-6C39-4FAC-A1D4-054609783EFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D394E71-6C39-4FAC-A1D4-054609783EFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D394E71-6C39-4FAC-A1D4-054609783EFF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D394E71-6C39-4FAC-A1D4-054609783EFF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {8D51381A-30C4-4800-83DA-22DFCFCA89C0} + EndGlobalSection +EndGlobal diff --git a/App/RobobinApp/App.xaml b/App/RobobinApp/App.xaml new file mode 100644 index 0000000000000000000000000000000000000000..56a59004184efd4f771bc4d1b774d26aa4a5f42c --- /dev/null +++ b/App/RobobinApp/App.xaml @@ -0,0 +1,14 @@ +<?xml version = "1.0" encoding = "UTF-8" ?> +<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui" + xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" + xmlns:local="clr-namespace:RobobinApp" + x:Class="RobobinApp.App"> + <Application.Resources> + <ResourceDictionary> + <ResourceDictionary.MergedDictionaries> + <ResourceDictionary Source="Resources/Styles/Colors.xaml" /> + <ResourceDictionary Source="Resources/Styles/Styles.xaml" /> + </ResourceDictionary.MergedDictionaries> + </ResourceDictionary> + </Application.Resources> +</Application> diff --git a/App/RobobinApp/App.xaml.cs b/App/RobobinApp/App.xaml.cs new file mode 100644 index 0000000000000000000000000000000000000000..54855d76c62e51159d415adbd5fe94943c7a9a54 --- /dev/null +++ b/App/RobobinApp/App.xaml.cs @@ -0,0 +1,11 @@ +namespace RobobinApp; + +public partial class App : Application +{ + public App() + { + InitializeComponent(); + + MainPage = new AppShell(); + } +} diff --git a/App/RobobinApp/AppShell.xaml b/App/RobobinApp/AppShell.xaml new file mode 100644 index 0000000000000000000000000000000000000000..d2f45e8f3e84e172bb17dd8dc5e59d0f6c88770a --- /dev/null +++ b/App/RobobinApp/AppShell.xaml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Shell + x:Class="RobobinApp.AppShell" + xmlns="http://schemas.microsoft.com/dotnet/2021/maui" + xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" + xmlns:local="clr-namespace:RobobinApp" + Shell.FlyoutBehavior="Disabled" + Title="RobobinApp"> + + <ShellContent + Title="Home" + ContentTemplate="{DataTemplate local:MainPage}" + Route="MainPage" /> + +</Shell> diff --git a/App/RobobinApp/AppShell.xaml.cs b/App/RobobinApp/AppShell.xaml.cs new file mode 100644 index 0000000000000000000000000000000000000000..96c315766cec060de27e6d4d452e14c28c5bb078 --- /dev/null +++ b/App/RobobinApp/AppShell.xaml.cs @@ -0,0 +1,9 @@ +namespace RobobinApp; + +public partial class AppShell : Shell +{ + public AppShell() + { + InitializeComponent(); + } +} diff --git a/App/RobobinApp/MainPage.xaml b/App/RobobinApp/MainPage.xaml new file mode 100644 index 0000000000000000000000000000000000000000..551d650342b6ecad878a4a3dc3116e136200777b --- /dev/null +++ b/App/RobobinApp/MainPage.xaml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" ?> +<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" + xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" + x:Class="RobobinApp.MainPage"> + + <ScrollView> + <VerticalStackLayout + Padding="30,0" + Spacing="25"> + <Image + Source="dotnet_bot.png" + HeightRequest="185" + Aspect="AspectFit" + SemanticProperties.Description="dot net bot in a race car number eight" /> + + <Label + Text="Hello, World!" + Style="{StaticResource Headline}" + SemanticProperties.HeadingLevel="Level1" /> + + <Label + Text="Welcome to .NET Multi-platform App UI" + Style="{StaticResource SubHeadline}" + SemanticProperties.HeadingLevel="Level2" + SemanticProperties.Description="Welcome to dot net Multi platform App U I" /> + + <Button + x:Name="CounterBtn" + Text="Click me" + SemanticProperties.Hint="Counts the number of times you click" + Clicked="OnCounterClicked" + HorizontalOptions="Fill" /> + </VerticalStackLayout> + </ScrollView> + +</ContentPage> diff --git a/App/RobobinApp/MainPage.xaml.cs b/App/RobobinApp/MainPage.xaml.cs new file mode 100644 index 0000000000000000000000000000000000000000..a2af1fc4ac20e701e03b86ebef01cc946b178268 --- /dev/null +++ b/App/RobobinApp/MainPage.xaml.cs @@ -0,0 +1,24 @@ +namespace RobobinApp; + +public partial class MainPage : ContentPage +{ + int count = 0; + + public MainPage() + { + InitializeComponent(); + } + + private void OnCounterClicked(object sender, EventArgs e) + { + count++; + + if (count == 1) + CounterBtn.Text = $"Clicked {count} time"; + else + CounterBtn.Text = $"Clicked {count} times"; + + SemanticScreenReader.Announce(CounterBtn.Text); + } +} + diff --git a/App/RobobinApp/MauiProgram.cs b/App/RobobinApp/MauiProgram.cs new file mode 100644 index 0000000000000000000000000000000000000000..90697e0e34c6feb93ca99d19460e62a7fd1d623f --- /dev/null +++ b/App/RobobinApp/MauiProgram.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Logging; + +namespace RobobinApp; + +public static class MauiProgram +{ + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder + .UseMauiApp<App>() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + +#if DEBUG + builder.Logging.AddDebug(); +#endif + + return builder.Build(); + } +} diff --git a/App/RobobinApp/Platforms/Android/AndroidManifest.xml b/App/RobobinApp/Platforms/Android/AndroidManifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..bdec9b5900dda15071a0a17a6027978e22c74f0b --- /dev/null +++ b/App/RobobinApp/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> + <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application> + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> + <uses-permission android:name="android.permission.INTERNET" /> +</manifest> \ No newline at end of file diff --git a/App/RobobinApp/Platforms/Android/MainActivity.cs b/App/RobobinApp/Platforms/Android/MainActivity.cs new file mode 100644 index 0000000000000000000000000000000000000000..2ba408d710e5c8f83559d814397bec9800ce525d --- /dev/null +++ b/App/RobobinApp/Platforms/Android/MainActivity.cs @@ -0,0 +1,10 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace RobobinApp; + +[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] +public class MainActivity : MauiAppCompatActivity +{ +} diff --git a/App/RobobinApp/Platforms/Android/MainApplication.cs b/App/RobobinApp/Platforms/Android/MainApplication.cs new file mode 100644 index 0000000000000000000000000000000000000000..e63f9c9270b9f78d54e1ff5d9d47097c33a70075 --- /dev/null +++ b/App/RobobinApp/Platforms/Android/MainApplication.cs @@ -0,0 +1,15 @@ +using Android.App; +using Android.Runtime; + +namespace RobobinApp; + +[Application] +public class MainApplication : MauiApplication +{ + public MainApplication(IntPtr handle, JniHandleOwnership ownership) + : base(handle, ownership) + { + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/App/RobobinApp/Platforms/Android/Resources/values/colors.xml b/App/RobobinApp/Platforms/Android/Resources/values/colors.xml new file mode 100644 index 0000000000000000000000000000000000000000..5cd1604963d9ff3ca81859c9af7678b8707fe4ea --- /dev/null +++ b/App/RobobinApp/Platforms/Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="colorPrimary">#512BD4</color> + <color name="colorPrimaryDark">#2B0B98</color> + <color name="colorAccent">#2B0B98</color> +</resources> \ No newline at end of file diff --git a/App/RobobinApp/Platforms/MacCatalyst/AppDelegate.cs b/App/RobobinApp/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 0000000000000000000000000000000000000000..3b165c623b41fcd5ac41061fe7f6c10c9e43ed44 --- /dev/null +++ b/App/RobobinApp/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace RobobinApp; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/App/RobobinApp/Platforms/MacCatalyst/Entitlements.plist b/App/RobobinApp/Platforms/MacCatalyst/Entitlements.plist new file mode 100644 index 0000000000000000000000000000000000000000..8e87c0cb029e1a18c059fb7c34552aa95e04c96b --- /dev/null +++ b/App/RobobinApp/Platforms/MacCatalyst/Entitlements.plist @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <!-- See https://aka.ms/maui-publish-app-store#add-entitlements for more information about adding entitlements.--> + <dict> + <!-- App Sandbox must be enabled to distribute a MacCatalyst app through the Mac App Store. --> + <key>com.apple.security.app-sandbox</key> + <true/> + <!-- When App Sandbox is enabled, this value is required to open outgoing network connections. --> + <key>com.apple.security.network.client</key> + <true/> + </dict> +</plist> + diff --git a/App/RobobinApp/Platforms/MacCatalyst/Info.plist b/App/RobobinApp/Platforms/MacCatalyst/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..f24aacc0d11c9074379d542a82297ad6e8671c01 --- /dev/null +++ b/App/RobobinApp/Platforms/MacCatalyst/Info.plist @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <!-- The Mac App Store requires you specify if the app uses encryption. --> + <!-- Please consult https://developer.apple.com/documentation/bundleresources/information_property_list/itsappusesnonexemptencryption --> + <!-- <key>ITSAppUsesNonExemptEncryption</key> --> + <!-- Please indicate <true/> or <false/> here. --> + + <!-- Specify the category for your app here. --> + <!-- Please consult https://developer.apple.com/documentation/bundleresources/information_property_list/lsapplicationcategorytype --> + <!-- <key>LSApplicationCategoryType</key> --> + <!-- <string>public.app-category.YOUR-CATEGORY-HERE</string> --> + <key>UIDeviceFamily</key> + <array> + <integer>2</integer> + </array> + <key>UIRequiredDeviceCapabilities</key> + <array> + <string>arm64</string> + </array> + <key>UISupportedInterfaceOrientations</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UISupportedInterfaceOrientations~ipad</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>XSAppIconAssets</key> + <string>Assets.xcassets/appicon.appiconset</string> +</dict> +</plist> diff --git a/App/RobobinApp/Platforms/MacCatalyst/Program.cs b/App/RobobinApp/Platforms/MacCatalyst/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..b4d4974473c849f74076117eef77137127f4dc2c --- /dev/null +++ b/App/RobobinApp/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace RobobinApp; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // 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/App/RobobinApp/Platforms/Tizen/Main.cs b/App/RobobinApp/Platforms/Tizen/Main.cs new file mode 100644 index 0000000000000000000000000000000000000000..21cefc4dc7f27f8c7faf64de3214adc088474337 --- /dev/null +++ b/App/RobobinApp/Platforms/Tizen/Main.cs @@ -0,0 +1,16 @@ +using System; +using Microsoft.Maui; +using Microsoft.Maui.Hosting; + +namespace RobobinApp; + +class Program : MauiApplication +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + + static void Main(string[] args) + { + var app = new Program(); + app.Run(args); + } +} diff --git a/App/RobobinApp/Platforms/Tizen/tizen-manifest.xml b/App/RobobinApp/Platforms/Tizen/tizen-manifest.xml new file mode 100644 index 0000000000000000000000000000000000000000..79d32f9110cd99a03b9c2ca7bde9df9182ca11a0 --- /dev/null +++ b/App/RobobinApp/Platforms/Tizen/tizen-manifest.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest package="maui-application-id-placeholder" version="0.0.0" api-version="8" xmlns="http://tizen.org/ns/packages"> + <profile name="common" /> + <ui-application appid="maui-application-id-placeholder" exec="RobobinApp.dll" multiple="false" nodisplay="false" taskmanage="true" type="dotnet" launch_mode="single"> + <label>maui-application-title-placeholder</label> + <icon>maui-appicon-placeholder</icon> + <metadata key="http://tizen.org/metadata/prefer_dotnet_aot" value="true" /> + </ui-application> + <shortcut-list /> + <privileges> + <privilege>http://tizen.org/privilege/internet</privilege> + </privileges> + <dependencies /> + <provides-appdefined-privileges /> +</manifest> \ No newline at end of file diff --git a/App/RobobinApp/Platforms/Windows/App.xaml b/App/RobobinApp/Platforms/Windows/App.xaml new file mode 100644 index 0000000000000000000000000000000000000000..f79034417d46f5d9362b1bd08874851de03aae02 --- /dev/null +++ b/App/RobobinApp/Platforms/Windows/App.xaml @@ -0,0 +1,8 @@ +<maui:MauiWinUIApplication + x:Class="RobobinApp.WinUI.App" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:maui="using:Microsoft.Maui" + xmlns:local="using:RobobinApp.WinUI"> + +</maui:MauiWinUIApplication> diff --git a/App/RobobinApp/Platforms/Windows/App.xaml.cs b/App/RobobinApp/Platforms/Windows/App.xaml.cs new file mode 100644 index 0000000000000000000000000000000000000000..dbaafb75f63f316e5ad6850081443bc2996a9c8d --- /dev/null +++ b/App/RobobinApp/Platforms/Windows/App.xaml.cs @@ -0,0 +1,24 @@ +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 RobobinApp.WinUI; + +/// <summary> +/// Provides application-specific behavior to supplement the default Application class. +/// </summary> +public partial class App : MauiWinUIApplication +{ + /// <summary> + /// 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(). + /// </summary> + public App() + { + this.InitializeComponent(); + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} + diff --git a/App/RobobinApp/Platforms/Windows/Package.appxmanifest b/App/RobobinApp/Platforms/Windows/Package.appxmanifest new file mode 100644 index 0000000000000000000000000000000000000000..ed36aaddd37f2d8ffa495a2755eae582495cfc1c --- /dev/null +++ b/App/RobobinApp/Platforms/Windows/Package.appxmanifest @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<Package + xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" + xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" + xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" + xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" + IgnorableNamespaces="uap rescap"> + + <Identity Name="maui-package-name-placeholder" Publisher="CN=User Name" Version="0.0.0.0" /> + + <mp:PhoneIdentity PhoneProductId="8646FF59-A3E1-4276-A8EA-36FBC95CCEAD" PhonePublisherId="00000000-0000-0000-0000-000000000000"/> + + <Properties> + <DisplayName>$placeholder$</DisplayName> + <PublisherDisplayName>User Name</PublisherDisplayName> + <Logo>$placeholder$.png</Logo> + </Properties> + + <Dependencies> + <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" /> + <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" /> + </Dependencies> + + <Resources> + <Resource Language="x-generate" /> + </Resources> + + <Applications> + <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$"> + <uap:VisualElements + DisplayName="$placeholder$" + Description="$placeholder$" + Square150x150Logo="$placeholder$.png" + Square44x44Logo="$placeholder$.png" + BackgroundColor="transparent"> + <uap:DefaultTile Square71x71Logo="$placeholder$.png" Wide310x150Logo="$placeholder$.png" Square310x310Logo="$placeholder$.png" /> + <uap:SplashScreen Image="$placeholder$.png" /> + </uap:VisualElements> + </Application> + </Applications> + + <Capabilities> + <rescap:Capability Name="runFullTrust" /> + </Capabilities> + +</Package> diff --git a/App/RobobinApp/Platforms/Windows/app.manifest b/App/RobobinApp/Platforms/Windows/app.manifest new file mode 100644 index 0000000000000000000000000000000000000000..250c7ebd3b04cef6c28b11c01a1eb26cf672ab0f --- /dev/null +++ b/App/RobobinApp/Platforms/Windows/app.manifest @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> + <assemblyIdentity version="1.0.0.0" name="RobobinApp.WinUI.app"/> + + <application xmlns="urn:schemas-microsoft-com:asm.v3"> + <windowsSettings> + <!-- The combination of below two tags have the following effect: + 1) Per-Monitor for >= Windows 10 Anniversary Update + 2) System < Windows 10 Anniversary Update + --> + <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware> + <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness> + </windowsSettings> + </application> +</assembly> diff --git a/App/RobobinApp/Platforms/iOS/AppDelegate.cs b/App/RobobinApp/Platforms/iOS/AppDelegate.cs new file mode 100644 index 0000000000000000000000000000000000000000..3b165c623b41fcd5ac41061fe7f6c10c9e43ed44 --- /dev/null +++ b/App/RobobinApp/Platforms/iOS/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace RobobinApp; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/App/RobobinApp/Platforms/iOS/Info.plist b/App/RobobinApp/Platforms/iOS/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..358337bbdc251876f2cb01a515e4710d87e7cf01 --- /dev/null +++ b/App/RobobinApp/Platforms/iOS/Info.plist @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>LSRequiresIPhoneOS</key> + <true/> + <key>UIDeviceFamily</key> + <array> + <integer>1</integer> + <integer>2</integer> + </array> + <key>UIRequiredDeviceCapabilities</key> + <array> + <string>arm64</string> + </array> + <key>UISupportedInterfaceOrientations</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>UISupportedInterfaceOrientations~ipad</key> + <array> + <string>UIInterfaceOrientationPortrait</string> + <string>UIInterfaceOrientationPortraitUpsideDown</string> + <string>UIInterfaceOrientationLandscapeLeft</string> + <string>UIInterfaceOrientationLandscapeRight</string> + </array> + <key>XSAppIconAssets</key> + <string>Assets.xcassets/appicon.appiconset</string> +</dict> +</plist> diff --git a/App/RobobinApp/Platforms/iOS/Program.cs b/App/RobobinApp/Platforms/iOS/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..b4d4974473c849f74076117eef77137127f4dc2c --- /dev/null +++ b/App/RobobinApp/Platforms/iOS/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace RobobinApp; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // 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/App/RobobinApp/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/App/RobobinApp/Platforms/iOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000000000000000000000000000000000..1ea3a5d731428f1e427c15827e02094b94e3b212 --- /dev/null +++ b/App/RobobinApp/Platforms/iOS/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +This is the minimum required version of the Apple Privacy Manifest for .NET MAUI apps. +The contents below are needed because of APIs that are used in the .NET framework and .NET MAUI SDK. + +You are responsible for adding extra entries as needed for your application. + +More information: https://aka.ms/maui-privacy-manifest +--> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>NSPrivacyAccessedAPITypes</key> + <array> + <dict> + <key>NSPrivacyAccessedAPIType</key> + <string>NSPrivacyAccessedAPICategoryFileTimestamp</string> + <key>NSPrivacyAccessedAPITypeReasons</key> + <array> + <string>C617.1</string> + </array> + </dict> + <dict> + <key>NSPrivacyAccessedAPIType</key> + <string>NSPrivacyAccessedAPICategorySystemBootTime</string> + <key>NSPrivacyAccessedAPITypeReasons</key> + <array> + <string>35F9.1</string> + </array> + </dict> + <dict> + <key>NSPrivacyAccessedAPIType</key> + <string>NSPrivacyAccessedAPICategoryDiskSpace</string> + <key>NSPrivacyAccessedAPITypeReasons</key> + <array> + <string>E174.1</string> + </array> + </dict> + <!-- + The entry below is only needed when you're using the Preferences API in your app. + <dict> + <key>NSPrivacyAccessedAPIType</key> + <string>NSPrivacyAccessedAPICategoryUserDefaults</string> + <key>NSPrivacyAccessedAPITypeReasons</key> + <array> + <string>CA92.1</string> + </array> + </dict> --> + </array> +</dict> +</plist> diff --git a/App/RobobinApp/Properties/launchSettings.json b/App/RobobinApp/Properties/launchSettings.json new file mode 100644 index 0000000000000000000000000000000000000000..c16206a81c2af71297bc9bb4cd45c512f835231e --- /dev/null +++ b/App/RobobinApp/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "Windows Machine": { + "commandName": "MsixPackage", + "nativeDebugging": false + } + } +} \ No newline at end of file diff --git a/App/RobobinApp/Resources/AppIcon/appicon.svg b/App/RobobinApp/Resources/AppIcon/appicon.svg new file mode 100644 index 0000000000000000000000000000000000000000..5f04fcfca9dea7b0616c19c76138513e131da8a0 --- /dev/null +++ b/App/RobobinApp/Resources/AppIcon/appicon.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <rect x="0" y="0" width="456" height="456" fill="#512BD4" /> +</svg> \ No newline at end of file diff --git a/App/RobobinApp/Resources/AppIcon/appiconfg.svg b/App/RobobinApp/Resources/AppIcon/appiconfg.svg new file mode 100644 index 0000000000000000000000000000000000000000..62d66d7a6fa033abe68352bc0d6dfeb5b49a85ee --- /dev/null +++ b/App/RobobinApp/Resources/AppIcon/appiconfg.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="m 105.50037,281.60863 c -2.70293,0 -5.00091,-0.90042 -6.893127,-2.70209 -1.892214,-1.84778 -2.837901,-4.04181 -2.837901,-6.58209 0,-2.58722 0.945687,-4.80389 2.837901,-6.65167 1.892217,-1.84778 4.190197,-2.77167 6.893127,-2.77167 2.74819,0 5.06798,0.92389 6.96019,2.77167 1.93749,1.84778 2.90581,4.06445 2.90581,6.65167 0,2.54028 -0.96832,4.73431 -2.90581,6.58209 -1.89221,1.80167 -4.212,2.70209 -6.96019,2.70209 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> + <path d="M 213.56111,280.08446 H 195.99044 L 149.69953,207.0544 c -1.17121,-1.84778 -2.14037,-3.76515 -2.90581,-5.75126 h -0.40578 c 0.36051,2.12528 0.54076,6.67515 0.54076,13.6496 v 65.13172 h -15.54349 v -99.36009 h 18.71925 l 44.7374,71.29798 c 1.89222,2.95695 3.1087,4.98917 3.64945,6.09751 h 0.26996 c -0.45021,-2.6325 -0.67573,-7.09015 -0.67573,-13.37293 v -64.02256 h 15.47557 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> + <path d="m 289.25134,280.08446 h -54.40052 v -99.36009 h 52.23835 v 13.99669 h -36.15411 v 28.13085 h 33.31621 v 13.9271 h -33.31621 v 29.37835 h 38.31628 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> + <path d="M 366.56466,194.72106 H 338.7222 v 85.3634 h -16.08423 v -85.3634 h -27.77455 v -13.99669 h 71.70124 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> +</svg> \ No newline at end of file diff --git a/App/RobobinApp/Resources/Fonts/OpenSans-Regular.ttf b/App/RobobinApp/Resources/Fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ba487fed57907cdfe053acc3ce6c087734c301cf Binary files /dev/null and b/App/RobobinApp/Resources/Fonts/OpenSans-Regular.ttf differ diff --git a/App/RobobinApp/Resources/Fonts/OpenSans-Semibold.ttf b/App/RobobinApp/Resources/Fonts/OpenSans-Semibold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8fe2c596152b0b5fed469c3081e03245a2d588e4 Binary files /dev/null and b/App/RobobinApp/Resources/Fonts/OpenSans-Semibold.ttf differ diff --git a/App/RobobinApp/Resources/Images/dotnet_bot.png b/App/RobobinApp/Resources/Images/dotnet_bot.png new file mode 100644 index 0000000000000000000000000000000000000000..f93ce025a8aadac29138413514bef90c11d892d9 Binary files /dev/null and b/App/RobobinApp/Resources/Images/dotnet_bot.png differ diff --git a/App/RobobinApp/Resources/Raw/AboutAssets.txt b/App/RobobinApp/Resources/Raw/AboutAssets.txt new file mode 100644 index 0000000000000000000000000000000000000000..f22d3bfa8af248a827567b7815fc4b65e38818cb --- /dev/null +++ b/App/RobobinApp/Resources/Raw/AboutAssets.txt @@ -0,0 +1,15 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories). Deployment of the asset to your application +is automatically handled by the following `MauiAsset` Build Action within your `.csproj`. + + <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" /> + +These files will be deployed with your package and will be accessible using Essentials: + + async Task LoadMauiAsset() + { + using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); + using var reader = new StreamReader(stream); + + var contents = reader.ReadToEnd(); + } diff --git a/App/RobobinApp/Resources/Splash/splash.svg b/App/RobobinApp/Resources/Splash/splash.svg new file mode 100644 index 0000000000000000000000000000000000000000..62d66d7a6fa033abe68352bc0d6dfeb5b49a85ee --- /dev/null +++ b/App/RobobinApp/Resources/Splash/splash.svg @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="456" height="456" viewBox="0 0 456 456" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <path d="m 105.50037,281.60863 c -2.70293,0 -5.00091,-0.90042 -6.893127,-2.70209 -1.892214,-1.84778 -2.837901,-4.04181 -2.837901,-6.58209 0,-2.58722 0.945687,-4.80389 2.837901,-6.65167 1.892217,-1.84778 4.190197,-2.77167 6.893127,-2.77167 2.74819,0 5.06798,0.92389 6.96019,2.77167 1.93749,1.84778 2.90581,4.06445 2.90581,6.65167 0,2.54028 -0.96832,4.73431 -2.90581,6.58209 -1.89221,1.80167 -4.212,2.70209 -6.96019,2.70209 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> + <path d="M 213.56111,280.08446 H 195.99044 L 149.69953,207.0544 c -1.17121,-1.84778 -2.14037,-3.76515 -2.90581,-5.75126 h -0.40578 c 0.36051,2.12528 0.54076,6.67515 0.54076,13.6496 v 65.13172 h -15.54349 v -99.36009 h 18.71925 l 44.7374,71.29798 c 1.89222,2.95695 3.1087,4.98917 3.64945,6.09751 h 0.26996 c -0.45021,-2.6325 -0.67573,-7.09015 -0.67573,-13.37293 v -64.02256 h 15.47557 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> + <path d="m 289.25134,280.08446 h -54.40052 v -99.36009 h 52.23835 v 13.99669 h -36.15411 v 28.13085 h 33.31621 v 13.9271 h -33.31621 v 29.37835 h 38.31628 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> + <path d="M 366.56466,194.72106 H 338.7222 v 85.3634 h -16.08423 v -85.3634 h -27.77455 v -13.99669 h 71.70124 z" style="fill:#ffffff;fill-rule:nonzero;stroke-width:0.838376" /> +</svg> \ No newline at end of file diff --git a/App/RobobinApp/Resources/Styles/Colors.xaml b/App/RobobinApp/Resources/Styles/Colors.xaml new file mode 100644 index 0000000000000000000000000000000000000000..22f0a67b1780f521dff240d3e2d00c793a068330 --- /dev/null +++ b/App/RobobinApp/Resources/Styles/Colors.xaml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<?xaml-comp compile="true" ?> +<ResourceDictionary + xmlns="http://schemas.microsoft.com/dotnet/2021/maui" + xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"> + + <!-- Note: For Android please see also Platforms\Android\Resources\values\colors.xml --> + + <Color x:Key="Primary">#512BD4</Color> + <Color x:Key="PrimaryDark">#ac99ea</Color> + <Color x:Key="PrimaryDarkText">#242424</Color> + <Color x:Key="Secondary">#DFD8F7</Color> + <Color x:Key="SecondaryDarkText">#9880e5</Color> + <Color x:Key="Tertiary">#2B0B98</Color> + + <Color x:Key="White">White</Color> + <Color x:Key="Black">Black</Color> + <Color x:Key="Magenta">#D600AA</Color> + <Color x:Key="MidnightBlue">#190649</Color> + <Color x:Key="OffBlack">#1f1f1f</Color> + + <Color x:Key="Gray100">#E1E1E1</Color> + <Color x:Key="Gray200">#C8C8C8</Color> + <Color x:Key="Gray300">#ACACAC</Color> + <Color x:Key="Gray400">#919191</Color> + <Color x:Key="Gray500">#6E6E6E</Color> + <Color x:Key="Gray600">#404040</Color> + <Color x:Key="Gray900">#212121</Color> + <Color x:Key="Gray950">#141414</Color> + + <SolidColorBrush x:Key="PrimaryBrush" Color="{StaticResource Primary}"/> + <SolidColorBrush x:Key="SecondaryBrush" Color="{StaticResource Secondary}"/> + <SolidColorBrush x:Key="TertiaryBrush" Color="{StaticResource Tertiary}"/> + <SolidColorBrush x:Key="WhiteBrush" Color="{StaticResource White}"/> + <SolidColorBrush x:Key="BlackBrush" Color="{StaticResource Black}"/> + + <SolidColorBrush x:Key="Gray100Brush" Color="{StaticResource Gray100}"/> + <SolidColorBrush x:Key="Gray200Brush" Color="{StaticResource Gray200}"/> + <SolidColorBrush x:Key="Gray300Brush" Color="{StaticResource Gray300}"/> + <SolidColorBrush x:Key="Gray400Brush" Color="{StaticResource Gray400}"/> + <SolidColorBrush x:Key="Gray500Brush" Color="{StaticResource Gray500}"/> + <SolidColorBrush x:Key="Gray600Brush" Color="{StaticResource Gray600}"/> + <SolidColorBrush x:Key="Gray900Brush" Color="{StaticResource Gray900}"/> + <SolidColorBrush x:Key="Gray950Brush" Color="{StaticResource Gray950}"/> +</ResourceDictionary> \ No newline at end of file diff --git a/App/RobobinApp/Resources/Styles/Styles.xaml b/App/RobobinApp/Resources/Styles/Styles.xaml new file mode 100644 index 0000000000000000000000000000000000000000..d600a7f7167a93452322d196e93e2b63a3a6d0b1 --- /dev/null +++ b/App/RobobinApp/Resources/Styles/Styles.xaml @@ -0,0 +1,427 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<?xaml-comp compile="true" ?> +<ResourceDictionary + xmlns="http://schemas.microsoft.com/dotnet/2021/maui" + xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"> + + <Style TargetType="ActivityIndicator"> + <Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" /> + </Style> + + <Style TargetType="IndicatorView"> + <Setter Property="IndicatorColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}"/> + <Setter Property="SelectedIndicatorColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray100}}"/> + </Style> + + <Style TargetType="Border"> + <Setter Property="Stroke" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" /> + <Setter Property="StrokeShape" Value="Rectangle"/> + <Setter Property="StrokeThickness" Value="1"/> + </Style> + + <Style TargetType="BoxView"> + <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" /> + </Style> + + <Style TargetType="Button"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource PrimaryDarkText}}" /> + <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource PrimaryDark}}" /> + <Setter Property="FontFamily" Value="OpenSansRegular"/> + <Setter Property="FontSize" Value="14"/> + <Setter Property="BorderWidth" Value="0"/> + <Setter Property="CornerRadius" Value="8"/> + <Setter Property="Padding" Value="14,10"/> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" /> + <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + <VisualState x:Name="PointerOver" /> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="CheckBox"> + <Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" /> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="DatePicker"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" /> + <Setter Property="BackgroundColor" Value="Transparent" /> + <Setter Property="FontFamily" Value="OpenSansRegular"/> + <Setter Property="FontSize" Value="14"/> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="Editor"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /> + <Setter Property="BackgroundColor" Value="Transparent" /> + <Setter Property="FontFamily" Value="OpenSansRegular"/> + <Setter Property="FontSize" Value="14" /> + <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" /> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="Entry"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /> + <Setter Property="BackgroundColor" Value="Transparent" /> + <Setter Property="FontFamily" Value="OpenSansRegular"/> + <Setter Property="FontSize" Value="14" /> + <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" /> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="Frame"> + <Setter Property="HasShadow" Value="False" /> + <Setter Property="BorderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" /> + <Setter Property="CornerRadius" Value="8" /> + <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" /> + </Style> + + <Style TargetType="ImageButton"> + <Setter Property="Opacity" Value="1" /> + <Setter Property="BorderColor" Value="Transparent"/> + <Setter Property="BorderWidth" Value="0"/> + <Setter Property="CornerRadius" Value="0"/> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="Opacity" Value="0.5" /> + </VisualState.Setters> + </VisualState> + <VisualState x:Name="PointerOver" /> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="Label"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /> + <Setter Property="BackgroundColor" Value="Transparent" /> + <Setter Property="FontFamily" Value="OpenSansRegular" /> + <Setter Property="FontSize" Value="14" /> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="Span"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /> + </Style> + + <Style TargetType="Label" x:Key="Headline"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource MidnightBlue}, Dark={StaticResource White}}" /> + <Setter Property="FontSize" Value="32" /> + <Setter Property="HorizontalOptions" Value="Center" /> + <Setter Property="HorizontalTextAlignment" Value="Center" /> + </Style> + + <Style TargetType="Label" x:Key="SubHeadline"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource MidnightBlue}, Dark={StaticResource White}}" /> + <Setter Property="FontSize" Value="24" /> + <Setter Property="HorizontalOptions" Value="Center" /> + <Setter Property="HorizontalTextAlignment" Value="Center" /> + </Style> + + <Style TargetType="ListView"> + <Setter Property="SeparatorColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" /> + <Setter Property="RefreshControlColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" /> + </Style> + + <Style TargetType="Picker"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" /> + <Setter Property="TitleColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" /> + <Setter Property="BackgroundColor" Value="Transparent" /> + <Setter Property="FontFamily" Value="OpenSansRegular"/> + <Setter Property="FontSize" Value="14"/> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + <Setter Property="TitleColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="ProgressBar"> + <Setter Property="ProgressColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" /> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="ProgressColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="RadioButton"> + <Setter Property="BackgroundColor" Value="Transparent"/> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" /> + <Setter Property="FontFamily" Value="OpenSansRegular"/> + <Setter Property="FontSize" Value="14"/> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="RefreshView"> + <Setter Property="RefreshColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" /> + </Style> + + <Style TargetType="SearchBar"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" /> + <Setter Property="PlaceholderColor" Value="{StaticResource Gray500}" /> + <Setter Property="CancelButtonColor" Value="{StaticResource Gray500}" /> + <Setter Property="BackgroundColor" Value="Transparent" /> + <Setter Property="FontFamily" Value="OpenSansRegular" /> + <Setter Property="FontSize" Value="14" /> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="SearchHandler"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" /> + <Setter Property="PlaceholderColor" Value="{StaticResource Gray500}" /> + <Setter Property="BackgroundColor" Value="Transparent" /> + <Setter Property="FontFamily" Value="OpenSansRegular" /> + <Setter Property="FontSize" Value="14" /> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="Shadow"> + <Setter Property="Radius" Value="15" /> + <Setter Property="Opacity" Value="0.5" /> + <Setter Property="Brush" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource White}}" /> + <Setter Property="Offset" Value="10,10" /> + </Style> + + <Style TargetType="Slider"> + <Setter Property="MinimumTrackColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" /> + <Setter Property="MaximumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" /> + <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" /> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="MinimumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/> + <Setter Property="MaximumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/> + <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="SwipeItem"> + <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" /> + </Style> + + <Style TargetType="Switch"> + <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" /> + <Setter Property="ThumbColor" Value="{StaticResource White}" /> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + <VisualState x:Name="On"> + <VisualState.Setters> + <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Secondary}, Dark={StaticResource Gray200}}" /> + <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" /> + </VisualState.Setters> + </VisualState> + <VisualState x:Name="Off"> + <VisualState.Setters> + <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray400}, Dark={StaticResource Gray500}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="TimePicker"> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" /> + <Setter Property="BackgroundColor" Value="Transparent"/> + <Setter Property="FontFamily" Value="OpenSansRegular"/> + <Setter Property="FontSize" Value="14"/> + <Setter Property="MinimumHeightRequest" Value="44"/> + <Setter Property="MinimumWidthRequest" Value="44"/> + <Setter Property="VisualStateManager.VisualStateGroups"> + <VisualStateGroupList> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal" /> + <VisualState x:Name="Disabled"> + <VisualState.Setters> + <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" /> + </VisualState.Setters> + </VisualState> + </VisualStateGroup> + </VisualStateGroupList> + </Setter> + </Style> + + <Style TargetType="Page" ApplyToDerivedTypes="True"> + <Setter Property="Padding" Value="0"/> + <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource OffBlack}}" /> + </Style> + + <Style TargetType="Shell" ApplyToDerivedTypes="True"> + <Setter Property="Shell.BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource OffBlack}}" /> + <Setter Property="Shell.ForegroundColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource SecondaryDarkText}}" /> + <Setter Property="Shell.TitleColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource SecondaryDarkText}}" /> + <Setter Property="Shell.DisabledColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" /> + <Setter Property="Shell.UnselectedColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray200}}" /> + <Setter Property="Shell.NavBarHasShadow" Value="False" /> + <Setter Property="Shell.TabBarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" /> + <Setter Property="Shell.TabBarForegroundColor" Value="{AppThemeBinding Light={StaticResource Magenta}, Dark={StaticResource White}}" /> + <Setter Property="Shell.TabBarTitleColor" Value="{AppThemeBinding Light={StaticResource Magenta}, Dark={StaticResource White}}" /> + <Setter Property="Shell.TabBarUnselectedColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" /> + </Style> + + <Style TargetType="NavigationPage"> + <Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource OffBlack}}" /> + <Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" /> + <Setter Property="IconColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" /> + </Style> + + <Style TargetType="TabbedPage"> + <Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Gray950}}" /> + <Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource Magenta}, Dark={StaticResource White}}" /> + <Setter Property="UnselectedTabColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" /> + <Setter Property="SelectedTabColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" /> + </Style> + +</ResourceDictionary> diff --git a/App/RobobinApp/RobobinApp.csproj b/App/RobobinApp/RobobinApp.csproj new file mode 100644 index 0000000000000000000000000000000000000000..008a898d06c67639d052a54f585102f85dff2215 --- /dev/null +++ b/App/RobobinApp/RobobinApp.csproj @@ -0,0 +1,65 @@ +<Project Sdk="Microsoft.NET.Sdk"> + + <PropertyGroup> + <TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks> + <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks> + <!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET --> + <!-- <TargetFrameworks>$(TargetFrameworks);net8.0-tizen</TargetFrameworks> --> + + <!-- Note for MacCatalyst: + The default runtime is maccatalyst-x64, except in Release config, in which case the default is maccatalyst-x64;maccatalyst-arm64. + When specifying both architectures, use the plural <RuntimeIdentifiers> instead of the singular <RuntimeIdentifier>. + The Mac App Store will NOT accept apps with ONLY maccatalyst-arm64 indicated; + either BOTH runtimes must be indicated or ONLY macatalyst-x64. --> + <!-- For example: <RuntimeIdentifiers>maccatalyst-x64;maccatalyst-arm64</RuntimeIdentifiers> --> + + <OutputType>Exe</OutputType> + <RootNamespace>RobobinApp</RootNamespace> + <UseMaui>true</UseMaui> + <SingleProject>true</SingleProject> + <ImplicitUsings>enable</ImplicitUsings> + <Nullable>enable</Nullable> + + <!-- Display name --> + <ApplicationTitle>RobobinApp</ApplicationTitle> + + <!-- App Identifier --> + <ApplicationId>com.companyname.robobinapp</ApplicationId> + + <!-- Versions --> + <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion> + <ApplicationVersion>1</ApplicationVersion> + + <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">11.0</SupportedOSPlatformVersion> + <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion> + <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion> + <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion> + <TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion> + <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion> + </PropertyGroup> + + <ItemGroup> + <!-- App Icon --> + <MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" /> + + <!-- Splash Screen --> + <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" /> + + <!-- Images --> + <MauiImage Include="Resources\Images\*" /> + <MauiImage Update="Resources\Images\dotnet_bot.png" Resize="True" BaseSize="300,185" /> + + <!-- Custom Fonts --> + <MauiFont Include="Resources\Fonts\*" /> + + <!-- Raw Assets (also remove the "Resources\Raw" prefix) --> + <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" /> + </ItemGroup> + + <ItemGroup> + <PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" /> + <PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" /> + <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" /> + </ItemGroup> + +</Project>