1 /*
2 * This file is part of Maliit Plugins
3 *
4 * Copyright (C) 2013 Canonical, Ltd.
5 *
6 * Redistribution and use in source and binary forms, with or without modification,
7 * are permitted provided that the following conditions are met:
8 *
9 * Redistributions of source code must retain the above copyright notice, this list
10 * of conditions and the following disclaimer.
11 * Redistributions in binary form must reproduce the above copyright notice, this list
12 * of conditions and the following disclaimer in the documentation and/or other materials
13 * provided with the distribution.
14 * Neither the name of Nokia Corporation nor the names of its contributors may be
15 * used to endorse or promote products derived from this software without specific
16 * prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
19 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30 #include "keyboardsettings.h"
31
32 #include <QDebug>
33 #include <QGSettings/QGSettings>
34
35 using namespace MaliitKeyboard;
36
37 const QLatin1String ACTIVE_LANGUAGE_KEY = QLatin1String("activeLanguage");
38 const QLatin1String PREVIOUS_LANGUAGE_KEY = QLatin1String("previousLanguage");
39 const QLatin1String ENABLED_LANGUAGES_KEY = QLatin1String("enabledLanguages");
40 const QLatin1String AUTO_CAPITALIZATION_KEY = QLatin1String("autoCapitalization");
41 const QLatin1String AUTO_COMPLETION_KEY = QLatin1String("autoCompletion");
42 const QLatin1String PREDICTIVE_TEXT_KEY = QLatin1String("predictiveText");
43 const QLatin1String SPELL_CHECKING_KEY = QLatin1String("spellChecking");
44 const QLatin1String KEY_PRESS_AUDIO_FEEDBACK_KEY = QLatin1String("keyPressFeedback");
45 const QLatin1String KEY_PRESS_AUDIO_FEEDBACK_SOUND_KEY = QLatin1String("keyPressFeedbackSound");
46 const QLatin1String KEY_PRESS_HAPTIC_FEEDBACK_KEY = QLatin1String("keyPressHapticFeedback");
47 const QLatin1String DOUBLE_SPACE_FULL_STOP_KEY = QLatin1String("doubleSpaceFullStop");
48 const QLatin1String STAY_HIDDEN_KEY = QLatin1String("stayHidden");
49 const QLatin1String DISABLE_HEIGHT_KEY = QLatin1String("disableHeight");
50 const QLatin1String PLUGIN_PATHS_KEY = QLatin1String("pluginPaths");
51 const QLatin1String OPACITY_KEY = QLatin1String("opacity");
52
53 /*!
54 * \brief KeyboardSettings::KeyboardSettings class to load the settings, and
55 * listens on runtime to changes of them
56 * \param parent
57 */
KeyboardSettings(QObject * parent)58 KeyboardSettings::KeyboardSettings(QObject *parent) :
59 QObject(parent)
60 , m_settings(new QGSettings("org.maliit.keyboard.maliit",
61 "/org/maliit/keyboard/maliit/", this))
62 {
63 QObject::connect(m_settings, &QGSettings::changed,
64 this, &KeyboardSettings::settingUpdated);
65 }
66
67 /*!
68 * \brief KeyboardSettings::activeLanguage returns currently active language
69 * \return active language
70 */
71
activeLanguage() const72 QString KeyboardSettings::activeLanguage() const
73 {
74 return m_settings->get(ACTIVE_LANGUAGE_KEY).toString();
75 }
76
setActiveLanguage(const QString & id)77 void KeyboardSettings::setActiveLanguage(const QString& id)
78 {
79 m_settings->set(ACTIVE_LANGUAGE_KEY, QVariant(id));
80 }
81
82 /*!
83 * \brief KeyboardSettings::previousLanguage returns the language that was
84 * active immediately before the current one.
85 * \return previously language
86 */
87
previousLanguage() const88 QString KeyboardSettings::previousLanguage() const
89 {
90 return m_settings->get(PREVIOUS_LANGUAGE_KEY).toString();
91 }
92
setPreviousLanguage(const QString & id)93 void KeyboardSettings::setPreviousLanguage(const QString& id)
94 {
95 m_settings->set(PREVIOUS_LANGUAGE_KEY, QVariant(id));
96 }
97
98 /*!
99 * \brief KeyboardSettings::enabledLanguages returns a list of languages that are
100 * active
101 * \return
102 */
enabledLanguages() const103 QStringList KeyboardSettings::enabledLanguages() const
104 {
105 return m_settings->get(ENABLED_LANGUAGES_KEY).toStringList();
106 }
107
108 /*!
109 * \brief KeyboardSettings::autoCapitalization returns true id the first letter
110 * of each sentence should be capitalized
111 * \return
112 */
autoCapitalization() const113 bool KeyboardSettings::autoCapitalization() const
114 {
115 return m_settings->get(AUTO_CAPITALIZATION_KEY).toBool();
116 }
117
118 /*!
119 * \brief KeyboardSettings::autoCompletion returns true if the current word should
120 * be completed with first suggestion when hitting space
121 * \return
122 */
autoCompletion() const123 bool KeyboardSettings::autoCompletion() const
124 {
125 return m_settings->get(AUTO_COMPLETION_KEY).toBool();
126 }
127
128 /*!
129 * \brief KeyboardSettings::predictiveText returns true, if potential words in the
130 * word ribbon should be suggested
131 * \return
132 */
predictiveText() const133 bool KeyboardSettings::predictiveText() const
134 {
135 return m_settings->get(PREDICTIVE_TEXT_KEY).toBool();
136 }
137
138 /*!
139 * \brief KeyboardSettings::spellchecking returns true if spellchecking should be used
140 * \return
141 */
spellchecking() const142 bool KeyboardSettings::spellchecking() const
143 {
144 return m_settings->get(SPELL_CHECKING_KEY).toBool();
145 }
146
147 /*!
148 * \brief KeyboardSettings::keyPressAudioFeedback returns true if audio feedback is enabled
149 * when the user presses a keyboad key
150 * \return
151 */
keyPressAudioFeedback() const152 bool KeyboardSettings::keyPressAudioFeedback() const
153 {
154 return m_settings->get(KEY_PRESS_AUDIO_FEEDBACK_KEY).toBool();
155 }
156
157 /*!
158 * \brief KeyboardSettings::keyPressHapticFeedback returns true if haptic feedback is enabled
159 * when the user presses a keyboad key
160 * \return
161 */
keyPressHapticFeedback() const162 bool KeyboardSettings::keyPressHapticFeedback() const
163 {
164 return m_settings->get(KEY_PRESS_HAPTIC_FEEDBACK_KEY).toBool();
165 }
166
167 /*!
168 * \brief KeyboardSettings::keyPressFeedbackSound returns the path to the current key
169 * feedback sound
170 * \return path to the feedback sound
171 */
keyPressAudioFeedbackSound() const172 QString KeyboardSettings::keyPressAudioFeedbackSound() const
173 {
174 return m_settings->get(KEY_PRESS_AUDIO_FEEDBACK_SOUND_KEY).toString();
175 }
176
177 /*!
178 * \brief KeyboardSettings:doubleSpaceFullStop returns true if double space full-stops are
179 * enabled, which insert a full-stop when the space key is pressed twice.
180 */
doubleSpaceFullStop() const181 bool KeyboardSettings::doubleSpaceFullStop() const
182 {
183 return m_settings->get(DOUBLE_SPACE_FULL_STOP_KEY).toBool();
184 }
185
186 /*!
187 * \brief KeyboardSettings:stayHidden returns true if the keyboard should
188 * always remain hidden (e.g. if a hardware keyboard has been connected).
189 */
stayHidden() const190 bool KeyboardSettings::stayHidden() const
191 {
192 return m_settings->get(STAY_HIDDEN_KEY).toBool();
193 }
194
195 /*!
196 * \brief KeyboardSettings::pluginPaths returns a list of paths containing
197 * ubuntu-keyboard layout plugins
198 */
pluginPaths() const199 QStringList KeyboardSettings::pluginPaths() const
200 {
201 return m_settings->get(PLUGIN_PATHS_KEY).toStringList();
202 }
203
disableHeight() const204 bool KeyboardSettings::disableHeight() const
205 {
206 return m_settings->get(DISABLE_HEIGHT_KEY).toBool();
207 }
208
209 /*!
210 * \brief KeyboardSettings::opacity returns the transparency value for the
211 * keyboard between 0 and 1
212 */
opacity() const213 double KeyboardSettings::opacity() const
214 {
215 return m_settings->get(OPACITY_KEY).toDouble();
216 }
217
218 /*!
219 * \brief KeyboardSettings::settingUpdated slot to handle changes in the settings backend
220 * A specialized signal is emitted for the affected setting
221 * \param key
222 */
settingUpdated(const QString & key)223 void KeyboardSettings::settingUpdated(const QString &key)
224 {
225 if (key == ACTIVE_LANGUAGE_KEY) {
226 Q_EMIT activeLanguageChanged(activeLanguage());
227 return;
228 } else if (key == PREVIOUS_LANGUAGE_KEY) {
229 Q_EMIT previousLanguageChanged(previousLanguage());
230 return;
231 } else if (key == ENABLED_LANGUAGES_KEY) {
232 Q_EMIT enabledLanguagesChanged(enabledLanguages());
233 return;
234 } else if (key == AUTO_CAPITALIZATION_KEY) {
235 Q_EMIT autoCapitalizationChanged(autoCapitalization());
236 return;
237 } else if (key == AUTO_COMPLETION_KEY) {
238 Q_EMIT autoCompletionChanged(autoCompletion());
239 return;
240 } else if (key == PREDICTIVE_TEXT_KEY) {
241 Q_EMIT predictiveTextChanged(predictiveText());
242 return;
243 } else if (key == SPELL_CHECKING_KEY) {
244 Q_EMIT spellCheckingChanged(spellchecking());
245 return;
246 } else if (key == KEY_PRESS_AUDIO_FEEDBACK_KEY) {
247 Q_EMIT keyPressAudioFeedbackChanged(keyPressAudioFeedback());
248 return;
249 } else if (key == KEY_PRESS_HAPTIC_FEEDBACK_KEY) {
250 Q_EMIT keyPressHapticFeedbackChanged(keyPressHapticFeedback());
251 return;
252 } else if (key == KEY_PRESS_AUDIO_FEEDBACK_SOUND_KEY) {
253 Q_EMIT keyPressAudioFeedbackSoundChanged(keyPressAudioFeedbackSound());
254 return;
255 } else if (key == DOUBLE_SPACE_FULL_STOP_KEY) {
256 Q_EMIT doubleSpaceFullStopChanged(doubleSpaceFullStop());
257 return;
258 } else if (key == STAY_HIDDEN_KEY) {
259 Q_EMIT stayHiddenChanged(stayHidden());
260 return;
261 } else if (key == DISABLE_HEIGHT_KEY) {
262 Q_EMIT disableHeightChanged(disableHeight());
263 return;
264 } else if (key == PLUGIN_PATHS_KEY) {
265 Q_EMIT pluginPathsChanged(pluginPaths());
266 } else if (key == OPACITY_KEY) {
267 Q_EMIT opacityChanged(opacity());
268 } else if (key == "theme")
269 Q_EMIT themeChanged(theme());
270 else if (key == "device")
271 Q_EMIT deviceChanged(device());
272
273 qWarning() << Q_FUNC_INFO << "unknown settings key:" << key;
274 }
275
theme() const276 QString KeyboardSettings::theme() const
277 {
278 return m_settings->get("theme").toString();
279 }
280
device() const281 QString KeyboardSettings::device() const
282 {
283 return m_settings->get("device").toString();
284 }
285