1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
// 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
|