123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- // Copyright 2022 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ash/rgb_keyboard/rgb_keyboard_manager.h"
- #include <stdint.h>
- #include <vector>
- #include "ash/constants/ash_features.h"
- #include "ash/ime/ime_controller_impl.h"
- #include "ash/rgb_keyboard/histogram_util.h"
- #include "ash/rgb_keyboard/rgb_keyboard_util.h"
- #include "base/check.h"
- #include "base/check_op.h"
- #include "base/logging.h"
- #include "base/system/sys_info.h"
- #include "chromeos/ash/components/dbus/rgbkbd/rgbkbd_client.h"
- namespace ash {
- namespace {
- RgbKeyboardManager* g_instance = nullptr;
- } // namespace
- RgbKeyboardManager::RgbKeyboardManager(ImeControllerImpl* ime_controller)
- : ime_controller_ptr_(ime_controller) {
- DCHECK(ime_controller_ptr_);
- DCHECK(!g_instance);
- g_instance = this;
- RgbkbdClient::Get()->AddObserver(this);
- VLOG(1) << "Initializing RGB Keyboard support";
- FetchRgbKeyboardSupport();
- }
- RgbKeyboardManager::~RgbKeyboardManager() {
- RgbkbdClient::Get()->RemoveObserver(this);
- if (IsPerKeyKeyboard()) {
- ime_controller_ptr_->RemoveObserver(this);
- }
- DCHECK_EQ(g_instance, this);
- g_instance = nullptr;
- }
- void RgbKeyboardManager::FetchRgbKeyboardSupport() {
- DCHECK(RgbkbdClient::Get());
- RgbkbdClient::Get()->GetRgbKeyboardCapabilities(
- base::BindOnce(&RgbKeyboardManager::OnGetRgbKeyboardCapabilities,
- weak_ptr_factory_.GetWeakPtr()));
- }
- rgbkbd::RgbKeyboardCapabilities RgbKeyboardManager::GetRgbKeyboardCapabilities()
- const {
- return capabilities_;
- }
- void RgbKeyboardManager::SetStaticBackgroundColor(uint8_t r,
- uint8_t g,
- uint8_t b) {
- DCHECK(RgbkbdClient::Get());
- if (!IsRgbKeyboardSupported()) {
- LOG(ERROR) << "Attempted to set RGB keyboard color, but flag is disabled.";
- return;
- }
- VLOG(1) << "Setting RGB keyboard color to R:" << static_cast<int>(r)
- << " G:" << static_cast<int>(g) << " B:" << static_cast<int>(b);
- ash::rgb_keyboard::metrics::EmitRgbBacklightChangeType(
- ash::rgb_keyboard::metrics::RgbKeyboardBacklightChangeType::
- kStaticBackgroundColorChanged,
- capabilities_);
- RgbkbdClient::Get()->SetStaticBackgroundColor(r, g, b);
- }
- void RgbKeyboardManager::SetRainbowMode() {
- DCHECK(RgbkbdClient::Get());
- if (!IsRgbKeyboardSupported()) {
- LOG(ERROR) << "Attempted to set RGB rainbow mode, but flag is disabled.";
- return;
- }
- VLOG(1) << "Setting RGB keyboard to rainbow mode";
- ash::rgb_keyboard::metrics::EmitRgbBacklightChangeType(
- ash::rgb_keyboard::metrics::RgbKeyboardBacklightChangeType::
- kRainbowModeSelected,
- capabilities_);
- RgbkbdClient::Get()->SetRainbowMode();
- }
- void RgbKeyboardManager::SetAnimationMode(rgbkbd::RgbAnimationMode mode) {
- if (!features::IsExperimentalRgbKeyboardPatternsEnabled()) {
- LOG(ERROR) << "Attempted to set RGB animation mode, but flag is disabled.";
- return;
- }
- DCHECK(RgbkbdClient::Get());
- VLOG(1) << "Setting RGB keyboard animation mode to "
- << static_cast<uint32_t>(mode);
- RgbkbdClient::Get()->SetAnimationMode(mode);
- }
- void RgbKeyboardManager::OnCapsLockChanged(bool enabled) {
- VLOG(1) << "Setting RGB keyboard caps lock state to " << enabled;
- RgbkbdClient::Get()->SetCapsLockState(enabled);
- }
- // static
- RgbKeyboardManager* RgbKeyboardManager::Get() {
- return g_instance;
- }
- void RgbKeyboardManager::OnCapabilityUpdatedForTesting(
- rgbkbd::RgbKeyboardCapabilities capability) {
- capabilities_ = capability;
- }
- void RgbKeyboardManager::OnGetRgbKeyboardCapabilities(
- absl::optional<rgbkbd::RgbKeyboardCapabilities> reply) {
- if (!reply.has_value()) {
- if (base::SysInfo::IsRunningOnChromeOS()) {
- LOG(ERROR) << "No response received for GetRgbKeyboardCapabilities";
- }
- return;
- }
- capabilities_ = reply.value();
- ash::rgb_keyboard::metrics::EmitRgbKeyboardCapabilityType(capabilities_);
- VLOG(1) << "RGB Keyboard capabilities="
- << static_cast<uint32_t>(capabilities_);
- if (IsRgbKeyboardSupported())
- InitializeRgbKeyboard();
- }
- void RgbKeyboardManager::InitializeRgbKeyboard() {
- DCHECK(RgbkbdClient::Get());
- // Initialize caps lock color changing if supported
- if (IsPerKeyKeyboard()) {
- VLOG(1) << "Setting initial RGB keyboard caps lock state to "
- << ime_controller_ptr_->IsCapsLockEnabled();
- RgbkbdClient::Get()->SetCapsLockState(
- ime_controller_ptr_->IsCapsLockEnabled());
- ime_controller_ptr_->AddObserver(this);
- }
- }
- bool RgbKeyboardManager::IsPerKeyKeyboard() const {
- return capabilities_ == rgbkbd::RgbKeyboardCapabilities::kIndividualKey;
- }
- } // namespace ash
|