From 0d5220561d4b5c575d6c0ce91f7911f2aff76b07 Mon Sep 17 00:00:00 2001 From: Jaylyn Barbee <51131738+Jaylyn-Barbee@users.noreply.github.com> Date: Mon, 6 Oct 2025 16:44:07 -0400 Subject: [PATCH] [New Module] Light Switch (#41987) ## Summary of the Pull Request This pull request introduces a new module called "Light Switch" which allows users to automatically switch between light and dark mode on a timer. ![Light Switch](https://github.com/user-attachments/assets/d24d7364-445f-4f23-ab5e-4b8c6a4147ab) ## PR Checklist - [x] Closes: #1331 - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Tests:** Added/updated and all pass - [x] **Localization:** All end-user-facing strings can be localized - [x] **Dev docs:** Added/updated - [x] **New binaries:** Added on the required places - [x] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [x] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [x] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: [#5867](https://github.com/MicrosoftDocs/windows-dev-docs-pr/pull/5867) ## Detailed Description of the Pull Request / Additional comments ### Known bugs: - Default settings not saving correctly when switching modes - Issue: Sometimes when you switch from one mode to another, they are supposed to update with new defaults but sometimes this fails for the second variable. Potentially has to do with accessing the settings file while another chunk of code is still updating. - Sometimes the system looks "glitched" when switching themes ### To do: - [x] OOBE page and assets - [x] Logic to disable the chart when no location has been selected - [x] Localization ### How to and what to test Grab the latest installer from the pipeline below for your architecture and install PowerToys from there. - Toggle theme shortcutSystem only, Apps only, Both system and apps selected - Does changing the values on the settings page update the settings file? %LOCALAPPDATA%/Microsoft/PowerToys/LightSwitch/settings.json - Manual mode: System only, Apps only, Both system and apps selected - Sunrise modes: Are the times accurate? - If you manage to let this run through sunset/rise does the theme change? - Set your theme to change within the next minute using manual mode and set your device to sleepOpen your device and login once the time you set has passed. --> Do your settings resync once the next minute ticks after logging back into your device? - Disable the service and ensure the tasks actually ends. - While the module is disabled: - Make sure the shortcut no longer works - Make sure the last time you set doesn't trigger a theme change - Bonus: Toggle GPO Configuration and make sure you are unable to enable the module --------- Co-authored-by: Niels Laute Co-authored-by: Gordon Lam (SH) --- .github/actions/spell-check/expect.txt | 13 + .pipelines/ESRPSigning_core.json | 3 + PowerToys.sln | 45 ++ doc/devdocs/modules/lightswitch.md | 107 +++ doc/images/icons/Light Switch.png | Bin 0 -> 20168 bytes doc/images/overview/LightSwitch_large.png | Bin 0 -> 41237 bytes doc/images/overview/LightSwitch_small.png | Bin 0 -> 12962 bytes doc/images/overview/Original/Light Switch.png | Bin 0 -> 127337 bytes .../CustomAction.cpp | 3 +- .../PowerToysSetupCustomActionsVNext.vcxproj | 1 + installer/PowerToysSetupVNext/LightSwitch.wxs | 35 + .../PowerToysInstallerVNext.wixproj | 2 + installer/PowerToysSetupVNext/Product.wxs | 1 + .../generateAllFileComponents.ps1 | 4 + src/common/Common.UI/SettingsDeepLink.cs | 3 + src/common/GPOWrapper/GPOWrapper.cpp | 4 + src/common/GPOWrapper/GPOWrapper.h | 1 + src/common/GPOWrapper/GPOWrapper.idl | 1 + src/common/ManagedCommon/ModuleType.cs | 1 + .../UITestAutomation/Element/Element.cs | 24 +- .../UITestAutomation/ModuleConfigData.cs | 2 + src/common/logger/logger_settings.h | 1 + src/common/utils/elevation.h | 4 +- src/common/utils/gpo.h | 6 + src/gpo/assets/PowerToys.admx | 10 + src/gpo/assets/en-US/PowerToys.adml | 1 + .../LightSwitchModuleInterface.rc | 32 + .../LightSwitchModuleInterface.vcxproj | 225 ++++++ ...LightSwitchModuleInterface.vcxproj.filters | 50 ++ .../ThemeHelper.cpp | 81 +++ .../LightSwitchModuleInterface/ThemeHelper.h | 5 + .../LightSwitchModuleInterface/dllmain.cpp | 570 +++++++++++++++ .../LightSwitchModuleInterface/pch.cpp | 2 + .../LightSwitchModuleInterface/pch.h | 14 + .../LightSwitchModuleInterface/resource.h | 0 .../LightSwitchModuleInterface/trace.cpp | 30 + .../LightSwitchModuleInterface/trace.h | 15 + .../LightSwitchService/LightSwitch.ico | Bin 0 -> 90022 bytes .../LightSwitchService/LightSwitchService.cpp | 295 ++++++++ .../LightSwitchService/LightSwitchService.rc | Bin 0 -> 3278 bytes .../LightSwitchService.vcxproj | 219 ++++++ .../LightSwitchService.vcxproj.filters | 72 ++ .../LightSwitchSettings.cpp | 167 +++++ .../LightSwitchService/LightSwitchSettings.h | 88 +++ .../LightSwitchService/SettingsConstants.cpp | 1 + .../LightSwitchService/SettingsConstants.h | 14 + .../LightSwitchService/SettingsObserver.h | 32 + .../LightSwitchService/ThemeHelper.cpp | 81 +++ .../LightSwitchService/ThemeHelper.h | 5 + .../LightSwitchService/ThemeScheduler.cpp | 89 +++ .../LightSwitchService/ThemeScheduler.h | 25 + .../LightSwitchService/WinHookEventIDs.cpp | 15 + .../LightSwitchService/WinHookEventIDs.h | 6 + .../LightSwitchService/packages.config | 5 + .../LightSwitch/LightSwitchService/resource.h | 16 + .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 432 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 5372 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 1755 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 637 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 283 bytes .../LightSwitch.UITests/Assets/StoreLogo.png | Bin 0 -> 456 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 2097 bytes .../LightSwitch.UITests.csproj | 22 + .../LightSwitch.UITests/Package.appxmanifest | 51 ++ .../LightSwitch.UITests/TestGeolocation.cs | 32 + .../Tests/LightSwitch.UITests/TestHelper.cs | 435 ++++++++++++ .../Tests/LightSwitch.UITests/TestOffset.cs | 32 + .../Tests/LightSwitch.UITests/TestShortcut.cs | 32 + .../TestUpdateManualTime.cs | 32 + .../TestUserSelectedLocation.cs | 32 + .../Tests/LightSwitch.UITests/app.manifest | 19 + src/runner/main.cpp | 1 + src/runner/settings_window.cpp | 6 + src/runner/settings_window.h | 1 + .../Settings.UI.Library/EnabledModules.cs | 17 + .../Helpers/SearchLocation.cs | 31 + .../Helpers/SearchLocationLoader.cs | 28 + .../Settings.UI.Library/Helpers/SunCalc.cs | 131 ++++ .../Settings.UI.Library/Helpers/SunTimes.cs | 24 + .../LightSwitchProperties.cs | 66 ++ .../LightSwitchSettings.cs | 58 ++ .../SndLightSwitchSettings.cs | 30 + .../Assets/Settings/Icons/LightSwitch.png | Bin 0 -> 1535 bytes .../Assets/Settings/Modules/LightSwitch.png | Bin 0 -> 41237 bytes .../Settings/Modules/OOBE/LightSwitch.png | Bin 0 -> 233456 bytes .../Converters/EnumToVisibilityConverter.cs | 37 + .../TimeSpanToFriendlyTimeConverter.cs | 25 + .../Settings.UI/Helpers/ModuleHelper.cs | 3 + .../Settings.UI/Helpers/TimeSpanHelper.cs | 38 + .../OOBE/Enums/PowerToysModules.cs | 1 + .../Settings.UI/PowerToys.Settings.csproj | 11 +- .../SourceGenerationContextContext.cs | 2 + .../Settings.UI/SettingsXAML/App.xaml | 1 + .../Settings.UI/SettingsXAML/App.xaml.cs | 1 + .../SettingsPageControl.xaml | 2 +- .../Controls/Timeline/Timeline.xaml | 41 ++ .../Controls/Timeline/Timeline.xaml.cs | 658 ++++++++++++++++++ .../Controls/Timeline/TimelineStyles.xaml | 84 +++ .../OOBE/Views/OobeLightSwitch.xaml | 33 + .../OOBE/Views/OobeLightSwitch.xaml.cs | 33 + .../OOBE/Views/OobeShellPage.xaml | 4 + .../OOBE/Views/OobeShellPage.xaml.cs | 6 + .../SettingsXAML/Views/LightSwitchPage.xaml | 320 +++++++++ .../Views/LightSwitchPage.xaml.cs | 324 +++++++++ .../Views/RegistryPreviewPage.xaml | 1 - .../SettingsXAML/Views/ShellPage.xaml | 6 + .../Settings.UI/Strings/en-us/Resources.resw | 148 +++- .../ViewModels/DashboardViewModel.cs | 13 + .../ViewModels/LightSwitchViewModel.cs | 510 ++++++++++++++ .../BugReportTool/ProcessesList.cpp | 1 + .../BugReportTool/ReportGPOValues.cpp | 1 + 111 files changed, 5798 insertions(+), 12 deletions(-) create mode 100644 doc/devdocs/modules/lightswitch.md create mode 100644 doc/images/icons/Light Switch.png create mode 100644 doc/images/overview/LightSwitch_large.png create mode 100644 doc/images/overview/LightSwitch_small.png create mode 100644 doc/images/overview/Original/Light Switch.png create mode 100644 installer/PowerToysSetupVNext/LightSwitch.wxs create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.rc create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj.filters create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.cpp create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.h create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/dllmain.cpp create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/pch.cpp create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/pch.h create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/resource.h create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/trace.cpp create mode 100644 src/modules/LightSwitch/LightSwitchModuleInterface/trace.h create mode 100644 src/modules/LightSwitch/LightSwitchService/LightSwitch.ico create mode 100644 src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp create mode 100644 src/modules/LightSwitch/LightSwitchService/LightSwitchService.rc create mode 100644 src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj create mode 100644 src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj.filters create mode 100644 src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.cpp create mode 100644 src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.h create mode 100644 src/modules/LightSwitch/LightSwitchService/SettingsConstants.cpp create mode 100644 src/modules/LightSwitch/LightSwitchService/SettingsConstants.h create mode 100644 src/modules/LightSwitch/LightSwitchService/SettingsObserver.h create mode 100644 src/modules/LightSwitch/LightSwitchService/ThemeHelper.cpp create mode 100644 src/modules/LightSwitch/LightSwitchService/ThemeHelper.h create mode 100644 src/modules/LightSwitch/LightSwitchService/ThemeScheduler.cpp create mode 100644 src/modules/LightSwitch/LightSwitchService/ThemeScheduler.h create mode 100644 src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.cpp create mode 100644 src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.h create mode 100644 src/modules/LightSwitch/LightSwitchService/packages.config create mode 100644 src/modules/LightSwitch/LightSwitchService/resource.h create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/LockScreenLogo.scale-200.png create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/SplashScreen.scale-200.png create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/Square150x150Logo.scale-200.png create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/Square44x44Logo.scale-200.png create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/StoreLogo.png create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/Wide310x150Logo.scale-200.png create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/LightSwitch.UITests.csproj create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/Package.appxmanifest create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/TestGeolocation.cs create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/TestHelper.cs create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/TestOffset.cs create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/TestShortcut.cs create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUpdateManualTime.cs create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUserSelectedLocation.cs create mode 100644 src/modules/LightSwitch/Tests/LightSwitch.UITests/app.manifest create mode 100644 src/settings-ui/Settings.UI.Library/Helpers/SearchLocation.cs create mode 100644 src/settings-ui/Settings.UI.Library/Helpers/SearchLocationLoader.cs create mode 100644 src/settings-ui/Settings.UI.Library/Helpers/SunCalc.cs create mode 100644 src/settings-ui/Settings.UI.Library/Helpers/SunTimes.cs create mode 100644 src/settings-ui/Settings.UI.Library/LightSwitchProperties.cs create mode 100644 src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs create mode 100644 src/settings-ui/Settings.UI.Library/SndLightSwitchSettings.cs create mode 100644 src/settings-ui/Settings.UI/Assets/Settings/Icons/LightSwitch.png create mode 100644 src/settings-ui/Settings.UI/Assets/Settings/Modules/LightSwitch.png create mode 100644 src/settings-ui/Settings.UI/Assets/Settings/Modules/OOBE/LightSwitch.png create mode 100644 src/settings-ui/Settings.UI/Converters/EnumToVisibilityConverter.cs create mode 100644 src/settings-ui/Settings.UI/Converters/TimeSpanToFriendlyTimeConverter.cs create mode 100644 src/settings-ui/Settings.UI/Helpers/TimeSpanHelper.cs create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/Timeline.xaml create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/Timeline.xaml.cs create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/TimelineStyles.xaml create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeLightSwitch.xaml create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeLightSwitch.xaml.cs create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml create mode 100644 src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs create mode 100644 src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt index 4d3980e8c5..41b05c2606 100644 --- a/.github/actions/spell-check/expect.txt +++ b/.github/actions/spell-check/expect.txt @@ -3,6 +3,7 @@ abcdefghjkmnpqrstuvxyz abgr ABlocked ABOUTBOX +ABORTIFHUNG Abug Acceleratorkeys ACCEPTFILES @@ -77,6 +78,7 @@ appwiz appxpackage APSTUDIO AQS +Aquadrant ARandom ARCHITEW ARemapped @@ -455,6 +457,7 @@ encryptor ENDSESSION ENSUREVISIBLE ENTERSIZEMOVE +ENTRYW ENU environmentvariables EOAC @@ -572,6 +575,7 @@ GETDESKWALLPAPER GETDLGCODE GETDPISCALEDSIZE getfilesiginforedist +geolocator GETHOTKEY GETICON GETMINMAXINFO @@ -828,6 +832,7 @@ lastcodeanalysissucceeded LASTEXITCODE LAYOUTRTL LCh +lbl lcid LCIDTo lcl @@ -846,6 +851,7 @@ LIBID LIMITSIZE LIMITTEXT lindex +lightswitch linkid LINKOVERLAY LINQTo @@ -869,10 +875,13 @@ logon LOGMSG LOGPIXELSX LOGPIXELSY +lng LOn +lon longdate LONGNAMES lowlevel +lquadrant LOWORD lparam LPBITMAPINFOHEADER @@ -1389,6 +1398,7 @@ quickaccent QUNS RAII RAlt +RAquadrant randi rasterization Rasterize @@ -1687,6 +1697,7 @@ Subdomain SUBMODULEUPDATE subresource Superbar +suntimes sut svchost SVGIn @@ -1752,6 +1763,7 @@ tgz themeresources THH THICKFRAME +THEMECHANGED THISCOMPONENT throughs thumbnailhotkey @@ -1768,6 +1780,7 @@ tkconverters tlb tlbimp tlc +tmain TNP TOGGLEEASYMOUSE Toolhelp diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json index 736f1eefd8..2a1760d94e 100644 --- a/.pipelines/ESRPSigning_core.json +++ b/.pipelines/ESRPSigning_core.json @@ -133,6 +133,9 @@ "PowerToys.ImageResizerContextMenu.dll", "ImageResizerContextMenuPackage.msix", + "PowerToys.LightSwitchModuleInterface.dll", + "LightSwitchService\\PowerToys.LightSwitchService.exe", + "PowerToys.KeyboardManager.dll", "KeyboardManagerEditor\\PowerToys.KeyboardManagerEditor.exe", "KeyboardManagerEngine\\PowerToys.KeyboardManagerEngine.exe", diff --git a/PowerToys.sln b/PowerToys.sln index 4c9c92ce47..50063816ea 100644 --- a/PowerToys.sln +++ b/PowerToys.sln @@ -5,11 +5,13 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "runner", "src\runner\runner.vcxproj", "{9412D5C6-2CF2-4FC2-A601-B55508EA9B27}" ProjectSection(ProjectDependencies) = postProject {031AC72E-FA28-4AB7-B690-6F7B9C28AA73} = {031AC72E-FA28-4AB7-B690-6F7B9C28AA73} + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC} = {08E71C67-6A7E-4CA1-B04E-2FB336410BAC} {0B43679E-EDFA-4DA0-AD30-F4628B308B1B} = {0B43679E-EDFA-4DA0-AD30-F4628B308B1B} {0B593A6C-4143-4337-860E-DB5710FB87DB} = {0B593A6C-4143-4337-860E-DB5710FB87DB} {17DA04DF-E393-4397-9CF0-84DABE11032E} = {17DA04DF-E393-4397-9CF0-84DABE11032E} {217DF501-135C-4E38-BFC8-99D4821032EA} = {217DF501-135C-4E38-BFC8-99D4821032EA} {2BE46397-4DFA-414C-9BD4-41E4BBF8CB34} = {2BE46397-4DFA-414C-9BD4-41E4BBF8CB34} + {38177D56-6AD1-4ADF-88C9-2843A7932166} = {38177D56-6AD1-4ADF-88C9-2843A7932166} {48804216-2A0E-4168-A6D8-9CD068D14227} = {48804216-2A0E-4168-A6D8-9CD068D14227} {51920F1F-C28C-4ADF-8660-4238766796C2} = {51920F1F-C28C-4ADF-8660-4238766796C2} {5CCC8468-DEC8-4D36-99D4-5C891BEBD481} = {5CCC8468-DEC8-4D36-99D4-5C891BEBD481} @@ -793,6 +795,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.Window EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.UnitTestBase", "src\modules\cmdpal\Tests\Microsoft.CmdPal.Ext.UnitTestsBase\Microsoft.CmdPal.Ext.UnitTestBase.csproj", "{00D8659C-2068-40B6-8B86-759CD6284BBB}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LightSwitch", "LightSwitch", "{5B201255-53C8-490B-A34F-01F05D48A477}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LightSwitchModuleInterface", "src\modules\LightSwitch\LightSwitchModuleInterface\LightSwitchModuleInterface.vcxproj", "{38177D56-6AD1-4ADF-88C9-2843A7932166}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LightSwitchService", "src\modules\LightSwitch\LightSwitchService\LightSwitchService.vcxproj", "{08E71C67-6A7E-4CA1-B04E-2FB336410BAC}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{E11826E1-76DF-42AC-985C-164CC2EE57A1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScreenRuler.UITests", "src\modules\MeasureTool\Tests\ScreenRuler.UITests\ScreenRuler.UITests.csproj", "{66C069F8-C548-4CA6-8CDE-239104D68E88}" @@ -811,6 +819,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.WebSea EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.Shell.UnitTests", "src\modules\cmdpal\Tests\Microsoft.CmdPal.Ext.Shell.UnitTests\Microsoft.CmdPal.Ext.Shell.UnitTests.csproj", "{E816D7B4-4688-4ECB-97CC-3D8E798F3833}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{3DCCD936-D085-4869-A1DE-CA6A64152C94}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LightSwitch.UITests", "src\modules\LightSwitch\Tests\LightSwitch.UITests\LightSwitch.UITests.csproj", "{F5333ED7-06D8-4AB3-953A-36D63F08CB6F}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CmdPal.Ext.ClipboardHistory.UnitTests", "src\modules\cmdpal\Tests\Microsoft.CmdPal.Ext.ClipboardHistory.UnitTests\Microsoft.CmdPal.Ext.ClipboardHistory.UnitTests.csproj", "{4E0FCF69-B06B-D272-76BF-ED3A559B4EDA}" EndProject Global @@ -2891,6 +2903,22 @@ Global {00D8659C-2068-40B6-8B86-759CD6284BBB}.Release|ARM64.Build.0 = Release|ARM64 {00D8659C-2068-40B6-8B86-759CD6284BBB}.Release|x64.ActiveCfg = Release|x64 {00D8659C-2068-40B6-8B86-759CD6284BBB}.Release|x64.Build.0 = Release|x64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Debug|ARM64.Build.0 = Debug|ARM64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Debug|x64.ActiveCfg = Debug|x64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Debug|x64.Build.0 = Debug|x64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Release|ARM64.ActiveCfg = Release|ARM64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Release|ARM64.Build.0 = Release|ARM64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Release|x64.ActiveCfg = Release|x64 + {38177D56-6AD1-4ADF-88C9-2843A7932166}.Release|x64.Build.0 = Release|x64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Debug|ARM64.Build.0 = Debug|ARM64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Debug|x64.ActiveCfg = Debug|x64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Debug|x64.Build.0 = Debug|x64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Release|ARM64.ActiveCfg = Release|ARM64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Release|ARM64.Build.0 = Release|ARM64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Release|x64.ActiveCfg = Release|x64 + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC}.Release|x64.Build.0 = Release|x64 {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|ARM64.ActiveCfg = Debug|ARM64 {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|ARM64.Build.0 = Debug|ARM64 {66C069F8-C548-4CA6-8CDE-239104D68E88}.Debug|x64.ActiveCfg = Debug|x64 @@ -2947,6 +2975,18 @@ Global {E816D7B4-4688-4ECB-97CC-3D8E798F3833}.Release|ARM64.Build.0 = Release|ARM64 {E816D7B4-4688-4ECB-97CC-3D8E798F3833}.Release|x64.ActiveCfg = Release|x64 {E816D7B4-4688-4ECB-97CC-3D8E798F3833}.Release|x64.Build.0 = Release|x64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Debug|ARM64.Build.0 = Debug|ARM64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Debug|x64.ActiveCfg = Debug|x64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Debug|x64.Build.0 = Debug|x64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Debug|x64.Deploy.0 = Debug|x64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Release|ARM64.ActiveCfg = Release|ARM64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Release|ARM64.Build.0 = Release|ARM64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Release|ARM64.Deploy.0 = Release|ARM64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Release|x64.ActiveCfg = Release|x64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Release|x64.Build.0 = Release|x64 + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F}.Release|x64.Deploy.0 = Release|x64 {4E0FCF69-B06B-D272-76BF-ED3A559B4EDA}.Debug|ARM64.ActiveCfg = Debug|ARM64 {4E0FCF69-B06B-D272-76BF-ED3A559B4EDA}.Debug|ARM64.Build.0 = Debug|ARM64 {4E0FCF69-B06B-D272-76BF-ED3A559B4EDA}.Debug|x64.ActiveCfg = Debug|x64 @@ -3268,6 +3308,9 @@ Global {E816D7AF-4688-4ECB-97CC-3D8E798F3828} = {8EF25507-2575-4ADE-BF7E-D23376903AB8} {E816D7B0-4688-4ECB-97CC-3D8E798F3829} = {8EF25507-2575-4ADE-BF7E-D23376903AB8} {00D8659C-2068-40B6-8B86-759CD6284BBB} = {8EF25507-2575-4ADE-BF7E-D23376903AB8} + {5B201255-53C8-490B-A34F-01F05D48A477} = {4574FDD0-F61D-4376-98BF-E5A1262C11EC} + {38177D56-6AD1-4ADF-88C9-2843A7932166} = {5B201255-53C8-490B-A34F-01F05D48A477} + {08E71C67-6A7E-4CA1-B04E-2FB336410BAC} = {5B201255-53C8-490B-A34F-01F05D48A477} {E11826E1-76DF-42AC-985C-164CC2EE57A1} = {7AC943C9-52E8-44CF-9083-744D8049667B} {66C069F8-C548-4CA6-8CDE-239104D68E88} = {E11826E1-76DF-42AC-985C-164CC2EE57A1} {9605B84E-FAC4-477B-B9EC-0753177EE6A8} = {557C4636-D7E1-4838-A504-7D19B725EE95} @@ -3277,6 +3320,8 @@ Global {E816D7B3-4688-4ECB-97CC-3D8E798F3832} = {8EF25507-2575-4ADE-BF7E-D23376903AB8} {E816D7B2-4688-4ECB-97CC-3D8E798F3831} = {8EF25507-2575-4ADE-BF7E-D23376903AB8} {E816D7B4-4688-4ECB-97CC-3D8E798F3833} = {8EF25507-2575-4ADE-BF7E-D23376903AB8} + {3DCCD936-D085-4869-A1DE-CA6A64152C94} = {5B201255-53C8-490B-A34F-01F05D48A477} + {F5333ED7-06D8-4AB3-953A-36D63F08CB6F} = {3DCCD936-D085-4869-A1DE-CA6A64152C94} {4E0FCF69-B06B-D272-76BF-ED3A559B4EDA} = {8EF25507-2575-4ADE-BF7E-D23376903AB8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/doc/devdocs/modules/lightswitch.md b/doc/devdocs/modules/lightswitch.md new file mode 100644 index 0000000000..1e251dfff1 --- /dev/null +++ b/doc/devdocs/modules/lightswitch.md @@ -0,0 +1,107 @@ +# Light Switch + +[Public Overview – Microsoft Learn](https://learn.microsoft.com/en-us/windows/powertoys/light-switch) + +## Quick Links + +* [All Issues](https://github.com/microsoft/PowerToys/issues?q=is%3Aissue%20state%3Aopen%20label%3AProduct-LightSwitch) +* [Bugs](https://github.com/microsoft/PowerToys/issues?q=is%3Aissue%20state%3Aopen%20label%3AProduct-LightSwitch%20label%3AIssue-Bug) +* [Pull Requests](https://github.com/microsoft/PowerToys/pulls?q=is%3Apr+is%3Aopen+label%3AProduct-LightSwitch) + +## Overview + +The **Light Switch** module lets users automatically transition between light and dark mode using a timed schedule or a keyboard shortcut. + +## Features + +* Set custom times to start and stop dark mode. +* Use geolocation to determine local sunrise and sunset times. +* Apply offsets in sunrise mode (e.g., 15 minutes before sunset). +* Quickly toggle between modes with a keyboard shortcut (`Ctrl+Shift+Win+D` by default). +* Choose whether theme changes apply to: + + * Apps only + * System only + * Both apps and system + +## Architecture + +### Main Components + +* **Shortcut/Hotkey** + Listens for a hotkey event. Calling `onHotkey()` flips the theme flags. + + > **Note:** Using the shortcut overrides the current schedule until the next transition event. + +* **LightSwitchService** + Reads settings and applies theming. Runs a check every minute to ensure the state is correct. + +* **SettingsXAML/LightSwitch** + Provides the settings UI for configuring schedules, syncing location, and customizing shortcuts. + +* **Settings.UI/ViewModels/LightSwitchViewModel.cs** + Handles updates to the settings file and communicates changes to the front end. + +* **modules/LightSwitch/Tests** + Contains UI tests that verify interactions between the settings UI, system state, and `settings.json`. + +### Data Flow + +1. User configures settings in the UI (default: manual mode, light mode from 06:00–18:00). +2. Every minute, the service checks the time. + + * If it’s not a threshold, the service sleeps until the next minute. + * If it matches a threshold, the service applies the theme based on settings and returns to sleep. +3. At **midnight**, when in *Sunrise to Sunset* mode, the service updates daily sunrise and sunset times. +4. If the machine was asleep during a scheduled event, the service applies the correct settings at the next check. + +## User Interface + +The module’s settings are exposed in the PowerToys Settings UI. Options include: + +* Shortcut customization +* Mode selection (Manual or Sunrise to Sunset) +* Manual start/stop times (manual mode only) +* Automatic sunrise/sunset calculation (location-based) +* Time offsets (sunrise mode) +* Target scope (system, apps, or both) + +## Development Environment Setup + +### Prerequisites + +* Visual Studio 2019 or later +* Windows 10 SDK +* PowerToys repository cloned from GitHub + +### Building and Testing + +1. Clone the repo: + + ```sh + git clone https://github.com/microsoft/PowerToys.git + ``` +2. Initialize submodules: + + ```sh + git submodule update --init --recursive + ``` +3. Build the solution: + + ```sh + msbuild -restore -p:RestorePackagesConfig=true -p:Platform=ARM64 -m PowerToys.sln + ``` + + > Note: This may take some time. +4. Set `runner` as the startup project and press **F5**. +5. Enable Light Switch in PowerToys Settings. +6. To debug the service: + + * Press `Ctrl+Alt+P` or go to **Debug > Attach to Process**. + * Select `LightSwitchService.exe` and click **Attach**. + * You can now set breakpoints in the service files. +7. To debug the Settings UI: + + * Set the startup project to `PowerToys.Settings` and press **F5**. + * Note: Light Switch settings will not persist in this mode (they depend on the service executable). + * Alternatively, you can attach `PowerToys.Settings.exe` to the debugger while `runner` is running to test the full flow with breakpoints. diff --git a/doc/images/icons/Light Switch.png b/doc/images/icons/Light Switch.png new file mode 100644 index 0000000000000000000000000000000000000000..8a0778ff052afa2a2278382d3b3eea6765b08685 GIT binary patch literal 20168 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

gFnKMMOBdp(+ew(j!9YUcceF{7a>79}GiBO{|4 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�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 B@B{z= literal 0 HcmV?d00001 diff --git a/doc/images/overview/LightSwitch_small.png b/doc/images/overview/LightSwitch_small.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e94735a9ced6d2dd5025483d86898a9a833df2 GIT binary patch literal 12962 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 z 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¥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%0Axg|8mJyNGf3Pk7qfxwQQKf9^st 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 literal 0 HcmV?d00001 diff --git a/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp b/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp index 815731c161..308b304591 100644 --- a/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp +++ b/installer/PowerToysSetupCustomActionsVNext/CustomAction.cpp @@ -1283,7 +1283,7 @@ UINT __stdcall TerminateProcessesCA(MSIHANDLE hInstall) } processes.resize(bytes / sizeof(processes[0])); - std::array processesToTerminate = { + std::array processesToTerminate = { L"PowerToys.PowerLauncher.exe", L"PowerToys.Settings.exe", L"PowerToys.AdvancedPaste.exe", @@ -1298,6 +1298,7 @@ UINT __stdcall TerminateProcessesCA(MSIHANDLE hInstall) L"PowerToys.Hosts.exe", L"PowerToys.PowerRename.exe", L"PowerToys.ImageResizer.exe", + L"PowerToys.LightSwitchService.exe", L"PowerToys.GcodeThumbnailProvider.exe", L"PowerToys.BgcodeThumbnailProvider.exe", L"PowerToys.PdfThumbnailProvider.exe", diff --git a/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj b/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj index db6f6e6392..7cd49be6ea 100644 --- a/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj +++ b/installer/PowerToysSetupCustomActionsVNext/PowerToysSetupCustomActionsVNext.vcxproj @@ -65,6 +65,7 @@ call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\Hosts.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\Hosts.wxs.bk"""" call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\ImageResizer.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\ImageResizer.wxs.bk"""" call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\KeyboardManager.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\KeyboardManager.wxs.bk"""" + call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\LightSwitch.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\LightSwitch.wxs.bk"""" call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\MouseWithoutBorders.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\MouseWithoutBorders.wxs.bk"""" call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\NewPlus.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\NewPlus.wxs.bk"""" call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\Peek.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\Peek.wxs.bk"""" diff --git a/installer/PowerToysSetupVNext/LightSwitch.wxs b/installer/PowerToysSetupVNext/LightSwitch.wxs new file mode 100644 index 0000000000..01f4bc329b --- /dev/null +++ b/installer/PowerToysSetupVNext/LightSwitch.wxs @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj b/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj index a1b89ec1a9..5341f66768 100644 --- a/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj +++ b/installer/PowerToysSetupVNext/PowerToysInstallerVNext.wixproj @@ -41,6 +41,7 @@ call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuil call move /Y ..\..\..\FileExplorerPreview.wxs.bk ..\..\..\FileExplorerPreview.wxs call move /Y ..\..\..\FileLocksmith.wxs.bk ..\..\..\FileLocksmith.wxs call move /Y ..\..\..\Hosts.wxs.bk ..\..\..\Hosts.wxs + call move /Y ..\..\..\LightSwitch.wxs.bk ..\..\..\LightSwitch.wxs call move /Y ..\..\..\ImageResizer.wxs.bk ..\..\..\ImageResizer.wxs call move /Y ..\..\..\KeyboardManager.wxs.bk ..\..\..\KeyboardManager.wxs call move /Y ..\..\..\MouseWithoutBorders.wxs.bk ..\..\..\MouseWithoutBorders.wxs @@ -114,6 +115,7 @@ call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuil + diff --git a/installer/PowerToysSetupVNext/Product.wxs b/installer/PowerToysSetupVNext/Product.wxs index 30831548dd..2505557d77 100644 --- a/installer/PowerToysSetupVNext/Product.wxs +++ b/installer/PowerToysSetupVNext/Product.wxs @@ -50,6 +50,7 @@ + diff --git a/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 b/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 index fb63868f93..b6f2f88dd0 100644 --- a/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 +++ b/installer/PowerToysSetupVNext/generateAllFileComponents.ps1 @@ -182,6 +182,10 @@ Generate-FileComponents -fileListName "HostsAssetsFiles" -wxsFilePath $PSScriptR Generate-FileList -fileDepsJson "" -fileListName ImageResizerAssetsFiles -wxsFilePath $PSScriptRoot\ImageResizer.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\WinUI3Apps\Assets\ImageResizer" Generate-FileComponents -fileListName "ImageResizerAssetsFiles" -wxsFilePath $PSScriptRoot\ImageResizer.wxs -regroot $registryroot +# Light Switch Service +Generate-FileList -fileDepsJson "" -fileListName LightSwitchFiles -wxsFilePath $PSScriptRoot\LightSwitch.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\LightSwitchService" +Generate-FileComponents -fileListName "LightSwitchFiles" -wxsFilePath $PSScriptRoot\LightSwitch.wxs -regroot $registryroot + #New+ Generate-FileList -fileDepsJson "" -fileListName NewPlusAssetsFiles -wxsFilePath $PSScriptRoot\NewPlus.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\WinUI3Apps\Assets\NewPlus" Generate-FileComponents -fileListName "NewPlusAssetsFiles" -wxsFilePath $PSScriptRoot\NewPlus.wxs -regroot $registryroot diff --git a/src/common/Common.UI/SettingsDeepLink.cs b/src/common/Common.UI/SettingsDeepLink.cs index 84945e6939..1891532d16 100644 --- a/src/common/Common.UI/SettingsDeepLink.cs +++ b/src/common/Common.UI/SettingsDeepLink.cs @@ -17,6 +17,7 @@ namespace Common.UI Awake, ColorPicker, CmdNotFound, + LightSwitch, FancyZones, FileLocksmith, Run, @@ -60,6 +61,8 @@ namespace Common.UI return "ColorPicker"; case SettingsWindow.CmdNotFound: return "CmdNotFound"; + case SettingsWindow.LightSwitch: + return "LightSwitch"; case SettingsWindow.FancyZones: return "FancyZones"; case SettingsWindow.FileLocksmith: diff --git a/src/common/GPOWrapper/GPOWrapper.cpp b/src/common/GPOWrapper/GPOWrapper.cpp index 87ef1721b1..361255f66f 100644 --- a/src/common/GPOWrapper/GPOWrapper.cpp +++ b/src/common/GPOWrapper/GPOWrapper.cpp @@ -28,6 +28,10 @@ namespace winrt::PowerToys::GPOWrapper::implementation { return static_cast(powertoys_gpo::getConfiguredCropAndLockEnabledValue()); } + GpoRuleConfigured GPOWrapper::GetConfiguredLightSwitchEnabledValue() + { + return static_cast(powertoys_gpo::getConfiguredLightSwitchEnabledValue()); + } GpoRuleConfigured GPOWrapper::GetConfiguredFancyZonesEnabledValue() { return static_cast(powertoys_gpo::getConfiguredFancyZonesEnabledValue()); diff --git a/src/common/GPOWrapper/GPOWrapper.h b/src/common/GPOWrapper/GPOWrapper.h index 33f90e15c9..c0fff9f542 100644 --- a/src/common/GPOWrapper/GPOWrapper.h +++ b/src/common/GPOWrapper/GPOWrapper.h @@ -13,6 +13,7 @@ namespace winrt::PowerToys::GPOWrapper::implementation static GpoRuleConfigured GetConfiguredCmdPalEnabledValue(); static GpoRuleConfigured GetConfiguredColorPickerEnabledValue(); static GpoRuleConfigured GetConfiguredCropAndLockEnabledValue(); + static GpoRuleConfigured GetConfiguredLightSwitchEnabledValue(); static GpoRuleConfigured GetConfiguredFancyZonesEnabledValue(); static GpoRuleConfigured GetConfiguredFileLocksmithEnabledValue(); static GpoRuleConfigured GetConfiguredSvgPreviewEnabledValue(); diff --git a/src/common/GPOWrapper/GPOWrapper.idl b/src/common/GPOWrapper/GPOWrapper.idl index 252b4d128a..630beab9c9 100644 --- a/src/common/GPOWrapper/GPOWrapper.idl +++ b/src/common/GPOWrapper/GPOWrapper.idl @@ -17,6 +17,7 @@ namespace PowerToys static GpoRuleConfigured GetConfiguredCmdPalEnabledValue(); static GpoRuleConfigured GetConfiguredColorPickerEnabledValue(); static GpoRuleConfigured GetConfiguredCropAndLockEnabledValue(); + static GpoRuleConfigured GetConfiguredLightSwitchEnabledValue(); static GpoRuleConfigured GetConfiguredFancyZonesEnabledValue(); static GpoRuleConfigured GetConfiguredFileLocksmithEnabledValue(); static GpoRuleConfigured GetConfiguredSvgPreviewEnabledValue(); diff --git a/src/common/ManagedCommon/ModuleType.cs b/src/common/ManagedCommon/ModuleType.cs index 65b00d4b5a..aa741e2f3a 100644 --- a/src/common/ManagedCommon/ModuleType.cs +++ b/src/common/ManagedCommon/ModuleType.cs @@ -19,6 +19,7 @@ namespace ManagedCommon Hosts, ImageResizer, KeyboardManager, + LightSwitch, MouseHighlighter, MouseJump, MousePointerCrosshairs, diff --git a/src/common/UITestAutomation/Element/Element.cs b/src/common/UITestAutomation/Element/Element.cs index 1868a9c34d..6e9efabeac 100644 --- a/src/common/UITestAutomation/Element/Element.cs +++ b/src/common/UITestAutomation/Element/Element.cs @@ -81,6 +81,14 @@ namespace Microsoft.PowerToys.UITest get { return this.windowsElement?.Selected ?? false; } } + ///

+ /// Gets a value indicating whether the UI element is visible to the user. + /// + public bool Displayed + { + get { return this.windowsElement?.Displayed ?? false; } + } + /// /// Gets the Rect of the UI element. /// @@ -329,7 +337,7 @@ namespace Microsoft.PowerToys.UITest /// Send Key of the element. /// /// The Key to Send. - protected void SendKeys(string key) + public void SendKeys(string key) { PerformAction((actions, windowElement) => { @@ -369,5 +377,19 @@ namespace Microsoft.PowerToys.UITest Assert.IsNotNull(this.windowsElement, $"WindowsElement is null in method SaveToPngFile with parameter: path = {path}"); this.windowsElement.GetScreenshot().SaveAsFile(path); } + + public void EnsureVisible(Element scrollViewer, int maxScrolls = 10) + { + int count = 0; + if (scrollViewer.WindowsElement != null) + { + while (!this.windowsElement!.Displayed && count < maxScrolls) + { + scrollViewer.WindowsElement.SendKeys(OpenQA.Selenium.Keys.PageDown); + Task.Delay(250).Wait(); + count++; + } + } + } } } diff --git a/src/common/UITestAutomation/ModuleConfigData.cs b/src/common/UITestAutomation/ModuleConfigData.cs index ac3f5ffe26..4dcd168da3 100644 --- a/src/common/UITestAutomation/ModuleConfigData.cs +++ b/src/common/UITestAutomation/ModuleConfigData.cs @@ -34,6 +34,7 @@ namespace Microsoft.PowerToys.UITest PowerRename, CommandPalette, ScreenRuler, + LightSwitch, } /// @@ -106,6 +107,7 @@ namespace Microsoft.PowerToys.UITest [PowerToysModule.PowerRename] = new ModuleInfo("PowerToys.PowerRename.exe", "PowerRename", "WinUI3Apps"), [PowerToysModule.CommandPalette] = new ModuleInfo("Microsoft.CmdPal.UI.exe", "PowerToys Command Palette", "WinUI3Apps\\CmdPal"), [PowerToysModule.ScreenRuler] = new ModuleInfo("PowerToys.MeasureToolUI.exe", "PowerToys.ScreenRuler", "WinUI3Apps"), + [PowerToysModule.LightSwitch] = new ModuleInfo("PowerToys.LightSwitch.exe", "PowerToys.LightSwitch", "LightSwitchService"), }; } diff --git a/src/common/logger/logger_settings.h b/src/common/logger/logger_settings.h index 00cde3b485..b2e05fadfe 100644 --- a/src/common/logger/logger_settings.h +++ b/src/common/logger/logger_settings.h @@ -81,6 +81,7 @@ struct LogSettings inline const static std::string workspacesSnapshotToolLoggerName = "workspaces-snapshot-tool"; inline const static std::wstring workspacesSnapshotToolLogPath = L"workspaces-snapshot-tool-log.log"; inline const static std::string zoomItLoggerName = "zoom-it"; + inline const static std::string lightSwitchLoggerName = "light-switch"; inline const static int retention = 30; std::wstring logLevel; LogSettings(); diff --git a/src/common/utils/elevation.h b/src/common/utils/elevation.h index 7f2ecbf6df..e412ce5aa3 100644 --- a/src/common/utils/elevation.h +++ b/src/common/utils/elevation.h @@ -257,7 +257,9 @@ inline HANDLE run_elevated(const std::wstring& file, const std::wstring& params, exec_info.nShow = SW_HIDE; } - return ShellExecuteExW(&exec_info) ? exec_info.hProcess : nullptr; + BOOL result = ShellExecuteExW(&exec_info); + + return result ? exec_info.hProcess : nullptr; } // Run command as non-elevated user, returns true if succeeded, puts the process id into returnPid if returnPid != NULL diff --git a/src/common/utils/gpo.h b/src/common/utils/gpo.h index ed60bc1a37..471cefe480 100644 --- a/src/common/utils/gpo.h +++ b/src/common/utils/gpo.h @@ -30,6 +30,7 @@ namespace powertoys_gpo const std::wstring POLICY_CONFIGURE_ENABLED_CMD_NOT_FOUND = L"ConfigureEnabledUtilityCmdNotFound"; const std::wstring POLICY_CONFIGURE_ENABLED_COLOR_PICKER = L"ConfigureEnabledUtilityColorPicker"; const std::wstring POLICY_CONFIGURE_ENABLED_CROP_AND_LOCK = L"ConfigureEnabledUtilityCropAndLock"; + const std::wstring POLICY_CONFIGURE_ENABLED_LIGHT_SWITCH = L"ConfigureEnabledUtilityLightSwitch"; const std::wstring POLICY_CONFIGURE_ENABLED_FANCYZONES = L"ConfigureEnabledUtilityFancyZones"; const std::wstring POLICY_CONFIGURE_ENABLED_FILE_LOCKSMITH = L"ConfigureEnabledUtilityFileLocksmith"; const std::wstring POLICY_CONFIGURE_ENABLED_SVG_PREVIEW = L"ConfigureEnabledUtilityFileExplorerSVGPreview"; @@ -295,6 +296,11 @@ namespace powertoys_gpo return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_CROP_AND_LOCK); } + inline gpo_rule_configured_t getConfiguredLightSwitchEnabledValue() + { + return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_LIGHT_SWITCH); + } + inline gpo_rule_configured_t getConfiguredFancyZonesEnabledValue() { return getUtilityEnabledValue(POLICY_CONFIGURE_ENABLED_FANCYZONES); diff --git a/src/gpo/assets/PowerToys.admx b/src/gpo/assets/PowerToys.admx index 685eeaf350..07d4f44bde 100644 --- a/src/gpo/assets/PowerToys.admx +++ b/src/gpo/assets/PowerToys.admx @@ -137,6 +137,16 @@ + + + + + + + + + + diff --git a/src/gpo/assets/en-US/PowerToys.adml b/src/gpo/assets/en-US/PowerToys.adml index 7fe996abcc..2703358bb0 100644 --- a/src/gpo/assets/en-US/PowerToys.adml +++ b/src/gpo/assets/en-US/PowerToys.adml @@ -245,6 +245,7 @@ If you don't configure this policy, the user will be able to control the setting Command Not Found: Configure enabled state CmdPal: Configure enabled state Crop And Lock: Configure enabled state + Light Switch: Configure enabled state Environment Variables: Configure enabled state FancyZones: Configure enabled state File Locksmith: Configure enabled state diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.rc b/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.rc new file mode 100644 index 0000000000..98694dca49 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.rc @@ -0,0 +1,32 @@ +1 VERSIONINFO + FILEVERSION 0,1,0,0 + PRODUCTVERSION 0,1,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Company Name" + VALUE "FileDescription", "Light Switch Module" + VALUE "FileVersion", "0.1.0.0" + VALUE "InternalName", "Light Switch" + VALUE "LegalCopyright", "Copyright (C) 2019 Company Name" + VALUE "OriginalFilename", "PowerToys.LightSwitchModuleInterface.dll" + VALUE "ProductName", "Light Switch" + VALUE "ProductVersion", "0.1.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj b/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj new file mode 100644 index 0000000000..261cfab1e6 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj @@ -0,0 +1,225 @@ + + + + + + Debug + x64 + + + Release + x64 + + + Debug + ARM64 + + + Release + ARM64 + + + + 15.0 + {38177d56-6ad1-4adf-88c9-2843a7932166} + Win32Proj + LightSwitchModuleInterface + 10.0 + LightSwitchModuleInterface + PowerToys.LightSwitchModuleInterface + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + ..\..\..\..\$(Platform)\$(Configuration)\ + + + true + + + false + + + + Use + Level3 + Disabled + true + _DEBUG;EXAMPLEPOWERTOY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + MultiThreadedDebug + stdcpplatest + + + Windows + true + $(OutDir)$(TargetName)$(TargetExt) + + + + + Use + Level3 + MaxSpeed + true + true + true + NDEBUG;EXAMPLEPOWERTOY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + MultiThreaded + stdcpplatest + + + Windows + true + true + true + $(OutDir)$(TargetName)$(TargetExt) + + + + + Use + Level3 + Disabled + true + _DEBUG;EXAMPLEPOWERTOY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + MultiThreadedDebug + stdcpplatest + Use + pch.h + + + Windows + true + $(OutDir)$(TargetName)$(TargetExt) + + + + + Use + Level3 + MaxSpeed + true + true + true + NDEBUG;EXAMPLEPOWERTOY_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + pch.h + MultiThreaded + stdcpplatest + + + Windows + true + true + true + $(OutDir)$(TargetName)$(TargetExt) + + + + + ..\..\..\common\inc;..\..\..\common\Telemetry;..\..\;..\..\..\;%(AdditionalIncludeDirectories) + + + $(CoreLibraryDependencies);%(AdditionalDependencies);advapi32.lib + + + + + + + + + + + + Create + Create + Create + Create + pch.h + pch.h + pch.h + pch.h + + + + + + + + + + {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd} + + + {4aed67b6-55fd-486f-b917-e543dee2cb3c} + + + {6955446d-23f7-4023-9bb3-8657f904af99} + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj.filters b/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj.filters new file mode 100644 index 0000000000..45352efe4b --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/LightSwitchModuleInterface.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + {bbf22ac8-46f8-4206-b44b-9c3897e99ce5} + + + {530ed784-9a70-46a0-8fb6-20d5dee4f7d3} + + + {da1cb871-86d3-414c-adf5-a7e9f2077d2f} + + + + + Resource Files + + + + + + \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.cpp b/src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.cpp new file mode 100644 index 0000000000..dff2a67669 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.cpp @@ -0,0 +1,81 @@ +#include "pch.h" +#include +#include "ThemeHelper.h" + +// Controls changing the themes. + +void SetAppsTheme(bool mode) +{ + HKEY hKey; + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_SET_VALUE, + &hKey) == ERROR_SUCCESS) + { + DWORD value = mode; + RegSetValueEx(hKey, L"AppsUseLightTheme", 0, REG_DWORD, reinterpret_cast(&value), sizeof(value)); + RegCloseKey(hKey); + + SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, reinterpret_cast(L"ImmersiveColorSet"), SMTO_ABORTIFHUNG, 5000, nullptr); + + SendMessageTimeout(HWND_BROADCAST, WM_THEMECHANGED, 0, 0, SMTO_ABORTIFHUNG, 5000, nullptr); + } +} + +void SetSystemTheme(bool mode) +{ + HKEY hKey; + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_SET_VALUE, + &hKey) == ERROR_SUCCESS) + { + DWORD value = mode; + RegSetValueEx(hKey, L"SystemUsesLightTheme", 0, REG_DWORD, reinterpret_cast(&value), sizeof(value)); + RegCloseKey(hKey); + + SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, reinterpret_cast(L"ImmersiveColorSet"), SMTO_ABORTIFHUNG, 5000, nullptr); + + SendMessageTimeout(HWND_BROADCAST, WM_THEMECHANGED, 0, 0, SMTO_ABORTIFHUNG, 5000, nullptr); + } +} + +bool GetCurrentSystemTheme() +{ + HKEY hKey; + DWORD value = 1; // default = light + DWORD size = sizeof(value); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_READ, + &hKey) == ERROR_SUCCESS) + { + RegQueryValueEx(hKey, L"SystemUsesLightTheme", nullptr, nullptr, reinterpret_cast(&value), &size); + RegCloseKey(hKey); + } + + return value == 1; // true = light, false = dark +} + +bool GetCurrentAppsTheme() +{ + HKEY hKey; + DWORD value = 1; + DWORD size = sizeof(value); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_READ, + &hKey) == ERROR_SUCCESS) + { + RegQueryValueEx(hKey, L"AppsUseLightTheme", nullptr, nullptr, reinterpret_cast(&value), &size); + RegCloseKey(hKey); + } + + return value == 1; // true = light, false = dark +} diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.h b/src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.h new file mode 100644 index 0000000000..5985fd95c8 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/ThemeHelper.h @@ -0,0 +1,5 @@ +#pragma once +void SetSystemTheme(bool dark); +void SetAppsTheme(bool dark); +bool GetCurrentSystemTheme(); +bool GetCurrentAppsTheme(); diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/dllmain.cpp b/src/modules/LightSwitch/LightSwitchModuleInterface/dllmain.cpp new file mode 100644 index 0000000000..8a1faf1e9b --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/dllmain.cpp @@ -0,0 +1,570 @@ +#include "pch.h" +#include +#include "trace.h" +#include +#include +#include +#include +#include +#include +#include "ThemeHelper.h" + +extern "C" IMAGE_DOS_HEADER __ImageBase; + +namespace +{ + const wchar_t JSON_KEY_PROPERTIES[] = L"properties"; + const wchar_t JSON_KEY_WIN[] = L"win"; + const wchar_t JSON_KEY_ALT[] = L"alt"; + const wchar_t JSON_KEY_CTRL[] = L"ctrl"; + const wchar_t JSON_KEY_SHIFT[] = L"shift"; + const wchar_t JSON_KEY_CODE[] = L"code"; + const wchar_t JSON_KEY_TOGGLE_THEME_HOTKEY[] = L"toggle-theme-hotkey"; + const wchar_t JSON_KEY_VALUE[] = L"value"; +} + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + Trace::RegisterProvider(); + break; + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + break; + case DLL_PROCESS_DETACH: + Trace::UnregisterProvider(); + break; + } + return TRUE; +} + +// The PowerToy name that will be shown in the settings. +const static wchar_t* MODULE_NAME = L"LightSwitch"; +// Add a description that will we shown in the module settings page. +const static wchar_t* MODULE_DESC = L"This is a module that allows you to control light/dark theming via set times, sun rise, or directly invoking the change."; + +enum class ScheduleMode +{ + FixedHours, + SunsetToSunrise, + // add more later +}; + +inline std::wstring ToString(ScheduleMode mode) +{ + switch (mode) + { + case ScheduleMode::SunsetToSunrise: + return L"SunsetToSunrise"; + case ScheduleMode::FixedHours: + default: + return L"FixedHours"; + } +} + +inline ScheduleMode FromString(const std::wstring& str) +{ + if (str == L"SunsetToSunrise") + return ScheduleMode::SunsetToSunrise; + return ScheduleMode::FixedHours; +} + +// These are the properties shown in the Settings page. +struct ModuleSettings +{ + bool m_changeSystem = true; + bool m_changeApps = true; + ScheduleMode m_scheduleMode = ScheduleMode::FixedHours; + int m_lightTime = 480; + int m_darkTime = 1200; + int m_sunrise_offset = 0; + int m_sunset_offset = 0; + std::wstring m_latitude = L"0.0"; + std::wstring m_longitude = L"0.0"; +} g_settings; + +class LightSwitchInterface : public PowertoyModuleIface +{ +private: + bool m_enabled = false; + + HANDLE m_process{ nullptr }; + HANDLE m_force_light_event_handle; + HANDLE m_force_dark_event_handle; + HANDLE m_manual_override_event_handle; + + static const constexpr int NUM_DEFAULT_HOTKEYS = 4; + + Hotkey m_toggle_theme_hotkey = { .win = true, .ctrl = true, .shift = true, .alt = false, .key = 'D' }; + + void init_settings(); + +public: + LightSwitchInterface() + { + LoggerHelpers::init_logger(L"LightSwitch", L"ModuleInterface", LogSettings::lightSwitchLoggerName); + + m_force_light_event_handle = CreateDefaultEvent(L"POWERTOYS_LIGHTSWITCH_FORCE_LIGHT"); + m_force_dark_event_handle = CreateDefaultEvent(L"POWERTOYS_LIGHTSWITCH_FORCE_DARK"); + m_manual_override_event_handle = CreateDefaultEvent(L"POWERTOYS_LIGHTSWITCH_MANUAL_OVERRIDE"); + + init_settings(); + }; + + virtual const wchar_t* get_key() override + { + return L"LightSwitch"; + } + + // Destroy the powertoy and free memory + virtual void destroy() override + { + delete this; + } + + // Return the display name of the powertoy, this will be cached by the runner + virtual const wchar_t* get_name() override + { + return MODULE_NAME; + } + + // Return the configured status for the gpo policy for the module + virtual powertoys_gpo::gpo_rule_configured_t gpo_policy_enabled_configuration() override + { + return powertoys_gpo::getConfiguredLightSwitchEnabledValue(); + } + + // Return JSON with the configuration options. + virtual bool get_config(wchar_t* buffer, int* buffer_size) override + { + HINSTANCE hinstance = reinterpret_cast(&__ImageBase); + + // Create a Settings object with your module name + PowerToysSettings::Settings settings(hinstance, get_name()); + settings.set_description(MODULE_DESC); + settings.set_overview_link(L"https://aka.ms/powertoys"); + + // Boolean toggles + settings.add_bool_toggle( + L"changeSystem", + L"Change System Theme", + g_settings.m_changeSystem); + + settings.add_bool_toggle( + L"changeApps", + L"Change Apps Theme", + g_settings.m_changeApps); + + settings.add_choice_group( + L"scheduleMode", + L"Theme schedule mode", + ToString(g_settings.m_scheduleMode), + { { L"FixedHours", L"Set hours manually" }, + { L"SunsetToSunrise", L"Use sunrise/sunset times" } }); + + // Integer spinners + settings.add_int_spinner( + L"lightTime", + L"Time to switch to light theme (minutes after midnight).", + g_settings.m_lightTime, + 0, + 1439, + 1); + + settings.add_int_spinner( + L"darkTime", + L"Time to switch to dark theme (minutes after midnight).", + g_settings.m_darkTime, + 0, + 1439, + 1); + + settings.add_int_spinner( + L"sunrise_offset", + L"Time to offset turning on your light theme.", + g_settings.m_sunrise_offset, + 0, + 1439, + 1); + + settings.add_int_spinner( + L"sunset_offset", + L"Time to offset turning on your dark theme.", + g_settings.m_sunset_offset, + 0, + 1439, + 1); + + // Strings for latitude and longitude + settings.add_string( + L"latitude", + L"Your latitude in decimal degrees (e.g. 39.95).", + g_settings.m_latitude); + + settings.add_string( + L"longitude", + L"Your longitude in decimal degrees (e.g. -75.16).", + g_settings.m_longitude); + + // One-shot actions (buttons) + settings.add_custom_action( + L"forceLight", + L"Switch immediately to light theme", + L"Force Light", + L"{}"); + + settings.add_custom_action( + L"forceDark", + L"Switch immediately to dark theme", + L"Force Dark", + L"{}"); + + // Hotkeys + PowerToysSettings::HotkeyObject dm_hk = PowerToysSettings::HotkeyObject::from_settings( + m_toggle_theme_hotkey.win, + m_toggle_theme_hotkey.ctrl, + m_toggle_theme_hotkey.alt, + m_toggle_theme_hotkey.shift, + m_toggle_theme_hotkey.key); + + settings.add_hotkey( + L"toggle-theme-hotkey", + L"Shortcut to toggle theme immediately", + dm_hk); + + // Serialize to buffer for the PowerToys runner + return settings.serialize_to_buffer(buffer, buffer_size); + } + + // Signal from the Settings editor to call a custom action. + // This can be used to spawn more complex editors. + void call_custom_action(const wchar_t* action) override + { + try + { + auto action_object = PowerToysSettings::CustomActionObject::from_json_string(action); + + if (action_object.get_name() == L"forceLight") + { + Logger::info(L"[Light Switch] Custom action triggered: Force Light"); + SetSystemTheme(true); + SetAppsTheme(true); + } + else if (action_object.get_name() == L"forceDark") + { + Logger::info(L"[Light Switch] Custom action triggered: Force Dark"); + SetSystemTheme(false); + SetAppsTheme(false); + } + } + catch (...) + { + Logger::error(L"[Light Switch] Invalid custom action JSON"); + } + } + + // Called by the runner to pass the updated settings values as a serialized JSON. + virtual void set_config(const wchar_t* config) override + { + try + { + auto values = PowerToysSettings::PowerToyValues::from_json_string(config, get_key()); + + parse_hotkey(values); + + if (auto v = values.get_bool_value(L"changeSystem")) + { + g_settings.m_changeSystem = *v; + } + + if (auto v = values.get_bool_value(L"changeApps")) + { + g_settings.m_changeApps = *v; + } + + if (auto v = values.get_string_value(L"scheduleMode")) + { + g_settings.m_scheduleMode = FromString(*v); + } + + if (auto v = values.get_int_value(L"lightTime")) + { + g_settings.m_lightTime = *v; + } + + if (auto v = values.get_int_value(L"darkTime")) + { + g_settings.m_darkTime = *v; + } + + if (auto v = values.get_int_value(L"sunrise_offset")) + { + g_settings.m_sunrise_offset = *v; + } + + if (auto v = values.get_int_value(L"m_sunset_offset")) + { + g_settings.m_sunset_offset = *v; + } + + if (auto v = values.get_string_value(L"latitude")) + { + g_settings.m_latitude = *v; + } + if (auto v = values.get_string_value(L"longitude")) + { + g_settings.m_longitude = *v; + } + + values.save_to_settings_file(); + } + catch (const std::exception&) + { + Logger::error("[Light Switch] set_config: Failed to parse or apply config."); + } + } + + virtual void enable() + { + m_enabled = true; + Logger::info(L"Enabling Light Switch module..."); + + unsigned long powertoys_pid = GetCurrentProcessId(); + std::wstring args = L"--pid " + std::to_wstring(powertoys_pid); + std::wstring exe_name = L"LightSwitchService\\PowerToys.LightSwitchService.exe"; + + std::wstring resolved_path(MAX_PATH, L'\0'); + DWORD result = SearchPathW( + nullptr, + exe_name.c_str(), + nullptr, + static_cast(resolved_path.size()), + resolved_path.data(), + nullptr); + + if (result == 0 || result >= resolved_path.size()) + { + Logger::error( + L"Failed to locate Light Switch executable named '{}' at location '{}'", + exe_name, + resolved_path.c_str()); + return; + } + + resolved_path.resize(result); + Logger::debug(L"Resolved executable path: {}", resolved_path); + + std::wstring command_line = L"\"" + resolved_path + L"\" " + args; + + STARTUPINFO si = { sizeof(si) }; + PROCESS_INFORMATION pi; + + if (!CreateProcessW( + resolved_path.c_str(), + command_line.data(), + nullptr, + nullptr, + TRUE, + 0, + nullptr, + nullptr, + &si, + &pi)) + { + Logger::error(L"Failed to launch Light Switch process. {}", get_last_error_or_default(GetLastError())); + return; + } + + Logger::info(L"Light Switch process launched successfully (PID: {}).", pi.dwProcessId); + m_process = pi.hProcess; + CloseHandle(pi.hThread); + } + + // Disable the powertoy + virtual void disable() + { + Logger::info("Light Switch disabling"); + m_enabled = false; + + if (m_process) + { + constexpr DWORD timeout_ms = 1500; + DWORD result = WaitForSingleObject(m_process, timeout_ms); + + if (result == WAIT_TIMEOUT) + { + Logger::warn("Light Switch: Process didn't exit in time. Forcing termination."); + TerminateProcess(m_process, 0); + } + + CloseHandle(m_manual_override_event_handle); + m_manual_override_event_handle = nullptr; + + CloseHandle(m_process); + m_process = nullptr; + } + } + + // Returns if the powertoys is enabled + virtual bool is_enabled() override + { + return m_enabled; + } + + void parse_hotkey(PowerToysSettings::PowerToyValues& settings) + { + auto settingsObject = settings.get_raw_json(); + if (settingsObject.GetView().Size()) + { + try + { + Hotkey _temp_toggle_theme; + auto jsonHotkeyObject = settingsObject.GetNamedObject(JSON_KEY_PROPERTIES).GetNamedObject(JSON_KEY_TOGGLE_THEME_HOTKEY).GetNamedObject(JSON_KEY_VALUE); + _temp_toggle_theme.win = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_WIN); + _temp_toggle_theme.alt = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_ALT); + _temp_toggle_theme.shift = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_SHIFT); + _temp_toggle_theme.ctrl = jsonHotkeyObject.GetNamedBoolean(JSON_KEY_CTRL); + _temp_toggle_theme.key = static_cast(jsonHotkeyObject.GetNamedNumber(JSON_KEY_CODE)); + m_toggle_theme_hotkey = _temp_toggle_theme; + } + catch (...) + { + Logger::error("Failed to initialize Light Switch force dark mode shortcut from settings. Value will keep unchanged."); + } + } + else + { + Logger::info("Light Switch settings are empty"); + } + } + + virtual size_t get_hotkeys(Hotkey* hotkeys, size_t buffer_size) override + { + if (hotkeys && buffer_size >= 1) + { + hotkeys[0] = m_toggle_theme_hotkey; + } + return 1; + } + + virtual bool on_hotkey(size_t hotkeyId) override + { + if (m_enabled) + { + Logger::trace(L"Light Switch hotkey pressed"); + if (!is_process_running()) + { + enable(); + } + else if (hotkeyId == 0) + { + // get current will return true if in light mode, otherwise false + Logger::info(L"[Light Switch] Hotkey triggered: Toggle Theme"); + if (g_settings.m_changeSystem) + { + SetSystemTheme(!GetCurrentSystemTheme()); + } + if (g_settings.m_changeApps) + { + SetAppsTheme(!GetCurrentAppsTheme()); + } + + if (m_manual_override_event_handle) + { + SetEvent(m_manual_override_event_handle); + Logger::debug(L"[Light Switch] Manual override event set"); + } + } + + return true; + } + + return false; + } + + bool is_process_running() + { + return WaitForSingleObject(m_process, 0) == WAIT_TIMEOUT; + } +}; + +std::wstring utf8_to_wstring(const std::string& str) +{ + if (str.empty()) + return std::wstring(); + + int size_needed = MultiByteToWideChar( + CP_UTF8, + 0, + str.c_str(), + static_cast(str.size()), + nullptr, + 0); + + std::wstring wstr(size_needed, 0); + + MultiByteToWideChar( + CP_UTF8, + 0, + str.c_str(), + static_cast(str.size()), + &wstr[0], + size_needed); + + return wstr; +} + +// Load the settings file. +void LightSwitchInterface::init_settings() +{ + Logger::info(L"[Light Switch] init_settings: starting to load settings for module"); + + try + { + PowerToysSettings::PowerToyValues settings = + PowerToysSettings::PowerToyValues::load_from_settings_file(get_name()); + + parse_hotkey(settings); + + if (auto v = settings.get_bool_value(L"changeSystem")) + g_settings.m_changeSystem = *v; + if (auto v = settings.get_bool_value(L"changeApps")) + g_settings.m_changeApps = *v; + if (auto v = settings.get_string_value(L"scheduleMode")) + g_settings.m_scheduleMode = FromString(*v); + if (auto v = settings.get_int_value(L"lightTime")) + g_settings.m_lightTime = *v; + if (auto v = settings.get_int_value(L"darkTime")) + g_settings.m_darkTime = *v; + if (auto v = settings.get_int_value(L"sunrise_offset")) + g_settings.m_sunrise_offset = *v; + if (auto v = settings.get_int_value(L"sunset_offset")) + g_settings.m_sunset_offset = *v; + if (auto v = settings.get_string_value(L"latitude")) + g_settings.m_latitude = *v; + if (auto v = settings.get_string_value(L"longitude")) + g_settings.m_longitude = *v; + + Logger::info(L"[Light Switch] init_settings: loaded successfully"); + } + catch (const winrt::hresult_error& e) + { + Logger::error(L"[Light Switch] init_settings: hresult_error 0x{:08X} - {}", e.code(), e.message().c_str()); + } + catch (const std::exception& e) + { + std::wstring whatStr = utf8_to_wstring(e.what()); + Logger::error(L"[Light Switch] init_settings: std::exception - {}", whatStr); + } + catch (...) + { + Logger::error(L"[Light Switch] init_settings: unknown exception while loading settings"); + } +} + +extern "C" __declspec(dllexport) PowertoyModuleIface* __cdecl powertoy_create() +{ + return new LightSwitchInterface(); +} \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/pch.cpp b/src/modules/LightSwitch/LightSwitchModuleInterface/pch.cpp new file mode 100644 index 0000000000..a83d3bb2cc --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/pch.cpp @@ -0,0 +1,2 @@ +#include "pch.h" +#pragma comment(lib, "windowsapp") \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/pch.h b/src/modules/LightSwitch/LightSwitchModuleInterface/pch.h new file mode 100644 index 0000000000..39f8f4ac84 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/pch.h @@ -0,0 +1,14 @@ +#pragma once +#define WIN32_LEAN_AND_MEAN +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/resource.h b/src/modules/LightSwitch/LightSwitchModuleInterface/resource.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/trace.cpp b/src/modules/LightSwitch/LightSwitchModuleInterface/trace.cpp new file mode 100644 index 0000000000..57fa1921f7 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/trace.cpp @@ -0,0 +1,30 @@ +#include "pch.h" +#include "trace.h" +#include + +TRACELOGGING_DEFINE_PROVIDER( + g_hProvider, + "Microsoft.PowerToys", + // {38e8889b-9731-53f5-e901-e8a7c1753074} + (0x38e8889b, 0x9731, 0x53f5, 0xe9, 0x01, 0xe8, 0xa7, 0xc1, 0x75, 0x30, 0x74), + TraceLoggingOptionProjectTelemetry()); + +void Trace::RegisterProvider() +{ + TraceLoggingRegister(g_hProvider); +} + +void Trace::UnregisterProvider() +{ + TraceLoggingUnregister(g_hProvider); +} + +void Trace::MyEvent() +{ + TraceLoggingWrite( + g_hProvider, + "PowerToyName_MyEvent", + ProjectTelemetryPrivacyDataTag(ProjectTelemetryTag_ProductAndServicePerformance), + TraceLoggingBoolean(TRUE, "UTCReplace_AppSessionGuid"), + TraceLoggingKeyword(PROJECT_KEYWORD_MEASURE)); +} diff --git a/src/modules/LightSwitch/LightSwitchModuleInterface/trace.h b/src/modules/LightSwitch/LightSwitchModuleInterface/trace.h new file mode 100644 index 0000000000..55cdedb2ee --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchModuleInterface/trace.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include +#include + +TRACELOGGING_DECLARE_PROVIDER(g_hProvider); + +class Trace +{ +public: + static void RegisterProvider(); + static void UnregisterProvider(); + static void MyEvent(); +}; diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitch.ico b/src/modules/LightSwitch/LightSwitchService/LightSwitch.ico new file mode 100644 index 0000000000000000000000000000000000000000..ee1be500100df736c51a33927180b7e07e247532 GIT binary patch literal 90022 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 literal 0 HcmV?d00001 diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp new file mode 100644 index 0000000000..168ee092e7 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.cpp @@ -0,0 +1,295 @@ +#include +#include +#include "ThemeScheduler.h" +#include "ThemeHelper.h" +#include +#include +#include +#include +#include +#include + +SERVICE_STATUS g_ServiceStatus = {}; +SERVICE_STATUS_HANDLE g_StatusHandle = nullptr; +HANDLE g_ServiceStopEvent = nullptr; +static int g_lastUpdatedDay = -1; + +VOID WINAPI ServiceMain(DWORD argc, LPTSTR* argv); +VOID WINAPI ServiceCtrlHandler(DWORD dwCtrl); +DWORD WINAPI ServiceWorkerThread(LPVOID lpParam); + +// Entry point for the executable +int _tmain(int argc, TCHAR* argv[]) +{ + DWORD parentPid = 0; + bool debug = false; + for (int i = 1; i < argc; ++i) + { + if (_tcscmp(argv[i], _T("--debug")) == 0) + debug = true; + else if (_tcscmp(argv[i], _T("--pid")) == 0 && i + 1 < argc) + parentPid = _tstoi(argv[++i]); + } + + // Try to connect to SCM + wchar_t serviceName[] = L"LightSwitchService"; + SERVICE_TABLE_ENTRYW table[] = { { serviceName, ServiceMain }, { nullptr, nullptr } }; + + if (!StartServiceCtrlDispatcherW(table)) + { + DWORD err = GetLastError(); + if (err == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) // not launched by SCM + { + g_ServiceStopEvent = CreateEvent(nullptr, TRUE, FALSE, nullptr); + HANDLE hThread = CreateThread( + nullptr, 0, ServiceWorkerThread, reinterpret_cast(static_cast(parentPid)), 0, nullptr); + + // Wait so the process stays alive + WaitForSingleObject(hThread, INFINITE); + CloseHandle(hThread); + CloseHandle(g_ServiceStopEvent); + return 0; + } + return static_cast(err); + } + + return 0; +} + +// Called when the service is launched by Windows +VOID WINAPI ServiceMain(DWORD, LPTSTR*) +{ + g_StatusHandle = RegisterServiceCtrlHandler(_T("LightSwitchService"), ServiceCtrlHandler); + if (!g_StatusHandle) + return; + + g_ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + g_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + g_ServiceStatus.dwCurrentState = SERVICE_START_PENDING; + SetServiceStatus(g_StatusHandle, &g_ServiceStatus); + + g_ServiceStopEvent = CreateEvent(nullptr, TRUE, FALSE, nullptr); + if (!g_ServiceStopEvent) + { + g_ServiceStatus.dwCurrentState = SERVICE_STOPPED; + g_ServiceStatus.dwWin32ExitCode = GetLastError(); + SetServiceStatus(g_StatusHandle, &g_ServiceStatus); + return; + } + + SECURITY_ATTRIBUTES sa{ sizeof(sa) }; + sa.bInheritHandle = FALSE; + sa.lpSecurityDescriptor = nullptr; + + g_ServiceStatus.dwCurrentState = SERVICE_RUNNING; + SetServiceStatus(g_StatusHandle, &g_ServiceStatus); + + HANDLE hThread = CreateThread(nullptr, 0, ServiceWorkerThread, nullptr, 0, nullptr); + WaitForSingleObject(hThread, INFINITE); + CloseHandle(hThread); + + CloseHandle(g_ServiceStopEvent); + g_ServiceStatus.dwCurrentState = SERVICE_STOPPED; + g_ServiceStatus.dwWin32ExitCode = 0; + SetServiceStatus(g_StatusHandle, &g_ServiceStatus); +} + +VOID WINAPI ServiceCtrlHandler(DWORD dwCtrl) +{ + switch (dwCtrl) + { + case SERVICE_CONTROL_STOP: + if (g_ServiceStatus.dwCurrentState != SERVICE_RUNNING) + break; + + g_ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING; + SetServiceStatus(g_StatusHandle, &g_ServiceStatus); + + // Signal the service to stop + SetEvent(g_ServiceStopEvent); + break; + + default: + break; + } +} + +static void update_sun_times(auto& settings) +{ + double latitude = std::stod(settings.latitude); + double longitude = std::stod(settings.longitude); + + SYSTEMTIME st; + GetLocalTime(&st); + + SunTimes newTimes = CalculateSunriseSunset(latitude, longitude, st.wYear, st.wMonth, st.wDay); + + int newLightTime = newTimes.sunriseHour * 60 + newTimes.sunriseMinute; + int newDarkTime = newTimes.sunsetHour * 60 + newTimes.sunsetMinute; + + auto values = PowerToysSettings::PowerToyValues::load_from_settings_file(L"LightSwitch"); + values.add_property(L"lightTime", newLightTime); + values.add_property(L"darkTime", newDarkTime); + values.save_to_settings_file(); + + OutputDebugString(L"[LightSwitchService] Updated sun times and saved to config.\n"); +} + +DWORD WINAPI ServiceWorkerThread(LPVOID lpParam) +{ + DWORD parentPid = static_cast(reinterpret_cast(lpParam)); + HANDLE hParent = nullptr; + if (parentPid) + hParent = OpenProcess(SYNCHRONIZE, FALSE, parentPid); + + OutputDebugString(L"[LightSwitchService] Worker thread starting...\n"); + + // Initialize settings system + LightSwitchSettings::instance().InitFileWatcher(); + + // Open the manual override event created by the module interface + HANDLE hManualOverride = OpenEventW(SYNCHRONIZE | EVENT_MODIFY_STATE, FALSE, L"POWERTOYS_LIGHTSWITCH_MANUAL_OVERRIDE"); + + auto applyTheme = [](int nowMinutes, int lightMinutes, int darkMinutes, const auto& settings) { + bool isLightActive = false; + + if (lightMinutes < darkMinutes) + { + // Normal case: sunrise < sunset + isLightActive = (nowMinutes >= lightMinutes && nowMinutes < darkMinutes); + } + else + { + // Wraparound case: e.g. light at 21:00, dark at 06:00 + isLightActive = (nowMinutes >= lightMinutes || nowMinutes < darkMinutes); + } + + bool isSystemCurrentlyLight = GetCurrentSystemTheme(); + bool isAppsCurrentlyLight = GetCurrentAppsTheme(); + + if (isLightActive) + { + if (settings.changeSystem && !isSystemCurrentlyLight) + SetSystemTheme(true); + if (settings.changeApps && !isAppsCurrentlyLight) + SetAppsTheme(true); + } + else + { + if (settings.changeSystem && isSystemCurrentlyLight) + SetSystemTheme(false); + if (settings.changeApps && isAppsCurrentlyLight) + SetAppsTheme(false); + } + }; + + // --- At service start: immediately honor the schedule --- + { + SYSTEMTIME st; + GetLocalTime(&st); + int nowMinutes = st.wHour * 60 + st.wMinute; + + LightSwitchSettings::instance().LoadSettings(); + const auto& settings = LightSwitchSettings::instance().settings(); + + applyTheme(nowMinutes, settings.lightTime + settings.sunrise_offset, settings.darkTime + settings.sunset_offset, settings); + } + + // --- Main loop: wakes once per minute or stop/parent death --- + for (;;) + { + HANDLE waits[2] = { g_ServiceStopEvent, hParent }; + DWORD count = hParent ? 2 : 1; + + SYSTEMTIME st; + GetLocalTime(&st); + int nowMinutes = st.wHour * 60 + st.wMinute; + + LightSwitchSettings::instance().LoadSettings(); + const auto& settings = LightSwitchSettings::instance().settings(); + + // Refresh suntimes at day boundary + if (g_lastUpdatedDay != st.wDay) + { + update_sun_times(settings); + g_lastUpdatedDay = st.wDay; + + OutputDebugString(L"[LightSwitchService] Recalculated sun times at new day boundary.\n"); + } + + wchar_t msg[160]; + swprintf_s(msg, + L"[LightSwitchService] now=%02d:%02d | light=%02d:%02d | dark=%02d:%02d\n", + st.wHour, + st.wMinute, + settings.lightTime / 60, + settings.lightTime % 60, + settings.darkTime / 60, + settings.darkTime % 60); + OutputDebugString(msg); + + // --- Manual override check --- + bool manualOverrideActive = false; + if (hManualOverride) + { + manualOverrideActive = (WaitForSingleObject(hManualOverride, 0) == WAIT_OBJECT_0); + } + + if (manualOverrideActive) + { + // Did we hit a scheduled boundary? (reset override at boundary) + if (nowMinutes == (settings.lightTime + settings.sunrise_offset) % 1440 || + nowMinutes == (settings.darkTime + settings.sunset_offset) % 1440) + { + ResetEvent(hManualOverride); + OutputDebugString(L"[LightSwitchService] Manual override cleared at boundary\n"); + } + else + { + OutputDebugString(L"[LightSwitchService] Skipping schedule due to manual override\n"); + goto sleep_until_next_minute; + } + } + + // Apply theme logic (only runs if no manual override or override just cleared) + applyTheme(nowMinutes, settings.lightTime + settings.sunrise_offset, settings.darkTime + settings.sunset_offset, settings); + + sleep_until_next_minute: + GetLocalTime(&st); + int msToNextMinute = (60 - st.wSecond) * 1000 - st.wMilliseconds; + if (msToNextMinute < 50) + msToNextMinute = 50; + + DWORD wait = WaitForMultipleObjects(count, waits, FALSE, msToNextMinute); + if (wait == WAIT_OBJECT_0) // stop event + break; + if (hParent && wait == WAIT_OBJECT_0 + 1) // parent exited + break; + } + + if (hManualOverride) + CloseHandle(hManualOverride); + if (hParent) + CloseHandle(hParent); + + return 0; +} + +int APIENTRY wWinMain(HINSTANCE, HINSTANCE, PWSTR, int) +{ + if (powertoys_gpo::getConfiguredLightSwitchEnabledValue() == powertoys_gpo::gpo_rule_configured_disabled) + { + wchar_t msg[160]; + swprintf_s( + msg, + L"Tried to start with a GPO policy setting the utility to always be disabled. Please contact your systems administrator.\n"); + OutputDebugString(msg); + return 0; + } + + int argc = 0; + LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); + int rc = _tmain(argc, argv); // reuse your existing logic + LocalFree(argv); + return rc; +} \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitchService.rc b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.rc new file mode 100644 index 0000000000000000000000000000000000000000..db9b9dc06701c590ebae48acea10a89023738efb GIT binary patch literal 3278 zcmdUxZI2Q`49EN0#P2Y|8!sC0;S(Hi;zkb5EnGAqAr}yj1Qx=A#>CIA{@U5`_Sgj@ z`eMyww= zbP8_+RlOa(34O;%SDVWknT9-+2kg=`T8Eo3yFhwsvbBPKLvE#J(yCcExtZzd+UN34 zVj0L#IuglS8OxPi!0piQOHV$)iTPhj3r>%I*k5g^UJKR*>ZFTb_I*6VODkD&{w>~7 zKMXkad;SrpZgWoc#|8WseET=@`#bnz{`GqI{a-zg1&e%i?C_OF(u{MT78}9yVclxc zV4dT36Y_7tO{K(ulgHe7!YJfnOwVU!DrY58kmhn~ZvJ|7FSn+wcrLGqDxXs^`7sy|lp%giig;6#5x6xXqCNKCS$W8!mnT~Er~A|mkEdjsVvKK!5oLH& zjJ9w`)k2lLHEN-b19e2ogx4nd#mS%HZr0f?>U-osr4=Ks1GILCh#M!Lt#;ViYqdt= z#;OCY81yyYWU^Z{oq1TR4Sj(el53hG-NX=WZq_&(=k4+@-4YqCDpEAP-6>4yui5Mp>fc7SI0CaG&`#?J&8TB7$Q_f(&(%P)Ip}?hJ#pr@38O}KrhL7l zR+mNFzrp|f%~z`*qAXBFj+y!5(Cc2zwrZUyZ%xRqK>xPRQ}jDt=LJ9Jt*BOCEj)~_ Q33;p8TdeAe_pU4b1V6uq)&Kwi literal 0 HcmV?d00001 diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj new file mode 100644 index 0000000000..2151d0b5b6 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj @@ -0,0 +1,219 @@ + + + + + + Debug + x64 + + + Release + x64 + + + Debug + ARM64 + + + Release + ARM64 + + + + 17.0 + Win32Proj + {08e71c67-6a7e-4ca1-b04e-2fb336410bac} + LightSwitchService + 10.0.26100.0 + LightSwitchService + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + + ..\..\..\..\$(Platform)\$(Configuration)\$(MSBuildProjectName)\ + PowerToys.LightSwitchService + + + + Level3 + true + _DEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + true + true + true + NDEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + true + %(PreprocessorDefinitions) + true + NotUsing + + ./../; + ..\..\..\common\Telemetry; + ..\..\..\common; + ..\..\..\; + ..\..\..\..\deps\spdlog\include; + ./; + %(AdditionalIncludeDirectories) + + + + Windows + true + Advapi32.lib;%(AdditionalDependencies) + + + + + {d9b8fc84-322a-4f9f-bbb9-20915c47ddfd} + + + {6955446d-23f7-4023-9bb3-8657f904af99} + + + {1d5be09d-78c0-4fd7-af00-ae7c1af7c525} + + + {8f021b46-362b-485c-bfba-ccf83e820cbd} + + + + + Level3 + true + true + true + NDEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + NotUsing + + + + + NotUsing + + + NotUsing + + + + + + + + + + + + + + + + false + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj.filters b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj.filters new file mode 100644 index 0000000000..a244dfc075 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/LightSwitchService.vcxproj.filters @@ -0,0 +1,72 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.cpp b/src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.cpp new file mode 100644 index 0000000000..5bd5a1fe92 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.cpp @@ -0,0 +1,167 @@ +#include "LightSwitchSettings.h" +#include +#include +#include "SettingsObserver.h" + +#include +#include +#include + +using namespace std; + +LightSwitchSettings& LightSwitchSettings::instance() +{ + static LightSwitchSettings inst; + return inst; +} + +LightSwitchSettings::LightSwitchSettings() +{ + LoadSettings(); +} + +std::wstring LightSwitchSettings::GetSettingsFileName() +{ + return PTSettingsHelper::get_module_save_file_location(L"LightSwitch"); +} + +void LightSwitchSettings::InitFileWatcher() +{ + const std::wstring& settingsFileName = GetSettingsFileName(); + m_settingsFileWatcher = std::make_unique(settingsFileName, [&]() { + PostMessageW(HWND_BROADCAST, WM_PRIV_SETTINGS_CHANGED, NULL, NULL); + }); +} + +void LightSwitchSettings::AddObserver(SettingsObserver& observer) +{ + m_observers.insert(&observer); +} + +void LightSwitchSettings::RemoveObserver(SettingsObserver& observer) +{ + m_observers.erase(&observer); +} + +void LightSwitchSettings::NotifyObservers(SettingId id) const +{ + for (auto observer : m_observers) + { + if (observer->WantsToBeNotified(id)) + { + observer->SettingsUpdate(id); + } + } +} + +void LightSwitchSettings::LoadSettings() +{ + try + { + PowerToysSettings::PowerToyValues values = + PowerToysSettings::PowerToyValues::load_from_settings_file(L"LightSwitch"); + + + if (const auto jsonVal = values.get_string_value(L"scheduleMode")) + { + auto val = *jsonVal; + auto newMode = FromString(val); + if (m_settings.scheduleMode != newMode) + { + m_settings.scheduleMode = newMode; + NotifyObservers(SettingId::ScheduleMode); + } + } + + // Latitude + if (const auto jsonVal = values.get_string_value(L"latitude")) + { + auto val = *jsonVal; + if (m_settings.latitude != val) + { + m_settings.latitude = val; + NotifyObservers(SettingId::Latitude); + } + } + + // Longitude + if (const auto jsonVal = values.get_string_value(L"longitude")) + { + auto val = *jsonVal; + if (m_settings.longitude != val) + { + m_settings.longitude = val; + NotifyObservers(SettingId::Longitude); + } + } + + // LightTime + if (const auto jsonVal = values.get_int_value(L"lightTime")) + { + auto val = *jsonVal; + if (m_settings.lightTime != val) + { + m_settings.lightTime = val; + NotifyObservers(SettingId::LightTime); + } + } + + // DarkTime + if (const auto jsonVal = values.get_int_value(L"darkTime")) + { + auto val = *jsonVal; + if (m_settings.darkTime != val) + { + m_settings.darkTime = val; + NotifyObservers(SettingId::DarkTime); + } + } + + // Offset + if (const auto jsonVal = values.get_int_value(L"sunrise_offset")) + { + auto val = *jsonVal; + if (m_settings.sunrise_offset != val) + { + m_settings.sunrise_offset = val; + NotifyObservers(SettingId::Sunrise_Offset); + } + } + + if (const auto jsonVal = values.get_int_value(L"sunset_offset")) + { + auto val = *jsonVal; + if (m_settings.sunset_offset != val) + { + m_settings.sunset_offset = val; + NotifyObservers(SettingId::Sunset_Offset); + } + } + + // ChangeSystem + if (const auto jsonVal = values.get_bool_value(L"changeSystem")) + { + auto val = *jsonVal; + if (m_settings.changeSystem != val) + { + m_settings.changeSystem = val; + NotifyObservers(SettingId::ChangeSystem); + } + } + + // ChangeApps + if (const auto jsonVal = values.get_bool_value(L"changeApps")) + { + auto val = *jsonVal; + if (m_settings.changeApps != val) + { + m_settings.changeApps = val; + NotifyObservers(SettingId::ChangeApps); + } + } + } + catch (...) + { + // Keeps defaults if load fails + } +} \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.h b/src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.h new file mode 100644 index 0000000000..51f0988eda --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/LightSwitchSettings.h @@ -0,0 +1,88 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include +#include + +class SettingsObserver; + +enum class ScheduleMode +{ + FixedHours, + SunsetToSunrise + // Add more in the future +}; + +inline std::wstring ToString(ScheduleMode mode) +{ + switch (mode) + { + case ScheduleMode::FixedHours: + return L"FixedHours"; + case ScheduleMode::SunsetToSunrise: + return L"SunsetToSunrise"; + default: + return L"FixedHours"; + } +} + +inline ScheduleMode FromString(const std::wstring& str) +{ + if (str == L"SunsetToSunrise") + return ScheduleMode::SunsetToSunrise; + else + return ScheduleMode::FixedHours; +} + +struct LightSwitchConfig +{ + ScheduleMode scheduleMode = ScheduleMode::FixedHours; + + std::wstring latitude = L"0.0"; + std::wstring longitude = L"0.0"; + + // Stored as minutes since midnight + int lightTime = 8 * 60; // 08:00 default + int darkTime = 20 * 60; // 20:00 default + + int sunrise_offset = 0; + int sunset_offset = 0; + + bool changeSystem = false; + bool changeApps = false; +}; + +class LightSwitchSettings +{ +public: + static LightSwitchSettings& instance(); + + static inline const LightSwitchConfig& settings() + { + return instance().m_settings; + } + + void InitFileWatcher(); + static std::wstring GetSettingsFileName(); + + void AddObserver(SettingsObserver& observer); + void RemoveObserver(SettingsObserver& observer); + + void LoadSettings(); + +private: + LightSwitchSettings(); + ~LightSwitchSettings() = default; + + LightSwitchConfig m_settings; + std::unique_ptr m_settingsFileWatcher; + std::unordered_set m_observers; + + void NotifyObservers(SettingId id) const; +}; diff --git a/src/modules/LightSwitch/LightSwitchService/SettingsConstants.cpp b/src/modules/LightSwitch/LightSwitchService/SettingsConstants.cpp new file mode 100644 index 0000000000..534e55f5e3 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/SettingsConstants.cpp @@ -0,0 +1 @@ +#include "SettingsConstants.h" diff --git a/src/modules/LightSwitch/LightSwitchService/SettingsConstants.h b/src/modules/LightSwitch/LightSwitchService/SettingsConstants.h new file mode 100644 index 0000000000..4872864eff --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/SettingsConstants.h @@ -0,0 +1,14 @@ +#pragma once + +enum class SettingId +{ + ScheduleMode = 0, + Latitude, + Longitude, + LightTime, + DarkTime, + Sunrise_Offset, + Sunset_Offset, + ChangeSystem, + ChangeApps +}; \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchService/SettingsObserver.h b/src/modules/LightSwitch/LightSwitchService/SettingsObserver.h new file mode 100644 index 0000000000..88d0194eef --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/SettingsObserver.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include "SettingsConstants.h" + +class LightSwitchSettings; + +class SettingsObserver +{ +public: + SettingsObserver(std::unordered_set observedSettings) : + m_observedSettings(std::move(observedSettings)) + { + LightSwitchSettings::instance().AddObserver(*this); + } + + virtual ~SettingsObserver() + { + LightSwitchSettings::instance().RemoveObserver(*this); + } + + // Override this in your class to respond to updates + virtual void SettingsUpdate(SettingId type) {} + + bool WantsToBeNotified(SettingId type) const noexcept + { + return m_observedSettings.contains(type); + } + +protected: + std::unordered_set m_observedSettings; +}; diff --git a/src/modules/LightSwitch/LightSwitchService/ThemeHelper.cpp b/src/modules/LightSwitch/LightSwitchService/ThemeHelper.cpp new file mode 100644 index 0000000000..b0a57cf468 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/ThemeHelper.cpp @@ -0,0 +1,81 @@ +#include +#include "ThemeHelper.h" + +// Controls changing the themes. + +void SetAppsTheme(bool mode) +{ + HKEY hKey; + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_SET_VALUE, + &hKey) == ERROR_SUCCESS) + { + DWORD value = mode; + RegSetValueEx(hKey, L"AppsUseLightTheme", 0, REG_DWORD, reinterpret_cast(&value), sizeof(value)); + RegCloseKey(hKey); + + SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, reinterpret_cast(L"ImmersiveColorSet"), SMTO_ABORTIFHUNG, 5000, nullptr); + + SendMessageTimeout(HWND_BROADCAST, WM_THEMECHANGED, 0, 0, SMTO_ABORTIFHUNG, 5000, nullptr); + } +} + +void SetSystemTheme(bool mode) +{ + HKEY hKey; + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_SET_VALUE, + &hKey) == ERROR_SUCCESS) + { + DWORD value = mode; + RegSetValueEx(hKey, L"SystemUsesLightTheme", 0, REG_DWORD, reinterpret_cast(&value), sizeof(value)); + RegCloseKey(hKey); + + SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, reinterpret_cast(L"ImmersiveColorSet"), SMTO_ABORTIFHUNG, 5000, nullptr); + + SendMessageTimeout(HWND_BROADCAST, WM_THEMECHANGED, 0, 0, SMTO_ABORTIFHUNG, 5000, nullptr); + } +} + +// Can think of this as "is the current theme light?" +bool GetCurrentSystemTheme() +{ + HKEY hKey; + DWORD value = 1; // default = light + DWORD size = sizeof(value); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_READ, + &hKey) == ERROR_SUCCESS) + { + RegQueryValueEx(hKey, L"SystemUsesLightTheme", nullptr, nullptr, reinterpret_cast(&value), &size); + RegCloseKey(hKey); + } + + return value == 1; // true = light, false = dark +} + +bool GetCurrentAppsTheme() +{ + HKEY hKey; + DWORD value = 1; + DWORD size = sizeof(value); + + if (RegOpenKeyEx(HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + 0, + KEY_READ, + &hKey) == ERROR_SUCCESS) + { + RegQueryValueEx(hKey, L"AppsUseLightTheme", nullptr, nullptr, reinterpret_cast(&value), &size); + RegCloseKey(hKey); + } + + return value == 1; // true = light, false = dark +} diff --git a/src/modules/LightSwitch/LightSwitchService/ThemeHelper.h b/src/modules/LightSwitch/LightSwitchService/ThemeHelper.h new file mode 100644 index 0000000000..5985fd95c8 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/ThemeHelper.h @@ -0,0 +1,5 @@ +#pragma once +void SetSystemTheme(bool dark); +void SetAppsTheme(bool dark); +bool GetCurrentSystemTheme(); +bool GetCurrentAppsTheme(); diff --git a/src/modules/LightSwitch/LightSwitchService/ThemeScheduler.cpp b/src/modules/LightSwitch/LightSwitchService/ThemeScheduler.cpp new file mode 100644 index 0000000000..7b07dd0ef7 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/ThemeScheduler.cpp @@ -0,0 +1,89 @@ +#include "ThemeScheduler.h" +#include + +SunTimes CalculateSunriseSunset(double latitude, double longitude, int year, int month, int day) +{ + double zenith = 90.833; + int N1 = static_cast(floor(275.0 * month / 9.0)); + int N2 = static_cast(floor((static_cast(month) + 9) / 12.0)); + int N3 = static_cast(floor((1.0 + floor((year - 4.0 * floor(year / 4.0) + 2.0) / 3.0)))); + int N = N1 - (N2 * N3) + day - 30; + + auto calcTime = [&](bool sunrise) -> double { + double lngHour = longitude / 15.0; + double t = sunrise ? N + ((6 - lngHour) / 24) : N + ((18 - lngHour) / 24); + + double M = (0.9856 * t) - 3.289; + double L = M + (1.916 * sin(deg2rad(M))) + (0.020 * sin(2 * deg2rad(M))) + 282.634; + if (L < 0) + L += 360; + if (L > 360) + L -= 360; + + double RA = rad2deg(atan(0.91764 * tan(deg2rad(L)))); + if (RA < 0) + RA += 360; + if (RA > 360) + RA -= 360; + + double Lquadrant = floor(L / 90) * 90; + double RAquadrant = floor(RA / 90) * 90; + RA = RA + (Lquadrant - RAquadrant); + RA /= 15; + + double sinDec = 0.39782 * sin(deg2rad(L)); + double cosDec = cos(asin(sinDec)); + + double cosH = (cos(deg2rad(zenith)) - (sinDec * sin(deg2rad(latitude)))) / (cosDec * cos(deg2rad(latitude))); + if (cosH > 1 || cosH < -1) + return -1; + + double H = sunrise ? 360 - rad2deg(acos(cosH)) : rad2deg(acos(cosH)); + H /= 15; + + double T = H + RA - (0.06571 * t) - 6.622; + double UT = T - lngHour; + while (UT < 0) + UT += 24; + while (UT >= 24) + UT -= 24; + + return UT; + }; + + double riseUT = calcTime(true); + double setUT = calcTime(false); + + auto toLocal = [](double UT) { + TIME_ZONE_INFORMATION tz; + DWORD state = GetTimeZoneInformation(&tz); + double totalBias = tz.Bias; + + if (state == TIME_ZONE_ID_DAYLIGHT) + totalBias += tz.DaylightBias; + else if (state == TIME_ZONE_ID_STANDARD) + totalBias += tz.StandardBias; + + double biasHours = -(totalBias / 60.0); + double localTime = UT + biasHours; + + while (localTime < 0) + localTime += 24; + while (localTime >= 24) + localTime -= 24; + + int hour = static_cast(localTime); + int minute = static_cast((localTime - hour) * 60); + return std::pair{ hour, minute }; + }; + + auto [riseHour, riseMinute] = toLocal(riseUT); + auto [setHour, setMinute] = toLocal(setUT); + + SunTimes result; + result.sunriseHour = riseHour; + result.sunriseMinute = riseMinute; + result.sunsetHour = setHour; + result.sunsetMinute = setMinute; + return result; +} diff --git a/src/modules/LightSwitch/LightSwitchService/ThemeScheduler.h b/src/modules/LightSwitch/LightSwitchService/ThemeScheduler.h new file mode 100644 index 0000000000..4e6869830a --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/ThemeScheduler.h @@ -0,0 +1,25 @@ +#pragma once +#include +#include +#include + +// Struct to hold calculated sunrise/sunset times +struct SunTimes +{ + int sunriseHour; + int sunriseMinute; + int sunsetHour; + int sunsetMinute; +}; + +constexpr double PI = 3.14159265358979323846; +constexpr double deg2rad(double deg) +{ + return deg * PI / 180.0; +} +constexpr double rad2deg(double rad) +{ + return rad * 180.0 / PI; +} + +SunTimes CalculateSunriseSunset(double latitude, double longitude, int year, int month, int day); diff --git a/src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.cpp b/src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.cpp new file mode 100644 index 0000000000..5e271fc8d0 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.cpp @@ -0,0 +1,15 @@ + +#include "WinHookEventIDs.h" +#include +#include + +UINT WM_PRIV_SETTINGS_CHANGED = 0; + +std::once_flag init_flag; + +void InitializeWinhookEventIds() +{ + std::call_once(init_flag, [&] { + WM_PRIV_SETTINGS_CHANGED = RegisterWindowMessage(L"{11978F7B-221A-4E65-B9A9-693F7D6E4B25}"); + }); +} diff --git a/src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.h b/src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.h new file mode 100644 index 0000000000..177fd139cd --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/WinHookEventIDs.h @@ -0,0 +1,6 @@ +#pragma once +#include + +extern UINT WM_PRIV_SETTINGS_CHANGED; // Scheduled when a watched settings file is updated + +void InitializeWinhookEventIds(); \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchService/packages.config b/src/modules/LightSwitch/LightSwitchService/packages.config new file mode 100644 index 0000000000..ff4b059648 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/modules/LightSwitch/LightSwitchService/resource.h b/src/modules/LightSwitch/LightSwitchService/resource.h new file mode 100644 index 0000000000..e8ed3b4747 --- /dev/null +++ b/src/modules/LightSwitch/LightSwitchService/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by LightSwitchService.rc +// +#define IDI_ICON1 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/LockScreenLogo.scale-200.png b/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..7440f0d4bf7c7e26e4e36328738c68e624ee851e GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(FqV6|IEGZ*x-#9g>~Mkr+x6^F zy~CDX2QIMs&Gcs3RnRBoxBA!*(Mfw0KTCYuYk0WlEIV>qBmPl! zq4ukrvfADX@#p8fbLY(H47N+k`FZ(FZh?cDro7>{8mkBO3>^oaIx`3!Jl)Qq)HI!+ z(S=1{o~eT)&W^=Ea8C`-17(Jv5(nHFJ{dOjGdxLVkY_y6&S1whfuFI4MM0kF0f&cO zPDVpV%nz;Id$>+0Ga5e9625-JcI)oq=#Pa3p^>8BB}21BUw@eN!-6@w%X+^`+Vn?! zryu|3T>kVWNBYyBc=7Y6H#s1Ah!OI_nezW zXTqOdkv2Az6KKBV=$yHdF^R3Fqw(TZEoNSZX>reXJ#bwX42%f|Pgg&ebxsLQ010xn AssI20 literal 0 HcmV?d00001 diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/SplashScreen.scale-200.png b/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..32f486a86792a5e34cd9a8261b394c49b48f86be GIT binary patch literal 5372 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 literal 0 HcmV?d00001 diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/Square44x44Logo.scale-200.png b/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..f713bba67f551ef91020b75716a4dc8ebd744b1c GIT binary patch literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1|$oo8kjIJFu8cTIEGZ*dUI*J;2{SImxtDO zm%3!R$UazoY}x{$j0P5ABYXWr(l=jxJ6ps1W{tV=^>{Dl><3nv3A}sm=EZ)#l3`NR zpZda3^rNox*D1%NC98Z~L*6zipLw~Gxn&(Y-;KmJ+aR6eLabU-L#y8HW%7P-E_-VlLqIabbHPHKT*)fT@9iWJ7iWgOT9%0}Lrj>lztPxWq6sPw3pi z#-<=#$jjrP_DD*i!RLsn0mIA=>4~N)IMYWIf=j%-zuKCdMG%tHYot70D1| zvWa0wMhauW#S>1CnI_;>!1Q3zMA17@DOVq{MQ+{U7^a&yA+%dMCG;WNPV0i;w$tu; zX^b}UKziPM)(<;)ruW;-`)bBN+rQNM*Zs_>?n$|FVFo-e*PZb*@U7VAd+tHb4e?=Blc~}S6K)wL}r*Gf`BM#QB z+y>N$mCswb4d{^{S9v_!eQj4fTRMOwOCi?lSk9%<=vAz}jM-*PQtH@Odn1LZcd^j#o> hW$4xn+CT+ep9lJ{OAO?njobhL002ovPDHLkV1nYebbkN< literal 0 HcmV?d00001 diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/StoreLogo.png b/src/modules/LightSwitch/Tests/LightSwitch.UITests/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4586f26bdf7841cad10f39cdffe2aca3af252c1 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fF!p=8IEGZ*dUM0H=rDtTTVkd2 z(%lbKn@VS_lUaADVB&;Z6F#LM+mPsa?e>FnHo;HND^!P`-lX%BH~FOg%y&x+t*x!? zg$#_1A1kgsSvO(fw`bOmo;lrJX8byO1j^gf7qohR%mmt z@L)WX;>gqgK|tWJvQ5j;4;=gt4HXVKSMYRv5RhY5vS~TqfK_NAP*r{h!!g^BZ;w4r z7CGdsai)y;fJQc`7{Zc2b==h%o`Op$|bg6a&nL{*m7-=0>k4M4-PXlU;G-?%*(*g>iFt^ U$m#7DfHB12>FVdQ&MBb@0G`#n8vpc0sq%A~kJcD9FY~qQRMt?ZR3YyDZt}Od;|mgpc{2dv9AHF){kXU%k({ z=Y8JidEayHTkG@twPZ|U3_^%3ct-OgLSiFAqDN!|tbCX@c@?4P`2x*TMK!+Q4b?k0 ziW7!!KF6dPWcF<%I|iznM~`QJ_V7sHGV_D`dhgpA9Vd@&X}ErK+j~_rdv;Bp?OA@a zFXOk7eWOJe5NcK;6h$FaM&7JxNc#-@QTwzW6x#d_zmQNkz5) zPI;kh;3d;5UCJU+9a(cOxX(|edWoOiAEdGU#kPJ&xnc2||3vDbuhBCkj-pb0as$Zl z5;}4n=**n6(1g`JEtSy;SG6X;#-F~Oz3lESG2b5`j@wAwY4Yp<=4Xeb>iH=6aicF?DxD&q{`!&}ct zBI)aycwuobQAf&678Uf+Mmh-@9RUhyH~>?w0dixO0#jZjEc9R^=5NZw=|a(kcB?9^ zfnTiEFXp-q#B;Tn>(O%$A*ud^Rg&eVH6Y_5Y%!E39RR&s?XpG`gKwU!6FE1 z7X)DC7)*(5g}lh`4`{i~DZcWupZI`K)_4P)VE{@gc7@Xsd^86zl~_mOYH?I4!aGeX z^E(_=L6?PgveDQ+r%P@UISEXrkn`LHJZ##+!-anV>6h)IkKp;E@p8+3&(5%kS2)ld*J*rJccZM0iyaAx7+F~GW1UWFK&3X$PE1^}NH zgAG9ck5K!{07OwU@j@Do>TbH=CDEo#4m0cEyAuXy_<&jlzJVcKweSJ5 z&=q~iIn18$w8yb=rmEmHxVEUA^?RwnB?6Qlp1os8@*dWTGL2bhzZ!s*xqScR?EPL` zo(JwNdKUUYy7GtvZ3asXm)cgFvCx9EmAi;|w=a0iGiv%%VYKh`P0Wma4y`Xyx|T~( zAmfGbgbEEC7)j8b@WA@+5W3a61HJXC1dX@6_T|Czk0I0zBk%tnW~()VWITGI!`$c< gARL?UBrYYkwoDw4eo*CrzXGTrZ@;GF>596)00d&n@&Et; literal 0 HcmV?d00001 diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/LightSwitch.UITests.csproj b/src/modules/LightSwitch/Tests/LightSwitch.UITests/LightSwitch.UITests.csproj new file mode 100644 index 0000000000..9770255af6 --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/LightSwitch.UITests.csproj @@ -0,0 +1,22 @@ + + + + PowerToys.LightSwitch.UITests + LightSwitch.UITests + false + true + enable + Library + + + false + + + $(SolutionDir)$(Platform)\$(Configuration)\tests\LightSwitch.UITests\ + + + + + + + \ No newline at end of file diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/Package.appxmanifest b/src/modules/LightSwitch/Tests/LightSwitch.UITests/Package.appxmanifest new file mode 100644 index 0000000000..a38ad92615 --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/Package.appxmanifest @@ -0,0 +1,51 @@ + + + + + + + + + + LightSwitch.UITests + Microsoft + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestGeolocation.cs b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestGeolocation.cs new file mode 100644 index 0000000000..aaa5124995 --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestGeolocation.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.PowerToys.UITest; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace LightSwitch.UITests +{ + [TestClass] + public class TestGeolocation : UITestBase + { + public TestGeolocation() + : base(PowerToysModule.PowerToysSettings, WindowSize.Large) + { + } + + [TestMethod("LightSwitch.Geolocation")] + [TestCategory("Location")] + public void TestGeolocationUpdate() + { + TestHelper.InitializeTest(this, "geolocation test"); + TestHelper.PerformGeolocationTest(this); + TestHelper.CleanupTest(this); + } + } +} diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestHelper.cs b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestHelper.cs new file mode 100644 index 0000000000..7bb4e77af3 --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestHelper.cs @@ -0,0 +1,435 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; +using Microsoft.PowerToys.UITest; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.Win32; + +namespace LightSwitch.UITests +{ + internal sealed class TestHelper + { + private static readonly string[] ShortcutSeparators = { " + ", "+", " " }; + + /// + /// Performs common test initialization: navigate to settings, enable toggle, verify shortcut + /// + /// The test base instance + /// Name of the test for assertions + /// The activation keys for the test + public static Key[] InitializeTest(UITestBase testBase, string testName) + { + LaunchFromSetting(testBase); + + var toggleSwitch = SetLightSwitchToggle(testBase, enable: true); + Assert.IsTrue( + toggleSwitch.IsOn, + $"Light Switch toggle switch should be ON for {testName}"); + + var activationKeys = ReadActivationShortcut(testBase); + Assert.IsNotNull(activationKeys, "Should be able to read activation shortcut"); + Assert.IsTrue(activationKeys.Length > 0, "Activation shortcut should contain at least one key"); + + return activationKeys; + } + + /// + /// Navigate to the Light Switch settings page + /// + public static void LaunchFromSetting(UITestBase testBase) + { + var lightSwitch = testBase.Session.FindAll(By.AccessibilityId("LightSwitchNavItem")); + + if (lightSwitch.Count == 0) + { + testBase.Session.Find(By.AccessibilityId("SystemToolsNavItem"), 5000).Click(msPostAction: 500); + } + + testBase.Session.Find(By.AccessibilityId("LightSwitchNavItem"), 5000).Click(msPostAction: 500); + } + + /// + /// Set the Light Switch enable toggle switch to the specified state + /// + public static ToggleSwitch SetLightSwitchToggle(UITestBase testBase, bool enable) + { + var toggleSwitch = testBase.Session.Find(By.AccessibilityId("Toggle_LightSwitch"), 5000); + + if (toggleSwitch.IsOn != enable) + { + toggleSwitch.Click(msPreAction: 1000, msPostAction: 2000); + } + + if (toggleSwitch.IsOn != enable) + { + testBase.Session.SendKey(Key.Space, msPreAction: 0, msPostAction: 2000); + } + + return toggleSwitch; + } + + /// + /// Read the current activation shortcut from the ShortcutControl + /// + public static Key[] ReadActivationShortcut(UITestBase testBase) + { + var shortcutCard = testBase.Session.Find(By.AccessibilityId("Shortcut_LightSwitch"), 5000); + var shortcutButton = shortcutCard.Find(By.AccessibilityId("EditButton"), 5000); + return ParseShortcutText(shortcutButton.HelpText); + } + + /// + /// Parse shortcut text like "Win + Ctrl + Shift + M" into Key array + /// + private static Key[] ParseShortcutText(string shortcutText) + { + if (string.IsNullOrEmpty(shortcutText)) + { + return new Key[] { Key.Win, Key.Ctrl, Key.Shift, Key.D }; + } + + var keys = new List(); + var parts = shortcutText.Split(ShortcutSeparators, StringSplitOptions.RemoveEmptyEntries); + + foreach (var part in parts) + { + var cleanPart = part.Trim().ToLowerInvariant(); + var key = cleanPart switch + { + "win" or "windows" => Key.Win, + "ctrl" or "control" => Key.Ctrl, + "shift" => Key.Shift, + "alt" => Key.Alt, + _ when cleanPart.Length == 1 && char.IsLetter(cleanPart[0]) && + cleanPart[0] >= 'a' && cleanPart[0] <= 'z' => + (Key)Enum.Parse(typeof(Key), cleanPart.ToUpperInvariant()), + _ => (Key?)null, + }; + + if (key.HasValue) + { + keys.Add(key.Value); + } + } + + return keys.Count > 0 ? keys.ToArray() : new Key[] { Key.Win, Key.Ctrl, Key.Shift, Key.D }; + } + + /// + /// Performs common test cleanup: close LightSwitch task + /// + /// The test base instance + public static void CleanupTest(UITestBase testBase) + { + // TODO: Make sure the task kills? + // CloseLightSwitch(testBase); + + // Ensure we're attached to settings after cleanup + try + { + testBase.Session.Attach(PowerToysModule.PowerToysSettings); + } + catch + { + // Ignore attachment errors - this is just cleanup + } + } + + /// + /// Perform a update time test operation + /// + public static void PerformUpdateTimeTest(UITestBase testBase) + { + // Make sure in manual mode + var modeCombobox = testBase.Session.Find(By.AccessibilityId("ModeSelection_LightSwitch"), 5000); + Assert.IsNotNull(modeCombobox, "Mode combobox not found."); + + var neededTabs = 5; + + if (modeCombobox.Text != "Manual") + { + modeCombobox.Click(); + var manualListItem = testBase.Session.Find(By.AccessibilityId("ManualCBItem_LightSwitch"), 5000); + Assert.IsNotNull(manualListItem, "Manual combobox item not found."); + manualListItem.Click(); + neededTabs = 1; + } + + Assert.AreEqual("Manual", modeCombobox.Text, "Mode combobox should be set to Manual."); + + var timeline = testBase.Session.Find(By.AccessibilityId("Timeline_LightSwitch"), 5000); + Assert.IsNotNull(timeline, "Timeline not found."); + + var helpText = timeline.GetAttribute("HelpText"); + string originalStartValue = GetHelpTextValue(helpText, "Start"); + + for (int i = 0; i < neededTabs; i++) + { + testBase.Session.SendKeys(Key.Tab); + } + + testBase.Session.SendKeys(Key.Enter); + testBase.Session.SendKeys(Key.Up); + testBase.Session.SendKeys(Key.Enter); + + helpText = timeline.GetAttribute("HelpText"); + string updatedStartValue = GetHelpTextValue(helpText, "Start"); + + Assert.AreNotEqual(originalStartValue, updatedStartValue, "Timeline start time should have been updated."); + + helpText = timeline.GetAttribute("HelpText"); + string originalEndValue = GetHelpTextValue(helpText, "End"); + + testBase.Session.SendKeys(Key.Tab); + testBase.Session.SendKeys(Key.Enter); + testBase.Session.SendKeys(Key.Up); + testBase.Session.SendKeys(Key.Enter); + + helpText = timeline.GetAttribute("HelpText"); + string updatedEndValue = GetHelpTextValue(helpText, "End"); + + Assert.AreNotEqual(originalEndValue, updatedEndValue, "Timeline end time should have been updated."); + } + + /// + /// Perform a update geolocation test operation + /// + public static void PerformUserSelectedLocationTest(UITestBase testBase) + { + // Make sure in sun time mode + var modeCombobox = testBase.Session.Find(By.AccessibilityId("ModeSelection_LightSwitch"), 5000); + Assert.IsNotNull(modeCombobox, "Mode combobox not found."); + + if (modeCombobox.Text != "Sunset to sunrise") + { + modeCombobox.Click(); + var sunriseListItem = testBase.Session.Find(By.AccessibilityId("SunCBItem_LightSwitch"), 5000); + Assert.IsNotNull(sunriseListItem, "Sunrise combobox item not found."); + sunriseListItem.Click(); + } + + Assert.AreEqual("Sunset to sunrise", modeCombobox.Text, "Mode combobox should be set to Sunset to sunrise."); + + var setLocationButton = testBase.Session.Find(By.AccessibilityId("SetLocationButton_LightSwitch"), 5000); + Assert.IsNotNull(setLocationButton, "Set location button not found."); + setLocationButton.Click(); + + var autoSuggestTextbox = testBase.Session.Find(By.AccessibilityId("CitySearchBox_LightSwitch"), 5000); + Assert.IsNotNull(autoSuggestTextbox, "City search box not found."); + autoSuggestTextbox.Click(); + autoSuggestTextbox.SendKeys("Seattle"); + autoSuggestTextbox.SendKeys(OpenQA.Selenium.Keys.Down); + autoSuggestTextbox.SendKeys(OpenQA.Selenium.Keys.Enter); + + var latLong = testBase.Session.Find(By.AccessibilityId("LocationResultText_LightSwitch"), 5000); + Assert.IsFalse(string.IsNullOrWhiteSpace(latLong.Text)); + + var sunrise = testBase.Session.Find(By.AccessibilityId("SunriseText_LightSwitch"), 5000); + Assert.IsFalse(string.IsNullOrWhiteSpace(sunrise.Text)); + + var sunset = testBase.Session.Find(By.AccessibilityId("SunsetText_LightSwitch"), 5000); + Assert.IsFalse(string.IsNullOrWhiteSpace(sunset.Text)); + } + + /// + /// Perform a update geolocation test operation + /// + public static void PerformGeolocationTest(UITestBase testBase) + { + // Make sure in sun time mode + var modeCombobox = testBase.Session.Find(By.AccessibilityId("ModeSelection_LightSwitch"), 5000); + Assert.IsNotNull(modeCombobox, "Mode combobox not found."); + + if (modeCombobox.Text != "Sunset to sunrise") + { + modeCombobox.Click(); + var sunriseListItem = testBase.Session.Find(By.AccessibilityId("SunCBItem_LightSwitch"), 5000); + Assert.IsNotNull(sunriseListItem, "Sunrise combobox item not found."); + sunriseListItem.Click(); + } + + Assert.AreEqual("Sunset to sunrise", modeCombobox.Text, "Mode combobox should be set to Sunset to sunrise."); + + // Click the select city button + var setLocationButton = testBase.Session.Find(By.AccessibilityId("SetLocationButton_LightSwitch"), 5000); + Assert.IsNotNull(setLocationButton, "Set location button not found."); + setLocationButton.Click(); + + var syncLocationButton = testBase.Session.Find(By.AccessibilityId("SyncLocationButton_LightSwitch"), 5000); + Assert.IsNotNull(syncLocationButton, "Sync location button not found."); + syncLocationButton.Click(msPostAction: 8000); + + var latLong = testBase.Session.Find(By.AccessibilityId("LocationResultText_LightSwitch"), 5000); + Assert.IsFalse(string.IsNullOrWhiteSpace(latLong.Text)); + + var sunrise = testBase.Session.Find(By.AccessibilityId("SunriseText_LightSwitch"), 5000); + Assert.IsFalse(string.IsNullOrWhiteSpace(sunrise.Text)); + + var sunset = testBase.Session.Find(By.AccessibilityId("SunsetText_LightSwitch"), 5000); + Assert.IsFalse(string.IsNullOrWhiteSpace(sunset.Text)); + } + + /// + /// Perform a update time test operation + /// + public static void PerformOffsetTest(UITestBase testBase) + { + // Make sure in sun time mode + var modeCombobox = testBase.Session.Find(By.AccessibilityId("ModeSelection_LightSwitch"), 5000); + Assert.IsNotNull(modeCombobox, "Mode combobox not found."); + + if (modeCombobox.Text != "Sunset to sunrise") + { + modeCombobox.Click(); + var sunriseListItem = testBase.Session.Find(By.AccessibilityId("SunCBItem_LightSwitch"), 5000); + Assert.IsNotNull(sunriseListItem, "Sunrise combobox item not found."); + sunriseListItem.Click(); + } + + Assert.AreEqual("Sunset to sunrise", modeCombobox.Text, "Mode combobox should be set to Sunset to sunrise."); + + // Testing sunrise offset + var sunriseOffset = testBase.Session.Find(By.AccessibilityId("SunriseOffset_LightSwitch"), 5000); + Assert.IsNotNull(sunriseOffset, "Sunrise offset number box not found."); + + var timeline = testBase.Session.Find(By.AccessibilityId("Timeline_LightSwitch"), 5000); + Assert.IsNotNull(timeline, "Timeline not found."); + + var helpText = timeline.GetAttribute("HelpText"); + string originalStartValue = GetHelpTextValue(helpText, "Start"); + + sunriseOffset.Click(); + + helpText = timeline.GetAttribute("HelpText"); + string updatedStartValue = GetHelpTextValue(helpText, "Start"); + + Assert.AreNotEqual(originalStartValue, updatedStartValue, "Timeline start time should have been updated."); + + // Testing sunset offset + var sunsetOffset = testBase.Session.Find(By.AccessibilityId("SunsetOffset_LightSwitch"), 5000); + Assert.IsNotNull(sunsetOffset, "Sunrise offset number box not found."); + + helpText = timeline.GetAttribute("HelpText"); + string originalEndValue = GetHelpTextValue(helpText, "End"); + + sunsetOffset.Click(); + + helpText = timeline.GetAttribute("HelpText"); + string updatedEndValue = GetHelpTextValue(helpText, "End"); + + Assert.AreNotEqual(originalEndValue, updatedEndValue, "Timeline end time should have been updated."); + } + + /// + /// Perform a test for shortcut changing themes + /// + public static void PerformShortcutTest(UITestBase testBase, Key[] activationKeys) + { + // Test when both are checked + var systemCheckbox = testBase.Session.Find(By.AccessibilityId("ChangeSystemCheckbox_LightSwitch"), 5000); + Assert.IsNotNull(systemCheckbox, "System checkbox not found."); + + var scrollViewer = testBase.Session.Find(By.AccessibilityId("PageScrollViewer")); + systemCheckbox.EnsureVisible(scrollViewer); + + // How do I handle when something is off screen? + if (!systemCheckbox.Selected) + { + systemCheckbox.Click(); + } + + Assert.IsTrue(systemCheckbox.Selected, "System checkbox should be checked."); + + var appsCheckbox = testBase.Session.Find(By.AccessibilityId("ChangeAppsCheckbox_LightSwitch"), 5000); + Assert.IsNotNull(appsCheckbox, "Apps checkbox not found."); + + if (!appsCheckbox.Selected) + { + appsCheckbox.Click(); + } + + Assert.IsTrue(appsCheckbox.Selected, "Apps checkbox should be checked."); + + var systemBeforeValue = GetSystemTheme(); + var appsBeforeValue = GetAppsTheme(); + + testBase.Session.SendKeys(activationKeys); + Task.Delay(5000).Wait(); + + var systemAfterValue = GetSystemTheme(); + var appsAfterValue = GetAppsTheme(); + + Assert.AreNotEqual(systemBeforeValue, systemAfterValue, "System theme should have changed."); + Assert.AreNotEqual(appsBeforeValue, appsAfterValue, "Apps theme should have changed."); + + // Test with nothing checked + if (systemCheckbox.Selected) + { + systemCheckbox.Click(); + } + + if (appsCheckbox.Selected) + { + appsCheckbox.Click(); + } + + Assert.IsFalse(systemCheckbox.Selected, "System checkbox should be unchecked."); + Assert.IsFalse(appsCheckbox.Selected, "Apps checkbox should be unchecked."); + + var noneSystemBeforeValue = GetSystemTheme(); + var noneAppsBeforeValue = GetAppsTheme(); + + testBase.Session.SendKeys(activationKeys); + Task.Delay(5000).Wait(); + + var noneSystemAfterValue = GetSystemTheme(); + var noneAppsAfterValue = GetAppsTheme(); + + Assert.AreEqual(noneSystemBeforeValue, noneSystemAfterValue, "System theme should not have changed."); + Assert.AreEqual(noneAppsBeforeValue, noneAppsAfterValue, "Apps theme should not have changed."); + } + + /* Helpers */ + private static int GetSystemTheme() + { + using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"); + if (key is null) + { + return 1; + } + + return (int)key.GetValue("SystemUsesLightTheme", 1); + } + + private static int GetAppsTheme() + { + using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"); + if (key is null) + { + return 1; + } + + return (int)key.GetValue("AppsUseLightTheme", 1); + } + + private static string GetHelpTextValue(string helpText, string key) + { + foreach (var part in helpText.Split(';')) + { + var kv = part.Split('='); + if (kv.Length == 2 && kv[0] == key) + { + return kv[1]; + } + } + + return string.Empty; + } + } +} diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestOffset.cs b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestOffset.cs new file mode 100644 index 0000000000..e8ed9debf6 --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestOffset.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.PowerToys.UITest; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace LightSwitch.UITests +{ + [TestClass] + public class TestOffset : UITestBase + { + public TestOffset() + : base(PowerToysModule.PowerToysSettings, WindowSize.Large) + { + } + + [TestMethod("LightSwitch.Offset")] + [TestCategory("Time")] + public void TestTimeOffset() + { + TestHelper.InitializeTest(this, "offset test"); + TestHelper.PerformOffsetTest(this); + TestHelper.CleanupTest(this); + } + } +} diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestShortcut.cs b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestShortcut.cs new file mode 100644 index 0000000000..26e17c4612 --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestShortcut.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.PowerToys.UITest; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace LightSwitch.UITests +{ + [TestClass] + public class TestShortcut : UITestBase + { + public TestShortcut() + : base(PowerToysModule.PowerToysSettings, WindowSize.Large) + { + } + + [TestMethod("LightSwitch.TestShortcut")] + [TestCategory("Shortcut")] + public void TestLightSwitchShortcut() + { + var activationKeys = TestHelper.InitializeTest(this, "light switch shortcut test"); + TestHelper.PerformShortcutTest(this, activationKeys); + TestHelper.CleanupTest(this); + } + } +} diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUpdateManualTime.cs b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUpdateManualTime.cs new file mode 100644 index 0000000000..f92909657f --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUpdateManualTime.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.PowerToys.UITest; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace LightSwitch.UITests +{ + [TestClass] + public class TestUpdateManualTime : UITestBase + { + public TestUpdateManualTime() + : base(PowerToysModule.PowerToysSettings, WindowSize.Large) + { + } + + [TestMethod("LightSwitch.UpdateManualTime")] + [TestCategory("Time")] + public void TestUpdateTime() + { + TestHelper.InitializeTest(this, "update manual time test"); + TestHelper.PerformUpdateTimeTest(this); + TestHelper.CleanupTest(this); + } + } +} diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUserSelectedLocation.cs b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUserSelectedLocation.cs new file mode 100644 index 0000000000..924a04d9d9 --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/TestUserSelectedLocation.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.PowerToys.UITest; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace LightSwitch.UITests +{ + [TestClass] + public class TestUserSelectedLocation : UITestBase + { + public TestUserSelectedLocation() + : base(PowerToysModule.PowerToysSettings, WindowSize.Large) + { + } + + [TestMethod("LightSwitch.UserSelectedLocation")] + [TestCategory("Location")] + public void TestUserSelectedLocationUpdate() + { + TestHelper.InitializeTest(this, "user selected location test"); + TestHelper.PerformUserSelectedLocationTest(this); + TestHelper.CleanupTest(this); + } + } +} diff --git a/src/modules/LightSwitch/Tests/LightSwitch.UITests/app.manifest b/src/modules/LightSwitch/Tests/LightSwitch.UITests/app.manifest new file mode 100644 index 0000000000..0cec0ecb5e --- /dev/null +++ b/src/modules/LightSwitch/Tests/LightSwitch.UITests/app.manifest @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + PerMonitorV2 + + + \ No newline at end of file diff --git a/src/runner/main.cpp b/src/runner/main.cpp index cc8e6ca2b0..4b29149f78 100644 --- a/src/runner/main.cpp +++ b/src/runner/main.cpp @@ -177,6 +177,7 @@ int runner(bool isProcessElevated, bool openSettings, std::string settingsWindow L"PowerToys.WorkspacesModuleInterface.dll", L"PowerToys.CmdPalModuleInterface.dll", L"PowerToys.ZoomItModuleInterface.dll", + L"PowerToys.LightSwitchModuleInterface.dll", }; for (auto moduleSubdir : knownModules) diff --git a/src/runner/settings_window.cpp b/src/runner/settings_window.cpp index b3ced3b858..473fa7ebe3 100644 --- a/src/runner/settings_window.cpp +++ b/src/runner/settings_window.cpp @@ -757,6 +757,8 @@ std::string ESettingsWindowNames_to_string(ESettingsWindowNames value) return "ColorPicker"; case ESettingsWindowNames::CmdNotFound: return "CmdNotFound"; + case ESettingsWindowNames::LightSwitch: + return "LightSwitch"; case ESettingsWindowNames::FancyZones: return "FancyZones"; case ESettingsWindowNames::FileLocksmith: @@ -842,6 +844,10 @@ ESettingsWindowNames ESettingsWindowNames_from_string(std::string value) { return ESettingsWindowNames::CmdNotFound; } + else if (value == "LightSwitch") + { + return ESettingsWindowNames::LightSwitch; + } else if (value == "FancyZones") { return ESettingsWindowNames::FancyZones; diff --git a/src/runner/settings_window.h b/src/runner/settings_window.h index 611e24233e..e15108059f 100644 --- a/src/runner/settings_window.h +++ b/src/runner/settings_window.h @@ -10,6 +10,7 @@ enum class ESettingsWindowNames Awake, ColorPicker, CmdNotFound, + LightSwitch, FancyZones, FileLocksmith, Run, diff --git a/src/settings-ui/Settings.UI.Library/EnabledModules.cs b/src/settings-ui/Settings.UI.Library/EnabledModules.cs index 0e0556d442..977c03b839 100644 --- a/src/settings-ui/Settings.UI.Library/EnabledModules.cs +++ b/src/settings-ui/Settings.UI.Library/EnabledModules.cs @@ -513,6 +513,23 @@ namespace Microsoft.PowerToys.Settings.UI.Library } } + private bool lightSwitch; + + [JsonPropertyName("LightSwitch")] + public bool LightSwitch + { + get => lightSwitch; + set + { + if (lightSwitch != value) + { + LogTelemetryEvent(value); + lightSwitch = value; + NotifyChange(); + } + } + } + private void NotifyChange() { notifyEnabledChangedAction?.Invoke(); diff --git a/src/settings-ui/Settings.UI.Library/Helpers/SearchLocation.cs b/src/settings-ui/Settings.UI.Library/Helpers/SearchLocation.cs new file mode 100644 index 0000000000..8e357534af --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/Helpers/SearchLocation.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Settings.UI.Library.Helpers +{ + public class SearchLocation + { + public string City { get; set; } + + public string Country { get; set; } + + public double Latitude { get; set; } + + public double Longitude { get; set; } + + public SearchLocation(string city, string country, double latitude, double longitude) + { + City = city; + Country = country; + Latitude = latitude; + Longitude = longitude; + } + } +} diff --git a/src/settings-ui/Settings.UI.Library/Helpers/SearchLocationLoader.cs b/src/settings-ui/Settings.UI.Library/Helpers/SearchLocationLoader.cs new file mode 100644 index 0000000000..24f0846a02 --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/Helpers/SearchLocationLoader.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using Settings.UI.Library.Helpers; + +namespace Microsoft.PowerToys.Settings.UI.Helpers +{ + public static class SearchLocationLoader + { + private static readonly List LocationDataList = new List(); + + public static IEnumerable GetAll() + { + return LocationDataList + .GroupBy(l => $"{l.Country}|{l.City}|{l.Latitude.ToString(CultureInfo.InvariantCulture)}|{l.Longitude.ToString(CultureInfo.InvariantCulture)}") + .Select(g => g.First()) + .OrderBy(l => l.Country, StringComparer.OrdinalIgnoreCase) + .ThenBy(l => l.City, StringComparer.OrdinalIgnoreCase); + } + } +} diff --git a/src/settings-ui/Settings.UI.Library/Helpers/SunCalc.cs b/src/settings-ui/Settings.UI.Library/Helpers/SunCalc.cs new file mode 100644 index 0000000000..6b69fee755 --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/Helpers/SunCalc.cs @@ -0,0 +1,131 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; + +namespace Microsoft.PowerToys.Settings.UI.Library.Helpers +{ + public static class SunCalc + { + public static SunTimes CalculateSunriseSunset(double latitude, double longitude, int year, int month, int day) + { + double zenith = 90.833; // official sunrise/sunset + + int n1 = (int)Math.Floor(275.0 * month / 9.0); + int n2 = (int)Math.Floor((month + 9.0) / 12.0); + int n3 = (int)Math.Floor(1.0 + Math.Floor((year - (4.0 * Math.Floor(year / 4.0)) + 2.0) / 3.0)); + int n = n1 - (n2 * n3) + day - 30; + + double? riseUT = CalcTime(isSunrise: true); + double? setUT = CalcTime(isSunrise: false); + + var riseLocal = ToLocal(riseUT, year, month, day); + var setLocal = ToLocal(setUT, year, month, day); + + var result = new SunTimes + { + HasSunrise = riseLocal.HasValue, + HasSunset = setLocal.HasValue, + SunriseHour = riseLocal?.Hour ?? -1, + SunriseMinute = riseLocal?.Minute ?? -1, + SunsetHour = setLocal?.Hour ?? -1, + SunsetMinute = setLocal?.Minute ?? -1, + }; + + return result; + + // Local functions + double? CalcTime(bool isSunrise) + { + double lngHour = longitude / 15.0; + double t = isSunrise ? n + ((6 - lngHour) / 24.0) : n + ((18 - lngHour) / 24.0); + + double m1 = (0.9856 * t) - 3.289; + double l = m1 + (1.916 * Math.Sin(Deg2Rad(m1))) + (0.020 * Math.Sin(2 * Deg2Rad(m1))) + 282.634; + l = NormalizeDegrees(l); + + double rA = Rad2Deg(Math.Atan(0.91764 * Math.Tan(Deg2Rad(l)))); + rA = NormalizeDegrees(rA); + + double lquadrant = Math.Floor(l / 90.0) * 90.0; + double rAquadrant = Math.Floor(rA / 90.0) * 90.0; + rA = rA + (lquadrant - rAquadrant); + rA /= 15.0; + + double sinDec = 0.39782 * Math.Sin(Deg2Rad(l)); + double cosDec = Math.Cos(Math.Asin(sinDec)); + + double cosH = (Math.Cos(Deg2Rad(zenith)) - (sinDec * Math.Sin(Deg2Rad(latitude)))) + / (cosDec * Math.Cos(Deg2Rad(latitude))); + + if (cosH > 1.0 || cosH < -1.0) + { + // Sun never rises or never sets on this date at this location + return null; + } + + double h = isSunrise ? 360.0 - Rad2Deg(Math.Acos(cosH)) : Rad2Deg(Math.Acos(cosH)); + h /= 15.0; + + double t1 = h + rA - (0.06571 * t) - 6.622; + double uT = t1 - lngHour; + uT = NormalizeHours(uT); + + return uT; + } + + static (int Hour, int Minute)? ToLocal(double? ut, int y, int m, int d) + { + if (!ut.HasValue) + { + return null; + } + + // Convert fractional hours to hh:mm with proper rounding + int hours = (int)Math.Floor(ut.Value); + int minutes = (int)((ut.Value - hours) * 60.0); + + // Normalize minute overflow + if (minutes == 60) + { + minutes = 0; + hours = (hours + 1) % 24; + } + + // Build a UTC DateTime on the given date + var utc = new DateTime(y, m, d, hours, minutes, 0, DateTimeKind.Utc); + + // Convert to local time using system time zone rules for that date + var local = TimeZoneInfo.ConvertTimeFromUtc(utc, TimeZoneInfo.Local); + + return (local.Hour, local.Minute); + } + + static double Deg2Rad(double deg) => deg * Math.PI / 180.0; + static double Rad2Deg(double rad) => rad * 180.0 / Math.PI; + + static double NormalizeDegrees(double angle) + { + angle %= 360.0; + if (angle < 0) + { + angle += 360.0; + } + + return angle; + } + + static double NormalizeHours(double hours) + { + hours %= 24.0; + if (hours < 0) + { + hours += 24.0; + } + + return hours; + } + } + } +} diff --git a/src/settings-ui/Settings.UI.Library/Helpers/SunTimes.cs b/src/settings-ui/Settings.UI.Library/Helpers/SunTimes.cs new file mode 100644 index 0000000000..2f4f31fc57 --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/Helpers/SunTimes.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Microsoft.PowerToys.Settings.UI.Library.Helpers +{ + public struct SunTimes + { + public int SunriseHour; + public int SunriseMinute; + public int SunsetHour; + public int SunsetMinute; + public string Text; + + public bool HasSunrise; + public bool HasSunset; + } +} diff --git a/src/settings-ui/Settings.UI.Library/LightSwitchProperties.cs b/src/settings-ui/Settings.UI.Library/LightSwitchProperties.cs new file mode 100644 index 0000000000..a58022d4a6 --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/LightSwitchProperties.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Text.Json.Serialization; + +namespace Microsoft.PowerToys.Settings.UI.Library +{ + public class LightSwitchProperties + { + public const bool DefaultChangeSystem = true; + public const bool DefaultChangeApps = true; + public const int DefaultLightTime = 480; + public const int DefaultDarkTime = 1200; + public const int DefaultSunriseOffset = 0; + public const int DefaultSunsetOffset = 0; + public const string DefaultLatitude = "0.0"; + public const string DefaultLongitude = "0.0"; + public const string DefaultScheduleMode = "FixedHours"; + public static readonly HotkeySettings DefaultToggleThemeHotkey = new HotkeySettings(true, true, false, true, 0x44); // Ctrl+Win+Shift+D + + public LightSwitchProperties() + { + ChangeSystem = new BoolProperty(DefaultChangeSystem); + ChangeApps = new BoolProperty(DefaultChangeApps); + LightTime = new IntProperty(DefaultLightTime); + DarkTime = new IntProperty(DefaultDarkTime); + Latitude = new StringProperty(DefaultLatitude); + Longitude = new StringProperty(DefaultLongitude); + SunriseOffset = new IntProperty(DefaultSunriseOffset); + SunsetOffset = new IntProperty(DefaultSunsetOffset); + ScheduleMode = new StringProperty(DefaultScheduleMode); + ToggleThemeHotkey = new KeyboardKeysProperty(DefaultToggleThemeHotkey); + } + + [JsonPropertyName("changeSystem")] + public BoolProperty ChangeSystem { get; set; } + + [JsonPropertyName("changeApps")] + public BoolProperty ChangeApps { get; set; } + + [JsonPropertyName("lightTime")] + public IntProperty LightTime { get; set; } + + [JsonPropertyName("darkTime")] + public IntProperty DarkTime { get; set; } + + [JsonPropertyName("sunrise_offset")] + public IntProperty SunriseOffset { get; set; } + + [JsonPropertyName("sunset_offset")] + public IntProperty SunsetOffset { get; set; } + + [JsonPropertyName("latitude")] + public StringProperty Latitude { get; set; } + + [JsonPropertyName("longitude")] + public StringProperty Longitude { get; set; } + + [JsonPropertyName("scheduleMode")] + public StringProperty ScheduleMode { get; set; } + + [JsonPropertyName("toggle-theme-hotkey")] + public KeyboardKeysProperty ToggleThemeHotkey { get; set; } + } +} diff --git a/src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs b/src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs new file mode 100644 index 0000000000..3dac744762 --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/LightSwitchSettings.cs @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Reflection; +using System.Text.Json.Serialization; +using Microsoft.PowerToys.Settings.UI.Library; +using Microsoft.PowerToys.Settings.UI.Library.Interfaces; + +namespace Settings.UI.Library +{ + public class LightSwitchSettings : BasePTModuleSettings, ISettingsConfig, ICloneable + { + public const string ModuleName = "LightSwitch"; + + public LightSwitchSettings() + { + Name = ModuleName; + Version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); + Properties = new LightSwitchProperties(); + } + + [JsonPropertyName("properties")] + public LightSwitchProperties Properties { get; set; } + + public object Clone() + { + return new LightSwitchSettings() + { + Name = Name, + Version = Version, + Properties = new LightSwitchProperties() + { + ChangeSystem = new BoolProperty(Properties.ChangeSystem.Value), + ChangeApps = new BoolProperty(Properties.ChangeApps.Value), + ScheduleMode = new StringProperty(Properties.ScheduleMode.Value), + LightTime = new IntProperty((int)Properties.LightTime.Value), + DarkTime = new IntProperty((int)Properties.DarkTime.Value), + SunriseOffset = new IntProperty((int)Properties.SunriseOffset.Value), + SunsetOffset = new IntProperty((int)Properties.SunsetOffset.Value), + Latitude = new StringProperty(Properties.Latitude.Value), + Longitude = new StringProperty(Properties.Longitude.Value), + }, + }; + } + + public string GetModuleName() + { + return Name; + } + + public bool UpgradeSettingsConfiguration() + { + return false; + } + } +} diff --git a/src/settings-ui/Settings.UI.Library/SndLightSwitchSettings.cs b/src/settings-ui/Settings.UI.Library/SndLightSwitchSettings.cs new file mode 100644 index 0000000000..814ab5a6b1 --- /dev/null +++ b/src/settings-ui/Settings.UI.Library/SndLightSwitchSettings.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Text.Json; +using System.Text.Json.Serialization; +using Settings.UI.Library; + +namespace Microsoft.PowerToys.Settings.UI.Library +{ + public class SndLightSwitchSettings + { + [JsonPropertyName("LightSwitch")] + public LightSwitchSettings Settings { get; set; } + + public SndLightSwitchSettings() + { + } + + public SndLightSwitchSettings(LightSwitchSettings settings) + { + Settings = settings; + } + + public string ToJsonString() + { + return JsonSerializer.Serialize(this); + } + } +} diff --git a/src/settings-ui/Settings.UI/Assets/Settings/Icons/LightSwitch.png b/src/settings-ui/Settings.UI/Assets/Settings/Icons/LightSwitch.png new file mode 100644 index 0000000000000000000000000000000000000000..d4ce00c74a523f134b546d39db3e313bbb450146 GIT binary patch literal 1535 zcmV*@4+!j zv$!;eZ}-!WKf3g<0Hr_pFpUZaQCK1>oM}LTGPXmfjLWAUt^pP?1VQD%V;3)flF9rn zAkGSl)m}lnyKz5Zf(5BuFapBT9YJs^m|)7|KZ#va1Ga68xwW-5v0nmWQZr=}MGyMj z%b8pSp!B(O4)ct09CCyL-zvUYv+)mrc;_IV>FR>ckV!^nvv0EED3W_$tin@PV=%=mLp9zG1OzxFEZ+O->q zLEwJ=J}lo^f}CZJ|BVhj!uZj<5CW;ZP?!c zhYmHt&1@FDa+%9?np=8Pq-ybQUlqfzZk|qSx-;4KKg+qV^$)R~i(6 z_KiTWd{1LT1H91Nt0NN!FZA{GC5-fY=TkWER74TNRA&{9tY}Dko(HE+odi2>YZg@y zNM>a^P~gJ;`TWV}z&UV0jU_xI)@Lx&ctygGhO`b*ru>Cgu*28X)z(6Ld%INZ`Rl0& zZGEijH&x?W2ZNU8r{p+(<8fimW7N@pv(0+tD`6+rR{BSnOz!0xgE3#RQXTt+IKX-P^5vc{ITStJX;6Kl;RK|4F;qfIVX>_zP=vH=-B=V zITmA)fKlZ@=MV6eXzG27RZgNIc7WR`QX7ddI(uUpYHVA}=Z{@uLvu?j)L`CH{>E1$ zAezUoL{O)ca2Cxo8cZk$;j@YvSRM(};m#Wo(IgF-otcKeYJ2zX6G5SU6IkBD|5@DF z<7=w`qq}5AlmrEw=cqeNOF=0Ro%&$VKU&+MvGH*&FJK4+Gs$EUCMTyvDv(CATgVWb zz%|`G%$Yu=ZS3gZveX21i@_fc9>U_{g2=)|q#4N&S5o&#o#-kDMdTslrBVr|rlzz3 zXl~X(vcDDA2NtQ)zDtM7gPQllS%tk}8t~QE-(bjl+WFO6M4Lw=QO4gqI~NL@Fg`vG zzpt!FK)fngFl5gDFqu1k;@KV?aC{3$6od~zg5ZNB#G-JV)zwv4y?0NPg9wBAsHGv? zUrNOyY;0`63IZAVY*gkSWEJ0;v8(PSSzOInKP?w;;#Y#f_Kd89EdWb(SrDhs{b4S9 z3#?cSx-n~8Rt!wj3zApoM7^-n};J4n+X*_STtqE})u0MZ31T6iNc3`2wfg4JLu0P&VO^L7tv8%7O|Di6Yk)ICYR6+_}uP4o=` zzp3vp9v+d0POX#}1`(_iF~V}xVEtpRI}z5u<0U^ea5lx+LdA|MuEFgwoS%Z|tEhE; zR7Gl{$CgoRX2YOE6Rw-zu6IX3s=YZdaLk~@!SHRD{y^nEsZ3tvsW?b6Cf3M>+ve#q l774`Q=AhcDt=j&>_9wrj^}lW?twaC-002ovPDHLkV1njM&T#+$ literal 0 HcmV?d00001 diff --git a/src/settings-ui/Settings.UI/Assets/Settings/Modules/LightSwitch.png b/src/settings-ui/Settings.UI/Assets/Settings/Modules/LightSwitch.png new file mode 100644 index 0000000000000000000000000000000000000000..3a98b7f3e206c0b2e345364db53339ccbbc59fee GIT binary patch literal 41237 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

gFnKMMOBdp(+ew(j!9YUcceF{7a>79}GiBO{|4 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�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 B@B{z= literal 0 HcmV?d00001 diff --git a/src/settings-ui/Settings.UI/Assets/Settings/Modules/OOBE/LightSwitch.png b/src/settings-ui/Settings.UI/Assets/Settings/Modules/OOBE/LightSwitch.png new file mode 100644 index 0000000000000000000000000000000000000000..1532531a861c7749734a0b356c931cdde3d8e9ac GIT binary patch literal 233456 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

O>;c#swlHi3YU@)N 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

qWEe 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 z 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 new NotImplementedException(); +} diff --git a/src/settings-ui/Settings.UI/Helpers/ModuleHelper.cs b/src/settings-ui/Settings.UI/Helpers/ModuleHelper.cs index f21ca2bfac..b33ac264ed 100644 --- a/src/settings-ui/Settings.UI/Helpers/ModuleHelper.cs +++ b/src/settings-ui/Settings.UI/Helpers/ModuleHelper.cs @@ -52,6 +52,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers case ModuleType.CmdPal: return generalSettingsConfig.Enabled.CmdPal; case ModuleType.ColorPicker: return generalSettingsConfig.Enabled.ColorPicker; case ModuleType.CropAndLock: return generalSettingsConfig.Enabled.CropAndLock; + case ModuleType.LightSwitch: return generalSettingsConfig.Enabled.LightSwitch; case ModuleType.EnvironmentVariables: return generalSettingsConfig.Enabled.EnvironmentVariables; case ModuleType.FancyZones: return generalSettingsConfig.Enabled.FancyZones; case ModuleType.FileLocksmith: return generalSettingsConfig.Enabled.FileLocksmith; @@ -88,6 +89,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers case ModuleType.CmdPal: generalSettingsConfig.Enabled.CmdPal = isEnabled; break; case ModuleType.ColorPicker: generalSettingsConfig.Enabled.ColorPicker = isEnabled; break; case ModuleType.CropAndLock: generalSettingsConfig.Enabled.CropAndLock = isEnabled; break; + case ModuleType.LightSwitch: generalSettingsConfig.Enabled.LightSwitch = isEnabled; break; case ModuleType.EnvironmentVariables: generalSettingsConfig.Enabled.EnvironmentVariables = isEnabled; break; case ModuleType.FancyZones: generalSettingsConfig.Enabled.FancyZones = isEnabled; break; case ModuleType.FileLocksmith: generalSettingsConfig.Enabled.FileLocksmith = isEnabled; break; @@ -159,6 +161,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers ModuleType.CmdPal => typeof(CmdPalPage), ModuleType.ColorPicker => typeof(ColorPickerPage), ModuleType.CropAndLock => typeof(CropAndLockPage), + ModuleType.LightSwitch => typeof(LightSwitchPage), ModuleType.EnvironmentVariables => typeof(EnvironmentVariablesPage), ModuleType.FancyZones => typeof(FancyZonesPage), ModuleType.FileLocksmith => typeof(FileLocksmithPage), diff --git a/src/settings-ui/Settings.UI/Helpers/TimeSpanHelper.cs b/src/settings-ui/Settings.UI/Helpers/TimeSpanHelper.cs new file mode 100644 index 0000000000..95308ec67e --- /dev/null +++ b/src/settings-ui/Settings.UI/Helpers/TimeSpanHelper.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Microsoft.PowerToys.Settings.UI.Helpers; + +public static class TimeSpanHelper +{ + public static string Convert(TimeSpan? time) + { + if (time is not TimeSpan ts) + { + return string.Empty; + } + + // If user passed in a negative TimeSpan, normalize + if (ts < TimeSpan.Zero) + { + ts = ts.Duration(); + } + + // Map the TimeSpan to a DateTime on today's date + var dt = DateTime.Today.Add(ts); + + // This pattern automatically respects system 12/24-hour setting + string pattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern; + + return dt.ToString(pattern, CultureInfo.CurrentCulture); + } +} diff --git a/src/settings-ui/Settings.UI/OOBE/Enums/PowerToysModules.cs b/src/settings-ui/Settings.UI/OOBE/Enums/PowerToysModules.cs index fbf689b9de..fd684168b0 100644 --- a/src/settings-ui/Settings.UI/OOBE/Enums/PowerToysModules.cs +++ b/src/settings-ui/Settings.UI/OOBE/Enums/PowerToysModules.cs @@ -20,6 +20,7 @@ namespace Microsoft.PowerToys.Settings.UI.OOBE.Enums FileExplorer, ImageResizer, KBM, + LightSwitch, MouseUtils, MouseWithoutBorders, Peek, diff --git a/src/settings-ui/Settings.UI/PowerToys.Settings.csproj b/src/settings-ui/Settings.UI/PowerToys.Settings.csproj index eac4332e27..dd70af7533 100644 --- a/src/settings-ui/Settings.UI/PowerToys.Settings.csproj +++ b/src/settings-ui/Settings.UI/PowerToys.Settings.csproj @@ -22,6 +22,7 @@ + @@ -156,7 +157,9 @@ Always - + + + MSBuild:Compile MSBuild:Compile @@ -170,6 +173,12 @@ MSBuild:Compile + + MSBuild:Compile + + + MSBuild:Compile + diff --git a/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs b/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs index 8a25055620..838149a04e 100644 --- a/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs +++ b/src/settings-ui/Settings.UI/SerializationContext/SourceGenerationContextContext.cs @@ -10,6 +10,7 @@ using System.Text.Json.Serialization; using System.Threading.Tasks; using Microsoft.PowerToys.Settings.UI.Helpers; using Microsoft.PowerToys.Settings.UI.Library; +using Settings.UI.Library; namespace Microsoft.PowerToys.Settings.UI.SerializationContext; @@ -22,6 +23,7 @@ namespace Microsoft.PowerToys.Settings.UI.SerializationContext; [JsonSerializable(typeof(FileLocksmithSettings))] [JsonSerializable(typeof(FindMyMouseSettings))] [JsonSerializable(typeof(IList))] +[JsonSerializable(typeof(LightSwitchSettings))] [JsonSerializable(typeof(MeasureToolSettings))] [JsonSerializable(typeof(MouseHighlighterSettings))] [JsonSerializable(typeof(MouseJumpSettings))] diff --git a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml index d4a95313d0..f63ccdf3a6 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml @@ -17,6 +17,7 @@ + diff --git a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs index d5bd0977e1..19cd75b022 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs +++ b/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs @@ -417,6 +417,7 @@ namespace Microsoft.PowerToys.Settings.UI case "Awake": return typeof(AwakePage); case "CmdNotFound": return typeof(CmdNotFoundPage); case "ColorPicker": return typeof(ColorPickerPage); + case "LightSwitch": return typeof(LightSwitchPage); case "FancyZones": return typeof(FancyZonesPage); case "FileLocksmith": return typeof(FileLocksmithPage); case "Run": return typeof(PowerLauncherPage); diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Controls/SettingsPageControl/SettingsPageControl.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Controls/SettingsPageControl/SettingsPageControl.xaml index 7e47cf6a97..e60c8ad400 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Controls/SettingsPageControl/SettingsPageControl.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Controls/SettingsPageControl/SettingsPageControl.xaml @@ -28,7 +28,7 @@ Style="{StaticResource TitleTextBlockStyle}" Text="{x:Bind ModuleTitle}" /> - + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/Timeline.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/Timeline.xaml.cs new file mode 100644 index 0000000000..189556ee84 --- /dev/null +++ b/src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/Timeline.xaml.cs @@ -0,0 +1,658 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Globalization; +using Microsoft.PowerToys.Settings.UI.Helpers; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Automation; +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Shapes; +using Windows.Foundation; + +namespace Microsoft.PowerToys.Settings.UI.Controls +{ + public sealed partial class Timeline : UserControl + { + public TimeSpan StartTime + { + get => (TimeSpan)GetValue(StartTimeProperty); + set => SetValue(StartTimeProperty, value); + } + + public static readonly DependencyProperty StartTimeProperty = DependencyProperty.Register(nameof(StartTime), typeof(TimeSpan), typeof(Timeline), new PropertyMetadata(defaultValue: new TimeSpan(22, 0, 0), OnTimeChanged)); + + public TimeSpan EndTime + { + get => (TimeSpan)GetValue(EndTimeProperty); + set => SetValue(EndTimeProperty, value); + } + + public static readonly DependencyProperty EndTimeProperty = DependencyProperty.Register(nameof(EndTime), typeof(TimeSpan), typeof(Timeline), new PropertyMetadata(defaultValue: new TimeSpan(7, 0, 0), OnTimeChanged)); + + public TimeSpan? Sunrise + { + get => (TimeSpan?)GetValue(SunriseProperty); + set => SetValue(SunriseProperty, value); + } + + public static readonly DependencyProperty SunriseProperty = DependencyProperty.Register(nameof(Sunrise), typeof(TimeSpan), typeof(Timeline), new PropertyMetadata(defaultValue: null, OnTimeChanged)); + + public TimeSpan? Sunset + { + get => (TimeSpan?)GetValue(SunsetProperty); + set => SetValue(SunsetProperty, value); + } + + public static readonly DependencyProperty SunsetProperty = DependencyProperty.Register(nameof(Sunset), typeof(TimeSpan), typeof(Timeline), new PropertyMetadata(defaultValue: null, OnTimeChanged)); + + private readonly List _tickHours = new(); + + // Locale 24h/12h + private readonly bool _is24h = CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern.Contains('H'); + + // Visuals + private readonly List _ticks = new(); + private readonly List _majorTickBottomLabels = new(); // 00,06,12,18,24 (below) + + private readonly List _darkRects = new(); // up to 2 (wrap) + private readonly List _lightRects = new(); // up to 2 (complement) + + private TextBlock _startEdgeLabel; // top-of-chart + private TextBlock _endEdgeLabel; + + private Line _sunriseTick; + private Line _sunsetTick; + + // Add/replace these constants (top of your class) + private const int TickHourStep = 2; // <-- every 2 hours + + private StackPanel _sunrisePanel; // icon + time (below chart) + private StackPanel _sunsetPanel; + + public Timeline() + { + this.InitializeComponent(); + this.Loaded += Timeline_Loaded; + this.IsEnabledChanged += Timeline_IsEnabledChanged; + } + + private void Timeline_Loaded(object sender, RoutedEventArgs e) + { + CheckEnabledState(); + } + + private void Timeline_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e) + { + CheckEnabledState(); + } + + private void CheckEnabledState() + { + if (IsEnabled) + { + this.Opacity = 1.0; + } + else + { + this.Opacity = 0.4; + } + } + + private static void OnTimeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + ((Timeline)d).Setup(); + } + + private void Setup() + { + EnsureBands(); + EnsureTicks(); + EnsureStartEndEdgeLabels(); + EnsureSunriseSunsetTicks(); + EnsureSunPanels(); + EnsureMajorTickLabels(); + UpdateAll(); + } + + private void TimelineCanvas_Loaded(object sender, RoutedEventArgs e) + { + // SizeChanged wiring here (as requested) + HeaderCanvas.SizeChanged += (_, __) => UpdateAll(); + TimelineCanvas.SizeChanged += (_, __) => UpdateAll(); + AnnotationCanvas.SizeChanged += (_, __) => UpdateAll(); + Setup(); + } + + private void UpdateAll() + { + UpdateBandsLayout(); + UpdateTicksLayout(); + UpdateStartEndEdgeLabelsLayout(); + UpdateSunriseSunsetTicksLayout(); + UpdateSunPanelsLayout(); + UpdateMajorTickLabelsLayout(); + AutomationProperties.SetHelpText( + this, + $"Start={StartTime};End={EndTime};Sunrise={Sunrise};Sunset={Sunset}"); + } + + // ===== Ticks ===== + private void EnsureTicks() + { + if (_ticks.Count > 0) + { + return; + } + + _tickHours.Clear(); + + // Build ticks at 0,2,4,...,24 but skip the first/last MAJOR ticks (0 and 24) + for (int hour = 0; hour <= 24; hour += TickHourStep) + { + bool isMajor = hour % 6 == 0; + if (isMajor && (hour == 0 || hour == 24)) + { + continue; // skip first/last major ticks + } + + var line = new Line + { + Style = (Style)Application.Current.Resources[isMajor ? "MajorHourTickStyle" : "HourTickStyle"], + }; + + Canvas.SetZIndex(line, 0); // above bands (adjust if needed) + + _ticks.Add(line); + _tickHours.Add(hour); + + // If you actually want these IN the chart, use TimelineCanvas instead: + AnnotationCanvas.Children.Add(line); // or TimelineCanvas.Children.Add(line); + } + } + + private void UpdateTicksLayout() + { + double w = TimelineCanvas.ActualWidth; + double h = TimelineCanvas.ActualHeight; // keeping your offset + if (w <= 0 || h <= 0) + { + return; + } + + double minorLen = h * 0.1; + double majorLen = h * 0.2; + + for (int i = 0; i < _ticks.Count; i++) + { + int hour = _tickHours[i]; + double x = Math.Round((hour / 24.0) * w); + + var line = _ticks[i]; + double len = (hour % 6 == 0) ? majorLen : minorLen; + + line.X1 = x; + line.Y1 = 0; + line.X2 = x; + line.Y2 = len; + } + } + + // ===== Bands (Dark + Light) ===== + private void EnsureBands() + { + if (_darkRects.Count == 0) + { + _darkRects.Add(MakeBandRect(isDark: false)); + _darkRects.Add(MakeBandRect(isDark: false)); + } + + if (_lightRects.Count == 0) + { + _lightRects.Add(MakeBandRect(isDark: true)); + _lightRects.Add(MakeBandRect(isDark: true)); + } + } + + private Border MakeBandRect(bool isDark) + { + var r = new Border(); + if (isDark) + { + r.Style = (Style)Application.Current.Resources["DarkBandStyle"]; + FontIcon icon = new FontIcon(); + icon.Style = (Style)Application.Current.Resources["DarkBandIconStyle"]; + r.Child = icon; + } + else + { + r.Style = (Style)Application.Current.Resources["LightBandStyle"]; + } + + Canvas.SetZIndex(r, 5); // below ticks/labels + TimelineCanvas.Children.Add(r); + return r; + } + + private void UpdateBandsLayout() + { + double w = TimelineCanvas.ActualWidth; + double h = TimelineCanvas.ActualHeight; + if (w <= 0 || h <= 0) + { + return; + } + + foreach (var r in _darkRects) + { + r.Height = h; + Canvas.SetTop(r, 0); + } + + foreach (var r in _lightRects) + { + r.Height = h; + Canvas.SetTop(r, 0); + } + + var darkRanges = ToRanges(StartTime, EndTime); // 1 or 2 segments + var lightRanges = ComplementRanges(darkRanges); // 0..2 + + LayoutRangeRects(_darkRects, darkRanges, w); + LayoutRangeRects(_lightRects, lightRanges, w); + } + + private static void LayoutRangeRects(List rects, List<(TimeSpan Start, TimeSpan End)> ranges, double width) + { + for (int i = 0; i < rects.Count; i++) + { + if (i < ranges.Count) + { + var (start, end) = ranges[i]; + double x = Math.Round((start.TotalHours / 24.0) * width); + double x2 = Math.Round((end.TotalHours / 24.0) * width); + + var r = rects[i]; + Canvas.SetLeft(r, x); + r.Width = Math.Max(0, x2 - x); + r.Visibility = Visibility.Visible; + } + else + { + rects[i].Visibility = Visibility.Collapsed; + } + } + } + + private static List<(TimeSpan Start, TimeSpan End)> ToRanges(TimeSpan start, TimeSpan end) + { + // Full day + if (start == end) + { + return new() { (TimeSpan.Zero, TimeSpan.FromHours(24)) }; + } + + if (start < end) + { + return new() { (start, end) }; + } + + // Wraps midnight + return new() + { + (start, TimeSpan.FromHours(24)), + (TimeSpan.Zero, end), + }; + } + + private static List<(TimeSpan Start, TimeSpan End)> ComplementRanges(List<(TimeSpan Start, TimeSpan End)> dark) + { + var res = new List<(TimeSpan, TimeSpan)>(); + + // If dark covers the full day, there is no light + if (dark.Count == 1 && dark[0].Start == TimeSpan.Zero && dark[0].End == TimeSpan.FromHours(24)) + { + return res; + } + + if (dark.Count == 1) + { + var (ds, de) = dark[0]; + if (ds > TimeSpan.Zero) + { + res.Add((TimeSpan.Zero, ds)); + } + + if (de < TimeSpan.FromHours(24)) + { + res.Add((de, TimeSpan.FromHours(24))); + } + } + else + { + // dark[0] = [a,24), dark[1] = [0,b) => single light [b,a) + var a = dark[0].Start; + var b = dark[1].End; + res.Add((b, a)); + } + + return res; + } + + // ===== Start & End labels (TOP of chart, ABOVE rectangles) ===== + private void EnsureStartEndEdgeLabels() + { + if (_startEdgeLabel == null) + { + _startEdgeLabel = new TextBlock { Style = (Style)Application.Current.Resources["EdgeLabelStyle"] }; + HeaderCanvas.Children.Add(_startEdgeLabel); + Canvas.SetZIndex(_startEdgeLabel, 25); + } + + if (_endEdgeLabel == null) + { + _endEdgeLabel = new TextBlock { Style = (Style)Application.Current.Resources["EdgeLabelStyle"] }; + HeaderCanvas.Children.Add(_endEdgeLabel); + Canvas.SetZIndex(_endEdgeLabel, 25); + } + } + + private void UpdateStartEndEdgeLabelsLayout() + { + double w = TimelineCanvas.ActualWidth; + if (w <= 0) + { + return; + } + + _startEdgeLabel.Text = TimeSpanHelper.Convert(StartTime); + _endEdgeLabel.Text = TimeSpanHelper.Convert(EndTime); + + PlaceTopLabelAtTime(_startEdgeLabel, StartTime, w); + PlaceTopLabelAtTime(_endEdgeLabel, EndTime, w); + } + + private void PlaceTopLabelAtTime(TextBlock tb, TimeSpan t, double timelineWidth) + { + double x = Math.Round((t.TotalHours / 24.0) * timelineWidth); + double textW = MeasureTextWidth(tb); + double desiredLeft = x - (textW / 2.0); + + Canvas.SetLeft(tb, Clamp(desiredLeft, 0, timelineWidth - textW)); + Canvas.SetTop(tb, 0); + tb.Visibility = Visibility.Visible; + } + + // ===== Sunrise/Sunset ticks on chart ===== + private void EnsureSunriseSunsetTicks() + { + if (_sunriseTick == null) + { + _sunriseTick = new Line { Style = (Style)Application.Current.Resources["SunRiseMarkerTickStyle"] }; + TimelineCanvas.Children.Add(_sunriseTick); + Canvas.SetZIndex(_sunriseTick, 12); + } + + if (_sunsetTick == null) + { + _sunsetTick = new Line { Style = (Style)Application.Current.Resources["SunSetMarkerTickStyle"] }; + TimelineCanvas.Children.Add(_sunsetTick); + Canvas.SetZIndex(_sunsetTick, 12); + } + } + + private void UpdateSunriseSunsetTicksLayout() + { + double w = TimelineCanvas.ActualWidth; + double h = TimelineCanvas.ActualHeight + 24; + if (w <= 0 || h <= 0) + { + return; + } + + void Place(Line tick, TimeSpan t) + { + double x = Math.Round((t.TotalHours / 24.0) * w); + tick.X1 = x; + tick.X2 = x; + tick.Y1 = 0; + tick.Y2 = h; + } + + if (_sunriseTick != null) + { + if (Sunrise.HasValue) + { + Place(_sunriseTick, Sunrise.Value); + _sunriseTick.Visibility = Visibility.Visible; + } + else + { + _sunriseTick.Visibility = Visibility.Collapsed; + } + } + + if (_sunsetTick != null) + { + if (Sunset.HasValue) + { + Place(_sunsetTick, Sunset.Value); + _sunsetTick.Visibility = Visibility.Visible; + } + else + { + _sunsetTick.Visibility = Visibility.Collapsed; + } + } + } + + // ===== Sunrise/Sunset panels (below chart) ===== + private void EnsureSunPanels() + { + if (_sunrisePanel == null) + { + _sunrisePanel = MakeSunPanel("\uEC8A"); + AnnotationCanvas.Children.Add(_sunrisePanel); + } + + if (_sunsetPanel == null) + { + _sunsetPanel = MakeSunPanel("\uED3A"); + AnnotationCanvas.Children.Add(_sunsetPanel); + } + } + + private StackPanel MakeSunPanel(string iconEmoji) + { + var icon = new FontIcon { Glyph = iconEmoji, Style = (Style)Application.Current.Resources["SunIconStyle"] }; + var sp = new StackPanel { Orientation = Orientation.Vertical, Spacing = 2 }; + sp.Children.Add(icon); + return sp; + } + + private void UpdateSunPanelsLayout() + { + double timelineW = TimelineCanvas.ActualWidth; + double annotationW = AnnotationCanvas.ActualWidth; + if (annotationW <= 0) + { + annotationW = timelineW; + } + + if (timelineW <= 0 || annotationW <= 0) + { + return; + } + + void Place(StackPanel sp, TimeSpan t) + { + double panelW = MeasureElementWidth(sp); + double xTimeline = Math.Round((t.TotalHours / 24.0) * timelineW); + double left = Clamp(xTimeline - (panelW / 2.0), 0, annotationW - panelW); + Canvas.SetLeft(sp, left); + Canvas.SetTop(sp, 8); + } + + if (_sunrisePanel != null) + { + if (Sunrise.HasValue) + { + ToolTipService.SetToolTip(_sunrisePanel, $"Sunrise: {TimeSpanHelper.Convert(Sunrise.Value)}"); + _sunrisePanel.Visibility = Visibility.Visible; + Place(_sunrisePanel, Sunrise.Value); + } + else + { + ToolTipService.SetToolTip(_sunrisePanel, null); + _sunrisePanel.Visibility = Visibility.Collapsed; + } + } + + if (_sunsetPanel != null) + { + if (Sunset.HasValue) + { + ToolTipService.SetToolTip(_sunsetPanel, $"Sunset: {TimeSpanHelper.Convert(Sunset.Value)}"); + _sunsetPanel.Visibility = Visibility.Visible; + Place(_sunsetPanel, Sunset.Value); + } + else + { + ToolTipService.SetToolTip(_sunsetPanel, null); + _sunsetPanel.Visibility = Visibility.Collapsed; + } + } + } + + // ===== Major labels BELOW chart (00,06,12,18,24) ===== + private void EnsureMajorTickLabels() + { + if (_majorTickBottomLabels.Count > 0) + { + return; + } + + // Includes 24:00 at end + for (int i = 0; i < 5; i++) + { + var tb = new TextBlock { Style = (Style)Application.Current.Resources["MajorTickLabelStyle"] }; + Canvas.SetZIndex(tb, 5); // on annotation canvas + _majorTickBottomLabels.Add(tb); + AnnotationCanvas.Children.Add(tb); + } + } + + private void UpdateMajorTickLabelsLayout() + { + double timelineW = TimelineCanvas.ActualWidth; + double annotationW = AnnotationCanvas.ActualWidth; + if (annotationW <= 0) + { + annotationW = timelineW; + } + + if (timelineW <= 0 || annotationW <= 0) + { + return; + } + + int[] hours = { 0, 6, 12, 18, 24 }; + + // 1) Place labels first + for (int i = 0; i < hours.Length; i++) + { + var tb = _majorTickBottomLabels[i]; + var t = TimeSpan.FromHours(hours[i]); + tb.Text = TimeSpanHelper.Convert(t); + + double xTimeline = Math.Round((t.TotalHours / 24.0) * timelineW); + double textW = MeasureTextWidth(tb); + double left = xTimeline - (textW / 2.0); + + // Middle ones (06, 12) exact center; edges clamp inside canvas + if (i == 1 || i == 2) + { + Canvas.SetLeft(tb, left); + } + else + { + Canvas.SetLeft(tb, Clamp(left, 0, annotationW - textW)); + } + + Canvas.SetTop(tb, 8); // your existing baseline below chart + tb.Visibility = Visibility.Visible; + } + + // 2) Compute sunrise/sunset occupied horizontal ranges (if present) + (double Left, double Right)? sunriseBounds = null; + (double Left, double Right)? sunsetBounds = null; + + if (Sunrise.HasValue && _sunrisePanel != null) + { + sunriseBounds = GetAnnotationBoundsForTime(Sunrise.Value, timelineW, annotationW, _sunrisePanel); + } + + if (Sunset.HasValue && _sunsetPanel != null) + { + sunsetBounds = GetAnnotationBoundsForTime(Sunset.Value, timelineW, annotationW, _sunsetPanel); + } + + // 3) Hide any label that intersects the sunrise/sunset panel bounds + for (int i = 0; i < hours.Length; i++) + { + var tb = _majorTickBottomLabels[i]; + if (tb.Visibility != Visibility.Visible) + { + continue; + } + + var lbl = GetLabelBounds(tb); + + bool hide = + (sunriseBounds.HasValue && Intersects(lbl, sunriseBounds.Value)) || + (sunsetBounds.HasValue && Intersects(lbl, sunsetBounds.Value)); // include sunset too; remove if you only want sunrise + + tb.Visibility = hide ? Visibility.Collapsed : Visibility.Visible; + } + } + + // ===== Utilities ===== + private static double Clamp(double v, double min, double max) => Math.Max(min, Math.Min(max, v)); + + private static double MeasureElementWidth(FrameworkElement el) + { + el.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); + return el.DesiredSize.Width; + } + + private static double MeasureTextWidth(TextBlock tb) + { + tb.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); + return tb.DesiredSize.Width; + } + + private static bool Intersects((double Left, double Right) a, (double Left, double Right) b, double pad = 4) + { + // Horizontal overlap with padding + return !(a.Right + pad <= b.Left || b.Right + pad <= a.Left); + } + + private (double Left, double Right) GetAnnotationBoundsForTime(TimeSpan t, double timelineW, double annotationW, FrameworkElement element) + { + // Compute the *actual* left/right the panel will occupy in AnnotationCanvas + double panelW = MeasureElementWidth(element); + double xTimeline = Math.Round((t.TotalHours / 24.0) * timelineW); + double left = Clamp(xTimeline - (panelW / 2.0), 0, annotationW - panelW); + return (left, left + panelW); + } + + private (double Left, double Right) GetLabelBounds(TextBlock tb) + { + double w = MeasureTextWidth(tb); + double left = Canvas.GetLeft(tb); + return (left, left + w); + } + } +} diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/TimelineStyles.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/TimelineStyles.xaml new file mode 100644 index 0000000000..82acf66ef5 --- /dev/null +++ b/src/settings-ui/Settings.UI/SettingsXAML/Controls/Timeline/TimelineStyles.xaml @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeLightSwitch.xaml b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeLightSwitch.xaml new file mode 100644 index 0000000000..b1f4c3f6fc --- /dev/null +++ b/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeLightSwitch.xaml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs b/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs new file mode 100644 index 0000000000..a3c8486b8f --- /dev/null +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/LightSwitchPage.xaml.cs @@ -0,0 +1,324 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Globalization; +using System.IO; +using System.IO.Abstractions; +using System.Linq; +using System.Threading.Tasks; +using ManagedCommon; +using Microsoft.PowerToys.Settings.UI.Helpers; +using Microsoft.PowerToys.Settings.UI.Library; +using Microsoft.PowerToys.Settings.UI.Library.Helpers; +using Microsoft.PowerToys.Settings.UI.Library.Interfaces; +using Microsoft.PowerToys.Settings.UI.ViewModels; +using Microsoft.UI.Dispatching; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using PowerToys.GPOWrapper; +using Settings.UI.Library; +using Settings.UI.Library.Helpers; +using Windows.Devices.Geolocation; +using Windows.Services.Maps; + +namespace Microsoft.PowerToys.Settings.UI.Views +{ + public sealed partial class LightSwitchPage : Page + { + private readonly string _appName = "LightSwitch"; + private readonly SettingsUtils _settingsUtils; + private readonly Func _sendConfigMsg = ShellPage.SendDefaultIPCMessage; + + private readonly ISettingsRepository _generalSettingsRepository; + private readonly ISettingsRepository _moduleSettingsRepository; + + private readonly IFileSystem _fileSystem; + private readonly IFileSystemWatcher _fileSystemWatcher; + private readonly DispatcherQueue _dispatcherQueue; + + private LightSwitchViewModel ViewModel { get; set; } + + public LightSwitchPage() + { + _settingsUtils = new SettingsUtils(); + _sendConfigMsg = ShellPage.SendDefaultIPCMessage; + + _generalSettingsRepository = SettingsRepository.GetInstance(_settingsUtils); + _moduleSettingsRepository = SettingsRepository.GetInstance(_settingsUtils); + + // Get settings from JSON (or defaults if JSON missing) + var darkSettings = _moduleSettingsRepository.SettingsConfig; + + // Pass them into the ViewModel + ViewModel = new LightSwitchViewModel(darkSettings, ShellPage.SendDefaultIPCMessage); + ViewModel.PropertyChanged += ViewModel_PropertyChanged; + + LoadSettings(_generalSettingsRepository, _moduleSettingsRepository); + + DataContext = ViewModel; + + var settingsPath = _settingsUtils.GetSettingsFilePath(_appName); + + _dispatcherQueue = DispatcherQueue.GetForCurrentThread(); + _fileSystem = new FileSystem(); + + _fileSystemWatcher = _fileSystem.FileSystemWatcher.New(); + _fileSystemWatcher.Path = _fileSystem.Path.GetDirectoryName(settingsPath); + _fileSystemWatcher.Filter = _fileSystem.Path.GetFileName(settingsPath); + _fileSystemWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.CreationTime; + _fileSystemWatcher.Changed += Settings_Changed; + _fileSystemWatcher.EnableRaisingEvents = true; + + this.InitializeComponent(); + this.Loaded += LightSwitchPage_Loaded; + } + + private void LightSwitchPage_Loaded(object sender, RoutedEventArgs e) + { + if (ViewModel.SearchLocations.Count == 0) + { + foreach (var city in SearchLocationLoader.GetAll()) + { + ViewModel.SearchLocations.Add(city); + } + } + + ViewModel.InitializeScheduleMode(); + } + + private async Task GetGeoLocation() + { + SyncButton.IsEnabled = false; + SyncLoader.IsActive = true; + SyncLoader.Visibility = Visibility.Visible; + + try + { + // Request access + var accessStatus = await Geolocator.RequestAccessAsync(); + if (accessStatus != GeolocationAccessStatus.Allowed) + { + // User denied location or it's not available + return; + } + + var geolocator = new Geolocator { DesiredAccuracy = PositionAccuracy.Default }; + + Geoposition pos = await geolocator.GetGeopositionAsync(); + + double latitude = Math.Round(pos.Coordinate.Point.Position.Latitude); + double longitude = Math.Round(pos.Coordinate.Point.Position.Longitude); + + SunTimes result = SunCalc.CalculateSunriseSunset( + latitude, + longitude, + DateTime.Now.Year, + DateTime.Now.Month, + DateTime.Now.Day); + + ViewModel.LightTime = (result.SunriseHour * 60) + result.SunriseMinute; + ViewModel.DarkTime = (result.SunsetHour * 60) + result.SunsetMinute; + ViewModel.Latitude = latitude.ToString(CultureInfo.InvariantCulture); + ViewModel.Longitude = longitude.ToString(CultureInfo.InvariantCulture); + + // Since we use this mode, we can remove the selected city data. + ViewModel.SelectedCity = null; + + // CityAutoSuggestBox.Text = string.Empty; + ViewModel.SyncButtonInformation = $"{ViewModel.Latitude}°, {ViewModel.Longitude}°"; + + // ViewModel.CityTimesText = $"Sunrise: {result.SunriseHour}:{result.SunriseMinute:D2}\n" + $"Sunset: {result.SunsetHour}:{result.SunsetMinute:D2}"; + SyncButton.IsEnabled = true; + SyncLoader.IsActive = false; + SyncLoader.Visibility = Visibility.Collapsed; + LocationDialog.IsPrimaryButtonEnabled = true; + LocationResultPanel.Visibility = Visibility.Visible; + } + catch (Exception ex) + { + SyncButton.IsEnabled = true; + SyncLoader.IsActive = false; + System.Diagnostics.Debug.WriteLine("Location error: " + ex.Message); + } + } + + private void LocationDialog_PrimaryButtonClick(object sender, ContentDialogButtonClickEventArgs args) + { + if (ViewModel.ScheduleMode == "SunriseToSunsetUser") + { + ViewModel.SyncButtonInformation = ViewModel.SelectedCity.City; + } + else if (ViewModel.ScheduleMode == "SunriseToSunsetGeo") + { + ViewModel.SyncButtonInformation = $"{ViewModel.Latitude}°, {ViewModel.Longitude}°"; + } + + SunriseModeChartState(); + } + + private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if (e.PropertyName == "IsEnabled") + { + if (ViewModel.IsEnabled != _generalSettingsRepository.SettingsConfig.Enabled.LightSwitch) + { + _generalSettingsRepository.SettingsConfig.Enabled.LightSwitch = ViewModel.IsEnabled; + + var generalSettingsMessage = new OutGoingGeneralSettings(_generalSettingsRepository.SettingsConfig).ToString(); + Logger.LogInfo($"Saved general settings from Light Switch page."); + + _sendConfigMsg?.Invoke(generalSettingsMessage); + } + } + else + { + if (ViewModel.ModuleSettings != null) + { + SndLightSwitchSettings currentSettings = new(_moduleSettingsRepository.SettingsConfig); + SndModuleSettings csIpcMessage = new(currentSettings); + + SndLightSwitchSettings outSettings = new(ViewModel.ModuleSettings); + SndModuleSettings outIpcMessage = new(outSettings); + + string csMessage = csIpcMessage.ToJsonString(); + string outMessage = outIpcMessage.ToJsonString(); + + if (!csMessage.Equals(outMessage, StringComparison.Ordinal)) + { + Logger.LogInfo($"Saved Light Switch settings from Light Switch page."); + + _sendConfigMsg?.Invoke(outMessage); + } + } + } + } + + private void LoadSettings(ISettingsRepository generalSettingsRepository, ISettingsRepository moduleSettingsRepository) + { + if (generalSettingsRepository != null) + { + if (moduleSettingsRepository != null) + { + UpdateViewModelSettings(moduleSettingsRepository.SettingsConfig, generalSettingsRepository.SettingsConfig); + } + else + { + throw new ArgumentNullException(nameof(moduleSettingsRepository)); + } + } + else + { + throw new ArgumentNullException(nameof(generalSettingsRepository)); + } + } + + private void UpdateViewModelSettings(LightSwitchSettings lightSwitchSettings, GeneralSettings generalSettings) + { + if (lightSwitchSettings != null) + { + if (generalSettings != null) + { + ViewModel.IsEnabled = generalSettings.Enabled.LightSwitch; + ViewModel.ModuleSettings = (LightSwitchSettings)lightSwitchSettings.Clone(); + + UpdateEnabledState(generalSettings.Enabled.LightSwitch); + } + else + { + throw new ArgumentNullException(nameof(generalSettings)); + } + } + else + { + throw new ArgumentNullException(nameof(lightSwitchSettings)); + } + } + + private void Settings_Changed(object sender, FileSystemEventArgs e) + { + _dispatcherQueue.TryEnqueue(() => + { + _moduleSettingsRepository.ReloadSettings(); + LoadSettings(_generalSettingsRepository, _moduleSettingsRepository); + }); + } + + private void UpdateEnabledState(bool recommendedState) + { + var enabledGpoRuleConfiguration = GPOWrapper.GetConfiguredLightSwitchEnabledValue(); + + if (enabledGpoRuleConfiguration == GpoRuleConfigured.Disabled || enabledGpoRuleConfiguration == GpoRuleConfigured.Enabled) + { + // Get the enabled state from GPO. + ViewModel.IsEnabledGpoConfigured = true; + ViewModel.EnabledGPOConfiguration = enabledGpoRuleConfiguration == GpoRuleConfigured.Enabled; + } + else + { + ViewModel.IsEnabled = recommendedState; + } + } + + private async void SyncLocationButton_Click(object sender, RoutedEventArgs e) + { + LocationDialog.IsPrimaryButtonEnabled = false; + LocationResultPanel.Visibility = Visibility.Collapsed; + await LocationDialog.ShowAsync(); + } + + private void CityAutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) + { + if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput && !string.IsNullOrWhiteSpace(sender.Text)) + { + string query = sender.Text.ToLower(CultureInfo.CurrentCulture); + + // Filter your cities (assuming ViewModel.Cities is a List) + var filtered = ViewModel.SearchLocations + .Where(c => + (c.City?.Contains(query, StringComparison.CurrentCultureIgnoreCase) ?? false) || + (c.Country?.Contains(query, StringComparison.CurrentCultureIgnoreCase) ?? false)) + .ToList(); + + sender.ItemsSource = filtered; + } + } + + private void CityAutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args) + { + if (args.SelectedItem is SearchLocation location) + { + ViewModel.SelectedCity = location; + + // CityAutoSuggestBox.Text = $"{location.City}, {location.Country}"; + LocationDialog.IsPrimaryButtonEnabled = true; + LocationResultPanel.Visibility = Visibility.Visible; + } + } + + private void ModeSelector_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + SunriseModeChartState(); + } + + private void SunriseModeChartState() + { + if (ViewModel.Latitude == "0.0" && ViewModel.Longitude == "0.0" && ViewModel.ScheduleMode == "SunsetToSunrise") + { + TimelineCard.Visibility = Visibility.Collapsed; + LocationWarningBar.Visibility = Visibility.Visible; + } + else + { + TimelineCard.Visibility = Visibility.Visible; + LocationWarningBar.Visibility = Visibility.Collapsed; + } + } + + private async void LocationDialog_Opened(ContentDialog sender, ContentDialogOpenedEventArgs args) + { + await GetGeoLocation(); + } + } +} diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml index 09f568f4a6..2869e2042f 100644 --- a/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml +++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/RegistryPreviewPage.xaml @@ -30,7 +30,6 @@ Command="{x:Bind ViewModel.LaunchEventHandler}" HeaderIcon="{ui:FontIcon Glyph=}" IsClickEnabled="True" /> - + You'll be asked to confirm before files are moved to the Recycle Bin - + Activation method - + Use a shortcut or press the Spacebar when a file is selected - Spacebar is a physical keyboard key + Spacebar is a physical keyboard key - + Custom shortcut - + Spacebar - + Disable rounded corners when a window is snapped @@ -3261,6 +3261,15 @@ Activate by holding the key for the character you want to add an accent to, then Pin a window + + Theme toggle shortcut + + + Switch between light and dark mode + + + Toggle theme + Pick a color @@ -5224,6 +5233,117 @@ To record a specific window, enter the hotkey with the Alt key in the opposite m Stores diagnostic data locally in .xml format; folder may include .etl files as well. May use up 1 GB or more of disk space. + + Light Switch + + + Enable Light Switch + + + Easily switch between light and dark mode - on a schedule, automatically, or with a shortcut. + + + Light Switch + + + Learn more about Light Switch + + + Behavior + + + Enable Light Switch + + + Shortcuts + + + Schedule + + + Mode + + + Determine when dark mode should be turned on + + + Manual + + + Sunset to sunrise + + + Turn on dark mode + + + Turn off dark mode + + + Location + + + Used to automatically calculate accurate sunrise and sunset times + + + Offset (in minutes) + + + Adjust the trigger time by starting earlier or later + + + Location required + + + Sync your location so Light Switch can calculate the correct sunrise- and sunset times + + + Apply dark mode to + + + Pick which parts of your PC should follow Light Switch + + + System + + + Taskbar, Start, and other system UI + + + Apps + + + Supported applications + + + Select a location + + + Select + + + Cancel + + + Get current location + + + To calculate the sunrise and sunset, Light Switch needs a location. + + + Sunrise + + + Sunset + + + Location + + + Sunrise + + + Sunset + Close PowerToys Don't loc "PowerToys" @@ -5321,6 +5441,22 @@ To record a specific window, enter the hotkey with the Alt key in the opposite m Utilities + + Light Switch + Product name. Do not localize this string + + + Light Switch automatically manages your Windows light and dark mode based on schedules, sunrise/sunset times, or manual control. Keep your system theme synchronized with your preferences and daily rhythm. + Light Switch is a product name, do not localize + + + Open **PowerToys Settings** and enable Light Switch to set up automatic theme switching + Light Switch is a product name, do not localize + + + Use the **keyboard shortcut** to instantly toggle between light and dark modes, or set up **sunrise/sunset automation** for natural theme transitions. + Light Switch is a product name, do not localize + Dismiss diff --git a/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs index 82d3aa358d..344eaa183f 100644 --- a/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs +++ b/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs @@ -22,6 +22,7 @@ using Microsoft.PowerToys.Settings.UI.Services; using Microsoft.PowerToys.Settings.UI.Views; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Settings.UI.Library; namespace Microsoft.PowerToys.Settings.UI.ViewModels { @@ -226,6 +227,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels ModuleType.FancyZones => GetModuleItemsFancyZones(), ModuleType.FindMyMouse => GetModuleItemsFindMyMouse(), ModuleType.Hosts => GetModuleItemsHosts(), + ModuleType.LightSwitch => GetModuleItemsLightSwitch(), ModuleType.MouseHighlighter => GetModuleItemsMouseHighlighter(), ModuleType.MouseJump => GetModuleItemsMouseJump(), ModuleType.MousePointerCrosshairs => GetModuleItemsMousePointerCrosshairs(), @@ -274,6 +276,17 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels return new ObservableCollection(list); } + private ObservableCollection GetModuleItemsLightSwitch() + { + ISettingsRepository moduleSettingsRepository = SettingsRepository.GetInstance(new SettingsUtils()); + var settings = moduleSettingsRepository.SettingsConfig; + var list = new List + { + new DashboardModuleShortcutItem() { Label = resourceLoader.GetString("LightSwitch_ForceDarkMode"), Shortcut = settings.Properties.ToggleThemeHotkey.Value.GetKeysList() }, + }; + return new ObservableCollection(list); + } + private ObservableCollection GetModuleItemsCropAndLock() { ISettingsRepository moduleSettingsRepository = SettingsRepository.GetInstance(new SettingsUtils()); diff --git a/src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs new file mode 100644 index 0000000000..e5262f93d7 --- /dev/null +++ b/src/settings-ui/Settings.UI/ViewModels/LightSwitchViewModel.cs @@ -0,0 +1,510 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.ObjectModel; +using System.Globalization; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text.Json; +using System.Windows.Input; +using ManagedCommon; +using Microsoft.PowerToys.Settings.UI.Helpers; +using Microsoft.PowerToys.Settings.UI.Library; +using Microsoft.PowerToys.Settings.UI.Library.Helpers; +using Microsoft.PowerToys.Settings.UI.SerializationContext; +using Newtonsoft.Json.Linq; +using Settings.UI.Library; +using Settings.UI.Library.Helpers; + +namespace Microsoft.PowerToys.Settings.UI.ViewModels +{ + public partial class LightSwitchViewModel : Observable + { + private Func SendConfigMSG { get; } + + public ObservableCollection SearchLocations { get; } = new(); + + public LightSwitchViewModel(LightSwitchSettings initialSettings = null, Func ipcMSGCallBackFunc = null) + { + _moduleSettings = initialSettings ?? new LightSwitchSettings(); + SendConfigMSG = ipcMSGCallBackFunc; + + ForceLightCommand = new RelayCommand(ForceLightNow); + ForceDarkCommand = new RelayCommand(ForceDarkNow); + + AvailableScheduleModes = new ObservableCollection + { + "FixedHours", + "SunsetToSunrise", + }; + + _toggleThemeHotkey = _moduleSettings.Properties.ToggleThemeHotkey.Value; + } + + private void ForceLightNow() + { + Logger.LogInfo("Sending custom action: forceLight"); + SendCustomAction("forceLight"); + } + + private void ForceDarkNow() + { + Logger.LogInfo("Sending custom action: forceDark"); + SendCustomAction("forceDark"); + } + + private void SendCustomAction(string actionName) + { + SendConfigMSG("{\"action\":{\"LightSwitch\":{\"action_name\":\"" + actionName + "\", \"value\":\"\"}}}"); + } + + public LightSwitchSettings ModuleSettings + { + get => _moduleSettings; + set + { + if (_moduleSettings != value) + { + _moduleSettings = value; + + OnPropertyChanged(nameof(ModuleSettings)); + RefreshModuleSettings(); + RefreshEnabledState(); + } + } + } + + public bool IsEnabled + { + get + { + if (_enabledStateIsGPOConfigured) + { + return _enabledGPOConfiguration; + } + else + { + return _isEnabled; + } + } + + set + { + if (_isEnabled != value) + { + if (_enabledStateIsGPOConfigured) + { + // If it's GPO configured, shouldn't be able to change this state. + return; + } + + _isEnabled = value; + + RefreshEnabledState(); + + NotifyPropertyChanged(); + } + } + } + + public bool IsEnabledGpoConfigured + { + get => _enabledStateIsGPOConfigured; + set + { + if (_enabledStateIsGPOConfigured != value) + { + _enabledStateIsGPOConfigured = value; + NotifyPropertyChanged(); + } + } + } + + public bool EnabledGPOConfiguration + { + get => _enabledGPOConfiguration; + set + { + if (_enabledGPOConfiguration != value) + { + _enabledGPOConfiguration = value; + NotifyPropertyChanged(); + } + } + } + + public string ScheduleMode + { + get => ModuleSettings.Properties.ScheduleMode.Value; + set + { + var oldMode = ModuleSettings.Properties.ScheduleMode.Value; + if (ModuleSettings.Properties.ScheduleMode.Value != value) + { + ModuleSettings.Properties.ScheduleMode.Value = value; + OnPropertyChanged(nameof(ScheduleMode)); + } + + if (ModuleSettings.Properties.ScheduleMode.Value == "FixedHours" && oldMode != "FixedHours") + { + LightTime = 360; + DarkTime = 1080; + SunsetTimeSpan = null; + SunriseTimeSpan = null; + + OnPropertyChanged(nameof(LightTimePickerValue)); + OnPropertyChanged(nameof(DarkTimePickerValue)); + } + + if (ModuleSettings.Properties.ScheduleMode.Value == "SunsetToSunrise") + { + if (ModuleSettings.Properties.Latitude != "0.0" && ModuleSettings.Properties.Longitude != "0.0") + { + double lat = double.Parse(ModuleSettings.Properties.Latitude.Value, CultureInfo.InvariantCulture); + double lon = double.Parse(ModuleSettings.Properties.Longitude.Value, CultureInfo.InvariantCulture); + UpdateSunTimes(lat, lon); + } + } + } + } + + public ObservableCollection AvailableScheduleModes { get; } + + public bool ChangeSystem + { + get => ModuleSettings.Properties.ChangeSystem.Value; + set + { + if (ModuleSettings.Properties.ChangeSystem.Value != value) + { + ModuleSettings.Properties.ChangeSystem.Value = value; + NotifyPropertyChanged(); + } + } + } + + public bool ChangeApps + { + get => ModuleSettings.Properties.ChangeApps.Value; + set + { + if (ModuleSettings.Properties.ChangeApps.Value != value) + { + ModuleSettings.Properties.ChangeApps.Value = value; + NotifyPropertyChanged(); + } + } + } + + public int LightTime + { + get => ModuleSettings.Properties.LightTime.Value; + set + { + if (ModuleSettings.Properties.LightTime.Value != value) + { + ModuleSettings.Properties.LightTime.Value = value; + NotifyPropertyChanged(); + + OnPropertyChanged(nameof(LightTimeTimeSpan)); + + if (ScheduleMode == "SunsetToSunrise") + { + SunriseTimeSpan = TimeSpan.FromMinutes(value); + } + } + } + } + + public int DarkTime + { + get => ModuleSettings.Properties.DarkTime.Value; + set + { + if (ModuleSettings.Properties.DarkTime.Value != value) + { + ModuleSettings.Properties.DarkTime.Value = value; + NotifyPropertyChanged(); + + OnPropertyChanged(nameof(DarkTimeTimeSpan)); + + if (ScheduleMode == "SunsetToSunrise") + { + SunsetTimeSpan = TimeSpan.FromMinutes(value); + } + } + } + } + + public int SunriseOffset + { + get => ModuleSettings.Properties.SunriseOffset.Value; + set + { + if (ModuleSettings.Properties.SunriseOffset.Value != value) + { + ModuleSettings.Properties.SunriseOffset.Value = value; + OnPropertyChanged(nameof(LightTimeTimeSpan)); + } + } + } + + public int SunsetOffset + { + get => ModuleSettings.Properties.SunsetOffset.Value; + set + { + if (ModuleSettings.Properties.SunsetOffset.Value != value) + { + ModuleSettings.Properties.SunsetOffset.Value = value; + OnPropertyChanged(nameof(DarkTimeTimeSpan)); + } + } + } + + // === Computed projections (OneWay bindings only) === + public TimeSpan LightTimeTimeSpan + { + get + { + if (ScheduleMode == "SunsetToSunrise") + { + return TimeSpan.FromMinutes(LightTime + SunriseOffset); + } + else + { + return TimeSpan.FromMinutes(LightTime); + } + } + } + + public TimeSpan DarkTimeTimeSpan + { + get + { + if (ScheduleMode == "SunsetToSunrise") + { + return TimeSpan.FromMinutes(DarkTime + SunsetOffset); + } + else + { + return TimeSpan.FromMinutes(DarkTime); + } + } + } + + // === Values to pass to timeline === + public TimeSpan? SunriseTimeSpan + { + get => _sunriseTimeSpan; + set + { + if (_sunriseTimeSpan != value) + { + _sunriseTimeSpan = value; + NotifyPropertyChanged(); + } + } + } + + public TimeSpan? SunsetTimeSpan + { + get => _sunsetTimeSpan; + set + { + if (_sunsetTimeSpan != value) + { + _sunsetTimeSpan = value; + NotifyPropertyChanged(); + } + } + } + + // === Picker values (TwoWay binding targets for TimePickers) === + public TimeSpan LightTimePickerValue + { + get => TimeSpan.FromMinutes(LightTime); + set => LightTime = (int)value.TotalMinutes; + } + + public TimeSpan DarkTimePickerValue + { + get => TimeSpan.FromMinutes(DarkTime); + set => DarkTime = (int)value.TotalMinutes; + } + + public string Latitude + { + get => ModuleSettings.Properties.Latitude.Value; + set + { + if (ModuleSettings.Properties.Latitude.Value != value) + { + ModuleSettings.Properties.Latitude.Value = value; + NotifyPropertyChanged(); + } + } + } + + public string Longitude + { + get => ModuleSettings.Properties.Longitude.Value; + set + { + if (ModuleSettings.Properties.Longitude.Value != value) + { + ModuleSettings.Properties.Longitude.Value = value; + NotifyPropertyChanged(); + } + } + } + + private SearchLocation _selectedSearchLocation; + + public SearchLocation SelectedCity + { + get => _selectedSearchLocation; + set + { + if (_selectedSearchLocation != value) + { + _selectedSearchLocation = value; + NotifyPropertyChanged(); + + UpdateSunTimes(_selectedSearchLocation.Latitude, _selectedSearchLocation.Longitude, _selectedSearchLocation.City); + } + } + } + + private string _syncButtonInformation = "Please sync your location"; + + public string SyncButtonInformation + { + get => _syncButtonInformation; + set + { + if (_syncButtonInformation != value) + { + _syncButtonInformation = value; + NotifyPropertyChanged(); + } + } + } + + public HotkeySettings ToggleThemeActivationShortcut + { + get => _toggleThemeHotkey; + + set + { + if (value != _toggleThemeHotkey) + { + if (value == null) + { + _toggleThemeHotkey = LightSwitchProperties.DefaultToggleThemeHotkey; + } + else + { + _toggleThemeHotkey = value; + } + + _moduleSettings.Properties.ToggleThemeHotkey.Value = _toggleThemeHotkey; + NotifyPropertyChanged(); + + SendConfigMSG( + string.Format( + CultureInfo.InvariantCulture, + "{{ \"powertoys\": {{ \"{0}\": {1} }} }}", + LightSwitchSettings.ModuleName, + JsonSerializer.Serialize(_moduleSettings, (System.Text.Json.Serialization.Metadata.JsonTypeInfo)SourceGenerationContextContext.Default.LightSwitchSettings))); + } + } + } + + public void NotifyPropertyChanged([CallerMemberName] string propertyName = null) + { + Logger.LogInfo($"Changed the property {propertyName}"); + OnPropertyChanged(propertyName); + } + + public void RefreshEnabledState() + { + OnPropertyChanged(nameof(IsEnabled)); + } + + public void RefreshModuleSettings() + { + OnPropertyChanged(nameof(ChangeSystem)); + OnPropertyChanged(nameof(ChangeApps)); + OnPropertyChanged(nameof(LightTime)); + OnPropertyChanged(nameof(DarkTime)); + OnPropertyChanged(nameof(SunriseOffset)); + OnPropertyChanged(nameof(SunsetOffset)); + OnPropertyChanged(nameof(Latitude)); + OnPropertyChanged(nameof(Longitude)); + OnPropertyChanged(nameof(ScheduleMode)); + } + + private void UpdateSunTimes(double latitude, double longitude, string city = "n/a") + { + SunTimes result = SunCalc.CalculateSunriseSunset( + latitude, + longitude, + DateTime.Now.Year, + DateTime.Now.Month, + DateTime.Now.Day); + + LightTime = (result.SunriseHour * 60) + result.SunriseMinute; + DarkTime = (result.SunsetHour * 60) + result.SunsetMinute; + Latitude = latitude.ToString(CultureInfo.InvariantCulture); + Longitude = longitude.ToString(CultureInfo.InvariantCulture); + + if (city != "n/a") + { + SyncButtonInformation = city; + } + } + + public void InitializeScheduleMode() + { + if (ScheduleMode == "SunsetToSunrise" && + double.TryParse(Latitude, NumberStyles.Float, CultureInfo.InvariantCulture, out double savedLat) && + double.TryParse(Longitude, NumberStyles.Float, CultureInfo.InvariantCulture, out double savedLng)) + { + var match = SearchLocations.FirstOrDefault(c => + Math.Abs(c.Latitude - savedLat) < 0.0001 && + Math.Abs(c.Longitude - savedLng) < 0.0001); + + if (match != null) + { + SelectedCity = match; + } + + SyncButtonInformation = SelectedCity != null + ? SelectedCity.City + : $"{Latitude},{Longitude}"; + + double lat = double.Parse(ModuleSettings.Properties.Latitude.Value, CultureInfo.InvariantCulture); + double lon = double.Parse(ModuleSettings.Properties.Longitude.Value, CultureInfo.InvariantCulture); + UpdateSunTimes(lat, lon); + + SunriseTimeSpan = TimeSpan.FromMinutes(LightTime); + SunsetTimeSpan = TimeSpan.FromMinutes(DarkTime); + } + } + + private bool _enabledStateIsGPOConfigured; + private bool _enabledGPOConfiguration; + private LightSwitchSettings _moduleSettings; + private bool _isEnabled; + private HotkeySettings _toggleThemeHotkey; + private TimeSpan? _sunriseTimeSpan; + private TimeSpan? _sunsetTimeSpan; + + public ICommand ForceLightCommand { get; } + + public ICommand ForceDarkCommand { get; } + } +} diff --git a/tools/BugReportTool/BugReportTool/ProcessesList.cpp b/tools/BugReportTool/BugReportTool/ProcessesList.cpp index 1aa1d1d708..eb4a976c9b 100644 --- a/tools/BugReportTool/BugReportTool/ProcessesList.cpp +++ b/tools/BugReportTool/BugReportTool/ProcessesList.cpp @@ -11,6 +11,7 @@ std::vector processes = L"PowerToys.FancyZonesEditor.exe", L"PowerToys.FancyZones.exe", L"PowerToys.FileLocksmithUI.exe", + L"PowerToys.LightSwitch.exe", L"PowerToys.KeyboardManagerEngine.exe", L"PowerToys.KeyboardManagerEditor.exe", L"PowerToys.PowerAccent.exe", diff --git a/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp b/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp index 3c042ee06d..c6b3bbe372 100644 --- a/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp +++ b/tools/BugReportTool/BugReportTool/ReportGPOValues.cpp @@ -50,6 +50,7 @@ void ReportGPOValues(const std::filesystem::path &tmpDir) report << "getConfiguredCropAndLockEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredCropAndLockEnabledValue()) << std::endl; report << "getConfiguredFancyZonesEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredFancyZonesEnabledValue()) << std::endl; report << "getConfiguredFileLocksmithEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredFileLocksmithEnabledValue()) << std::endl; + report << "getConfiguredLightSwitchEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredLightSwitchEnabledValue()) << std::endl; report << "getConfiguredSvgPreviewEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredSvgPreviewEnabledValue()) << std::endl; report << "getConfiguredMarkdownPreviewEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredMarkdownPreviewEnabledValue()) << std::endl; report << "getConfiguredMonacoPreviewEnabledValue: " << gpo_rule_configured_to_string(powertoys_gpo::getConfiguredMonacoPreviewEnabledValue()) << std::endl;