| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef FLUTTER_SHELL_PLATFORM_WINDOWS_SETTINGS_PLUGIN_H_ | |
| #define FLUTTER_SHELL_PLATFORM_WINDOWS_SETTINGS_PLUGIN_H_ | |
| #include <Windows.h> | |
| #include <memory> | |
| #include "flutter/fml/macros.h" | |
| #include "flutter/shell/platform/common/client_wrapper/include/flutter/basic_message_channel.h" | |
| #include "flutter/shell/platform/common/client_wrapper/include/flutter/binary_messenger.h" | |
| #include "flutter/shell/platform/windows/event_watcher.h" | |
| #include "flutter/shell/platform/windows/task_runner.h" | |
| #include "rapidjson/document.h" | |
| namespace flutter { | |
| // Abstract settings plugin. | |
| // | |
| // Used to look up and notify Flutter of user-configured system settings. | |
| // These are typically set in the control panel. | |
| class SettingsPlugin { | |
| public: | |
| enum struct PlatformBrightness { kDark, kLight }; | |
| explicit SettingsPlugin(BinaryMessenger* messenger, TaskRunner* task_runner); | |
| virtual ~SettingsPlugin(); | |
| // Sends settings (e.g., platform brightness) to the engine. | |
| void SendSettings(); | |
| // Start watching settings changes and notify the engine of the update. | |
| virtual void StartWatching(); | |
| // Stop watching settings change. The `SettingsPlugin` destructor will call | |
| // this automatically. | |
| virtual void StopWatching(); | |
| // Update the high contrast status of the system. | |
| virtual void UpdateHighContrastMode(bool is_high_contrast); | |
| protected: | |
| // Returns `true` if the user uses 24 hour time. | |
| virtual bool GetAlwaysUse24HourFormat(); | |
| // Returns the user-preferred text scale factor. | |
| virtual float GetTextScaleFactor(); | |
| // Returns the user-preferred brightness. | |
| virtual PlatformBrightness GetPreferredBrightness(); | |
| // Starts watching brightness changes. | |
| virtual void WatchPreferredBrightnessChanged(); | |
| // Starts watching text scale factor changes. | |
| virtual void WatchTextScaleFactorChanged(); | |
| bool is_high_contrast_ = false; | |
| private: | |
| std::unique_ptr<BasicMessageChannel<rapidjson::Document>> channel_; | |
| HKEY preferred_brightness_reg_hkey_ = nullptr; | |
| HKEY text_scale_factor_reg_hkey_ = nullptr; | |
| std::unique_ptr<EventWatcher> preferred_brightness_changed_watcher_; | |
| std::unique_ptr<EventWatcher> text_scale_factor_changed_watcher_; | |
| TaskRunner* task_runner_; | |
| FML_DISALLOW_COPY_AND_ASSIGN(SettingsPlugin); | |
| }; | |
| } // namespace flutter | |
| #endif // FLUTTER_SHELL_PLATFORM_WINDOWS_SETTINGS_PLUGIN_H_ |