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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/base/ime/ash/ime_keyboard.h"
#include "base/containers/fixed_flat_set.h"
#include "base/functional/callback.h"
#include "base/metrics/user_metrics.h"
#include "base/metrics/user_metrics_action.h"
namespace ash::input_method {
ImeKeyboard::ImeKeyboard() = default;
ImeKeyboard::~ImeKeyboard() = default;
void ImeKeyboard::AddObserver(Observer* observer) {
observers_.AddObserver(observer);
}
void ImeKeyboard::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
void ImeKeyboard::SetCurrentKeyboardLayoutByName(
const std::string& layout_name,
base::OnceCallback<void(bool)> callback) {
std::move(callback).Run(SetCurrentKeyboardLayoutByNameImpl(layout_name));
}
bool ImeKeyboard::SetCurrentKeyboardLayoutByNameImpl(
const std::string& layout_name) {
// Only notify on keyboard layout change.
if (last_layout_ == layout_name) {
return false;
}
observers_.Notify(&ImeKeyboard::Observer::OnLayoutChanging, layout_name);
last_layout_ = layout_name;
return true;
}
void ImeKeyboard::SetCapsLockEnabled(bool enable_caps_lock) {
bool old_state = caps_lock_is_enabled_;
caps_lock_is_enabled_ = enable_caps_lock;
if (old_state != enable_caps_lock) {
base::RecordAction(base::UserMetricsAction("CapsLock_Toggled"));
observers_.Notify(&ImeKeyboard::Observer::OnCapsLockChanged,
enable_caps_lock);
}
}
bool ImeKeyboard::IsCapsLockEnabled() {
return caps_lock_is_enabled_;
}
bool ImeKeyboard::IsISOLevel5ShiftAvailable() const {
constexpr auto kSet = base::MakeFixedFlatSet<std::string_view>({
"ca(multix)",
"de(neo)",
});
return kSet.contains(last_layout_);
}
bool ImeKeyboard::IsAltGrAvailable() const {
constexpr auto kSet = base::MakeFixedFlatSet<std::string_view>({
"be",
"bg",
"bg(phonetic)",
"br",
"ca",
"ca(eng)",
"ca(multix)",
"ch",
"ch(fr)",
"cz",
"de",
"de(neo)",
"dk",
"ee",
"es",
"es(cat)",
"fi",
"fr",
"fr(oss)",
"gb(dvorak)",
"gb(extd)",
"gr",
"hr",
"il",
"it",
"latam",
"lt",
"no",
"pl",
"pt",
"ro",
"se",
"si",
"sk",
"tr",
"ua",
"us(altgr-intl)",
"us(intl)",
"us(noop-altgr)",
});
return kSet.contains(last_layout_);
}
} // namespace ash::input_method
|