diff --git a/.gitignore b/.gitignore index 53400b31..3a23d34c 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ source/Eppie.App/.vs/ source/Eppie.App/Eppie.App/Eppie.App.csproj.user source/Eppie.App/Eppie.App/bin/ source/Eppie.App/Eppie.App/obj/ +source/Eppie.App/Eppie.App.UWP/bin/ +source/Eppie.App/Eppie.App.UWP/obj/ diff --git a/source/Eppie.App/Directory.Build.props b/source/Eppie.App/Directory.Build.props index 8daf5692..f51af45f 100644 --- a/source/Eppie.App/Directory.Build.props +++ b/source/Eppie.App/Directory.Build.props @@ -2,7 +2,6 @@ enable enable - true + + + true + + + diff --git a/source/Eppie.App/Eppie.App.UWP/App.xaml b/source/Eppie.App/Eppie.App.UWP/App.xaml new file mode 100644 index 00000000..65853b71 --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/App.xaml @@ -0,0 +1,7 @@ + + + diff --git a/source/Eppie.App/Eppie.App.UWP/App.xaml.cs b/source/Eppie.App/Eppie.App.UWP/App.xaml.cs new file mode 100644 index 00000000..c7529ee7 --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/App.xaml.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +namespace Eppie.App.UWP +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + if (e.PrelaunchActivated == false) + { + if (rootFrame.Content == null) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Ensure the current window is active + Window.Current.Activate(); + } + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + } +} diff --git a/source/Eppie.App/Eppie.App.UWP/Assets/LockScreenLogo.scale-200.png b/source/Eppie.App/Eppie.App.UWP/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 00000000..735f57ad Binary files /dev/null and b/source/Eppie.App/Eppie.App.UWP/Assets/LockScreenLogo.scale-200.png differ diff --git a/source/Eppie.App/Eppie.App.UWP/Assets/SplashScreen.scale-200.png b/source/Eppie.App/Eppie.App.UWP/Assets/SplashScreen.scale-200.png new file mode 100644 index 00000000..023e7f1f Binary files /dev/null and b/source/Eppie.App/Eppie.App.UWP/Assets/SplashScreen.scale-200.png differ diff --git a/source/Eppie.App/Eppie.App.UWP/Assets/Square150x150Logo.scale-200.png b/source/Eppie.App/Eppie.App.UWP/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 00000000..af49fec1 Binary files /dev/null and b/source/Eppie.App/Eppie.App.UWP/Assets/Square150x150Logo.scale-200.png differ diff --git a/source/Eppie.App/Eppie.App.UWP/Assets/Square44x44Logo.scale-200.png b/source/Eppie.App/Eppie.App.UWP/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 00000000..ce342a2e Binary files /dev/null and b/source/Eppie.App/Eppie.App.UWP/Assets/Square44x44Logo.scale-200.png differ diff --git a/source/Eppie.App/Eppie.App.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/source/Eppie.App/Eppie.App.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 00000000..f6c02ce9 Binary files /dev/null and b/source/Eppie.App/Eppie.App.UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/source/Eppie.App/Eppie.App.UWP/Assets/StoreLogo.png b/source/Eppie.App/Eppie.App.UWP/Assets/StoreLogo.png new file mode 100644 index 00000000..7385b56c Binary files /dev/null and b/source/Eppie.App/Eppie.App.UWP/Assets/StoreLogo.png differ diff --git a/source/Eppie.App/Eppie.App.UWP/Assets/Wide310x150Logo.scale-200.png b/source/Eppie.App/Eppie.App.UWP/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 00000000..288995b3 Binary files /dev/null and b/source/Eppie.App/Eppie.App.UWP/Assets/Wide310x150Logo.scale-200.png differ diff --git a/source/Eppie.App/Eppie.App.UWP/Eppie.App.UWP.csproj b/source/Eppie.App/Eppie.App.UWP/Eppie.App.UWP.csproj new file mode 100644 index 00000000..81b86f3a --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/Eppie.App.UWP.csproj @@ -0,0 +1,169 @@ + + + + + disable + + + Debug + x86 + {CAE118DC-8F0D-476E-A64A-AE165C754C92} + AppContainerExe + Properties + Eppie.App.UWP + Eppie.App.UWP + en-US + UAP + 10.0.22621.0 + 10.0.20348.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + false + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\ARM64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM64 + false + prompt + true + true + + + bin\ARM64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM64 + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + + + 14.0 + + + + \ No newline at end of file diff --git a/source/Eppie.App/Eppie.App.UWP/MainPage.xaml b/source/Eppie.App/Eppie.App.UWP/MainPage.xaml new file mode 100644 index 00000000..672381c8 --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/MainPage.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/source/Eppie.App/Eppie.App.UWP/MainPage.xaml.cs b/source/Eppie.App/Eppie.App.UWP/MainPage.xaml.cs new file mode 100644 index 00000000..ecb25e24 --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/MainPage.xaml.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 + +namespace Eppie.App.UWP +{ + /// + /// An empty page that can be used on its own or navigated to within a Frame. + /// + public sealed partial class MainPage : Page + { + public MainPage() + { + this.InitializeComponent(); + } + } +} diff --git a/source/Eppie.App/Eppie.App.UWP/Package.appxmanifest b/source/Eppie.App/Eppie.App.UWP/Package.appxmanifest new file mode 100644 index 00000000..eefcc94e --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/Package.appxmanifest @@ -0,0 +1,49 @@ + + + + + + + + + + Eppie.App.UWP + alex + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Eppie.App/Eppie.App.UWP/Properties/AssemblyInfo.cs b/source/Eppie.App/Eppie.App.UWP/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..f1ae059b --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/Properties/AssemblyInfo.cs @@ -0,0 +1,27 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Eppie.App.UWP")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("ToDo")] +[assembly: AssemblyProduct("Eppie.App.UWP")] +[assembly: AssemblyCopyright("Copyright © ToDo 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] diff --git a/source/Eppie.App/Eppie.App.UWP/Properties/Default.rd.xml b/source/Eppie.App/Eppie.App.UWP/Properties/Default.rd.xml new file mode 100644 index 00000000..af00722c --- /dev/null +++ b/source/Eppie.App/Eppie.App.UWP/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Eppie.App/Eppie.App.sln b/source/Eppie.App/Eppie.App.sln index a25d31c0..ca9e87c2 100644 --- a/source/Eppie.App/Eppie.App.sln +++ b/source/Eppie.App/Eppie.App.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.11.35222.181 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eppie.App", "Eppie.App\Eppie.App.csproj", "{0D949175-5A8B-4474-9F7B-529A1B5AD025}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Eppie.App", "Eppie.App\Eppie.App.csproj", "{0D949175-5A8B-4474-9F7B-529A1B5AD025}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E0155D4F-50A1-4EAD-A5DF-2080ECDF1C72}" ProjectSection(SolutionItems) = preProject @@ -14,18 +14,82 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution global.json = global.json EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eppie.App.UWP", "Eppie.App.UWP\Eppie.App.UWP.csproj", "{CAE118DC-8F0D-476E-A64A-AE165C754C92}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|Any CPU.Build.0 = Debug|Any CPU {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|ARM.Build.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|ARM.Deploy.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|ARM64.Build.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|ARM64.Deploy.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|x64.ActiveCfg = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|x64.Build.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|x64.Deploy.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|x86.ActiveCfg = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|x86.Build.0 = Debug|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Debug|x86.Deploy.0 = Debug|Any CPU {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|Any CPU.ActiveCfg = Release|Any CPU {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|Any CPU.Build.0 = Release|Any CPU {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|Any CPU.Deploy.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|ARM.ActiveCfg = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|ARM.Build.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|ARM.Deploy.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|ARM64.ActiveCfg = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|ARM64.Build.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|ARM64.Deploy.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|x64.ActiveCfg = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|x64.Build.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|x64.Deploy.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|x86.ActiveCfg = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|x86.Build.0 = Release|Any CPU + {0D949175-5A8B-4474-9F7B-529A1B5AD025}.Release|x86.Deploy.0 = Release|Any CPU + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|Any CPU.ActiveCfg = Debug|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|Any CPU.Build.0 = Debug|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|Any CPU.Deploy.0 = Debug|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|ARM.ActiveCfg = Debug|ARM + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|ARM.Build.0 = Debug|ARM + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|ARM.Deploy.0 = Debug|ARM + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|ARM64.Build.0 = Debug|ARM64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|x64.ActiveCfg = Debug|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|x64.Build.0 = Debug|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|x64.Deploy.0 = Debug|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|x86.ActiveCfg = Debug|x86 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|x86.Build.0 = Debug|x86 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Debug|x86.Deploy.0 = Debug|x86 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|Any CPU.ActiveCfg = Release|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|Any CPU.Build.0 = Release|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|Any CPU.Deploy.0 = Release|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|ARM.ActiveCfg = Release|ARM + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|ARM.Build.0 = Release|ARM + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|ARM.Deploy.0 = Release|ARM + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|ARM64.ActiveCfg = Release|ARM64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|ARM64.Build.0 = Release|ARM64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|ARM64.Deploy.0 = Release|ARM64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|x64.ActiveCfg = Release|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|x64.Build.0 = Release|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|x64.Deploy.0 = Release|x64 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|x86.ActiveCfg = Release|x86 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|x86.Build.0 = Release|x86 + {CAE118DC-8F0D-476E-A64A-AE165C754C92}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE