| Index: ash/system/ime/ime_util.cc
|
| diff --git a/ash/system/ime/ime_util.cc b/ash/system/ime/ime_util.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..27ee8a2dfc5f2850153334ccc26bd854ed90a4f7
|
| --- /dev/null
|
| +++ b/ash/system/ime/ime_util.cc
|
| @@ -0,0 +1,111 @@
|
| +// Copyright 2017 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/system/ime/ime_util.h"
|
| +
|
| +#include <memory>
|
| +#include <string>
|
| +
|
| +#include "ash/system/tray/ime_info.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "ui/base/ime/chromeos/extension_ime_util.h"
|
| +#include "ui/base/ime/chromeos/input_method_descriptor.h"
|
| +#include "ui/base/ime/chromeos/input_method_manager.h"
|
| +#include "ui/base/ime/chromeos/input_method_util.h"
|
| +#include "ui/chromeos/ime/input_method_menu_item.h"
|
| +#include "ui/chromeos/ime/input_method_menu_manager.h"
|
| +
|
| +using chromeos::input_method::InputMethodDescriptor;
|
| +using chromeos::input_method::InputMethodDescriptors;
|
| +using chromeos::input_method::InputMethodManager;
|
| +using chromeos::input_method::InputMethodUtil;
|
| +
|
| +namespace ash {
|
| +namespace ime_util {
|
| +namespace {
|
| +
|
| +IMEInfo* g_current_ime_for_testing = nullptr;
|
| +std::vector<IMEInfo>* g_available_ime_list_for_testing = nullptr;
|
| +
|
| +IMEInfo ExtractIMEInfo(const InputMethodDescriptor& ime,
|
| + const InputMethodUtil& util) {
|
| + IMEInfo info;
|
| + info.id = ime.id();
|
| + info.name = util.GetInputMethodLongName(ime);
|
| + info.medium_name = util.GetInputMethodMediumName(ime);
|
| + info.short_name = util.GetInputMethodShortName(ime);
|
| + info.third_party = chromeos::extension_ime_util::IsExtensionIME(ime.id());
|
| + return info;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +IMEInfo GetCurrentIME() {
|
| + if (g_current_ime_for_testing)
|
| + return *g_current_ime_for_testing;
|
| +
|
| + InputMethodManager* manager = InputMethodManager::Get();
|
| + InputMethodUtil* util = manager->GetInputMethodUtil();
|
| + InputMethodDescriptor ime =
|
| + manager->GetActiveIMEState()->GetCurrentInputMethod();
|
| + IMEInfo info = ExtractIMEInfo(ime, *util);
|
| + info.selected = true;
|
| + return info;
|
| +}
|
| +
|
| +std::vector<IMEInfo> GetAvailableIMEList() {
|
| + if (g_available_ime_list_for_testing)
|
| + return *g_available_ime_list_for_testing;
|
| +
|
| + std::vector<IMEInfo> list;
|
| + InputMethodManager* manager = InputMethodManager::Get();
|
| + InputMethodUtil* util = manager->GetInputMethodUtil();
|
| + std::unique_ptr<InputMethodDescriptors> ime_descriptors(
|
| + manager->GetActiveIMEState()->GetActiveInputMethods());
|
| + std::string current =
|
| + manager->GetActiveIMEState()->GetCurrentInputMethod().id();
|
| + for (const InputMethodDescriptor& ime : *ime_descriptors) {
|
| + IMEInfo info = ExtractIMEInfo(ime, *util);
|
| + info.selected = ime.id() == current;
|
| + list.push_back(info);
|
| + }
|
| + return list;
|
| +}
|
| +
|
| +std::vector<IMEPropertyInfo> GetCurrentIMEProperties() {
|
| + std::vector<IMEPropertyInfo> list;
|
| + ui::ime::InputMethodMenuItemList menu_list =
|
| + ui::ime::InputMethodMenuManager::GetInstance()
|
| + ->GetCurrentInputMethodMenuItemList();
|
| + for (const ui::ime::InputMethodMenuItem& item : menu_list) {
|
| + IMEPropertyInfo property;
|
| + property.key = item.key;
|
| + property.name = base::UTF8ToUTF16(item.label);
|
| + property.selected = item.is_selection_item_checked;
|
| + list.push_back(property);
|
| + }
|
| + return list;
|
| +}
|
| +
|
| +ScopedCurrentImeForTesting::ScopedCurrentImeForTesting(IMEInfo* info)
|
| + : last_info_(g_current_ime_for_testing) {
|
| + g_current_ime_for_testing = info;
|
| +}
|
| +
|
| +ScopedCurrentImeForTesting::~ScopedCurrentImeForTesting() {
|
| + g_current_ime_for_testing = last_info_;
|
| +}
|
| +
|
| +ScopedAvailableImeListForTesting::ScopedAvailableImeListForTesting(
|
| + std::vector<IMEInfo>* list)
|
| + : last_list_(g_available_ime_list_for_testing) {
|
| + g_available_ime_list_for_testing = list;
|
| +}
|
| +
|
| +ScopedAvailableImeListForTesting::~ScopedAvailableImeListForTesting() {
|
| + g_available_ime_list_for_testing = last_list_;
|
| +}
|
| +
|
| +} // namespace ime_util
|
| +} // namespace ash
|
|
|