diff --git a/Common.Library/BaseClasses/CommonBase.cs b/Common.Library/BaseClasses/CommonBase.cs new file mode 100644 index 0000000..be93963 --- /dev/null +++ b/Common.Library/BaseClasses/CommonBase.cs @@ -0,0 +1,29 @@ +using System.ComponentModel; + +namespace Common.Library; + +public abstract class CommonBase : INotifyPropertyChanged +{ + #region Constructor + protected CommonBase() + { + Init(); + } + #endregion + + #region Init Method + public virtual void Init() + { + + } + #endregion + + + #region RaisePropertyChanged Method + public event PropertyChangedEventHandler? PropertyChanged; + public virtual void RaisePropertyChanged(string propertyName) + { + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + #endregion +} diff --git a/Common.Library/BaseClasses/EntityBase.cs b/Common.Library/BaseClasses/EntityBase.cs new file mode 100644 index 0000000..c9de9fe --- /dev/null +++ b/Common.Library/BaseClasses/EntityBase.cs @@ -0,0 +1,5 @@ +namespace Common.Library; + +public class EntityBase : CommonBase +{ +} diff --git a/Common.Library/BaseClasses/ViewModelBase.cs b/Common.Library/BaseClasses/ViewModelBase.cs new file mode 100644 index 0000000..4095130 --- /dev/null +++ b/Common.Library/BaseClasses/ViewModelBase.cs @@ -0,0 +1,5 @@ +namespace Common.Library; +public class ViewModelBase : CommonBase +{ +} + diff --git a/Common.Library/Common.Library.csproj b/Common.Library/Common.Library.csproj new file mode 100644 index 0000000..125f4c9 --- /dev/null +++ b/Common.Library/Common.Library.csproj @@ -0,0 +1,9 @@ + + + + net9.0 + enable + enable + + + diff --git a/Common.Library/Interfaces/IRepository.cs b/Common.Library/Interfaces/IRepository.cs new file mode 100644 index 0000000..e53b0ea --- /dev/null +++ b/Common.Library/Interfaces/IRepository.cs @@ -0,0 +1,10 @@ +using System.Collections.ObjectModel; + +namespace Common.Library; + +public interface IRepository +{ + ObservableCollection Get(); + TEntity Get(int id); + bool Save(TEntity entity); +} diff --git a/GreadyPoang.DataLayer/DataClasses/ParticipantRepository.cs b/GreadyPoang.DataLayer/DataClasses/ParticipantRepository.cs new file mode 100644 index 0000000..84fed75 --- /dev/null +++ b/GreadyPoang.DataLayer/DataClasses/ParticipantRepository.cs @@ -0,0 +1,83 @@ +using Common.Library; +using GreadyPoang.EntityLayer; +using System.Collections.ObjectModel; + +namespace GreadyPoang.DataLayer; + +public class ParticipantRepository : IRepository +{ + + private ObservableCollection lager; + + public ParticipantRepository() + { + if (lager == null || lager.Count == 0) + { + lager = new ObservableCollection(); + + lager.Add(new Participant + { + ParticipantId = 1, + FirstName = @"Kalle", + LastName = @"Persson", + Email = @"kalle@person.com", + }); + lager.Add(new Participant + { + ParticipantId = 2, + FirstName = @"Olle", + LastName = @"Goop", + Email = @"olle@goop.com", + }); + lager.Add(new Participant + { + ParticipantId = 3, + FirstName = @"Nisse", + LastName = @"Pärlemo", + Email = @"nisse@parlemo.com" + }); + } + } + + #region Get Method + public ObservableCollection Get() + { + // This method should return a collection of Participant objects. + // For now, returning an empty collection. + return lager; + } + + public Participant? Get(int id) + { + return Get().Where(row => row.ParticipantId == id).FirstOrDefault(); + } + #endregion + + public bool Save(Participant entity) + { + if (entity.ParticipantId == 0) + { + // New entity + var maxId = lager.Max(p => p.ParticipantId); + entity.ParticipantId = maxId + 1; + lager.Add(entity); + } + else + { + // Existing entity + var existing = Get(entity.ParticipantId); + if (existing != null) + { + existing.FirstName = entity.FirstName; + existing.LastName = entity.LastName; + existing.Email = entity.Email; + } + else + { + return false; // Entity not found + } + } + + return true; + } +} diff --git a/GreadyPoang.DataLayer/GreadyPoang.DataLayer.csproj b/GreadyPoang.DataLayer/GreadyPoang.DataLayer.csproj new file mode 100644 index 0000000..b08b128 --- /dev/null +++ b/GreadyPoang.DataLayer/GreadyPoang.DataLayer.csproj @@ -0,0 +1,19 @@ + + + + net9.0 + enable + enable + + + + + + + + + + + + + diff --git a/GreadyPoang.EntityLayer/EntityClasses/Participant.cs b/GreadyPoang.EntityLayer/EntityClasses/Participant.cs new file mode 100644 index 0000000..cf0cce6 --- /dev/null +++ b/GreadyPoang.EntityLayer/EntityClasses/Participant.cs @@ -0,0 +1,67 @@ +using Common.Library; + +namespace GreadyPoang.EntityLayer; + +public class Participant : EntityBase +{ + public Participant() + { + _firstName = string.Empty; + _lastName = string.Empty; + _email = string.Empty; + } + + private int _participantId; + private string _firstName; + private string _lastName; + private string _email; + + public int ParticipantId + { + get { return _participantId; } + set + { + _participantId = value; + RaisePropertyChanged(nameof(ParticipantId)); + } + } + + public string FirstName + { + get { return _firstName; } + set + { + _firstName = value; + RaisePropertyChanged(nameof(FirstName)); + } + } + + public string LastName + { + get { return _lastName; } + set + { + _lastName = value; + RaisePropertyChanged(nameof(LastName)); + } + } + public string Email + { + get { return _email; } + set + { + _email = value; + RaisePropertyChanged(nameof(Email)); + } + } + + public string FullName + { + get { return $"{FirstName} {LastName}"; } + } + + public string LastNameFirstName + { + get { return $"{LastName}, {FirstName}"; } + } +} diff --git a/GreadyPoang.EntityLayer/GreadyPoang.EntityLayer.csproj b/GreadyPoang.EntityLayer/GreadyPoang.EntityLayer.csproj new file mode 100644 index 0000000..b6922ab --- /dev/null +++ b/GreadyPoang.EntityLayer/GreadyPoang.EntityLayer.csproj @@ -0,0 +1,13 @@ + + + + net9.0 + enable + enable + + + + + + + diff --git a/GreadyPoang.ViewModelLayer/GreadyPoang.ViewModelLayer.csproj b/GreadyPoang.ViewModelLayer/GreadyPoang.ViewModelLayer.csproj new file mode 100644 index 0000000..3bc24fd --- /dev/null +++ b/GreadyPoang.ViewModelLayer/GreadyPoang.ViewModelLayer.csproj @@ -0,0 +1,15 @@ + + + + net9.0 + enable + enable + + + + + + + + + diff --git a/GreadyPoang.ViewModelLayer/ViewModelClasses/ParticipantViewModel.cs b/GreadyPoang.ViewModelLayer/ViewModelClasses/ParticipantViewModel.cs new file mode 100644 index 0000000..65fa57b --- /dev/null +++ b/GreadyPoang.ViewModelLayer/ViewModelClasses/ParticipantViewModel.cs @@ -0,0 +1,94 @@ +using Common.Library; +using GreadyPoang.EntityLayer; +using System.Collections.ObjectModel; + + +namespace GreadyPoang.ViewModelLayer; + +public class ParticipantViewModel : ViewModelBase +{ + #region Constructors + public ParticipantViewModel() : base() + { + + } + + public ParticipantViewModel(IRepository repo) : base() + { + Repository = repo; + } + #endregion + + #region Private Variables + private Participant? _ParticipantObject = new(); + private ObservableCollection _ParticipantList = new(); + private readonly IRepository? Repository; + #endregion + + #region public Properties + + public Participant? ParticipantObject + { + get { return _ParticipantObject; } + set + { + _ParticipantObject = value; + RaisePropertyChanged(nameof(ParticipantObject)); + } + } + + public ObservableCollection ParticipantList + { + get { return _ParticipantList; } + set + { + _ParticipantList = value; + RaisePropertyChanged(nameof(ParticipantList)); + } + } + + #endregion + + #region Get Method + public ObservableCollection Get() + { + if (Repository != null) + { + ParticipantList = new ObservableCollection(Repository.Get()); + } + + return new(); + } + + #endregion + + #region Get(id) Method + public Participant? Get(int id) + { + try + { + ParticipantObject = Repository.Get(id); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine($"Error in Get method: {ex.Message}"); + } + + return ParticipantObject; + } + public virtual bool Save() + { + if (Repository == null || ParticipantObject == null) + { + return false; + } + var tmp = Repository.Save(ParticipantObject); + if (tmp) + { + ParticipantObject = new Participant(); + this.Get(); + } + return tmp; + } + #endregion +} \ No newline at end of file diff --git a/GreadyPoang.sln b/GreadyPoang.sln new file mode 100644 index 0000000..396c6ed --- /dev/null +++ b/GreadyPoang.sln @@ -0,0 +1,50 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36408.4 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreadyPoang", "GreadyPoang\GreadyPoang.csproj", "{B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.Library", "Common.Library\Common.Library.csproj", "{28598B2A-3D61-4B2C-8EAE-A18583AB649D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreadyPoang.EntityLayer", "GreadyPoang.EntityLayer\GreadyPoang.EntityLayer.csproj", "{AC6F90B7-EA62-477A-A748-9459AC3CB4E6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreadyPoang.ViewModelLayer", "GreadyPoang.ViewModelLayer\GreadyPoang.ViewModelLayer.csproj", "{D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreadyPoang.DataLayer", "GreadyPoang.DataLayer\GreadyPoang.DataLayer.csproj", "{48BD841F-C383-4E0B-963E-AC2400FCC678}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B237F7D6-3B04-49AE-81B0-FEFE21A94CA7}.Release|Any CPU.Build.0 = Release|Any CPU + {28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {28598B2A-3D61-4B2C-8EAE-A18583AB649D}.Release|Any CPU.Build.0 = Release|Any CPU + {AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AC6F90B7-EA62-477A-A748-9459AC3CB4E6}.Release|Any CPU.Build.0 = Release|Any CPU + {D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D58EEC8D-59E2-4C08-BE60-81EE79F87C8F}.Release|Any CPU.Build.0 = Release|Any CPU + {48BD841F-C383-4E0B-963E-AC2400FCC678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48BD841F-C383-4E0B-963E-AC2400FCC678}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48BD841F-C383-4E0B-963E-AC2400FCC678}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48BD841F-C383-4E0B-963E-AC2400FCC678}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6D6C046F-5DA7-45E4-9DBC-715DC1067E12} + EndGlobalSection +EndGlobal diff --git a/GreadyPoang/App.xaml b/GreadyPoang/App.xaml new file mode 100644 index 0000000..f937e9c --- /dev/null +++ b/GreadyPoang/App.xaml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/GreadyPoang/App.xaml.cs b/GreadyPoang/App.xaml.cs new file mode 100644 index 0000000..45aa98f --- /dev/null +++ b/GreadyPoang/App.xaml.cs @@ -0,0 +1,15 @@ +namespace GreadyPoang +{ + public partial class App : Application + { + public App() + { + InitializeComponent(); + } + + protected override Window CreateWindow(IActivationState? activationState) + { + return new Window(new AppShell()); + } + } +} \ No newline at end of file diff --git a/GreadyPoang/AppShell.xaml b/GreadyPoang/AppShell.xaml new file mode 100644 index 0000000..a3bc75c --- /dev/null +++ b/GreadyPoang/AppShell.xaml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/GreadyPoang/AppShell.xaml.cs b/GreadyPoang/AppShell.xaml.cs new file mode 100644 index 0000000..d90304a --- /dev/null +++ b/GreadyPoang/AppShell.xaml.cs @@ -0,0 +1,10 @@ +namespace GreadyPoang +{ + public partial class AppShell : Shell + { + public AppShell() + { + InitializeComponent(); + } + } +} diff --git a/GreadyPoang/CommandClasses/ParticipantViewModelCommands.cs b/GreadyPoang/CommandClasses/ParticipantViewModelCommands.cs new file mode 100644 index 0000000..f8071d2 --- /dev/null +++ b/GreadyPoang/CommandClasses/ParticipantViewModelCommands.cs @@ -0,0 +1,66 @@ +using Common.Library; +using GreadyPoang.EntityLayer; +using GreadyPoang.ViewModelLayer; +using System.Windows.Input; + +namespace GreadyPoang.CommandClasses; + +public class ParticipantViewModelCommands : ParticipantViewModel +{ + #region constructors + public ParticipantViewModelCommands() : base() + { + + } + public ParticipantViewModelCommands(IRepository repo) : base(repo) + { + } + + #endregion + + #region Private Variables + private bool _IsSaveCommandEnabled = true; + #endregion + + #region Public Properties + public bool IsSaveCommandEnabled + { + get { return _IsSaveCommandEnabled; } + set + { + _IsSaveCommandEnabled = value; + RaisePropertyChanged(nameof(IsSaveCommandEnabled)); + } + } + #endregion + + #region Commands + public ICommand SaveCommand { get; private set; } + public ICommand EditCommand { get; private set; } + #endregion + + #region Init Method + public override void Init() + { + base.Init(); + SaveCommand = new Command(async () => SaveAsync(), () => IsSaveCommandEnabled); + EditCommand = new Command(async (id) => await EditAsync(id), (id) => id > 0); + } + #endregion + + protected async Task EditAsync(int id) + { + await Shell.Current.GoToAsync($"{nameof(Views.ParticipantListView)}?id={id}"); + } + + public async Task SaveAsync() + { + var ret = base.Save(); + if (ret) + { + await Shell.Current.GoToAsync(".."); + } + + return ret; + } +} diff --git a/GreadyPoang/GreadyPoang.csproj b/GreadyPoang/GreadyPoang.csproj new file mode 100644 index 0000000..39dcc9b --- /dev/null +++ b/GreadyPoang/GreadyPoang.csproj @@ -0,0 +1,91 @@ + + + + net9.0-android;net9.0-ios;net9.0-maccatalyst + $(TargetFrameworks);net9.0-windows10.0.19041.0 + + + + + + + Exe + GreadyPoang + true + true + enable + enable + + + GreadyPoang + + + com.companyname.greadypoang + + + 1.0 + 1 + + + None + + 15.0 + 15.0 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ParticipantListView.xaml + + + + + + MSBuild:Compile + + + MSBuild:Compile + + + MSBuild:Compile + + + + diff --git a/GreadyPoang/MainPage.xaml b/GreadyPoang/MainPage.xaml new file mode 100644 index 0000000..3c5009f --- /dev/null +++ b/GreadyPoang/MainPage.xaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/GreadyPoang/MainPage.xaml.cs b/GreadyPoang/MainPage.xaml.cs new file mode 100644 index 0000000..fd9f861 --- /dev/null +++ b/GreadyPoang/MainPage.xaml.cs @@ -0,0 +1,11 @@ +namespace GreadyPoang; + +public partial class MainPage : ContentPage +{ + + public MainPage() + { + InitializeComponent(); + } + +} diff --git a/GreadyPoang/MauiProgram.cs b/GreadyPoang/MauiProgram.cs new file mode 100644 index 0000000..38b96b6 --- /dev/null +++ b/GreadyPoang/MauiProgram.cs @@ -0,0 +1,34 @@ +using Common.Library; +using GreadyPoang.CommandClasses; +using GreadyPoang.DataLayer; +using GreadyPoang.EntityLayer; +using GreadyPoang.Views; +using Microsoft.Extensions.Logging; + +namespace GreadyPoang +{ + public static class MauiProgram + { + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder + .UseMauiApp() + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + + builder.Services.AddScoped, ParticipantRepository>(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + +#if DEBUG + builder.Logging.AddDebug(); +#endif + + return builder.Build(); + } + } +} diff --git a/GreadyPoang/Platforms/Android/AndroidManifest.xml b/GreadyPoang/Platforms/Android/AndroidManifest.xml new file mode 100644 index 0000000..e9937ad --- /dev/null +++ b/GreadyPoang/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/GreadyPoang/Platforms/Android/MainActivity.cs b/GreadyPoang/Platforms/Android/MainActivity.cs new file mode 100644 index 0000000..86052ce --- /dev/null +++ b/GreadyPoang/Platforms/Android/MainActivity.cs @@ -0,0 +1,11 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace GreadyPoang +{ + [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/GreadyPoang/Platforms/Android/MainApplication.cs b/GreadyPoang/Platforms/Android/MainApplication.cs new file mode 100644 index 0000000..d6129dc --- /dev/null +++ b/GreadyPoang/Platforms/Android/MainApplication.cs @@ -0,0 +1,16 @@ +using Android.App; +using Android.Runtime; + +namespace GreadyPoang +{ + [Application] + public class MainApplication : MauiApplication + { + public MainApplication(IntPtr handle, JniHandleOwnership ownership) + : base(handle, ownership) + { + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + } +} diff --git a/GreadyPoang/Platforms/Android/Resources/values/colors.xml b/GreadyPoang/Platforms/Android/Resources/values/colors.xml new file mode 100644 index 0000000..c04d749 --- /dev/null +++ b/GreadyPoang/Platforms/Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #512BD4 + #2B0B98 + #2B0B98 + \ No newline at end of file diff --git a/GreadyPoang/Platforms/MacCatalyst/AppDelegate.cs b/GreadyPoang/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 0000000..f0dea5b --- /dev/null +++ b/GreadyPoang/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,10 @@ +using Foundation; + +namespace GreadyPoang +{ + [Register("AppDelegate")] + public class AppDelegate : MauiUIApplicationDelegate + { + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + } +} diff --git a/GreadyPoang/Platforms/MacCatalyst/Entitlements.plist b/GreadyPoang/Platforms/MacCatalyst/Entitlements.plist new file mode 100644 index 0000000..de4adc9 --- /dev/null +++ b/GreadyPoang/Platforms/MacCatalyst/Entitlements.plist @@ -0,0 +1,14 @@ + + + + + + + com.apple.security.app-sandbox + + + com.apple.security.network.client + + + + diff --git a/GreadyPoang/Platforms/MacCatalyst/Info.plist b/GreadyPoang/Platforms/MacCatalyst/Info.plist new file mode 100644 index 0000000..7268977 --- /dev/null +++ b/GreadyPoang/Platforms/MacCatalyst/Info.plist @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + UIDeviceFamily + + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/GreadyPoang/Platforms/MacCatalyst/Program.cs b/GreadyPoang/Platforms/MacCatalyst/Program.cs new file mode 100644 index 0000000..ad29e7f --- /dev/null +++ b/GreadyPoang/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,16 @@ +using ObjCRuntime; +using UIKit; + +namespace GreadyPoang +{ + 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/GreadyPoang/Platforms/Tizen/Main.cs b/GreadyPoang/Platforms/Tizen/Main.cs new file mode 100644 index 0000000..2b15a15 --- /dev/null +++ b/GreadyPoang/Platforms/Tizen/Main.cs @@ -0,0 +1,17 @@ +using System; +using Microsoft.Maui; +using Microsoft.Maui.Hosting; + +namespace GreadyPoang +{ + internal class Program : MauiApplication + { + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + + static void Main(string[] args) + { + var app = new Program(); + app.Run(args); + } + } +} diff --git a/GreadyPoang/Platforms/Tizen/tizen-manifest.xml b/GreadyPoang/Platforms/Tizen/tizen-manifest.xml new file mode 100644 index 0000000..27b0efc --- /dev/null +++ b/GreadyPoang/Platforms/Tizen/tizen-manifest.xml @@ -0,0 +1,15 @@ + + + + + + maui-appicon-placeholder + + + + + http://tizen.org/privilege/internet + + + + \ No newline at end of file diff --git a/GreadyPoang/Platforms/Windows/App.xaml b/GreadyPoang/Platforms/Windows/App.xaml new file mode 100644 index 0000000..996aa2a --- /dev/null +++ b/GreadyPoang/Platforms/Windows/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/GreadyPoang/Platforms/Windows/App.xaml.cs b/GreadyPoang/Platforms/Windows/App.xaml.cs new file mode 100644 index 0000000..9d538bd --- /dev/null +++ b/GreadyPoang/Platforms/Windows/App.xaml.cs @@ -0,0 +1,25 @@ +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 GreadyPoang.WinUI +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + public partial class App : MauiWinUIApplication + { + /// + /// 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(); + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + } + +} diff --git a/GreadyPoang/Platforms/Windows/Package.appxmanifest b/GreadyPoang/Platforms/Windows/Package.appxmanifest new file mode 100644 index 0000000..d52e865 --- /dev/null +++ b/GreadyPoang/Platforms/Windows/Package.appxmanifest @@ -0,0 +1,46 @@ + + + + + + + + + $placeholder$ + User Name + $placeholder$.png + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GreadyPoang/Platforms/Windows/app.manifest b/GreadyPoang/Platforms/Windows/app.manifest new file mode 100644 index 0000000..b365b9d --- /dev/null +++ b/GreadyPoang/Platforms/Windows/app.manifest @@ -0,0 +1,15 @@ + + + + + + + + true/PM + PerMonitorV2, PerMonitor + + + diff --git a/GreadyPoang/Platforms/iOS/AppDelegate.cs b/GreadyPoang/Platforms/iOS/AppDelegate.cs new file mode 100644 index 0000000..f0dea5b --- /dev/null +++ b/GreadyPoang/Platforms/iOS/AppDelegate.cs @@ -0,0 +1,10 @@ +using Foundation; + +namespace GreadyPoang +{ + [Register("AppDelegate")] + public class AppDelegate : MauiUIApplicationDelegate + { + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + } +} diff --git a/GreadyPoang/Platforms/iOS/Info.plist b/GreadyPoang/Platforms/iOS/Info.plist new file mode 100644 index 0000000..0004a4f --- /dev/null +++ b/GreadyPoang/Platforms/iOS/Info.plist @@ -0,0 +1,32 @@ + + + + + LSRequiresIPhoneOS + + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/GreadyPoang/Platforms/iOS/Program.cs b/GreadyPoang/Platforms/iOS/Program.cs new file mode 100644 index 0000000..ad29e7f --- /dev/null +++ b/GreadyPoang/Platforms/iOS/Program.cs @@ -0,0 +1,16 @@ +using ObjCRuntime; +using UIKit; + +namespace GreadyPoang +{ + 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/GreadyPoang/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/GreadyPoang/Platforms/iOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..24ab3b4 --- /dev/null +++ b/GreadyPoang/Platforms/iOS/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,51 @@ + + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + + + diff --git a/GreadyPoang/Properties/launchSettings.json b/GreadyPoang/Properties/launchSettings.json new file mode 100644 index 0000000..4f85793 --- /dev/null +++ b/GreadyPoang/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "Windows Machine": { + "commandName": "Project", + "nativeDebugging": false + } + } +} \ No newline at end of file diff --git a/GreadyPoang/Resources/AppIcon/appicon.svg b/GreadyPoang/Resources/AppIcon/appicon.svg new file mode 100644 index 0000000..9d63b65 --- /dev/null +++ b/GreadyPoang/Resources/AppIcon/appicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/GreadyPoang/Resources/AppIcon/appiconfg.svg b/GreadyPoang/Resources/AppIcon/appiconfg.svg new file mode 100644 index 0000000..21dfb25 --- /dev/null +++ b/GreadyPoang/Resources/AppIcon/appiconfg.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/GreadyPoang/Resources/Fonts/OpenSans-Regular.ttf b/GreadyPoang/Resources/Fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000..33b3e0d Binary files /dev/null and b/GreadyPoang/Resources/Fonts/OpenSans-Regular.ttf differ diff --git a/GreadyPoang/Resources/Fonts/OpenSans-Semibold.ttf b/GreadyPoang/Resources/Fonts/OpenSans-Semibold.ttf new file mode 100644 index 0000000..a1f8571 Binary files /dev/null and b/GreadyPoang/Resources/Fonts/OpenSans-Semibold.ttf differ diff --git a/GreadyPoang/Resources/Images/dotnet_bot.png b/GreadyPoang/Resources/Images/dotnet_bot.png new file mode 100644 index 0000000..1d1b981 Binary files /dev/null and b/GreadyPoang/Resources/Images/dotnet_bot.png differ diff --git a/GreadyPoang/Resources/Raw/AboutAssets.txt b/GreadyPoang/Resources/Raw/AboutAssets.txt new file mode 100644 index 0000000..89dc758 --- /dev/null +++ b/GreadyPoang/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`. + + + +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/GreadyPoang/Resources/Splash/splash.svg b/GreadyPoang/Resources/Splash/splash.svg new file mode 100644 index 0000000..21dfb25 --- /dev/null +++ b/GreadyPoang/Resources/Splash/splash.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/GreadyPoang/Resources/Styles/AppStyles.xaml b/GreadyPoang/Resources/Styles/AppStyles.xaml new file mode 100644 index 0000000..f44d9a7 --- /dev/null +++ b/GreadyPoang/Resources/Styles/AppStyles.xaml @@ -0,0 +1,135 @@ + + + + + + Gready Poäng + + + 10 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/GreadyPoang/Resources/Styles/Colors.xaml b/GreadyPoang/Resources/Styles/Colors.xaml new file mode 100644 index 0000000..30307a5 --- /dev/null +++ b/GreadyPoang/Resources/Styles/Colors.xaml @@ -0,0 +1,45 @@ + + + + + + + #512BD4 + #ac99ea + #242424 + #DFD8F7 + #9880e5 + #2B0B98 + + White + Black + #D600AA + #190649 + #1f1f1f + + #E1E1E1 + #C8C8C8 + #ACACAC + #919191 + #6E6E6E + #404040 + #212121 + #141414 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/GreadyPoang/Resources/Styles/Styles.xaml b/GreadyPoang/Resources/Styles/Styles.xaml new file mode 100644 index 0000000..86f574d --- /dev/null +++ b/GreadyPoang/Resources/Styles/Styles.xaml @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GreadyPoang/Views/ParticipantListView.xaml b/GreadyPoang/Views/ParticipantListView.xaml new file mode 100644 index 0000000..a037cf0 --- /dev/null +++ b/GreadyPoang/Views/ParticipantListView.xaml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + +