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 3 // found in the LICENSE file. 4 5 #ifndef CHROMEOS_IME_INPUT_METHOD_MANAGER_H_ 6 #define CHROMEOS_IME_INPUT_METHOD_MANAGER_H_ 7 8 #include <map> 9 #include <string> 10 #include <vector> 11 12 #include "base/memory/scoped_ptr.h" 13 #include "chromeos/chromeos_export.h" 14 #include "chromeos/ime/input_method_descriptor.h" 15 #include "chromeos/ime/input_method_property.h" 16 17 namespace ui { 18 class Accelerator; 19 } // namespace ui 20 21 namespace chromeos { 22 class ComponentExtensionIMEManager; 23 class InputMethodEngineInterface; 24 namespace input_method { 25 26 class InputMethodUtil; 27 class XKeyboard; 28 29 // This class manages input methodshandles. Classes can add themselves as 30 // observers. Clients can get an instance of this library class by: 31 // InputMethodManager::Get(). 32 class CHROMEOS_EXPORT InputMethodManager { 33 public: 34 enum State { 35 STATE_LOGIN_SCREEN = 0, 36 STATE_BROWSER_SCREEN, 37 STATE_LOCK_SCREEN, 38 STATE_TERMINATING, 39 }; 40 41 class Observer { 42 public: 43 virtual ~Observer() {} 44 // Called when the current input method is changed. |show_message| 45 // indicates whether the user should be notified of this change. 46 virtual void InputMethodChanged(InputMethodManager* manager, 47 bool show_message) = 0; 48 // Called when the list of properties is changed. 49 virtual void InputMethodPropertyChanged(InputMethodManager* manager) = 0; 50 }; 51 52 // CandidateWindowObserver is notified of events related to the candidate 53 // window. The "suggestion window" used by IMEs such as ibus-mozc does not 54 // count as the candidate window (this may change if we later want suggestion 55 // window events as well). These events also won't occur when the virtual 56 // keyboard is used, since it controls its own candidate window. 57 class CandidateWindowObserver { 58 public: 59 virtual ~CandidateWindowObserver() {} 60 // Called when the candidate window is opened. 61 virtual void CandidateWindowOpened(InputMethodManager* manager) = 0; 62 // Called when the candidate window is closed. 63 virtual void CandidateWindowClosed(InputMethodManager* manager) = 0; 64 }; 65 66 virtual ~InputMethodManager() {} 67 68 // Gets the global instance of InputMethodManager. Initialize() must be called 69 // first. 70 static CHROMEOS_EXPORT InputMethodManager* Get(); 71 72 // Sets the global instance. |instance| will be owned by the internal pointer 73 // and deleted by Shutdown(). 74 // TODO(nona): Instanciate InputMethodManagerImpl inside of this function once 75 // crbug.com/164375 is fixed. 76 static CHROMEOS_EXPORT void Initialize(InputMethodManager* instance); 77 78 // Destroy the global instance. 79 static CHROMEOS_EXPORT void Shutdown(); 80 81 // Adds an observer to receive notifications of input method related 82 // changes as desribed in the Observer class above. 83 virtual void AddObserver(Observer* observer) = 0; 84 virtual void AddCandidateWindowObserver( 85 CandidateWindowObserver* observer) = 0; 86 virtual void RemoveObserver(Observer* observer) = 0; 87 virtual void RemoveCandidateWindowObserver( 88 CandidateWindowObserver* observer) = 0; 89 90 // Returns all input methods that are supported, including ones not active. 91 // This function never returns NULL. Note that input method extensions are NOT 92 // included in the result. 93 virtual scoped_ptr<InputMethodDescriptors> 94 GetSupportedInputMethods() const = 0; 95 96 // Returns the list of input methods we can select (i.e. active) including 97 // extension input methods. 98 virtual scoped_ptr<InputMethodDescriptors> GetActiveInputMethods() const = 0; 99 100 // Returns the list of input methods we can select (i.e. active) including 101 // extension input methods. 102 // The same as GetActiveInputMethods but returns reference to internal list. 103 virtual const std::vector<std::string>& GetActiveInputMethodIds() const = 0; 104 105 // Returns the number of active input methods including extension input 106 // methods. 107 virtual size_t GetNumActiveInputMethods() const = 0; 108 109 // Changes the current input method to |input_method_id|. If |input_method_id| 110 // is not active, switch to the first one in the active input method list. 111 virtual void ChangeInputMethod(const std::string& input_method_id) = 0; 112 113 // Enables keyboard layouts (e.g. US Qwerty, US Dvorak, French Azerty) that 114 // are necessary for the |language_code| and then switches to |initial_layout| 115 // if the string is not empty. For example, if |language_code| is "en-US", US 116 // Qwerty, US International, US Extended, US Dvorak, and US Colemak layouts 117 // would be enabled. Likewise, for Germany locale, US Qwerty which corresponds 118 // to the hardware keyboard layout and several keyboard layouts for Germany 119 // would be enabled. 120 // This method is for setting up i18n keyboard layouts for the login screen. 121 virtual void EnableLayouts(const std::string& language_code, 122 const std::string& initial_layout) = 0; 123 124 // Activates the input method property specified by the |key|. 125 virtual void ActivateInputMethodProperty(const std::string& key) = 0; 126 127 // Updates the list of active input method IDs, and then starts or stops the 128 // system input method framework as needed. 129 virtual bool EnableInputMethods( 130 const std::vector<std::string>& new_active_input_method_ids) = 0; 131 132 // Adds one entry to the list of active input method IDs, and then starts or 133 // stops the system input method framework as needed. 134 virtual bool EnableInputMethod( 135 const std::string& new_active_input_method_id) = 0; 136 137 // Adds an input method extension. This function does not takes ownership of 138 // |instance|. 139 virtual void AddInputMethodExtension( 140 const std::string& id, 141 const std::string& name, 142 const std::vector<std::string>& layouts, 143 const std::vector<std::string>& languages, 144 const GURL& options_url, 145 const GURL& inputview_url, 146 InputMethodEngineInterface* instance) = 0; 147 148 // Removes an input method extension. 149 virtual void RemoveInputMethodExtension(const std::string& id) = 0; 150 151 // Returns a list of descriptors for all Input Method Extensions. 152 virtual void GetInputMethodExtensions(InputMethodDescriptors* result) = 0; 153 154 // Sets the list of extension IME ids which should be enabled. 155 virtual void SetEnabledExtensionImes(std::vector<std::string>* ids) = 0; 156 157 // Sets current input method to default (first owners, then hardware). 158 virtual void SetInputMethodDefault() = 0; 159 160 // Gets the descriptor of the input method which is currently selected. 161 virtual InputMethodDescriptor GetCurrentInputMethod() const = 0; 162 163 // Gets the list of input method properties. The list could be empty(). 164 virtual InputMethodPropertyList GetCurrentInputMethodProperties() const = 0; 165 166 // Sets the list of input method properties. The list could be empty(). 167 virtual void SetCurrentInputMethodProperties( 168 const InputMethodPropertyList& property_list) = 0; 169 170 // Returns an X keyboard object which could be used to change the current XKB 171 // layout, change the caps lock status, and set the auto repeat rate/interval. 172 virtual XKeyboard* GetXKeyboard() = 0; 173 174 // Returns an InputMethodUtil object. 175 virtual InputMethodUtil* GetInputMethodUtil() = 0; 176 177 // Returns a ComponentExtentionIMEManager object. 178 virtual ComponentExtensionIMEManager* GetComponentExtensionIMEManager() = 0; 179 180 // Switches the current input method (or keyboard layout) to the next one. 181 virtual bool SwitchToNextInputMethod() = 0; 182 183 // Switches the current input method (or keyboard layout) to the previous one. 184 virtual bool SwitchToPreviousInputMethod( 185 const ui::Accelerator& accelerator) = 0; 186 187 // Switches to an input method (or keyboard layout) which is associated with 188 // the |accelerator|. 189 virtual bool SwitchInputMethod(const ui::Accelerator& accelerator) = 0; 190 191 // If keyboard layout can be uset at login screen 192 virtual bool IsLoginKeyboard(const std::string& layout) const = 0; 193 }; 194 195 } // namespace input_method 196 } // namespace chromeos 197 198 #endif // CHROMEOS_IME_INPUT_METHOD_MANAGER_H_ 199