| OLD | NEW |
| 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 "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 bool Contains(const std::vector<std::string>& container, | 36 bool Contains(const std::vector<std::string>& container, |
| 37 const std::string& value) { | 37 const std::string& value) { |
| 38 return std::find(container.begin(), container.end(), value) != | 38 return std::find(container.begin(), container.end(), value) != |
| 39 container.end(); | 39 container.end(); |
| 40 } | 40 } |
| 41 | 41 |
| 42 } // namespace | 42 } // namespace |
| 43 | 43 |
| 44 bool InputMethodManagerImpl::IsLoginKeyboard( | 44 bool InputMethodManagerImpl::IsLoginKeyboard( |
| 45 const std::string& layout) const { | 45 const std::string& layout) const { |
| 46 const InputMethodDescriptor* ime = | 46 return util_.IsLoginKeyboard(layout); |
| 47 util_.GetInputMethodDescriptorFromId(layout); | |
| 48 return ime ? ime->is_login_keyboard() : false; | |
| 49 } | 47 } |
| 50 | 48 |
| 51 InputMethodManagerImpl::InputMethodManagerImpl( | 49 InputMethodManagerImpl::InputMethodManagerImpl( |
| 52 scoped_ptr<InputMethodDelegate> delegate) | 50 scoped_ptr<InputMethodDelegate> delegate) |
| 53 : delegate_(delegate.Pass()), | 51 : delegate_(delegate.Pass()), |
| 54 state_(STATE_LOGIN_SCREEN), | 52 state_(STATE_LOGIN_SCREEN), |
| 55 util_(delegate_.get(), GetSupportedInputMethods()), | 53 util_(delegate_.get(), GetSupportedInputMethods()), |
| 56 component_extension_ime_manager_(new ComponentExtensionIMEManager()), | 54 component_extension_ime_manager_(new ComponentExtensionIMEManager()), |
| 57 weak_ptr_factory_(this) { | 55 weak_ptr_factory_(this) { |
| 58 } | 56 } |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 input_method_id); | 150 input_method_id); |
| 153 if (!ime) { | 151 if (!ime) { |
| 154 std::map<std::string, InputMethodDescriptor>::const_iterator ix = | 152 std::map<std::string, InputMethodDescriptor>::const_iterator ix = |
| 155 extra_input_methods_.find(input_method_id); | 153 extra_input_methods_.find(input_method_id); |
| 156 if (ix != extra_input_methods_.end()) | 154 if (ix != extra_input_methods_.end()) |
| 157 ime = &ix->second; | 155 ime = &ix->second; |
| 158 } | 156 } |
| 159 return ime; | 157 return ime; |
| 160 } | 158 } |
| 161 | 159 |
| 162 void InputMethodManagerImpl::EnableLayouts(const std::string& language_code, | 160 void InputMethodManagerImpl::EnableLoginLayouts( |
| 163 const std::string& initial_layout) { | 161 const std::string& language_code, |
| 162 const std::string& initial_layout) { |
| 164 if (state_ == STATE_TERMINATING) | 163 if (state_ == STATE_TERMINATING) |
| 165 return; | 164 return; |
| 166 | 165 |
| 167 std::vector<std::string> candidates; | 166 std::vector<std::string> candidates; |
| 168 // Add input methods associated with the language. | 167 // Add input methods associated with the language. |
| 169 util_.GetInputMethodIdsFromLanguageCode(language_code, | 168 util_.GetInputMethodIdsFromLanguageCode(language_code, |
| 170 kKeyboardLayoutsOnly, | 169 kKeyboardLayoutsOnly, |
| 171 &candidates); | 170 &candidates); |
| 172 // Add the hardware keyboard as well. We should always add this so users | 171 // Add the hardware keyboard as well. We should always add this so users |
| 173 // can use the hardware keyboard on the login screen and the screen locker. | 172 // can use the hardware keyboard on the login screen and the screen locker. |
| 174 candidates.push_back(util_.GetHardwareInputMethodId()); | 173 candidates.push_back(util_.GetHardwareLoginInputMethodId()); |
| 175 | 174 |
| 176 std::vector<std::string> layouts; | 175 std::vector<std::string> layouts; |
| 177 // First, add the initial input method ID, if it's requested, to | 176 // First, add the initial input method ID, if it's requested, to |
| 178 // layouts, so it appears first on the list of active input | 177 // layouts, so it appears first on the list of active input |
| 179 // methods at the input language status menu. | 178 // methods at the input language status menu. |
| 180 if (util_.IsValidInputMethodId(initial_layout) && | 179 if (util_.IsValidInputMethodId(initial_layout)) { |
| 181 IsLoginKeyboard(initial_layout)) { | 180 if (!IsLoginKeyboard(initial_layout)) { |
| 182 layouts.push_back(initial_layout); | 181 DVLOG(1) |
| 182 << "EnableLoginLayouts: ignoring non-login initial keyboard layout:" |
| 183 << initial_layout; |
| 184 } else { |
| 185 layouts.push_back(initial_layout); |
| 186 } |
| 183 } else if (!initial_layout.empty()) { | 187 } else if (!initial_layout.empty()) { |
| 184 DVLOG(1) << "EnableLayouts: ignoring non-keyboard or invalid ID: " | 188 DVLOG(1) << "EnableLoginLayouts: ignoring non-keyboard or invalid ID: " |
| 185 << initial_layout; | 189 << initial_layout; |
| 186 } | 190 } |
| 187 | 191 |
| 188 // Add candidates to layouts, while skipping duplicates. | 192 // Add candidates to layouts, while skipping duplicates. |
| 189 for (size_t i = 0; i < candidates.size(); ++i) { | 193 for (size_t i = 0; i < candidates.size(); ++i) { |
| 190 const std::string& candidate = candidates[i]; | 194 const std::string& candidate = candidates[i]; |
| 191 // Not efficient, but should be fine, as the two vectors are very | 195 // Not efficient, but should be fine, as the two vectors are very |
| 192 // short (2-5 items). | 196 // short (2-5 items). |
| 193 if (!Contains(layouts, candidate) && IsLoginKeyboard(candidate)) | 197 if (!Contains(layouts, candidate) && IsLoginKeyboard(candidate)) |
| 194 layouts.push_back(candidate); | 198 layouts.push_back(candidate); |
| (...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 543 const std::string locale = g_browser_process->GetApplicationLocale(); | 547 const std::string locale = g_browser_process->GetApplicationLocale(); |
| 544 // If the preferred keyboard for the login screen has been saved, use it. | 548 // If the preferred keyboard for the login screen has been saved, use it. |
| 545 PrefService* prefs = g_browser_process->local_state(); | 549 PrefService* prefs = g_browser_process->local_state(); |
| 546 std::string initial_input_method_id = | 550 std::string initial_input_method_id = |
| 547 prefs->GetString(chromeos::language_prefs::kPreferredKeyboardLayout); | 551 prefs->GetString(chromeos::language_prefs::kPreferredKeyboardLayout); |
| 548 if (initial_input_method_id.empty()) { | 552 if (initial_input_method_id.empty()) { |
| 549 // If kPreferredKeyboardLayout is not specified, use the hardware layout. | 553 // If kPreferredKeyboardLayout is not specified, use the hardware layout. |
| 550 initial_input_method_id = | 554 initial_input_method_id = |
| 551 GetInputMethodUtil()->GetHardwareInputMethodId(); | 555 GetInputMethodUtil()->GetHardwareInputMethodId(); |
| 552 } | 556 } |
| 553 EnableLayouts(locale, initial_input_method_id); | 557 EnableLoginLayouts(locale, initial_input_method_id); |
| 554 } | 558 } |
| 555 } | 559 } |
| 556 | 560 |
| 557 bool InputMethodManagerImpl::SwitchToNextInputMethod() { | 561 bool InputMethodManagerImpl::SwitchToNextInputMethod() { |
| 558 // Sanity checks. | 562 // Sanity checks. |
| 559 if (active_input_method_ids_.empty()) { | 563 if (active_input_method_ids_.empty()) { |
| 560 DVLOG(1) << "active input method is empty"; | 564 DVLOG(1) << "active input method is empty"; |
| 561 return false; | 565 return false; |
| 562 } | 566 } |
| 563 | 567 |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 if (candidate_window_controller_.get()) | 832 if (candidate_window_controller_.get()) |
| 829 return; | 833 return; |
| 830 | 834 |
| 831 candidate_window_controller_.reset( | 835 candidate_window_controller_.reset( |
| 832 CandidateWindowController::CreateCandidateWindowController()); | 836 CandidateWindowController::CreateCandidateWindowController()); |
| 833 candidate_window_controller_->AddObserver(this); | 837 candidate_window_controller_->AddObserver(this); |
| 834 } | 838 } |
| 835 | 839 |
| 836 } // namespace input_method | 840 } // namespace input_method |
| 837 } // namespace chromeos | 841 } // namespace chromeos |
| OLD | NEW |