Fixing UWP solution.
This commit is contained in:
@@ -128,6 +128,7 @@
|
|||||||
<Compile Include="Models\Personalization\PreDefinedAppTheme.cs" />
|
<Compile Include="Models\Personalization\PreDefinedAppTheme.cs" />
|
||||||
<Compile Include="Models\Personalization\SystemAppTheme.cs" />
|
<Compile Include="Models\Personalization\SystemAppTheme.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Services\AppShellService.cs" />
|
||||||
<Compile Include="Services\PreferencesService.cs" />
|
<Compile Include="Services\PreferencesService.cs" />
|
||||||
<Compile Include="Services\StatePersistenceService.cs" />
|
<Compile Include="Services\StatePersistenceService.cs" />
|
||||||
<Compile Include="Services\WinoServerConnectionManager.cs" />
|
<Compile Include="Services\WinoServerConnectionManager.cs" />
|
||||||
|
|||||||
@@ -10,16 +10,10 @@ using Windows.ApplicationModel;
|
|||||||
using Windows.ApplicationModel.Activation;
|
using Windows.ApplicationModel.Activation;
|
||||||
using Windows.ApplicationModel.AppService;
|
using Windows.ApplicationModel.AppService;
|
||||||
using Windows.ApplicationModel.Background;
|
using Windows.ApplicationModel.Background;
|
||||||
using Windows.ApplicationModel.Core;
|
|
||||||
using Windows.Foundation.Metadata;
|
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
using Windows.System.Profile;
|
|
||||||
using Windows.UI;
|
|
||||||
using Windows.UI.ViewManagement;
|
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
using Windows.UI.Xaml.Controls;
|
using Windows.UI.Xaml.Controls;
|
||||||
using Wino.Activation;
|
using Wino.Activation;
|
||||||
using Wino.Core;
|
|
||||||
using Wino.Core.Domain.Interfaces;
|
using Wino.Core.Domain.Interfaces;
|
||||||
using Wino.Core.Services;
|
using Wino.Core.Services;
|
||||||
using Wino.Core.WinUI.Services;
|
using Wino.Core.WinUI.Services;
|
||||||
@@ -28,27 +22,10 @@ namespace Wino
|
|||||||
{
|
{
|
||||||
public sealed partial class App : Application
|
public sealed partial class App : Application
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
private BackgroundTaskDeferral backgroundTaskDeferral;
|
private BackgroundTaskDeferral backgroundTaskDeferral;
|
||||||
|
|
||||||
private readonly IWinoServerConnectionManager<AppServiceConnection> _appServiceConnectionManager;
|
|
||||||
private readonly ILogInitializer _logInitializer;
|
|
||||||
private readonly IThemeService _themeService;
|
|
||||||
private readonly IDatabaseService _databaseService;
|
|
||||||
private readonly IApplicationConfiguration _appInitializerService;
|
|
||||||
private readonly ITranslationService _translationService;
|
|
||||||
private readonly IApplicationConfiguration _applicationFolderConfiguration;
|
private readonly IApplicationConfiguration _applicationFolderConfiguration;
|
||||||
|
|
||||||
// Order matters.
|
|
||||||
private List<IInitializeAsync> initializeServices => new List<IInitializeAsync>()
|
|
||||||
{
|
|
||||||
_databaseService,
|
|
||||||
_appServiceConnectionManager,
|
|
||||||
_translationService,
|
|
||||||
_themeService,
|
|
||||||
};
|
|
||||||
|
|
||||||
public App()
|
public App()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -78,7 +55,6 @@ namespace Wino
|
|||||||
_appServiceConnectionManager = Services.GetService<IWinoServerConnectionManager<AppServiceConnection>>();
|
_appServiceConnectionManager = Services.GetService<IWinoServerConnectionManager<AppServiceConnection>>();
|
||||||
_themeService = Services.GetService<IThemeService>();
|
_themeService = Services.GetService<IThemeService>();
|
||||||
_databaseService = Services.GetService<IDatabaseService>();
|
_databaseService = Services.GetService<IDatabaseService>();
|
||||||
_appInitializerService = Services.GetService<IApplicationConfiguration>();
|
|
||||||
_translationService = Services.GetService<ITranslationService>();
|
_translationService = Services.GetService<ITranslationService>();
|
||||||
_appShellService = Services.GetService<IAppShellService>();
|
_appShellService = Services.GetService<IAppShellService>();
|
||||||
|
|
||||||
@@ -103,101 +79,7 @@ namespace Wino
|
|||||||
private void LogActivation(string log) => Log.Information($"{WinoLaunchLogPrefix}{log}");
|
private void LogActivation(string log) => Log.Information($"{WinoLaunchLogPrefix}{log}");
|
||||||
private void OnLeavingBackground(object sender, LeavingBackgroundEventArgs e) => LogActivation($"Wino went foreground.");
|
private void OnLeavingBackground(object sender, LeavingBackgroundEventArgs e) => LogActivation($"Wino went foreground.");
|
||||||
private void OnEnteredBackground(object sender, EnteredBackgroundEventArgs e) => LogActivation($"Wino went background.");
|
private void OnEnteredBackground(object sender, EnteredBackgroundEventArgs e) => LogActivation($"Wino went background.");
|
||||||
private IServiceProvider ConfigureServices()
|
|
||||||
{
|
|
||||||
var services = new ServiceCollection();
|
|
||||||
|
|
||||||
services.RegisterCoreServices();
|
|
||||||
services.RegisterCoreUWPServices();
|
|
||||||
|
|
||||||
RegisterUWPServices(services);
|
|
||||||
RegisterViewModels(services);
|
|
||||||
RegisterActivationHandlers(services);
|
|
||||||
|
|
||||||
return services.BuildServiceProvider();
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Dependency Injection
|
|
||||||
|
|
||||||
private void RegisterActivationHandlers(IServiceCollection services)
|
|
||||||
{
|
|
||||||
services.AddTransient<ProtocolActivationHandler>();
|
|
||||||
// services.AddTransient<BackgroundActivationHandler>();
|
|
||||||
services.AddTransient<ToastNotificationActivationHandler>();
|
|
||||||
services.AddTransient<FileActivationHandler>();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RegisterUWPServices(IServiceCollection services)
|
|
||||||
{
|
|
||||||
services.AddSingleton<IApplicationResourceManager<ResourceDictionary>, ApplicationResourceManager>();
|
|
||||||
services.AddSingleton<IThemeService, ThemeService>();
|
|
||||||
services.AddSingleton<IPreferencesService, PreferencesService>();
|
|
||||||
services.AddSingleton<IStatePersistanceService, StatePersistenceService>();
|
|
||||||
services.AddSingleton<ILaunchProtocolService, LaunchProtocolService>();
|
|
||||||
services.AddSingleton<IWinoNavigationService, WinoNavigationService>();
|
|
||||||
services.AddSingleton<IDialogService, DialogService>();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RegisterViewModels(IServiceCollection services)
|
|
||||||
{
|
|
||||||
services.AddSingleton(typeof(AppShellViewModel));
|
|
||||||
services.AddTransient(typeof(SettingsDialogViewModel));
|
|
||||||
services.AddTransient(typeof(PersonalizationPageViewModel));
|
|
||||||
services.AddTransient(typeof(SettingOptionsPageViewModel));
|
|
||||||
services.AddTransient(typeof(MailListPageViewModel));
|
|
||||||
services.AddTransient(typeof(MailRenderingPageViewModel));
|
|
||||||
services.AddTransient(typeof(AccountManagementViewModel));
|
|
||||||
services.AddTransient(typeof(WelcomePageViewModel));
|
|
||||||
services.AddTransient(typeof(AboutPageViewModel));
|
|
||||||
services.AddTransient(typeof(ComposePageViewModel));
|
|
||||||
services.AddTransient(typeof(IdlePageViewModel));
|
|
||||||
services.AddTransient(typeof(SettingsPageViewModel));
|
|
||||||
services.AddTransient(typeof(NewAccountManagementPageViewModel));
|
|
||||||
services.AddTransient(typeof(AccountDetailsPageViewModel));
|
|
||||||
services.AddTransient(typeof(SignatureManagementPageViewModel));
|
|
||||||
services.AddTransient(typeof(MessageListPageViewModel));
|
|
||||||
services.AddTransient(typeof(ReadingPanePageViewModel));
|
|
||||||
services.AddTransient(typeof(MergedAccountDetailsPageViewModel));
|
|
||||||
services.AddTransient(typeof(LanguageTimePageViewModel));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Misc Configuration
|
|
||||||
|
|
||||||
private void ConfigureLogger() => _logInitializer.SetupLogger(ApplicationData.Current.LocalFolder.Path);
|
|
||||||
|
|
||||||
private void ConfigureAppCenter() => AppCenter.Start(AppCenterKey, typeof(Analytics), typeof(Crashes));
|
|
||||||
|
|
||||||
private void ConfigurePrelaunch()
|
|
||||||
{
|
|
||||||
if (ApiInformation.IsMethodPresent("Windows.ApplicationModel.Core.CoreApplication", "EnablePrelaunch"))
|
|
||||||
CoreApplication.EnablePrelaunch(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ConfigureXbox()
|
|
||||||
{
|
|
||||||
// Xbox users should use Reveal focus.
|
|
||||||
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 6))
|
|
||||||
{
|
|
||||||
FocusVisualKind = AnalyticsInfo.VersionInfo.DeviceFamily == "Xbox" ? FocusVisualKind.Reveal : FocusVisualKind.HighVisibility;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ConfigureTitleBar()
|
|
||||||
{
|
|
||||||
var coreTitleBar = CoreApplication.GetCurrentView().TitleBar;
|
|
||||||
var applicationViewTitleBar = ApplicationView.GetForCurrentView().TitleBar;
|
|
||||||
|
|
||||||
// Extend shell content into core window to meet design requirements.
|
|
||||||
coreTitleBar.ExtendViewIntoTitleBar = true;
|
|
||||||
|
|
||||||
// Change system buttons and background colors to meet design requirements.
|
|
||||||
applicationViewTitleBar.ButtonBackgroundColor = Colors.Transparent;
|
|
||||||
applicationViewTitleBar.BackgroundColor = Colors.Transparent;
|
|
||||||
applicationViewTitleBar.ButtonInactiveBackgroundColor = Colors.Transparent;
|
|
||||||
applicationViewTitleBar.ButtonForegroundColor = Colors.White;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnWindowCreated(WindowCreatedEventArgs args)
|
protected override void OnWindowCreated(WindowCreatedEventArgs args)
|
||||||
{
|
{
|
||||||
@@ -242,6 +124,8 @@ namespace Wino
|
|||||||
{
|
{
|
||||||
base.OnBackgroundActivated(args);
|
base.OnBackgroundActivated(args);
|
||||||
|
|
||||||
|
// This can only be handled in App.xaml.cs
|
||||||
|
// Using handler activation makes it crash at runtime with a COM error...
|
||||||
if (args.TaskInstance.TriggerDetails is AppServiceTriggerDetails appServiceTriggerDetails)
|
if (args.TaskInstance.TriggerDetails is AppServiceTriggerDetails appServiceTriggerDetails)
|
||||||
{
|
{
|
||||||
// Only accept connections from callers in the same package
|
// Only accept connections from callers in the same package
|
||||||
@@ -327,14 +211,6 @@ namespace Wino
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<ActivationHandler> GetActivationHandlers()
|
|
||||||
{
|
|
||||||
yield return Services.GetService<ProtocolActivationHandler>();
|
|
||||||
// yield return Services.GetService<BackgroundActivationHandler>(); // Old UWP background task handler.
|
|
||||||
yield return Services.GetService<ToastNotificationActivationHandler>();
|
|
||||||
yield return Services.GetService<FileActivationHandler>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async void OnBackgroundTaskCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
|
public async void OnBackgroundTaskCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
|
||||||
{
|
{
|
||||||
Log.Information($"Background task {sender.Task.Name} was canceled. Reason: {reason}");
|
Log.Information($"Background task {sender.Task.Name} was canceled. Reason: {reason}");
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.AppCenter;
|
using Microsoft.AppCenter;
|
||||||
using Microsoft.AppCenter.Analytics;
|
using Microsoft.AppCenter.Analytics;
|
||||||
using Microsoft.AppCenter.Crashes;
|
using Microsoft.AppCenter.Crashes;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Serilog;
|
|
||||||
using Windows.ApplicationModel.Core;
|
using Windows.ApplicationModel.Core;
|
||||||
using Windows.Foundation.Metadata;
|
using Windows.Foundation.Metadata;
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
@@ -18,9 +16,12 @@ using Wino.Core.UWP;
|
|||||||
using Wino.Mail.ViewModels;
|
using Wino.Mail.ViewModels;
|
||||||
using Wino.Services;
|
using Wino.Services;
|
||||||
using Wino.Core.Services;
|
using Wino.Core.Services;
|
||||||
|
using Windows.ApplicationModel.AppService;
|
||||||
|
using Wino.Core.UWP.Services;
|
||||||
using Wino.Core.WinUI.Services;
|
using Wino.Core.WinUI.Services;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if NET8_0
|
#if NET8_0
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
using Microsoft.UI;
|
using Microsoft.UI;
|
||||||
@@ -36,11 +37,11 @@ namespace Wino
|
|||||||
private const string WinoLaunchLogPrefix = "[Wino Launch] ";
|
private const string WinoLaunchLogPrefix = "[Wino Launch] ";
|
||||||
private const string AppCenterKey = "90deb1d0-a77f-47d0-8a6b-7eaf111c6b72";
|
private const string AppCenterKey = "90deb1d0-a77f-47d0-8a6b-7eaf111c6b72";
|
||||||
|
|
||||||
|
|
||||||
|
private readonly IWinoServerConnectionManager<AppServiceConnection> _appServiceConnectionManager;
|
||||||
private readonly ILogInitializer _logInitializer;
|
private readonly ILogInitializer _logInitializer;
|
||||||
private readonly IThemeService _themeService;
|
private readonly IThemeService _themeService;
|
||||||
private readonly IDatabaseService _databaseService;
|
private readonly IDatabaseService _databaseService;
|
||||||
private readonly IAppInitializerService _appInitializerService;
|
|
||||||
private readonly IWinoSynchronizerFactory _synchronizerFactory;
|
|
||||||
private readonly ITranslationService _translationService;
|
private readonly ITranslationService _translationService;
|
||||||
private readonly IAppShellService _appShellService;
|
private readonly IAppShellService _appShellService;
|
||||||
|
|
||||||
@@ -50,10 +51,9 @@ namespace Wino
|
|||||||
// Order matters.
|
// Order matters.
|
||||||
private List<IInitializeAsync> initializeServices => new List<IInitializeAsync>()
|
private List<IInitializeAsync> initializeServices => new List<IInitializeAsync>()
|
||||||
{
|
{
|
||||||
_translationService,
|
|
||||||
_databaseService,
|
_databaseService,
|
||||||
|
_translationService,
|
||||||
_themeService,
|
_themeService,
|
||||||
_synchronizerFactory
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private IServiceProvider ConfigureServices()
|
private IServiceProvider ConfigureServices()
|
||||||
@@ -154,37 +154,6 @@ namespace Wino
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tasks that must run before the activation and launch.
|
|
||||||
/// Regardless of whether it's an interactive launch or not.
|
|
||||||
/// </summary>
|
|
||||||
private async Task PreInitializationAsync()
|
|
||||||
{
|
|
||||||
// Handle migrations.
|
|
||||||
// TODO: Automate migration process with more proper way.
|
|
||||||
|
|
||||||
if (!ApplicationData.Current.LocalSettings.Values.ContainsKey("Migration_169"))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
await _appInitializerService.MigrateAsync();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Log.Error(ex, $"{WinoLaunchLogPrefix}Migration_169 failed.");
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
ApplicationData.Current.LocalSettings.Values["Migration_169"] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var service in initializeServices)
|
|
||||||
{
|
|
||||||
await service.InitializeAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private IEnumerable<ActivationHandler> GetActivationHandlers()
|
private IEnumerable<ActivationHandler> GetActivationHandlers()
|
||||||
{
|
{
|
||||||
yield return Services.GetService<ProtocolActivationHandler>();
|
yield return Services.GetService<ProtocolActivationHandler>();
|
||||||
|
|||||||
@@ -19,8 +19,9 @@ using Wino.Core.Messages.Synchronization;
|
|||||||
using Wino.Core.UWP.Extensions;
|
using Wino.Core.UWP.Extensions;
|
||||||
using Wino.Dialogs;
|
using Wino.Dialogs;
|
||||||
using Wino.Helpers;
|
using Wino.Helpers;
|
||||||
using Windows.Foundation.Metadata;
|
|
||||||
using Wino.Core.WinUI.Services;
|
using Wino.Core.WinUI.Services;
|
||||||
|
using Wino.Messaging.Server;
|
||||||
|
|
||||||
|
|
||||||
#if NET8_0
|
#if NET8_0
|
||||||
using Microsoft.UI.Xaml.Controls;
|
using Microsoft.UI.Xaml.Controls;
|
||||||
|
|||||||
Reference in New Issue
Block a user