/ src / settings-ui / Settings.UI / Services / ThemeService.cs
ThemeService.cs
 1  // Copyright (c) Microsoft Corporation
 2  // The Microsoft Corporation licenses this file to you under the MIT license.
 3  // See the LICENSE file in the project root for more information.
 4  
 5  using System;
 6  
 7  using Microsoft.PowerToys.Settings.UI.Library;
 8  using Microsoft.PowerToys.Settings.UI.Library.Interfaces;
 9  using Microsoft.UI.Xaml;
10  
11  namespace Microsoft.PowerToys.Settings.UI.Services
12  {
13      public class ThemeService
14      {
15          private readonly ISettingsRepository<GeneralSettings> _generalSettingsRepository;
16  
17          public event EventHandler<ElementTheme> ThemeChanged;
18  
19          public ElementTheme Theme { get; private set; } = ElementTheme.Default;
20  
21          public ThemeService(ISettingsRepository<GeneralSettings> generalSettingsRepository)
22          {
23              _generalSettingsRepository = generalSettingsRepository;
24              Theme = GetTheme();
25          }
26  
27          public void ApplyTheme()
28          {
29              Theme = GetTheme();
30              ThemeChanged?.Invoke(null, Theme);
31          }
32  
33          private ElementTheme GetTheme()
34          {
35              switch (_generalSettingsRepository.SettingsConfig.Theme.ToUpperInvariant())
36              {
37                  case "LIGHT":
38                      return ElementTheme.Light;
39                  case "DARK":
40                      return ElementTheme.Dark;
41                  case "SYSTEM":
42                      return ElementTheme.Default;
43                  default:
44                      ManagedCommon.Logger.LogError($"Unexpected theme name: {_generalSettingsRepository.SettingsConfig.Theme}");
45                      return ElementTheme.Default;
46              }
47          }
48      }
49  }