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

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

Issue 190033005: [IME] Removes the duplicated IMEs in chrome://settings/languages, and support async component IMEs … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 9 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 | Annotate | Revision Log
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 <algorithm> // std::find 7 #include <algorithm> // std::find
8 8
9 #include "ash/ime/input_method_menu_item.h" 9 #include "ash/ime/input_method_menu_item.h"
10 #include "ash/ime/input_method_menu_manager.h" 10 #include "ash/ime/input_method_menu_manager.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 case STATE_TERMINATING: { 105 case STATE_TERMINATING: {
106 if (candidate_window_controller_.get()) 106 if (candidate_window_controller_.get())
107 candidate_window_controller_.reset(); 107 candidate_window_controller_.reset();
108 break; 108 break;
109 } 109 }
110 } 110 }
111 } 111 }
112 112
113 scoped_ptr<InputMethodDescriptors> 113 scoped_ptr<InputMethodDescriptors>
114 InputMethodManagerImpl::GetSupportedInputMethods() const { 114 InputMethodManagerImpl::GetSupportedInputMethods() const {
115 return whitelist_.GetSupportedInputMethods(); 115 if (!extension_ime_util::UseWrappedExtensionKeyboardLayouts()) {
116 return whitelist_.GetSupportedInputMethods();
117 }
118 // Returns empty list because all the supported imes have been migrated to
119 // component extension imes.
120 return scoped_ptr<InputMethodDescriptors>(new InputMethodDescriptors).Pass();
116 } 121 }
117 122
118 scoped_ptr<InputMethodDescriptors> 123 scoped_ptr<InputMethodDescriptors>
119 InputMethodManagerImpl::GetActiveInputMethods() const { 124 InputMethodManagerImpl::GetActiveInputMethods() const {
120 scoped_ptr<InputMethodDescriptors> result(new InputMethodDescriptors); 125 scoped_ptr<InputMethodDescriptors> result(new InputMethodDescriptors);
121 // Build the active input method descriptors from the active input 126 // Build the active input method descriptors from the active input
122 // methods cache |active_input_method_ids_|. 127 // methods cache |active_input_method_ids_|.
123 for (size_t i = 0; i < active_input_method_ids_.size(); ++i) { 128 for (size_t i = 0; i < active_input_method_ids_.size(); ++i) {
124 const std::string& input_method_id = active_input_method_ids_[i]; 129 const std::string& input_method_id = active_input_method_ids_[i];
125 const InputMethodDescriptor* descriptor = 130 const InputMethodDescriptor* descriptor =
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 } 244 }
240 245
241 if (!Contains(*new_active_input_method_ids, input_method_id)) 246 if (!Contains(*new_active_input_method_ids, input_method_id))
242 new_active_input_method_ids->push_back(input_method_id); 247 new_active_input_method_ids->push_back(input_method_id);
243 248
244 return true; 249 return true;
245 } 250 }
246 251
247 // Starts or stops the system input method framework as needed. 252 // Starts or stops the system input method framework as needed.
248 void InputMethodManagerImpl::ReconfigureIMFramework() { 253 void InputMethodManagerImpl::ReconfigureIMFramework() {
249 if (component_extension_ime_manager_->IsInitialized()) 254 if (component_extension_ime_manager_->IsInitialized())
Yuki 2014/03/07 07:47:04 We don't need this conditional. LoadNecessaryComp
Shu Chen 2014/03/07 08:24:09 Done.
250 LoadNecessaryComponentExtensions(); 255 LoadNecessaryComponentExtensions();
251 256
252 const bool need_engine =
253 !ContainsOnlyKeyboardLayout(active_input_method_ids_);
254
255 // Initialize candidate window controller and widgets such as 257 // Initialize candidate window controller and widgets such as
256 // candidate window, infolist and mode indicator. Note, mode 258 // candidate window, infolist and mode indicator. Note, mode
257 // indicator is used by only keyboard layout input methods. 259 // indicator is used by only keyboard layout input methods.
258 if (need_engine || active_input_method_ids_.size() > 1) 260 MaybeInitializeCandidateWindowController();
259 MaybeInitializeCandidateWindowController();
260 } 261 }
261 262
262 bool InputMethodManagerImpl::EnableInputMethod( 263 bool InputMethodManagerImpl::EnableInputMethod(
263 const std::string& input_method_id) { 264 const std::string& input_method_id) {
264 if (!EnableInputMethodImpl(input_method_id, &active_input_method_ids_)) 265 if (!EnableInputMethodImpl(input_method_id, &active_input_method_ids_))
265 return false; 266 return false;
266 267
267 ReconfigureIMFramework(); 268 ReconfigureIMFramework();
268 return true; 269 return true;
269 } 270 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 if (candidate_window_controller_.get()) 346 if (candidate_window_controller_.get())
346 candidate_window_controller_->Hide(); 347 candidate_window_controller_->Hide();
347 348
348 // Disable the current engine handler. 349 // Disable the current engine handler.
349 IMEEngineHandlerInterface* engine = 350 IMEEngineHandlerInterface* engine =
350 IMEBridge::Get()->GetCurrentEngineHandler(); 351 IMEBridge::Get()->GetCurrentEngineHandler();
351 if (engine) 352 if (engine)
352 engine->Disable(); 353 engine->Disable();
353 354
354 // Configure the next engine handler. 355 // Configure the next engine handler.
355 if (InputMethodUtil::IsKeyboardLayout(input_method_id_to_switch)) { 356 if (InputMethodUtil::IsKeyboardLayout(input_method_id_to_switch) &&
357 !extension_ime_util::IsKeyboardLayoutExtension(
358 input_method_id_to_switch)) {
356 IMEBridge::Get()->SetCurrentEngineHandler(NULL); 359 IMEBridge::Get()->SetCurrentEngineHandler(NULL);
357 } else { 360 } else {
358 IMEEngineHandlerInterface* next_engine = 361 IMEEngineHandlerInterface* next_engine =
359 IMEBridge::Get()->SetCurrentEngineHandlerById( 362 IMEBridge::Get()->SetCurrentEngineHandlerById(
360 input_method_id_to_switch); 363 input_method_id_to_switch);
361 364
362 if (next_engine) 365 if (next_engine)
363 next_engine->Enable(); 366 next_engine->Enable();
364 } 367 }
365 368
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 } 409 }
407 410
408 void InputMethodManagerImpl::OnComponentExtensionInitialized( 411 void InputMethodManagerImpl::OnComponentExtensionInitialized(
409 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate) { 412 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate) {
410 DCHECK(thread_checker_.CalledOnValidThread()); 413 DCHECK(thread_checker_.CalledOnValidThread());
411 component_extension_ime_manager_->Initialize(delegate.Pass()); 414 component_extension_ime_manager_->Initialize(delegate.Pass());
412 util_.SetComponentExtensions( 415 util_.SetComponentExtensions(
413 component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor()); 416 component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor());
414 417
415 LoadNecessaryComponentExtensions(); 418 LoadNecessaryComponentExtensions();
419 component_extension_ime_manager_->NotifyInitialized();
Yuki 2014/03/07 07:47:04 In general, This sort of methods (NotifyFoobar())
Shu Chen 2014/03/07 08:24:09 This NotifyInitialized() should be called only onc
Yuki 2014/03/07 09:02:28 Then, could you add a flag inside ComponentExtensi
416 420
417 if (!pending_input_method_.empty()) 421 if (!pending_input_method_.empty())
418 ChangeInputMethodInternal(pending_input_method_, false); 422 ChangeInputMethodInternal(pending_input_method_, false);
419 } 423 }
420 424
421 void InputMethodManagerImpl::LoadNecessaryComponentExtensions() { 425 void InputMethodManagerImpl::LoadNecessaryComponentExtensions() {
422 if (!component_extension_ime_manager_->IsInitialized()) 426 if (!component_extension_ime_manager_->IsInitialized())
423 return; 427 return;
424 // Load component extensions but also update |active_input_method_ids_| as 428 // Load component extensions but also update |active_input_method_ids_| as
425 // some component extension IMEs may have been removed from the Chrome OS 429 // some component extension IMEs may have been removed from the Chrome OS
426 // image. If specified component extension IME no longer exists, falling back 430 // image. If specified component extension IME no longer exists, falling back
427 // to an existing IME. 431 // to an existing IME.
428 std::vector<std::string> unfiltered_input_method_ids = 432 std::vector<std::string> unfiltered_input_method_ids =
Yuki 2014/03/07 07:47:04 Just a nit: std::vector unfiltered_ids; // empty
Shu Chen 2014/03/07 08:24:09 Done.
429 active_input_method_ids_; 433 active_input_method_ids_;
430 active_input_method_ids_.clear(); 434 active_input_method_ids_.clear();
431 for (size_t i = 0; i < unfiltered_input_method_ids.size(); ++i) { 435 for (size_t i = 0; i < unfiltered_input_method_ids.size(); ++i) {
432 if (!extension_ime_util::IsComponentExtensionIME( 436 if (!extension_ime_util::IsComponentExtensionIME(
433 unfiltered_input_method_ids[i])) { 437 unfiltered_input_method_ids[i])) {
434 // Legacy IMEs or xkb layouts are alwayes active. 438 // Legacy IMEs or xkb layouts are alwayes active.
435 active_input_method_ids_.push_back(unfiltered_input_method_ids[i]); 439 active_input_method_ids_.push_back(unfiltered_input_method_ids[i]);
436 } else if (component_extension_ime_manager_->IsWhitelisted( 440 } else if (component_extension_ime_manager_->IsWhitelisted(
437 unfiltered_input_method_ids[i])) { 441 unfiltered_input_method_ids[i])) {
438 component_extension_ime_manager_->LoadComponentExtensionIME( 442 component_extension_ime_manager_->LoadComponentExtensionIME(
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 active_input_method_ids_ = saved_active_input_method_ids_; 832 active_input_method_ids_ = saved_active_input_method_ids_;
829 833
830 ChangeInputMethod(current_input_method_.id()); 834 ChangeInputMethod(current_input_method_.id());
831 } 835 }
832 836
833 bool InputMethodManagerImpl::InputMethodIsActivated( 837 bool InputMethodManagerImpl::InputMethodIsActivated(
834 const std::string& input_method_id) { 838 const std::string& input_method_id) {
835 return Contains(active_input_method_ids_, input_method_id); 839 return Contains(active_input_method_ids_, input_method_id);
836 } 840 }
837 841
838 bool InputMethodManagerImpl::ContainsOnlyKeyboardLayout(
839 const std::vector<std::string>& value) {
840 for (size_t i = 0; i < value.size(); ++i) {
841 if (!InputMethodUtil::IsKeyboardLayout(value[i]))
842 return false;
843 }
844 return true;
845 }
846
847 void InputMethodManagerImpl::MaybeInitializeCandidateWindowController() { 842 void InputMethodManagerImpl::MaybeInitializeCandidateWindowController() {
848 if (candidate_window_controller_.get()) 843 if (candidate_window_controller_.get())
849 return; 844 return;
850 845
851 candidate_window_controller_.reset( 846 candidate_window_controller_.reset(
852 CandidateWindowController::CreateCandidateWindowController()); 847 CandidateWindowController::CreateCandidateWindowController());
853 candidate_window_controller_->AddObserver(this); 848 candidate_window_controller_->AddObserver(this);
854 } 849 }
855 850
856 } // namespace input_method 851 } // namespace input_method
857 } // namespace chromeos 852 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698