Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: chrome/browser/chromeos/input_method/input_method_manager_impl.cc

Issue 2323823004: Add action for each button on opt-in IME menu. (Closed)
Patch Set: Addressed comments. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/input_method/input_method_manager_impl.h" 5 #include "chrome/browser/chromeos/input_method/input_method_manager_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <algorithm> // std::find 9 #include <algorithm> // std::find
10 #include <memory> 10 #include <memory>
11 #include <set> 11 #include <set>
12 #include <sstream> 12 #include <sstream>
13 #include <utility> 13 #include <utility>
14 14
15 #include "ash/shell.h"
15 #include "base/bind.h" 16 #include "base/bind.h"
17 #include "base/feature_list.h"
16 #include "base/hash.h" 18 #include "base/hash.h"
17 #include "base/location.h" 19 #include "base/location.h"
18 #include "base/metrics/histogram_macros.h" 20 #include "base/metrics/histogram_macros.h"
19 #include "base/metrics/sparse_histogram.h" 21 #include "base/metrics/sparse_histogram.h"
20 #include "base/strings/string_split.h" 22 #include "base/strings/string_split.h"
21 #include "base/strings/string_util.h" 23 #include "base/strings/string_util.h"
22 #include "base/strings/stringprintf.h" 24 #include "base/strings/stringprintf.h"
23 #include "base/sys_info.h" 25 #include "base/sys_info.h"
24 #include "chrome/browser/browser_process.h" 26 #include "chrome/browser/browser_process.h"
25 #include "chrome/browser/chromeos/input_method/candidate_window_controller.h" 27 #include "chrome/browser/chromeos/input_method/candidate_window_controller.h"
26 #include "chrome/browser/chromeos/input_method/component_extension_ime_manager_i mpl.h" 28 #include "chrome/browser/chromeos/input_method/component_extension_ime_manager_i mpl.h"
27 #include "chrome/browser/chromeos/input_method/input_method_switch_recorder.h" 29 #include "chrome/browser/chromeos/input_method/input_method_switch_recorder.h"
28 #include "chrome/browser/chromeos/language_preferences.h" 30 #include "chrome/browser/chromeos/language_preferences.h"
29 #include "chrome/browser/chromeos/login/session/user_session_manager.h" 31 #include "chrome/browser/chromeos/login/session/user_session_manager.h"
30 #include "chrome/browser/chromeos/profiles/profile_helper.h" 32 #include "chrome/browser/chromeos/profiles/profile_helper.h"
31 #include "chrome/browser/profiles/profile_manager.h" 33 #include "chrome/browser/profiles/profile_manager.h"
32 #include "chrome/browser/ui/ash/ash_util.h" 34 #include "chrome/browser/ui/ash/ash_util.h"
35 #include "chrome/common/chrome_features.h"
33 #include "chrome/common/pref_names.h" 36 #include "chrome/common/pref_names.h"
34 #include "components/prefs/pref_service.h" 37 #include "components/prefs/pref_service.h"
35 #include "components/user_manager/user_manager.h" 38 #include "components/user_manager/user_manager.h"
36 #include "third_party/icu/source/common/unicode/uloc.h" 39 #include "third_party/icu/source/common/unicode/uloc.h"
37 #include "ui/base/accelerators/accelerator.h" 40 #include "ui/base/accelerators/accelerator.h"
38 #include "ui/base/ime/chromeos/component_extension_ime_manager.h" 41 #include "ui/base/ime/chromeos/component_extension_ime_manager.h"
39 #include "ui/base/ime/chromeos/extension_ime_util.h" 42 #include "ui/base/ime/chromeos/extension_ime_util.h"
40 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" 43 #include "ui/base/ime/chromeos/fake_ime_keyboard.h"
41 #include "ui/base/ime/chromeos/ime_keyboard.h" 44 #include "ui/base/ime/chromeos/ime_keyboard.h"
42 #include "ui/base/ime/chromeos/input_method_delegate.h" 45 #include "ui/base/ime/chromeos/input_method_delegate.h"
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 if (is_ime_menu_activated_ == state_->menu_activated) 1209 if (is_ime_menu_activated_ == state_->menu_activated)
1207 return; 1210 return;
1208 1211
1209 is_ime_menu_activated_ = state_->menu_activated; 1212 is_ime_menu_activated_ = state_->menu_activated;
1210 FOR_EACH_OBSERVER(InputMethodManager::ImeMenuObserver, ime_menu_observers_, 1213 FOR_EACH_OBSERVER(InputMethodManager::ImeMenuObserver, ime_menu_observers_,
1211 ImeMenuActivationChanged(is_ime_menu_activated_)); 1214 ImeMenuActivationChanged(is_ime_menu_activated_));
1212 UMA_HISTOGRAM_BOOLEAN("InputMethod.ImeMenu.ActivationChanged", 1215 UMA_HISTOGRAM_BOOLEAN("InputMethod.ImeMenu.ActivationChanged",
1213 is_ime_menu_activated_); 1216 is_ime_menu_activated_);
1214 } 1217 }
1215 1218
1219 void InputMethodManagerImpl::OverrideKeyboardUrlRef(const std::string& keyset) {
1220 GURL url = keyboard::GetOverrideContentUrl();
1221
1222 // If fails to find ref or tag "id" in the ref, it means the current IME is
1223 // not system IME, and we don't support show emoji, handwriting or voice
1224 // input for such IME extension.
1225 if (!url.has_ref())
1226 return;
1227 std::string overridden_ref = url.ref();
1228 auto i = overridden_ref.find("id");
1229 if (i == std::string::npos)
1230 return;
1231
1232 // If |keyset| is empty, it indicates that we should override the url back
Shu Chen 2016/09/19 06:02:10 Suggest to move this comment to the interface defi
Azure Wei 2016/09/19 08:07:19 Done.
1233 // with the keyboard keyset.
1234 if (keyset.empty()) {
1235 keyboard::SetOverrideContentUrl(
1236 GetActiveIMEState()->GetCurrentInputMethod().input_view_url());
1237 return;
1238 }
1239
1240 // For system IME extension, the input view url is overridden as:
1241 // chrome-extension://${extension_id}/inputview.html#id=us.compact.qwerty
1242 // &language=en-US&passwordLayout=us.compact.qwerty&name=keyboard_us
1243 // Fow emoji and handwriting input, we replace the id=${keyset} part with
1244 // desired keyset like: id=emoji; For voice, we append ".voice" to the end of
1245 // id like: id=${keyset}.voice.
1246 auto j = overridden_ref.find("&", i + 1);
1247 if (keyset == "voice") {
1248 overridden_ref.replace(j, 0, "." + keyset);
1249 } else {
1250 overridden_ref.replace(i, j - i, "id=" + keyset);
1251 }
1252
1253 GURL::Replacements replacements;
1254 replacements.SetRefStr(overridden_ref);
1255 keyboard::SetOverrideContentUrl(url.ReplaceComponents(replacements));
1256 }
1257
1258 bool InputMethodManagerImpl::IsEmojiHandwritingVoiceOnImeMenuEnabled() {
1259 return base::FeatureList::IsEnabled(features::kEHVInputOnImeMenu);
1260 }
1261
1216 } // namespace input_method 1262 } // namespace input_method
1217 } // namespace chromeos 1263 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698