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

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: 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::ShowInputViewWithKeyset(
1220 const std::string& keyset) {
1221 std::string overriden_url = keyboard::GetOverrideContentUrl().spec();
James Cook 2016/09/12 17:05:56 nit: overriden -> overridden
Azure Wei 2016/09/14 06:53:28 Done.
1222
1223 auto i = overriden_url.find("#id");
James Cook 2016/09/12 17:05:57 Parsing URLs as strings is discouraged. Is there a
Azure Wei 2016/09/14 06:53:28 Updated with using ReplaceComponents(), it this be
James Cook 2016/09/14 21:14:27 Yes, thanks.
1224 // If fails to find "#id", it means the current IME is not system IME, and we
1225 // don't support show e/v/h input for such IME extension.
1226 if (i == std::string::npos) {
James Cook 2016/09/12 17:05:56 nit: no need for {} for single-line if
Azure Wei 2016/09/14 06:53:28 Done.
1227 return;
1228 }
1229
1230 // For system IME exension, the input view url is overriden as:
1231 // chrome-extension://${extension_id}/inputview.html#id=us.compact.qwerty
1232 // &language=en-US&passwordLayout=us.compact.qwerty&name=keyboard_us
1233 // We should replace the id=${keyset} part with desired keyset.
1234 auto j = overriden_url.find("&", i + 1);
1235 overriden_url.replace(i, j - i, "#id=" + keyset);
1236
1237 keyboard::SetOverrideContentUrl(GURL(overriden_url));
1238
1239 keyboard::KeyboardController* keyboard_controller =
1240 keyboard::KeyboardController::GetInstance();
1241 if (keyboard_controller) {
1242 keyboard_controller->ShowKeyboard(false);
1243 return;
1244 }
1245
1246 if (keyboard::IsKeyboardEnabled())
1247 return;
1248
1249 // Forcibly enables the a11y onscreen keyboard if there is on keyboard enabled
1250 // for now. And re-disables it after showing once.
1251 keyboard::SetAccessibilityKeyboardEnabled(true);
1252 ash::Shell::GetInstance()->CreateKeyboard();
1253 keyboard_controller = keyboard::KeyboardController::GetInstance();
1254 if (!keyboard_controller) {
1255 keyboard::SetAccessibilityKeyboardEnabled(false);
1256 }
1257 keyboard_controller->ShowKeyboard(false);
1258 keyboard::SetAccessibilityKeyboardEnabled(false);
James Cook 2016/09/12 17:05:57 Does it matter if the accessibilitykeyboard was en
Azure Wei 2016/09/14 06:53:28 Updated this logic.
1259 }
James Cook 2016/09/12 17:05:56 I don't know the virtual keyboard code very well,
Azure Wei 2016/09/14 06:53:28 Updated. Also added tests: InputMethodManagerImpl
1260
1261 bool InputMethodManagerImpl::IsEHVInputOnImeMenuEnabled() {
1262 return base::FeatureList::IsEnabled(features::kEHVInputOnImeMenu);
James Cook 2016/09/12 17:05:56 FYI, I think the comment on kENVInputOnImeMenu in
Azure Wei 2016/09/14 06:53:28 Updated.
1263 }
1264
1216 } // namespace input_method 1265 } // namespace input_method
1217 } // namespace chromeos 1266 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698