Remove global variables
[platform/core/uifw/ise-default.git] / src / config.cpp
1 /*
2  * Copyright (c) 2012 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <string>
19 #include <vector>
20 #include <sstream>
21 #include <iterator>
22
23 #include <app_preference.h>
24
25 #include "config.h"
26 #include "languages.h"
27
28 using namespace scl;
29
30 #ifdef _TV
31 #define SOUND_ON        FALSE
32 #define VIBRATION_ON    FALSE
33 #define PREVIEW_ON      FALSE
34 #define AUTOPUNCTUATE_ON TRUE
35 #define FLOATING_MODE   FALSE
36 #elif _WEARABLE
37 #define SOUND_ON        TRUE
38 #define VIBRATION_ON    FALSE
39 #define PREVIEW_ON      FALSE
40 #define AUTOPUNCTUATE_ON TRUE
41 #define FLOATING_MODE   FALSE
42 #else
43 #define SOUND_ON        TRUE
44 #define VIBRATION_ON    FALSE
45 #define PREVIEW_ON      TRUE
46 #define AUTOPUNCTUATE_ON FALSE
47 #define FLOATING_MODE   FALSE
48 #endif
49
50 CONFIG_VALUES::CONFIG_VALUES()
51 {
52     keypad_mode = KEYPAD_MODE_QTY; // keypad_mode
53     prediction_on = FALSE; // prediction_on
54     auto_capitalise = TRUE;
55     auto_punctuate = AUTOPUNCTUATE_ON;
56     sound_on = SOUND_ON;
57     vibration_on = VIBRATION_ON;
58     preview_on = PREVIEW_ON;
59     floating_mode = FALSE;
60     first_guideset = FALSE;
61     first_guidechange = FALSE;
62     number_tutorial_enable = TRUE;
63     symbol_tutorial_enable = FALSE;
64     dataclear = FALSE;
65 };
66
67 static CONFIG_VALUES g_config_values;
68
69 CONFIG_VALUES* get_config_values()
70 {
71     return &g_config_values;
72 }
73
74 void read_ise_config_string(const char *key, std::string &value)
75 {
76     char *pref_str = NULL;
77     int ret;
78
79     ret = preference_get_string(key, &pref_str);
80     if (pref_str) {
81         if (ret == PREFERENCE_ERROR_NONE)
82             value.assign(pref_str, strlen(pref_str));
83
84         free(pref_str);
85     }
86 }
87
88 void read_ise_config_int(const char *key, sclint &config_variable, sclint default_value)
89 {
90     sclint integer_value = default_value;
91     preference_get_int(key, &integer_value);
92     config_variable = integer_value;
93 }
94
95 void read_ise_config_bool(const char *key, sclboolean &config_variable, sclint default_value)
96 {
97     sclint value = default_value;
98     preference_get_int(key, &value);
99     config_variable = value;
100 }
101
102 void read_ise_keypad_mode()
103 {
104     int value;
105     read_ise_config_int(ISE_CONFIG_KEYPAD_MODE, value, KEYPAD_MODE_QTY);
106     CONFIG_VALUES *config_values = get_config_values();
107     if (config_values) config_values->keypad_mode = static_cast<KEYPAD_MODE>(value);
108 }
109
110 void read_ise_prediction_mode()
111 {
112     sclboolean value;
113     read_ise_config_bool(ISE_CONFIG_PREDICTION_ON, value, false);
114     CONFIG_VALUES *config_values = get_config_values();
115     if (config_values) config_values->prediction_on = value;
116 }
117
118 void read_ise_autocapital_mode()
119 {
120     sclboolean value;
121     read_ise_config_bool(ISE_CONFIG_AUTO_CAPITALISE, value, true);
122     CONFIG_VALUES *config_values = get_config_values();
123     if (config_values) config_values->auto_capitalise = value;
124 }
125
126 void read_ise_enabled_languages()
127 {
128     CONFIG_VALUES *config_values = get_config_values();
129     if (!config_values) return;
130
131     std::string string_value;
132     string_value = "";
133
134     read_ise_config_string(ISE_CONFIG_ENABLED_LANGUAGES, string_value);
135     if (string_value.length() > 0) {
136         std::stringstream ss(string_value);
137         std::istream_iterator<std::string> begin(ss);
138         std::istream_iterator<std::string> end;
139         std::vector<std::string> vstrings(begin, end);
140         config_values->enabled_languages = vstrings;
141     }
142
143 #ifdef _TV
144     config_values->enabled_languages.push_back("English");
145     config_values->enabled_languages.push_back("Korean");
146 #endif
147 }
148
149 void read_ise_selected_language()
150 {
151     CONFIG_VALUES *config_values = get_config_values();
152     if (!config_values) return;
153
154     std::string string_value;
155     string_value = "";
156
157     read_ise_config_string(ISE_CONFIG_SELECTED_LANGUAGE, string_value);
158     if (string_value.length() > 0) {
159         config_values->selected_language = string_value;
160     }
161
162 #ifdef _TV
163     config_values->selected_language = std::string("English");
164 #endif
165 }
166
167 void read_ise_autopunctuation_mode()
168 {
169     sclboolean value;
170     read_ise_config_bool(ISE_CONFIG_AUTO_PUNCTUATE, value, AUTOPUNCTUATE_ON);
171     CONFIG_VALUES *config_values = get_config_values();
172     if (config_values) config_values->auto_punctuate = value;
173 }
174
175 void read_ise_sound_mode()
176 {
177     sclboolean value;
178     read_ise_config_bool(ISE_CONFIG_SOUND_ON, value, SOUND_ON);
179     CONFIG_VALUES *config_values = get_config_values();
180     if (config_values) config_values->sound_on = value;
181 }
182
183 void read_ise_vibration_mode()
184 {
185     sclboolean value;
186     read_ise_config_bool(ISE_CONFIG_VIBRATION_ON, value, VIBRATION_ON);
187     CONFIG_VALUES *config_values = get_config_values();
188     if (config_values) config_values->vibration_on = value;
189 }
190
191 void read_ise_character_preview_mode()
192 {
193     sclboolean value;
194     read_ise_config_bool(ISE_CONFIG_PREVIEW_ON, value, PREVIEW_ON);
195     CONFIG_VALUES *config_values = get_config_values();
196     if (config_values) config_values->preview_on = value;
197 }
198
199 void read_ise_setting_guide_popup_mode()
200 {
201     sclboolean value;
202     read_ise_config_bool(ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_SETTING, value, false);
203     CONFIG_VALUES *config_values = get_config_values();
204     if (config_values) config_values->first_guideset = value;
205 }
206
207 void read_ise_language_guide_popup_mode()
208 {
209     sclboolean value;
210     read_ise_config_bool(ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_LANGUAGE_CHANGE, value, false);
211     CONFIG_VALUES *config_values = get_config_values();
212     if (config_values) config_values->first_guidechange = value;
213 }
214
215 void read_ise_number_tutorial_popup_mode()
216 {
217     sclboolean value;
218     read_ise_config_bool(ISE_CONFIG_NUMBER_TUTORIAL_POPUP, value, true);
219     CONFIG_VALUES *config_values = get_config_values();
220     if (config_values) config_values->number_tutorial_enable = value;
221 }
222
223 void read_ise_symbol_tutorial_popup_mode()
224 {
225     sclboolean value;
226     read_ise_config_bool(ISE_CONFIG_SYMBOL_TUTORIAL_POPUP, value, false);
227     CONFIG_VALUES *config_values = get_config_values();
228     if (config_values) config_values->symbol_tutorial_enable = value;
229 }
230
231 void read_ise_floating_mode()
232 {
233     sclboolean value;
234     read_ise_config_bool(ISE_CONFIG_FLOATING_MODE, value, FLOATING_MODE);
235     CONFIG_VALUES *config_values = get_config_values();
236     if (config_values) config_values->floating_mode = value;
237 }
238
239 void read_ise_config_values()
240 {
241     /* keypad mode */
242     read_ise_keypad_mode();
243
244     /* prediction */
245     read_ise_prediction_mode();
246
247     /* enabled languages */
248     read_ise_enabled_languages();
249
250     /* Selected languages */
251     read_ise_selected_language();
252
253     /* Auto capital */
254     read_ise_autocapital_mode();
255
256     /* auto punctuation */
257     read_ise_autopunctuation_mode();
258
259     /* Sound */
260     read_ise_sound_mode();
261
262     /* Vibration */
263     read_ise_vibration_mode();
264
265     /* character preview */
266     read_ise_character_preview_mode();
267
268     /* guide popup for setting */
269     read_ise_setting_guide_popup_mode();
270
271     /* guide popup for language change */
272     read_ise_language_guide_popup_mode();
273
274     /* tutorial for number is enabled or not */
275     read_ise_number_tutorial_popup_mode();
276
277     /* tutorial for symbol is enabled or not */
278     read_ise_symbol_tutorial_popup_mode();
279
280     /* Floating mode */
281     read_ise_floating_mode();
282 }
283
284 void write_ise_config_values()
285 {
286     CONFIG_VALUES *config_values = get_config_values();
287     if (!config_values) return;
288
289     std::string string_value;
290     preference_set_int(ISE_CONFIG_KEYPAD_MODE, config_values->keypad_mode);
291     preference_set_int(ISE_CONFIG_PREDICTION_ON, config_values->prediction_on);
292
293     for (std::vector<std::string>::iterator it = config_values->enabled_languages.begin();
294         it != config_values->enabled_languages.end();std::advance(it, 1)) {
295             string_value += *it;
296             string_value += " ";
297     }
298
299     preference_set_string(ISE_CONFIG_ENABLED_LANGUAGES, string_value.c_str());
300     preference_set_string(ISE_CONFIG_SELECTED_LANGUAGE, config_values->selected_language.c_str());
301     preference_set_int(ISE_CONFIG_AUTO_CAPITALISE, config_values->auto_capitalise);
302     preference_set_int(ISE_CONFIG_AUTO_PUNCTUATE, config_values->auto_punctuate);
303     preference_set_int(ISE_CONFIG_SOUND_ON, config_values->sound_on);
304     preference_set_int(ISE_CONFIG_VIBRATION_ON, config_values->vibration_on);
305     preference_set_int(ISE_CONFIG_PREVIEW_ON, config_values->preview_on);
306     preference_set_int(ISE_CONFIG_FLOATING_MODE, config_values->floating_mode);
307     preference_set_int(ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_SETTING, config_values->first_guideset);
308     preference_set_int(ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_LANGUAGE_CHANGE, config_values->first_guidechange);
309     preference_set_int(ISE_CONFIG_NUMBER_TUTORIAL_POPUP, config_values->number_tutorial_enable);
310     preference_set_int(ISE_CONFIG_SYMBOL_TUTORIAL_POPUP, config_values->symbol_tutorial_enable);
311     preference_set_int(ISE_CLEAR_DATA_ON, config_values->dataclear);
312 }
313
314 void erase_ise_config_values()
315 {
316     preference_remove(ISE_CONFIG_KEYPAD_MODE);
317     preference_remove(ISE_CONFIG_PREDICTION_ON);
318     preference_remove(ISE_CONFIG_ENABLED_LANGUAGES);
319     preference_remove(ISE_CONFIG_SELECTED_LANGUAGE);
320     preference_remove(ISE_CONFIG_AUTO_CAPITALISE);
321     preference_remove(ISE_CONFIG_AUTO_PUNCTUATE);
322     preference_remove(ISE_CONFIG_SOUND_ON);
323     preference_remove(ISE_CONFIG_VIBRATION_ON);
324     preference_remove(ISE_CONFIG_PREVIEW_ON);
325     preference_remove(ISE_CONFIG_FLOATING_MODE);
326     preference_remove(ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_SETTING);
327     preference_remove(ISE_CONFIG_FIRST_GUIDELINE_POPUP_FOR_LANGUAGE_CHANGE);
328     preference_remove(ISE_CONFIG_NUMBER_TUTORIAL_POPUP);
329     preference_remove(ISE_CONFIG_SYMBOL_TUTORIAL_POPUP);
330 }
331
332 void reset_ise_config_values()
333 {
334     CONFIG_VALUES *config_values = get_config_values();
335     if (!config_values) return;
336
337     config_values->keypad_mode = KEYPAD_MODE_QTY;
338     config_values->prediction_on = FALSE;
339     config_values->selected_language = "English";
340     config_values->enabled_languages.clear();
341     config_values->enabled_languages.push_back("English");
342     config_values->auto_capitalise = TRUE;
343     config_values->auto_punctuate = AUTOPUNCTUATE_ON;
344     config_values->sound_on = SOUND_ON;
345     config_values->vibration_on = VIBRATION_ON;
346     config_values->preview_on = PREVIEW_ON;
347     config_values->floating_mode = FALSE;
348     config_values->first_guideset = FALSE;
349     config_values->first_guidechange = FALSE;
350     config_values->number_tutorial_enable = TRUE;
351     config_values->symbol_tutorial_enable = FALSE;
352
353     write_ise_config_values();
354 }
355
356 void clear_ise_data_values()
357 {
358     CONFIG_VALUES *config_values = get_config_values();
359     if (!config_values) return;
360
361     config_values->dataclear = TRUE;
362
363     write_ise_config_values();
364 }