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 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_MANAGER_IMPL_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_MANAGER_IMPL_H_ |
6 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_MANAGER_IMPL_H_ | 6 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_MANAGER_IMPL_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 12 matching lines...) Expand all Loading... | |
23 class ComponentExtensionIMEManagerDelegate; | 23 class ComponentExtensionIMEManagerDelegate; |
24 class InputMethodEngine; | 24 class InputMethodEngine; |
25 namespace input_method { | 25 namespace input_method { |
26 class InputMethodDelegate; | 26 class InputMethodDelegate; |
27 class ImeKeyboard; | 27 class ImeKeyboard; |
28 | 28 |
29 // The implementation of InputMethodManager. | 29 // The implementation of InputMethodManager. |
30 class InputMethodManagerImpl : public InputMethodManager, | 30 class InputMethodManagerImpl : public InputMethodManager, |
31 public CandidateWindowController::Observer { | 31 public CandidateWindowController::Observer { |
32 public: | 32 public: |
33 class State : public InputMethodManager::State { | |
34 public: | |
35 State(); | |
36 | |
37 // Init new state as a copy of other. | |
38 void InitFrom(const State& other); | |
39 | |
40 std::string Dump() const; | |
41 | |
42 std::string state_name; | |
43 | |
44 // The input method which was/is selected. | |
45 InputMethodDescriptor previous_input_method_; | |
46 InputMethodDescriptor current_input_method_; | |
47 // The active input method ids cache. | |
48 std::vector<std::string> active_input_method_ids_; | |
49 | |
50 // For screen locker. When the screen is locked, |previous_input_method_|, | |
51 // |current_input_method_|, and |active_input_method_ids_| above are copied | |
52 // to these "saved" variables. | |
53 InputMethodDescriptor saved_previous_input_method_; | |
54 InputMethodDescriptor saved_current_input_method_; | |
55 std::vector<std::string> saved_active_input_method_ids_; | |
56 | |
57 std::string pending_input_method_; | |
58 | |
59 // The engine map: | |
60 // { input_method_id : Engine }. | |
61 typedef std::map<std::string, InputMethodEngineInterface*> EngineMap; | |
62 EngineMap engine_map_; | |
63 | |
64 protected: | |
65 friend base::RefCounted<chromeos::input_method::InputMethodManager::State>; | |
66 virtual ~State(); | |
67 }; | |
68 | |
33 // Constructs an InputMethodManager instance. The client is responsible for | 69 // Constructs an InputMethodManager instance. The client is responsible for |
34 // calling |SetState| in response to relevant changes in browser state. | 70 // calling |SetUIState| in response to relevant changes in browser state. |
35 explicit InputMethodManagerImpl(scoped_ptr<InputMethodDelegate> delegate); | 71 explicit InputMethodManagerImpl(scoped_ptr<InputMethodDelegate> delegate); |
36 virtual ~InputMethodManagerImpl(); | 72 virtual ~InputMethodManagerImpl(); |
37 | 73 |
38 // Attach CandidateWindowController, and ImeKeyboard objects to the | 74 // Attach CandidateWindowController, and ImeKeyboard objects to the |
39 // InputMethodManagerImpl object. You don't have to call this | 75 // InputMethodManagerImpl object. You don't have to call this |
40 // function if you attach them yourself (e.g. in unit tests) using | 76 // function if you attach them yourself (e.g. in unit tests) using |
41 // the protected setters. | 77 // the protected setters. |
42 void Init(base::SequencedTaskRunner* ui_task_runner); | 78 void Init(base::SequencedTaskRunner* ui_task_runner); |
43 | 79 |
44 // Receives notification of an InputMethodManager::State transition. | 80 // Receives notification of an InputMethodManager::UIState transition. |
45 void SetState(State new_state); | 81 void SetUIState(UIState new_ui_state); |
46 | 82 |
47 // InputMethodManager override: | 83 // InputMethodManager override: |
48 virtual void AddObserver(InputMethodManager::Observer* observer) OVERRIDE; | 84 virtual void AddObserver(InputMethodManager::Observer* observer) OVERRIDE; |
49 virtual void AddCandidateWindowObserver( | 85 virtual void AddCandidateWindowObserver( |
50 InputMethodManager::CandidateWindowObserver* observer) OVERRIDE; | 86 InputMethodManager::CandidateWindowObserver* observer) OVERRIDE; |
51 virtual void RemoveObserver(InputMethodManager::Observer* observer) OVERRIDE; | 87 virtual void RemoveObserver(InputMethodManager::Observer* observer) OVERRIDE; |
52 virtual void RemoveCandidateWindowObserver( | 88 virtual void RemoveCandidateWindowObserver( |
53 InputMethodManager::CandidateWindowObserver* observer) OVERRIDE; | 89 InputMethodManager::CandidateWindowObserver* observer) OVERRIDE; |
54 virtual scoped_ptr<InputMethodDescriptors> | 90 virtual scoped_ptr<InputMethodDescriptors> |
55 GetSupportedInputMethods() const OVERRIDE; | 91 GetSupportedInputMethods() const OVERRIDE; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
89 | 125 |
90 virtual ImeKeyboard* GetImeKeyboard() OVERRIDE; | 126 virtual ImeKeyboard* GetImeKeyboard() OVERRIDE; |
91 virtual InputMethodUtil* GetInputMethodUtil() OVERRIDE; | 127 virtual InputMethodUtil* GetInputMethodUtil() OVERRIDE; |
92 virtual ComponentExtensionIMEManager* | 128 virtual ComponentExtensionIMEManager* |
93 GetComponentExtensionIMEManager() OVERRIDE; | 129 GetComponentExtensionIMEManager() OVERRIDE; |
94 virtual bool IsLoginKeyboard(const std::string& layout) const OVERRIDE; | 130 virtual bool IsLoginKeyboard(const std::string& layout) const OVERRIDE; |
95 | 131 |
96 virtual bool MigrateInputMethods( | 132 virtual bool MigrateInputMethods( |
97 std::vector<std::string>* input_method_ids) OVERRIDE; | 133 std::vector<std::string>* input_method_ids) OVERRIDE; |
98 | 134 |
135 virtual scoped_refptr<InputMethodManager::State> CreateNewState( | |
136 const std::string& debug_name) const OVERRIDE; | |
137 virtual void SetState( | |
138 scoped_refptr<InputMethodManager::State> state) OVERRIDE; | |
139 | |
99 // Sets |candidate_window_controller_|. | 140 // Sets |candidate_window_controller_|. |
100 void SetCandidateWindowControllerForTesting( | 141 void SetCandidateWindowControllerForTesting( |
101 CandidateWindowController* candidate_window_controller); | 142 CandidateWindowController* candidate_window_controller); |
102 // Sets |keyboard_|. | 143 // Sets |keyboard_|. |
103 void SetImeKeyboardForTesting(ImeKeyboard* keyboard); | 144 void SetImeKeyboardForTesting(ImeKeyboard* keyboard); |
104 // Initialize |component_extension_manager_|. | 145 // Initialize |component_extension_manager_|. |
105 void InitializeComponentExtensionForTesting( | 146 void InitializeComponentExtensionForTesting( |
106 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate); | 147 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate); |
107 | 148 |
108 private: | 149 private: |
(...skipping 23 matching lines...) Expand all Loading... | |
132 // done. | 173 // done. |
133 void MaybeInitializeCandidateWindowController(); | 174 void MaybeInitializeCandidateWindowController(); |
134 | 175 |
135 // If |current_input_method_id_| is not in |input_method_ids|, switch to | 176 // If |current_input_method_id_| is not in |input_method_ids|, switch to |
136 // input_method_ids[0]. If the ID is equal to input_method_ids[N], switch to | 177 // input_method_ids[0]. If the ID is equal to input_method_ids[N], switch to |
137 // input_method_ids[N+1]. | 178 // input_method_ids[N+1]. |
138 void SwitchToNextInputMethodInternal( | 179 void SwitchToNextInputMethodInternal( |
139 const std::vector<std::string>& input_method_ids, | 180 const std::vector<std::string>& input_method_ids, |
140 const std::string& current_input_method_id); | 181 const std::string& current_input_method_id); |
141 | 182 |
183 // Change system input method and inform observers. Doesn't modify state. | |
184 void ChangeInputMethodInternal(const InputMethodDescriptor& input_method_id, | |
185 bool show_message); | |
186 | |
142 // Change system input method. | 187 // Change system input method. |
143 // Returns true if the system input method is changed. | 188 // Returns true if the system input method is changed. |
144 bool ChangeInputMethodInternal(const std::string& input_method_id, | 189 bool LookupAndChangeInputMethodInternal(const std::string& input_method_id, |
145 bool show_message); | 190 bool show_message); |
146 | 191 |
147 // Gets whether the XKB extension is loaded successfully by checking the XKB | 192 // Gets whether the XKB extension is loaded successfully by checking the XKB |
148 // input methods in input methods in |component_extension_ime_manager_|. | 193 // input methods in input methods in |component_extension_ime_manager_|. |
149 bool IsXkbComponentExtensionAvailable() const; | 194 bool IsXkbComponentExtensionAvailable() const; |
150 | 195 |
151 // Called when the ComponentExtensionIMEManagerDelegate is initialized. | 196 // Called when the ComponentExtensionIMEManagerDelegate is initialized. |
152 void OnComponentExtensionInitialized( | 197 void OnComponentExtensionInitialized( |
153 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate); | 198 scoped_ptr<ComponentExtensionIMEManagerDelegate> delegate); |
154 void InitializeComponentExtension(); | 199 void InitializeComponentExtension(); |
155 | 200 |
156 // Loads necessary component extensions. | 201 // Loads necessary component extensions. |
157 // TODO(nona): Support dynamical unloading. | 202 // TODO(nona): Support dynamical unloading. |
158 void LoadNecessaryComponentExtensions(); | 203 void LoadNecessaryComponentExtensions(); |
159 | 204 |
160 // Adds new input method to given list if possible | 205 // Adds new input method to given list if possible |
161 bool EnableInputMethodImpl( | 206 bool EnableInputMethodImpl( |
162 const std::string& input_method_id, | 207 const std::string& input_method_id, |
163 std::vector<std::string>* new_active_input_method_ids) const; | 208 std::vector<std::string>* new_active_input_method_ids) const; |
164 | 209 |
165 // Starts or stops the system input method framework as needed. | 210 // Starts or stops the system input method framework as needed. |
166 // (after list of enabled input methods has been updated) | 211 // (after list of enabled input methods has been updated) |
167 void ReconfigureIMFramework(); | 212 void ReconfigureIMFramework(); |
168 | 213 |
169 // Gets the current active user profile. | |
170 Profile* GetProfile() const; | |
171 | |
172 scoped_ptr<InputMethodDelegate> delegate_; | 214 scoped_ptr<InputMethodDelegate> delegate_; |
173 | 215 |
174 // The current browser status. | 216 // The current browser status. |
175 State state_; | 217 UIState ui_state_; |
176 | 218 |
177 // A list of objects that monitor the manager. | 219 // A list of objects that monitor the manager. |
178 ObserverList<InputMethodManager::Observer> observers_; | 220 ObserverList<InputMethodManager::Observer> observers_; |
179 ObserverList<CandidateWindowObserver> candidate_window_observers_; | 221 ObserverList<CandidateWindowObserver> candidate_window_observers_; |
180 | 222 |
181 // The input method which was/is selected. | |
182 InputMethodDescriptor previous_input_method_; | |
183 InputMethodDescriptor current_input_method_; | |
184 // The active input method ids cache. | |
185 std::vector<std::string> active_input_method_ids_; | |
186 | |
187 // The list of enabled extension IMEs. | 223 // The list of enabled extension IMEs. |
188 std::vector<std::string> enabled_extension_imes_; | 224 std::vector<std::string> enabled_extension_imes_; |
189 | 225 |
190 // For screen locker. When the screen is locked, |previous_input_method_|, | 226 scoped_refptr<InputMethodManagerImpl::State> state_; |
191 // |current_input_method_|, and |active_input_method_ids_| above are copied | |
192 // to these "saved" variables. | |
193 InputMethodDescriptor saved_previous_input_method_; | |
194 InputMethodDescriptor saved_current_input_method_; | |
195 std::vector<std::string> saved_active_input_method_ids_; | |
196 | 227 |
197 // Extra input methods that have been explicitly added to the menu, such as | 228 // Extra input methods that have been explicitly added to the menu, such as |
198 // those created by extension. | 229 // those created by extension. |
199 std::map<std::string, InputMethodDescriptor> extra_input_methods_; | 230 std::map<std::string, InputMethodDescriptor> extra_input_methods_; |
200 | 231 |
201 // The candidate window. This will be deleted when the APP_TERMINATING | 232 // The candidate window. This will be deleted when the APP_TERMINATING |
202 // message is sent. | 233 // message is sent. |
203 scoped_ptr<CandidateWindowController> candidate_window_controller_; | 234 scoped_ptr<CandidateWindowController> candidate_window_controller_; |
204 | 235 |
205 // The object which can create an InputMethodDescriptor object. | 236 // The object which can create an InputMethodDescriptor object. |
206 InputMethodWhitelist whitelist_; | 237 InputMethodWhitelist whitelist_; |
207 | 238 |
208 // An object which provides miscellaneous input method utility functions. Note | 239 // An object which provides miscellaneous input method utility functions. Note |
209 // that |util_| is required to initialize |keyboard_|. | 240 // that |util_| is required to initialize |keyboard_|. |
210 InputMethodUtil util_; | 241 InputMethodUtil util_; |
211 | 242 |
212 // An object which provides component extension ime management functions. | 243 // An object which provides component extension ime management functions. |
213 scoped_ptr<ComponentExtensionIMEManager> component_extension_ime_manager_; | 244 scoped_ptr<ComponentExtensionIMEManager> component_extension_ime_manager_; |
214 | 245 |
215 // An object for switching XKB layouts and keyboard status like caps lock and | 246 // An object for switching XKB layouts and keyboard status like caps lock and |
216 // auto-repeat interval. | 247 // auto-repeat interval. |
217 scoped_ptr<ImeKeyboard> keyboard_; | 248 scoped_ptr<ImeKeyboard> keyboard_; |
218 | 249 |
219 std::string pending_input_method_; | |
Shu Chen
2014/08/04 14:55:23
this is already gone, please rebase your cl.
Alexander Alekseev
2014/08/06 23:39:45
Done.
| |
220 | |
221 base::ThreadChecker thread_checker_; | 250 base::ThreadChecker thread_checker_; |
222 | 251 |
223 base::WeakPtrFactory<InputMethodManagerImpl> weak_ptr_factory_; | 252 base::WeakPtrFactory<InputMethodManagerImpl> weak_ptr_factory_; |
224 | 253 |
225 // The engine map: | |
226 // { Profile : { input_method_id : Engine } }. | |
227 typedef std::map<std::string, InputMethodEngineInterface*> | |
228 EngineMap; | |
229 typedef std::map<Profile*, EngineMap, ProfileCompare> ProfileEngineMap; | |
230 ProfileEngineMap profile_engine_map_; | |
231 | |
232 DISALLOW_COPY_AND_ASSIGN(InputMethodManagerImpl); | 254 DISALLOW_COPY_AND_ASSIGN(InputMethodManagerImpl); |
233 }; | 255 }; |
234 | 256 |
235 } // namespace input_method | 257 } // namespace input_method |
236 } // namespace chromeos | 258 } // namespace chromeos |
237 | 259 |
238 #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_MANAGER_IMPL_H_ | 260 #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_MANAGER_IMPL_H_ |
OLD | NEW |