2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
24 #include <system_settings.h>
25 #include <system_settings_private.h>
34 #define LOG_TAG "TIZEN_N_SYSTEM_SETTINGS"
36 #define SYSTEM_SETTINGS_MAX -1
40 system_setting_s system_setting_table[] = {
43 SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE,
44 SYSTEM_SETTING_DATA_TYPE_STRING,
45 system_setting_get_incoming_call_ringtone,
46 system_setting_set_incoming_call_ringtone,
47 system_setting_set_changed_callback_incoming_call_ringtone,
48 system_setting_unset_changed_callback_incoming_call_ringtone,
54 SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN,
55 SYSTEM_SETTING_DATA_TYPE_STRING,
56 system_setting_get_wallpaper_home_screen,
57 system_setting_set_wallpaper_home_screen,
58 system_setting_set_changed_callback_wallpaper_home_screen,
59 system_setting_unset_changed_callback_wallpaper_home_screen,
65 SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN,
66 SYSTEM_SETTING_DATA_TYPE_STRING,
67 system_setting_get_wallpaper_lock_screen,
68 system_setting_set_wallpaper_lock_screen,
69 system_setting_set_changed_callback_wallpaper_lock_screen,
70 system_setting_unset_changed_callback_wallpaper_lock_screen,
76 SYSTEM_SETTINGS_KEY_FONT_SIZE,
77 SYSTEM_SETTING_DATA_TYPE_INT,
78 system_setting_get_font_size,
79 system_setting_set_font_size,
80 system_setting_set_changed_callback_font_size,
81 system_setting_unset_changed_callback_font_size,
87 SYSTEM_SETTINGS_KEY_FONT_TYPE,
88 SYSTEM_SETTING_DATA_TYPE_STRING,
89 system_setting_get_font_type,
90 system_setting_set_font_type,
91 system_setting_set_changed_callback_font_type,
92 system_setting_unset_changed_callback_font_type,
98 SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION,
99 SYSTEM_SETTING_DATA_TYPE_BOOL,
100 system_setting_get_motion_activation,
101 system_setting_set_motion_activation,
102 system_setting_set_changed_callback_motion_activation,
103 system_setting_unset_changed_callback_motion_activation,
109 SYSTEM_SETTINGS_KEY_EMAIL_ALERT_RINGTONE,
110 SYSTEM_SETTING_DATA_TYPE_STRING,
111 system_setting_get_email_alert_ringtone,
112 system_setting_set_email_alert_ringtone,
113 system_setting_set_changed_callback_email_alert_ringtone,
114 system_setting_unset_changed_callback_email_alert_ringtone,
119 SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED,
120 SYSTEM_SETTING_DATA_TYPE_BOOL,
121 system_setting_get_usb_debugging_option,
122 system_setting_set_usb_debugging_option,
123 system_setting_set_changed_callback_usb_debugging_option,
124 system_setting_unset_changed_callback_usb_debugging_option,
129 SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED,
130 SYSTEM_SETTING_DATA_TYPE_BOOL,
131 system_setting_get_3g_data_network,
132 system_setting_set_3g_data_network,
133 system_setting_set_changed_callback_3g_data_network,
134 system_setting_unset_changed_callback_3g_data_network,
139 SYSTEM_SETTINGS_KEY_LOCKSCREEN_APP,
140 SYSTEM_SETTING_DATA_TYPE_STRING,
141 system_setting_get_lockscreen_app,
142 system_setting_set_lockscreen_app,
143 system_setting_set_changed_callback_lockscreen_app,
144 system_setting_unset_changed_callback_lockscreen_app,
149 SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE,
150 SYSTEM_SETTING_DATA_TYPE_STRING,
151 system_setting_get_default_font_type,
159 SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY,
160 SYSTEM_SETTING_DATA_TYPE_STRING,
161 system_setting_get_locale_country,
162 system_setting_set_locale_country,
163 system_setting_set_changed_callback_locale_country,
164 system_setting_unset_changed_callback_locale_country,
169 SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE,
170 SYSTEM_SETTING_DATA_TYPE_STRING,
171 system_setting_get_locale_language,
172 system_setting_set_locale_language,
173 system_setting_set_changed_callback_locale_language,
174 system_setting_unset_changed_callback_locale_language,
179 SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
180 SYSTEM_SETTING_DATA_TYPE_BOOL,
181 system_setting_get_locale_timeformat_24hour,
182 system_setting_set_locale_timeformat_24hour,
183 system_setting_set_changed_callback_locale_timeformat_24hour,
184 system_setting_unset_changed_callback_locale_timeformat_24hour,
189 SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE,
190 SYSTEM_SETTING_DATA_TYPE_STRING,
191 system_setting_get_locale_timezone,
192 system_setting_set_locale_timezone,
193 system_setting_set_changed_callback_locale_timezone,
194 system_setting_unset_changed_callback_locale_timezone,
199 SYSTEM_SETTINGS_KEY_TIME_CHANGED,
200 SYSTEM_SETTING_DATA_TYPE_INT,
201 system_setting_get_time_changed,
203 system_setting_set_changed_callback_time_changed,
204 system_setting_unset_changed_callback_time_changed,
209 SYSTEM_SETTINGS_KEY_SOUND_LOCK,
210 SYSTEM_SETTING_DATA_TYPE_BOOL,
211 system_setting_get_sound_lock,
213 system_setting_set_changed_callback_sound_lock,
214 system_setting_unset_changed_callback_sound_lock,
219 SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE,
220 SYSTEM_SETTING_DATA_TYPE_BOOL,
221 system_setting_get_sound_silent_mode,
222 system_setting_set_sound_silent_mode,
223 system_setting_set_changed_callback_sound_silent_mode,
224 system_setting_unset_changed_callback_sound_silent_mode,
229 SYSTEM_SETTINGS_KEY_SOUND_TOUCH,
230 SYSTEM_SETTING_DATA_TYPE_BOOL,
231 system_setting_get_sound_touch,
233 system_setting_set_changed_callback_sound_touch,
234 system_setting_unset_changed_callback_sound_touch,
239 SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO,
240 SYSTEM_SETTING_DATA_TYPE_BOOL,
241 system_setting_get_auto_rotation_mode,
242 system_setting_set_auto_rotation_mode,
243 system_setting_set_changed_callback_auto_rotation_mode,
244 system_setting_unset_changed_callback_auto_rotation_mode,
249 SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME,
250 SYSTEM_SETTING_DATA_TYPE_INT,
251 system_setting_get_screen_backlight_time,
252 system_setting_set_screen_backlight_time,
253 system_setting_set_changed_callback_screen_backlight_time,
254 system_setting_unset_changed_callback_screen_backlight_time,
259 SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION,
260 SYSTEM_SETTING_DATA_TYPE_STRING,
261 system_setting_get_sound_notification,
262 system_setting_set_sound_notification,
263 system_setting_set_changed_callback_sound_notification,
264 system_setting_unset_changed_callback_sound_notification,
269 SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION_REPETITION_PERIOD,
270 SYSTEM_SETTING_DATA_TYPE_INT,
271 system_setting_get_notification_repetition_period,
272 system_setting_set_notification_repetition_period,
273 system_setting_set_changed_callback_notification_repetition_period,
274 system_setting_unset_changed_callback_notification_repetition_period,
279 SYSTEM_SETTINGS_KEY_DEVICE_NAME,
280 SYSTEM_SETTING_DATA_TYPE_STRING,
281 system_setting_get_device_name,
283 system_setting_set_changed_callback_device_name,
284 system_setting_unset_changed_callback_device_name,
289 SYSTEM_SETTINGS_KEY_MOTION_ENABLED,
290 SYSTEM_SETTING_DATA_TYPE_BOOL,
291 system_setting_get_motion_activation,
293 system_setting_set_changed_callback_motion_activation,
294 system_setting_unset_changed_callback_motion_activation,
299 SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE,
300 SYSTEM_SETTING_DATA_TYPE_BOOL,
301 system_setting_get_network_flight_mode,
303 system_setting_set_changed_callback_network_flight_mode,
304 system_setting_unset_changed_callback_network_flight_mode,
309 SYSTEM_SETTINGS_KEY_NETWORK_WIFI_NOTIFICATION,
310 SYSTEM_SETTING_DATA_TYPE_BOOL,
311 system_setting_get_network_wifi_notification,
313 system_setting_set_changed_callback_network_wifi_notification,
314 system_setting_unset_changed_callback_network_wifi_notification,
319 SYSTEM_SETTINGS_KEY_LOCK_STATE,
320 SYSTEM_SETTING_DATA_TYPE_INT,
321 system_setting_get_lock_state,
322 system_setting_set_lock_state,
323 system_setting_set_changed_callback_lock_state,
324 system_setting_unset_changed_callback_lock_state,
329 SYSTEM_SETTINGS_KEY_ADS_ID,
330 SYSTEM_SETTING_DATA_TYPE_STRING,
331 system_setting_get_ads_id,
332 system_setting_set_ads_id,
333 system_setting_set_changed_callback_ads_id,
334 system_setting_unset_changed_callback_ads_id,
339 SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL, NULL
344 static void _dump_context()
347 /*int max = SYSTEM_SETTINGS_MAX; */
348 int max = sizeof(system_setting_table) / sizeof(system_setting_s) - 1 ;
350 for (i = 0; i < max; i++) {
351 LOGE("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
352 LOGE("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
353 LOGE("[%s] system_setting_table[i].get_value_cb = %x", __FUNCTION__, system_setting_table[i].get_value_cb);
354 LOGE("[%s] system_setting_table[i].set_value_cb = %x", __FUNCTION__, system_setting_table[i].set_value_cb);
356 LOGE("[%s] system_setting_table[i].set_changed_cb = %x <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
357 LOGE("[%s] system_setting_table[i].unset_changed_cb = %x", __FUNCTION__, system_setting_table[i].unset_changed_cb);
358 LOGE("[%s] system_setting_table[i].changed_cb = %x", __FUNCTION__, system_setting_table[i].changed_cb);
363 /* LCOV_EXCL_START */
364 static int _dump_context_node(int key)
368 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
369 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
372 while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
373 if (system_setting_table[index].key == key) {
375 LOGE("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
376 LOGE("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
377 LOGE("[%s] system_setting_table[i].get_value_cb = %x", __FUNCTION__, system_setting_table[i].get_value_cb);
378 LOGE("[%s] system_setting_table[i].set_value_cb = %x", __FUNCTION__, system_setting_table[i].set_value_cb);
379 LOGE("[%s] system_setting_table[i].set_changed_cb = %x <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
380 LOGE("[%s] system_setting_table[i].unset_changed_cb = %x", __FUNCTION__, system_setting_table[i].unset_changed_cb);
381 LOGE("[%s] system_setting_table[i].changed_cb = %x", __FUNCTION__, system_setting_table[i].changed_cb);
391 int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
393 LOGE("Enter [%s], key=%d", __FUNCTION__, key);
395 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
396 LOGE("Enter [%s] catch invalid parameter error (%d) ", __FUNCTION__, key);
397 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
403 while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
404 if (system_setting_table[index].key == key) {
405 *item = &system_setting_table[index];
406 LOGE("Enter [%s], index = %d, key = %d, type = %d", __FUNCTION__, index, key, (*item)->data_type);
407 return SYSTEM_SETTINGS_ERROR_NONE;
413 return TIZEN_ERROR_INVALID_PARAMETER;
416 int system_settings_get_value(system_settings_key_e key, system_setting_data_type_e data_type, void **value)
418 LOGE("Enter [%s]", __FUNCTION__);
419 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
420 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
423 system_setting_h system_setting_item;
424 system_setting_get_value_cb system_setting_getter;
426 if (0 != system_settings_get_item(key, &system_setting_item)) {
427 _dump_context_node(key);
428 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key --- (%d)", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, key);
429 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
432 if (system_setting_item->data_type != data_type) {
433 _dump_context_node(key);
434 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type --- key : (%d), datatype:(%d)", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, key, data_type);
435 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
438 system_setting_getter = system_setting_item->get_value_cb;
440 if (system_setting_getter == NULL) {
441 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
442 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
445 return system_setting_getter(key, system_setting_item->data_type, value);
448 /* LCOV_EXCL_START */
449 int system_settings_set_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
451 LOGE("Enter [%s]", __FUNCTION__);
452 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
453 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
457 system_setting_h system_setting_item;
458 system_setting_set_value_cb system_setting_setter;
460 int ret = system_settings_get_item(key, &system_setting_item);
463 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
464 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
468 if (system_setting_item->data_type != data_type) {
469 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
470 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
473 system_setting_setter = system_setting_item->set_value_cb;
475 if (system_setting_setter == NULL) {
476 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
477 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
480 return system_setting_setter(key, system_setting_item->data_type, value);
484 /* LCOV_EXCL_START */
485 int system_settings_set_value_int(system_settings_key_e key, int value)
487 LOGE("Enter [%s]", __FUNCTION__);
488 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
489 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
493 return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void *)ptr);
497 int system_settings_get_value_int(system_settings_key_e key, int *value)
499 LOGE("Enter [%s]", __FUNCTION__);
500 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
501 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
504 return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void **)value);
507 /* LCOV_EXCL_START */
508 int system_settings_set_value_bool(system_settings_key_e key, bool value)
510 LOGE("Enter [%s]", __FUNCTION__);
511 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
512 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
516 return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void *)ptr);
520 int system_settings_get_value_bool(system_settings_key_e key, bool *value)
522 LOGE("Enter [%s]", __FUNCTION__);
523 SETTING_TRACE(" SIGNED LONG here ******************* log here *************** ");
524 signed long flag = 0;
528 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
529 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
532 ret = system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void **)&flag);
533 SETTING_TRACE(" inf (flag) value : %d ", flag);
536 SETTING_TRACE(" flag == 0 ");
537 } else if (flag == 1) {
539 SETTING_TRACE(" flag == 1 ");
542 SETTING_TRACE(" exception here!!! ");
548 /* LCOV_EXCL_START */
549 int system_settings_set_value_string(system_settings_key_e key, const char *value)
551 LOGE("Enter [%s]", __FUNCTION__);
552 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
553 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
557 if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
558 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
560 return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
564 int system_settings_get_value_string(system_settings_key_e key, char **value)
566 LOGE("Enter [%s]", __FUNCTION__);
567 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
568 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
571 return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void **)value);
576 int system_settings_set_changed_cb(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
578 LOGE("Enter [%s]", __FUNCTION__);
579 system_setting_h system_setting_item;
580 system_setting_set_changed_callback_cb system_setting_set_changed_cb;
582 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
583 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
586 if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
587 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
589 if (system_settings_get_item(key, &system_setting_item)) {
590 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
591 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
594 system_setting_set_changed_cb = system_setting_item->set_changed_cb;
597 /* Store the callback function from application side */
599 system_setting_item->changed_cb = callback;
602 system_setting_item->user_data = user_data;
604 if (system_setting_set_changed_cb == NULL) {
605 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
606 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
609 return system_setting_set_changed_cb(key, callback, user_data);
613 int system_settings_unset_changed_cb(system_settings_key_e key)
615 LOGE("Enter [%s]", __FUNCTION__);
616 system_setting_h system_setting_item;
617 system_setting_unset_changed_callback_cb system_setting_unset_changed_cb;
619 if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
620 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
623 if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
624 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
626 int ret = system_settings_get_item(key, &system_setting_item) ;
628 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
629 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
632 system_setting_unset_changed_cb = system_setting_item->unset_changed_cb;
634 /* free the callback function from application side */
635 if (system_setting_item->changed_cb)
636 system_setting_item->changed_cb = NULL;
637 /*----------------------------------------------------- */
639 if (system_setting_unset_changed_cb == NULL) {
640 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
641 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
644 return system_setting_unset_changed_cb(key);