Skip to content

Commit e1f7190

Browse files
moko256Oleh
authored andcommitted
[Windows] Fix system theme integration. (flutter#35902)
The flutter#35019 didn't merge SettingsPluginWin32's constructor and destructor. This PR adds them and fix SettingsPlugin to re-enable it to watch the theme changes. This PR is part of flutter/flutter#110700. No changes in the flutter/tests repo.
1 parent 3e6b8eb commit e1f7190

3 files changed

Lines changed: 37 additions & 7 deletions

File tree

shell/platform/windows/settings_plugin.cc

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ SettingsPlugin::SettingsPlugin(BinaryMessenger* messenger,
3636
&JsonMessageCodec::GetInstance())),
3737
task_runner_(task_runner) {}
3838

39-
SettingsPlugin::~SettingsPlugin() = default;
39+
SettingsPlugin::~SettingsPlugin() {
40+
StopWatching();
41+
}
4042

4143
void SettingsPlugin::SendSettings() {
4244
rapidjson::Document settings(rapidjson::kObjectType);
@@ -55,6 +57,12 @@ void SettingsPlugin::SendSettings() {
5557
}
5658

5759
void SettingsPlugin::StartWatching() {
60+
RegOpenKeyEx(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey,
61+
RRF_RT_REG_DWORD, KEY_NOTIFY, &preferred_brightness_reg_hkey_);
62+
RegOpenKeyEx(HKEY_CURRENT_USER, kGetTextScaleFactorRegKey, RRF_RT_REG_DWORD,
63+
KEY_NOTIFY, &text_scale_factor_reg_hkey_);
64+
65+
// Start watching when the keys exist.
5866
if (preferred_brightness_reg_hkey_ != nullptr) {
5967
WatchPreferredBrightnessChanged();
6068
}
@@ -66,6 +74,13 @@ void SettingsPlugin::StartWatching() {
6674
void SettingsPlugin::StopWatching() {
6775
preferred_brightness_changed_watcher_ = nullptr;
6876
text_scale_factor_changed_watcher_ = nullptr;
77+
78+
if (preferred_brightness_reg_hkey_ != nullptr) {
79+
RegCloseKey(preferred_brightness_reg_hkey_);
80+
}
81+
if (text_scale_factor_reg_hkey_ != nullptr) {
82+
RegCloseKey(text_scale_factor_reg_hkey_);
83+
}
6984
}
7085

7186
bool SettingsPlugin::GetAlwaysUse24HourFormat() {

shell/platform/windows/settings_plugin.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,15 @@ class SettingsPlugin {
4949
// Returns the user-preferred brightness.
5050
virtual PlatformBrightness GetPreferredBrightness();
5151

52+
// Starts watching brightness changes.
53+
virtual void WatchPreferredBrightnessChanged();
54+
55+
// Starts watching text scale factor changes.
56+
virtual void WatchTextScaleFactorChanged();
57+
5258
private:
5359
std::unique_ptr<BasicMessageChannel<rapidjson::Document>> channel_;
5460

55-
void WatchPreferredBrightnessChanged();
56-
void WatchTextScaleFactorChanged();
57-
5861
HKEY preferred_brightness_reg_hkey_ = nullptr;
5962
HKEY text_scale_factor_reg_hkey_ = nullptr;
6063

shell/platform/windows/settings_plugin_unittests.cc

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ class MockSettingsPlugin : public SettingsPlugin {
2222
virtual ~MockSettingsPlugin() = default;
2323

2424
// |SettingsPlugin|
25-
MOCK_METHOD0(StartWatching, void());
26-
MOCK_METHOD0(StopWatching, void());
27-
2825
MOCK_METHOD0(GetAlwaysUse24HourFormat, bool());
2926
MOCK_METHOD0(GetTextScaleFactor, float());
3027
MOCK_METHOD0(GetPreferredBrightness, PlatformBrightness());
28+
29+
MOCK_METHOD0(WatchPreferredBrightnessChanged, void());
30+
MOCK_METHOD0(WatchTextScaleFactorChanged, void());
3131
};
3232

3333
} // namespace
@@ -58,5 +58,17 @@ TEST(SettingsPluginTest, SendSettingsGetsSettings) {
5858
settings_plugin.SendSettings();
5959
}
6060

61+
TEST(SettingsPluginTest, StartWatchingStartsWatchingChanges) {
62+
TestBinaryMessenger messenger([](const std::string& channel,
63+
const uint8_t* message, size_t message_size,
64+
BinaryReply reply) {});
65+
::testing::NiceMock<MockSettingsPlugin> settings_plugin(&messenger, nullptr);
66+
67+
EXPECT_CALL(settings_plugin, WatchPreferredBrightnessChanged).Times(1);
68+
EXPECT_CALL(settings_plugin, WatchTextScaleFactorChanged).Times(1);
69+
70+
settings_plugin.StartWatching();
71+
}
72+
6173
} // namespace testing
6274
} // namespace flutter

0 commit comments

Comments
 (0)