From f5439533899a8734ff6f255f06724c9314cc778a Mon Sep 17 00:00:00 2001 From: Aleh Khantsevich Date: Sat, 27 Apr 2024 13:50:18 +0200 Subject: [PATCH] Added language & time page --- Wino.Core.Domain/Enums/WinoPage.cs | 3 +- .../LanguageTimePageViewModel.cs | 49 +++++++++++++++++++ .../SettingOptionsPageViewModel.cs | 46 ++--------------- Wino.Mail/App.xaml.cs | 1 + Wino.Mail/Helpers/XamlHelpers.cs | 4 +- .../Abstract/LanguageTimePageAbstract.cs | 6 +++ Wino.Mail/Views/MailRenderingPage.xaml | 2 +- .../Views/Settings/LanguageTimePage.xaml | 38 ++++++++++++++ .../Views/Settings/LanguageTimePage.xaml.cs | 19 +++++++ .../Views/Settings/SettingOptionsPage.xaml | 30 ++++++------ .../Views/Settings/SettingOptionsPage.xaml.cs | 7 --- Wino.Mail/Views/SettingsPage.xaml.cs | 23 +++------ Wino.Mail/Wino.Mail.csproj | 8 +++ 13 files changed, 154 insertions(+), 82 deletions(-) create mode 100644 Wino.Mail.ViewModels/LanguageTimePageViewModel.cs create mode 100644 Wino.Mail/Views/Abstract/LanguageTimePageAbstract.cs create mode 100644 Wino.Mail/Views/Settings/LanguageTimePage.xaml create mode 100644 Wino.Mail/Views/Settings/LanguageTimePage.xaml.cs diff --git a/Wino.Core.Domain/Enums/WinoPage.cs b/Wino.Core.Domain/Enums/WinoPage.cs index 69fbd7fa..e6ff92c5 100644 --- a/Wino.Core.Domain/Enums/WinoPage.cs +++ b/Wino.Core.Domain/Enums/WinoPage.cs @@ -20,6 +20,7 @@ MessageListPage, MailListPage, ReadingPanePage, - SettingOptionsPage + LanguageTimePage, + SettingOptionsPage, } } diff --git a/Wino.Mail.ViewModels/LanguageTimePageViewModel.cs b/Wino.Mail.ViewModels/LanguageTimePageViewModel.cs new file mode 100644 index 00000000..dc87d24d --- /dev/null +++ b/Wino.Mail.ViewModels/LanguageTimePageViewModel.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using CommunityToolkit.Mvvm.ComponentModel; +using Wino.Core.Domain.Interfaces; +using Wino.Core.Domain.Models.Navigation; +using Wino.Core.Domain.Models.Translations; + +namespace Wino.Mail.ViewModels +{ + public partial class LanguageTimePageViewModel(IDialogService dialogService, + IPreferencesService preferencesService, + ITranslationService translationService) : BaseViewModel(dialogService) + { + public IPreferencesService PreferencesService { get; } = preferencesService; + private readonly ITranslationService _translationService = translationService; + + [ObservableProperty] + private List _availableLanguages; + + [ObservableProperty] + private AppLanguageModel _selectedLanguage; + + private bool isInitialized = false; + + public override void OnNavigatedTo(NavigationMode mode, object parameters) + { + base.OnNavigatedTo(mode, parameters); + + AvailableLanguages = _translationService.GetAvailableLanguages(); + + SelectedLanguage = AvailableLanguages.FirstOrDefault(a => a.Language == PreferencesService.CurrentLanguage); + + isInitialized = true; + } + + protected override async void OnPropertyChanged(PropertyChangedEventArgs e) + { + base.OnPropertyChanged(e); + + if (!isInitialized) return; + + if (e.PropertyName == nameof(SelectedLanguage)) + { + await _translationService.InitializeLanguageAsync(SelectedLanguage.Language); + } + } + } +} diff --git a/Wino.Mail.ViewModels/SettingOptionsPageViewModel.cs b/Wino.Mail.ViewModels/SettingOptionsPageViewModel.cs index 01ad29de..a78fe0db 100644 --- a/Wino.Mail.ViewModels/SettingOptionsPageViewModel.cs +++ b/Wino.Mail.ViewModels/SettingOptionsPageViewModel.cs @@ -1,37 +1,15 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using CommunityToolkit.Mvvm.ComponentModel; -using CommunityToolkit.Mvvm.Input; +using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Navigation; -using Wino.Core.Domain.Models.Translations; using Wino.Core.Messages.Navigation; namespace Wino.Mail.ViewModels { public partial class SettingOptionsPageViewModel : BaseViewModel { - private readonly ITranslationService _translationService; - private readonly IPreferencesService _preferencesService; - - [ObservableProperty] - private List _availableLanguages; - - [ObservableProperty] - private AppLanguageModel _selectedLanguage; - - private bool isInitialized = false; - - public SettingOptionsPageViewModel(IDialogService dialogService, - ITranslationService translationService, - IPreferencesService preferencesService) : base(dialogService) - { - _translationService = translationService; - _preferencesService = preferencesService; - } + public SettingOptionsPageViewModel(IDialogService dialogService) : base(dialogService) { } [RelayCommand] private void GoAccountSettings() => Messenger.Send(); @@ -39,24 +17,6 @@ namespace Wino.Mail.ViewModels public override void OnNavigatedTo(NavigationMode mode, object parameters) { base.OnNavigatedTo(mode, parameters); - - AvailableLanguages = _translationService.GetAvailableLanguages(); - - SelectedLanguage = AvailableLanguages.FirstOrDefault(a => a.Language == _preferencesService.CurrentLanguage); - - isInitialized = true; - } - - protected override async void OnPropertyChanged(PropertyChangedEventArgs e) - { - base.OnPropertyChanged(e); - - if (!isInitialized) return; - - if (e.PropertyName == nameof(SelectedLanguage)) - { - await _translationService.InitializeLanguageAsync(SelectedLanguage.Language); - } } [RelayCommand] @@ -77,6 +37,8 @@ namespace Wino.Mail.ViewModels pageType = WinoPage.MessageListPage; else if (stringParameter == "Reading Pane") pageType = WinoPage.ReadingPanePage; + else if (stringParameter == "Language And Time") + pageType = WinoPage.LanguageTimePage; Messenger.Send(new BreadcrumbNavigationRequested(pageTitle, pageType)); } diff --git a/Wino.Mail/App.xaml.cs b/Wino.Mail/App.xaml.cs index e854c1e4..bf5862c2 100644 --- a/Wino.Mail/App.xaml.cs +++ b/Wino.Mail/App.xaml.cs @@ -141,6 +141,7 @@ namespace Wino services.AddTransient(typeof(MessageListPageViewModel)); services.AddTransient(typeof(ReadingPanePageViewModel)); services.AddTransient(typeof(MergedAccountDetailsPageViewModel)); + services.AddTransient(typeof(LanguageTimePageViewModel)); } #endregion diff --git a/Wino.Mail/Helpers/XamlHelpers.cs b/Wino.Mail/Helpers/XamlHelpers.cs index 7bef3d83..2b12a016 100644 --- a/Wino.Mail/Helpers/XamlHelpers.cs +++ b/Wino.Mail/Helpers/XamlHelpers.cs @@ -62,10 +62,10 @@ namespace Wino.Helpers } } - public static string GetCreationDateString(DateTime date) + public static string GetCreationDateString(DateTime date, bool prefer24HourTime) { var localTime = date.ToLocalTime(); - return $"{localTime.ToLongDateString()} {localTime.ToLongTimeString()}"; + return $"{localTime.ToLongDateString()} {(prefer24HourTime ? localTime.ToString("HH:mm:ss") : localTime.ToLongTimeString())}"; } public static string GetMailGroupDateString(object groupObject) diff --git a/Wino.Mail/Views/Abstract/LanguageTimePageAbstract.cs b/Wino.Mail/Views/Abstract/LanguageTimePageAbstract.cs new file mode 100644 index 00000000..492966d4 --- /dev/null +++ b/Wino.Mail/Views/Abstract/LanguageTimePageAbstract.cs @@ -0,0 +1,6 @@ +using Wino.Mail.ViewModels; + +namespace Wino.Views.Abstract +{ + public abstract class LanguageTimePageAbstract : BasePage { } +} diff --git a/Wino.Mail/Views/MailRenderingPage.xaml b/Wino.Mail/Views/MailRenderingPage.xaml index f5f1579d..3b85c212 100644 --- a/Wino.Mail/Views/MailRenderingPage.xaml +++ b/Wino.Mail/Views/MailRenderingPage.xaml @@ -196,7 +196,7 @@ - + diff --git a/Wino.Mail/Views/Settings/LanguageTimePage.xaml b/Wino.Mail/Views/Settings/LanguageTimePage.xaml new file mode 100644 index 00000000..1260d705 --- /dev/null +++ b/Wino.Mail/Views/Settings/LanguageTimePage.xaml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Wino.Mail/Views/Settings/LanguageTimePage.xaml.cs b/Wino.Mail/Views/Settings/LanguageTimePage.xaml.cs new file mode 100644 index 00000000..95b39d9a --- /dev/null +++ b/Wino.Mail/Views/Settings/LanguageTimePage.xaml.cs @@ -0,0 +1,19 @@ +using Wino.Views.Abstract; + +namespace Wino.Views.Settings +{ + public sealed partial class LanguageTimePage : LanguageTimePageAbstract + { + public LanguageTimePage() + { + this.InitializeComponent(); + } + + public override void OnLanguageChanged() + { + base.OnLanguageChanged(); + + Bindings.Update(); + } + } +} diff --git a/Wino.Mail/Views/Settings/SettingOptionsPage.xaml b/Wino.Mail/Views/Settings/SettingOptionsPage.xaml index 7a79c41c..9fd2fbde 100644 --- a/Wino.Mail/Views/Settings/SettingOptionsPage.xaml +++ b/Wino.Mail/Views/Settings/SettingOptionsPage.xaml @@ -24,6 +24,21 @@ + + + + + + + + - - - - - - - page switch { - switch (page) - { - case WinoPage.AboutPage: - return typeof(AboutPage); - case WinoPage.PersonalizationPage: - return typeof(PersonalizationPage); - case WinoPage.MessageListPage: - return typeof(MessageListPage); - case WinoPage.ReadingPanePage: - return typeof(ReadingPanePage); - default: - return null; - } - } + WinoPage.AboutPage => typeof(AboutPage), + WinoPage.PersonalizationPage => typeof(PersonalizationPage), + WinoPage.MessageListPage => typeof(MessageListPage), + WinoPage.ReadingPanePage => typeof(ReadingPanePage), + WinoPage.LanguageTimePage => typeof(LanguageTimePage), + _ => null, + }; void IRecipient.Receive(BreadcrumbNavigationRequested message) { diff --git a/Wino.Mail/Wino.Mail.csproj b/Wino.Mail/Wino.Mail.csproj index 0b59c6a6..0a174eba 100644 --- a/Wino.Mail/Wino.Mail.csproj +++ b/Wino.Mail/Wino.Mail.csproj @@ -356,6 +356,7 @@ + @@ -413,6 +414,9 @@ AboutPage.xaml + + LanguageTimePage.xaml + MessageListPage.xaml @@ -626,6 +630,10 @@ Designer MSBuild:Compile + + MSBuild:Compile + Designer + Designer MSBuild:Compile