blob: 617e9fa8fdfdbac921beaf7f26e49e958c79617c [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/background/glic/glic_launcher_configuration.h"
#include "base/values.h"
#include "base/version_info/channel.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/glic/glic_pref_names.h"
#include "chrome/common/channel_info.h"
#include "chrome/common/chrome_features.h"
#include "components/prefs/pref_service.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/base/accelerators/command.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/keyboard_codes.h"
namespace glic {
GlicLauncherConfiguration::GlicLauncherConfiguration(Observer* manager)
: manager_(manager) {
if (PrefService* local_state = g_browser_process->local_state()) {
// Update the default hotkey value once `FeatureList` is initialized.
const std::string default_hotkey = features::kGlicDefaultHotkey.Get();
if (!default_hotkey.empty()) {
local_state->SetDefaultPrefValue(prefs::kGlicLauncherHotkey,
base::Value(default_hotkey));
}
pref_registrar_.Init(local_state);
pref_registrar_.Add(
prefs::kGlicLauncherEnabled,
base::BindRepeating(&GlicLauncherConfiguration::OnEnabledPrefChanged,
base::Unretained(this)));
pref_registrar_.Add(
prefs::kGlicLauncherHotkey,
base::BindRepeating(
&GlicLauncherConfiguration::OnGlobalHotkeyPrefChanged,
base::Unretained(this)));
}
}
GlicLauncherConfiguration::~GlicLauncherConfiguration() = default;
// static
bool GlicLauncherConfiguration::IsEnabled(bool* is_default_value) {
PrefService* const pref_service = g_browser_process->local_state();
if (is_default_value) {
*is_default_value =
pref_service->FindPreference(prefs::kGlicLauncherEnabled)
->IsDefaultValue();
}
return pref_service->GetBoolean(prefs::kGlicLauncherEnabled);
}
// static
ui::Accelerator GlicLauncherConfiguration::GetGlobalHotkey() {
const ui::Accelerator hotkey = ui::Command::StringToAccelerator(
g_browser_process->local_state()->GetString(prefs::kGlicLauncherHotkey));
// Return empty accelerator if an invalid modifier was set.
if (!hotkey.IsEmpty() &&
ui::Accelerator::MaskOutKeyEventFlags(hotkey.modifiers()) == 0) {
return ui::Accelerator();
}
return hotkey;
}
// static
ui::Accelerator GlicLauncherConfiguration::GetDefaultHotkey() {
#if BUILDFLAG(IS_MAC)
const ui::EventFlags modifiers = ui::EF_CONTROL_DOWN;
#else
const ui::EventFlags modifiers = ui::EF_ALT_DOWN;
#endif
return ui::Accelerator(ui::KeyboardCode::VKEY_G, modifiers);
}
void GlicLauncherConfiguration::OnEnabledPrefChanged() {
manager_->OnEnabledChanged(IsEnabled());
}
void GlicLauncherConfiguration::OnGlobalHotkeyPrefChanged() {
manager_->OnGlobalHotkeyChanged(GetGlobalHotkey());
}
} // namespace glic