blob: 2c663fc048212a455e996415db3c4f46b08adc08 [file] [log] [blame]
// 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/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:
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();
protected:
enum struct PlatformBrightness { kDark, kLight };
// 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();
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_;
SettingsPlugin(const SettingsPlugin&) = delete;
SettingsPlugin& operator=(const SettingsPlugin&) = delete;
};
} // namespace flutter
#endif // FLUTTER_SHELL_PLATFORM_WINDOWS_SETTINGS_PLUGIN_H_