diff --git a/src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs b/src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs index 3dac744762..b4eae2d1ba 100644 --- a/src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs +++ b/src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs @@ -3,14 +3,17 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using System.Reflection; using System.Text.Json.Serialization; +using ManagedCommon; using Microsoft.PowerToys.Settings.UI.Library; +using Microsoft.PowerToys.Settings.UI.Library.Helpers; using Microsoft.PowerToys.Settings.UI.Library.Interfaces; namespace Settings.UI.Library { - public class LightSwitchSettings : BasePTModuleSettings, ISettingsConfig, ICloneable + public class LightSwitchSettings : BasePTModuleSettings, ISettingsConfig, ICloneable, IHotkeyConfig { public const string ModuleName = "LightSwitch"; @@ -24,6 +27,21 @@ namespace Settings.UI.Library [JsonPropertyName("properties")] public LightSwitchProperties Properties { get; set; } + public HotkeyAccessor[] GetAllHotkeyAccessors() + { + var hotkeyAccessors = new List + { + new HotkeyAccessor( + () => Properties.ToggleThemeHotkey.Value, + value => Properties.ToggleThemeHotkey.Value = value ?? LightSwitchProperties.DefaultToggleThemeHotkey, + "LightSwitch_ThemeToggle_Shortcut"), + }; + + return hotkeyAccessors.ToArray(); + } + + public ModuleType GetModuleType() => ModuleType.LightSwitch; + public object Clone() { return new LightSwitchSettings() @@ -41,6 +59,7 @@ namespace Settings.UI.Library SunsetOffset = new IntProperty((int)Properties.SunsetOffset.Value), Latitude = new StringProperty(Properties.Latitude.Value), Longitude = new StringProperty(Properties.Longitude.Value), + ToggleThemeHotkey = new KeyboardKeysProperty(Properties.ToggleThemeHotkey.Value), }, }; } diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs index a3c8486b8f..d970700484 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs @@ -73,6 +73,7 @@ namespace Microsoft.PowerToys.Settings.UI.Views this.InitializeComponent(); this.Loaded += LightSwitchPage_Loaded; + this.Loaded += (s, e) => ViewModel.OnPageLoaded(); } private void LightSwitchPage_Loaded(object sender, RoutedEventArgs e) diff --git a/src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs index e5262f93d7..010bd68935 100644 --- a/src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; @@ -20,8 +21,10 @@ using Settings.UI.Library.Helpers; namespace Microsoft.PowerToys.Settings.UI.ViewModels { - public partial class LightSwitchViewModel : Observable + public partial class LightSwitchViewModel : PageViewModelBase { + protected override string ModuleName => LightSwitchSettings.ModuleName; + private Func SendConfigMSG { get; } public ObservableCollection SearchLocations { get; } = new(); @@ -35,14 +38,24 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels ForceDarkCommand = new RelayCommand(ForceDarkNow); AvailableScheduleModes = new ObservableCollection - { - "FixedHours", - "SunsetToSunrise", - }; + { + "FixedHours", + "SunsetToSunrise", + }; _toggleThemeHotkey = _moduleSettings.Properties.ToggleThemeHotkey.Value; } + public override Dictionary GetAllHotkeySettings() + { + var hotkeysDict = new Dictionary + { + [ModuleName] = [ToggleThemeActivationShortcut], + }; + + return hotkeysDict; + } + private void ForceLightNow() { Logger.LogInfo("Sending custom action: forceLight"); @@ -395,22 +408,21 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels public HotkeySettings ToggleThemeActivationShortcut { - get => _toggleThemeHotkey; + get => ModuleSettings.Properties.ToggleThemeHotkey.Value; set { - if (value != _toggleThemeHotkey) + if (value != ModuleSettings.Properties.ToggleThemeHotkey.Value) { if (value == null) { - _toggleThemeHotkey = LightSwitchProperties.DefaultToggleThemeHotkey; + ModuleSettings.Properties.ToggleThemeHotkey.Value = LightSwitchProperties.DefaultToggleThemeHotkey; } else { - _toggleThemeHotkey = value; + ModuleSettings.Properties.ToggleThemeHotkey.Value = value; } - _moduleSettings.Properties.ToggleThemeHotkey.Value = _toggleThemeHotkey; NotifyPropertyChanged(); SendConfigMSG( @@ -418,7 +430,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels CultureInfo.InvariantCulture, "{{ \"powertoys\": {{ \"{0}\": {1} }} }}", LightSwitchSettings.ModuleName, - JsonSerializer.Serialize(_moduleSettings, (System.Text.Json.Serialization.Metadata.JsonTypeInfo)SourceGenerationContextContext.Default.LightSwitchSettings))); + JsonSerializer.Serialize(_moduleSettings, SourceGenerationContextContext.Default.LightSwitchSettings))); } } }