Fixed SETTING_INCOMING_CALL_PATH define.
[platform/core/api/system-settings.git] / src / system_settings.c
1 /*
2  * Copyright (c) 2011 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 #include <stdio.h>
18 #include <stdlib.h>
19 #include <string.h>
20
21 #include <vconf.h>
22 #include <dlog.h>
23
24 #include <system_settings.h>
25 #include <system_settings_private.h>
26
27 #include <glib.h>
28
29 #ifdef LOG_TAG
30 #undef LOG_TAG
31 #endif
32
33 #define LOG_TAG "TIZEN_N_SYSTEM_SETTINGS"
34
35 #define SYSTEM_SETTINGS_MAX -1
36
37
38
39 system_setting_s system_setting_table[] = {
40
41         {
42                 SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE,
43                 SYSTEM_SETTING_DATA_TYPE_STRING,
44                 system_setting_get_incoming_call_ringtone,
45                 system_setting_set_incoming_call_ringtone,
46                 system_setting_set_changed_callback_incoming_call_ringtone,
47                 system_setting_unset_changed_callback_incoming_call_ringtone,
48                 NULL,
49                 system_setting_add_incoming_call_ringtone,      /* ADD */
50                 system_setting_del_incoming_call_ringtone,      /* DEL */
51                 system_setting_list_incoming_call_ringtone,     /* LIST */
52                 system_setting_feature_check_incoming_call,             /* feature check */
53                 NULL,           /* user data */
54         },
55
56         {
57                 SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN,
58                 SYSTEM_SETTING_DATA_TYPE_STRING,
59                 system_setting_get_wallpaper_home_screen,
60                 system_setting_set_wallpaper_home_screen,
61                 system_setting_set_changed_callback_wallpaper_home_screen,
62                 system_setting_unset_changed_callback_wallpaper_home_screen,
63                 NULL,
64                 NULL,           /* ADD */
65                 NULL,           /* DEL */
66                 NULL,           /* LIST */
67                 system_setting_feature_check_home_screen,               /* feature check */
68                 NULL,           /* user data */
69         },
70
71         {
72                 SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN,
73                 SYSTEM_SETTING_DATA_TYPE_STRING,
74                 system_setting_get_wallpaper_lock_screen,
75                 system_setting_set_wallpaper_lock_screen,
76                 system_setting_set_changed_callback_wallpaper_lock_screen,
77                 system_setting_unset_changed_callback_wallpaper_lock_screen,
78                 NULL,
79                 NULL,           /* ADD */
80                 NULL,           /* DEL */
81                 NULL,           /* LIST */
82                 system_setting_feature_check_lock_screen,               /* feature check */
83                 NULL,           /* user data */
84         },
85
86         {
87                 SYSTEM_SETTINGS_KEY_FONT_SIZE,
88                 SYSTEM_SETTING_DATA_TYPE_INT,
89                 system_setting_get_font_size,
90                 system_setting_set_font_size,
91                 system_setting_set_changed_callback_font_size,
92                 system_setting_unset_changed_callback_font_size,
93                 NULL,
94                 NULL,           /* ADD */
95                 NULL,           /* DEL */
96                 NULL,           /* LIST */
97                 NULL,           /* feature check */
98                 NULL,           /* user data */
99         },
100
101         {
102                 SYSTEM_SETTINGS_KEY_FONT_TYPE,
103                 SYSTEM_SETTING_DATA_TYPE_STRING,
104                 system_setting_get_font_type,
105                 system_setting_set_font_type,
106                 system_setting_set_changed_callback_font_type,
107                 system_setting_unset_changed_callback_font_type,
108                 NULL,
109                 NULL,           /* ADD */
110                 NULL,           /* DEL */
111                 NULL,           /* LIST */
112                 NULL,           /* feature check */
113                 NULL,           /* user data */
114         },
115
116         {
117                 SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION,
118                 SYSTEM_SETTING_DATA_TYPE_BOOL,
119                 system_setting_get_motion_activation,
120                 system_setting_set_motion_activation,
121                 system_setting_set_changed_callback_motion_activation,
122                 system_setting_unset_changed_callback_motion_activation,
123                 NULL,
124                 NULL,           /* ADD */
125                 NULL,           /* DEL */
126                 NULL,           /* LIST */
127                 NULL,           /* feature check */
128                 NULL,           /* user data */
129         },
130
131         {
132                 SYSTEM_SETTINGS_KEY_EMAIL_ALERT_RINGTONE,
133                 SYSTEM_SETTING_DATA_TYPE_STRING,
134                 system_setting_get_email_alert_ringtone,
135                 system_setting_set_email_alert_ringtone,
136                 system_setting_set_changed_callback_email_alert_ringtone,
137                 system_setting_unset_changed_callback_email_alert_ringtone,
138                 NULL,
139                 NULL,           /* ADD */
140                 NULL,           /* DEL */
141                 NULL,           /* LIST */
142                 system_setting_feature_check_notification_email,                /* feature check */
143                 NULL,           /* user data */
144         },
145         {
146                 SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED,
147                 SYSTEM_SETTING_DATA_TYPE_BOOL,
148                 system_setting_get_usb_debugging_option,
149                 system_setting_set_usb_debugging_option,
150                 system_setting_set_changed_callback_usb_debugging_option,
151                 system_setting_unset_changed_callback_usb_debugging_option,
152                 NULL,
153                 NULL,           /* ADD */
154                 NULL,           /* DEL */
155                 NULL,           /* LIST */
156                 NULL,           /* feature check */
157                 NULL,           /* user data */
158         },
159         {
160                 SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED,
161                 SYSTEM_SETTING_DATA_TYPE_BOOL,
162                 system_setting_get_3g_data_network,
163                 system_setting_set_3g_data_network,
164                 system_setting_set_changed_callback_3g_data_network,
165                 system_setting_unset_changed_callback_3g_data_network,
166                 NULL,
167                 NULL,           /* ADD */
168                 NULL,           /* DEL */
169                 NULL,           /* LIST */
170                 NULL,           /* feature check */
171                 NULL,           /* user data */
172         },
173         {
174                 SYSTEM_SETTINGS_KEY_LOCKSCREEN_APP,
175                 SYSTEM_SETTING_DATA_TYPE_STRING,
176                 system_setting_get_lockscreen_app,
177                 system_setting_set_lockscreen_app,
178                 system_setting_set_changed_callback_lockscreen_app,
179                 system_setting_unset_changed_callback_lockscreen_app,
180                 NULL,
181                 NULL,           /* ADD */
182                 NULL,           /* DEL */
183                 NULL,           /* LIST */
184                 system_setting_feature_check_lock_screen,               /* feature check */
185                 NULL,           /* user data */
186         },
187         {
188                 SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE,
189                 SYSTEM_SETTING_DATA_TYPE_STRING,
190                 system_setting_get_default_font_type,
191                 NULL,
192                 NULL,
193                 NULL,
194                 NULL,
195                 NULL,           /* ADD */
196                 NULL,           /* DEL */
197                 NULL,           /* LIST */
198                 NULL,           /* feature check */
199                 NULL,           /* user data */
200         },
201         {
202                 SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY,
203                 SYSTEM_SETTING_DATA_TYPE_STRING,
204                 system_setting_get_locale_country,
205                 system_setting_set_locale_country,
206                 system_setting_set_changed_callback_locale_country,
207                 system_setting_unset_changed_callback_locale_country,
208                 NULL,
209                 NULL,           /* ADD */
210                 NULL,           /* DEL */
211                 NULL,           /* LIST */
212                 NULL,           /* feature check */
213                 NULL,           /* user data */
214         },
215         {
216                 SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE,
217                 SYSTEM_SETTING_DATA_TYPE_STRING,
218                 system_setting_get_locale_language,
219                 system_setting_set_locale_language,
220                 system_setting_set_changed_callback_locale_language,
221                 system_setting_unset_changed_callback_locale_language,
222                 NULL,
223                 NULL,           /* ADD */
224                 NULL,           /* DEL */
225                 NULL,           /* LIST */
226                 NULL,           /* feature check */
227                 NULL,           /* user data */
228         },
229         {
230                 SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
231                 SYSTEM_SETTING_DATA_TYPE_BOOL,
232                 system_setting_get_locale_timeformat_24hour,
233                 system_setting_set_locale_timeformat_24hour,
234                 system_setting_set_changed_callback_locale_timeformat_24hour,
235                 system_setting_unset_changed_callback_locale_timeformat_24hour,
236                 NULL,
237                 NULL,           /* ADD */
238                 NULL,           /* DEL */
239                 NULL,           /* LIST */
240                 NULL,           /* feature check */
241                 NULL,           /* user data */
242         },
243         {
244                 SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE,
245                 SYSTEM_SETTING_DATA_TYPE_STRING,
246                 system_setting_get_locale_timezone,
247                 system_setting_set_locale_timezone,
248                 system_setting_set_changed_callback_locale_timezone,
249                 system_setting_unset_changed_callback_locale_timezone,
250                 NULL,
251                 NULL,           /* ADD */
252                 NULL,           /* DEL */
253                 NULL,           /* LIST */
254                 NULL,           /* feature check */
255                 NULL,           /* user data */
256         },
257         {
258                 SYSTEM_SETTINGS_KEY_TIME_CHANGED,
259                 SYSTEM_SETTING_DATA_TYPE_INT,
260                 system_setting_get_time_changed,
261                 NULL,
262                 system_setting_set_changed_callback_time_changed,
263                 system_setting_unset_changed_callback_time_changed,
264                 NULL,
265                 NULL,           /* ADD */
266                 NULL,           /* DEL */
267                 NULL,           /* LIST */
268                 NULL,           /* feature check */
269                 NULL,           /* user data */
270         },
271         {
272                 SYSTEM_SETTINGS_KEY_SOUND_LOCK,
273                 SYSTEM_SETTING_DATA_TYPE_BOOL,
274                 system_setting_get_sound_lock,
275                 NULL,
276                 system_setting_set_changed_callback_sound_lock,
277                 system_setting_unset_changed_callback_sound_lock,
278                 NULL,
279                 NULL,           /* ADD */
280                 NULL,           /* DEL */
281                 NULL,           /* LIST */
282                 NULL,           /* feature check */
283                 NULL,           /* user data */
284         },
285         {
286                 SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE,
287                 SYSTEM_SETTING_DATA_TYPE_BOOL,
288                 system_setting_get_sound_silent_mode,
289                 system_setting_set_sound_silent_mode,
290                 system_setting_set_changed_callback_sound_silent_mode,
291                 system_setting_unset_changed_callback_sound_silent_mode,
292                 NULL,
293                 NULL,           /* ADD */
294                 NULL,           /* DEL */
295                 NULL,           /* LIST */
296                 NULL,           /* feature check */
297                 NULL,           /* user data */
298         },
299         {
300                 SYSTEM_SETTINGS_KEY_SOUND_TOUCH,
301                 SYSTEM_SETTING_DATA_TYPE_BOOL,
302                 system_setting_get_sound_touch,
303                 NULL,
304                 system_setting_set_changed_callback_sound_touch,
305                 system_setting_unset_changed_callback_sound_touch,
306                 NULL,
307                 NULL,           /* ADD */
308                 NULL,           /* DEL */
309                 NULL,           /* LIST */
310                 NULL,           /* feature check */
311                 NULL,           /* user data */
312         },
313         {
314                 SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO,
315                 SYSTEM_SETTING_DATA_TYPE_BOOL,
316                 system_setting_get_auto_rotation_mode,
317                 system_setting_set_auto_rotation_mode,
318                 system_setting_set_changed_callback_auto_rotation_mode,
319                 system_setting_unset_changed_callback_auto_rotation_mode,
320                 NULL,
321                 NULL,           /* ADD */
322                 NULL,           /* DEL */
323                 NULL,           /* LIST */
324                 NULL,           /* feature check */
325                 NULL,           /* user data */
326         },
327         {
328                 SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME,
329                 SYSTEM_SETTING_DATA_TYPE_INT,
330                 system_setting_get_screen_backlight_time,
331                 system_setting_set_screen_backlight_time,
332                 system_setting_set_changed_callback_screen_backlight_time,
333                 system_setting_unset_changed_callback_screen_backlight_time,
334                 NULL,
335                 NULL,           /* ADD */
336                 NULL,           /* DEL */
337                 NULL,           /* LIST */
338                 NULL,           /* feature check */
339                 NULL,           /* user data */
340         },
341         {
342                 SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION,
343                 SYSTEM_SETTING_DATA_TYPE_STRING,
344                 system_setting_get_sound_notification,
345                 system_setting_set_sound_notification,
346                 system_setting_set_changed_callback_sound_notification,
347                 system_setting_unset_changed_callback_sound_notification,
348                 NULL,
349                 NULL,           /* ADD */
350                 NULL,           /* DEL */
351                 NULL,           /* LIST */
352                 system_setting_feature_check_incoming_call,             /* feature check */
353                 NULL,           /* user data */
354         },
355         {
356                 SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION_REPETITION_PERIOD,
357                 SYSTEM_SETTING_DATA_TYPE_INT,
358                 system_setting_get_notification_repetition_period,
359                 system_setting_set_notification_repetition_period,
360                 system_setting_set_changed_callback_notification_repetition_period,
361                 system_setting_unset_changed_callback_notification_repetition_period,
362                 NULL,
363                 NULL,           /* ADD */
364                 NULL,           /* DEL */
365                 NULL,           /* LIST */
366                 NULL,           /* feature check */
367                 NULL,           /* user data */
368         },
369         {
370                 SYSTEM_SETTINGS_KEY_DEVICE_NAME,
371                 SYSTEM_SETTING_DATA_TYPE_STRING,
372                 system_setting_get_device_name,
373                 NULL,
374                 system_setting_set_changed_callback_device_name,
375                 system_setting_unset_changed_callback_device_name,
376                 NULL,
377                 NULL,           /* ADD */
378                 NULL,           /* DEL */
379                 NULL,           /* LIST */
380                 NULL,           /* feature check */
381                 NULL,           /* user data */
382         },
383         {
384                 SYSTEM_SETTINGS_KEY_MOTION_ENABLED,
385                 SYSTEM_SETTING_DATA_TYPE_BOOL,
386                 system_setting_get_motion_activation,
387                 NULL,
388                 system_setting_set_changed_callback_motion_activation,
389                 system_setting_unset_changed_callback_motion_activation,
390                 NULL,
391                 NULL,           /* ADD */
392                 NULL,           /* DEL */
393                 NULL,           /* LIST */
394                 NULL,           /* feature check */
395                 NULL,           /* user data */
396         },
397         {
398                 SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE,
399                 SYSTEM_SETTING_DATA_TYPE_BOOL,
400                 system_setting_get_network_flight_mode,
401                 NULL,
402                 system_setting_set_changed_callback_network_flight_mode,
403                 system_setting_unset_changed_callback_network_flight_mode,
404                 NULL,
405                 NULL,           /* ADD */
406                 NULL,           /* DEL */
407                 NULL,           /* LIST */
408                 NULL,           /* feature check */
409                 NULL,           /* user data */
410         },
411         {
412                 SYSTEM_SETTINGS_KEY_NETWORK_WIFI_NOTIFICATION,
413                 SYSTEM_SETTING_DATA_TYPE_BOOL,
414                 system_setting_get_network_wifi_notification,
415                 NULL,
416                 system_setting_set_changed_callback_network_wifi_notification,
417                 system_setting_unset_changed_callback_network_wifi_notification,
418                 NULL,
419                 NULL,           /* ADD */
420                 NULL,           /* DEL */
421                 NULL,           /* LIST */
422                 system_setting_feature_check_wifi,              /* feature check */
423                 NULL,           /* user data */
424         },
425         {
426                 SYSTEM_SETTINGS_KEY_LOCK_STATE,
427                 SYSTEM_SETTING_DATA_TYPE_INT,
428                 system_setting_get_lock_state,
429                 system_setting_set_lock_state,
430                 system_setting_set_changed_callback_lock_state,
431                 system_setting_unset_changed_callback_lock_state,
432                 NULL,
433                 NULL,           /* add */
434                 NULL,           /* del */
435                 NULL,           /* list */
436                 NULL,           /* feature check */
437                 NULL,           /* user data */
438         },
439         {
440                 SYSTEM_SETTINGS_KEY_ADS_ID,
441                 SYSTEM_SETTING_DATA_TYPE_STRING,
442                 system_setting_get_ads_id,
443                 system_setting_set_ads_id,
444                 system_setting_set_changed_callback_ads_id,
445                 system_setting_unset_changed_callback_ads_id,
446                 NULL,
447                 NULL,           /* add */
448                 NULL,           /* del */
449                 NULL,           /* list */
450                 system_setting_feature_check_telephony,         /* feature check */
451                 NULL,           /* user data */
452         },
453
454         {
455                 SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE,
456                 SYSTEM_SETTING_DATA_TYPE_INT,
457                 system_setting_get_uds_state,
458                 NULL,
459                 system_setting_set_changed_callback_uds_state,
460                 system_setting_unset_changed_callback_uds_state,
461                 NULL,
462                 NULL,           /* add */
463                 NULL,           /* del */
464                 NULL,           /* list */
465                 system_setting_feature_check_telephony,         /* feature check */
466                 NULL,           /* user data */
467         },
468         {
469                 SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE_PKG_LIST,
470                 SYSTEM_SETTING_DATA_TYPE_STRING,
471                 NULL,
472                 NULL,
473                 system_setting_set_changed_callback_uds_pkg_list,
474                 system_setting_unset_changed_callback_uds_pkg_list,
475                 NULL,
476                 NULL,           /* add */
477                 NULL,           /* del */
478                 NULL,           /* list */
479                 system_setting_feature_check_telephony,         /* feature check */
480                 NULL,           /* user data */
481         },
482         {
483                 SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
484         }
485 };
486
487 #if 0
488 static void _dump_context()
489 {
490         int i;
491         /*int max = SYSTEM_SETTINGS_MAX; */
492         int max = sizeof(system_setting_table) / sizeof(system_setting_s) - 1 ;
493
494         for (i = 0; i < max; i++) {
495                 LOGE("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
496                 LOGE("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
497                 LOGE("[%s] system_setting_table[i].get_value_cb = %x", __FUNCTION__, system_setting_table[i].get_value_cb);
498                 LOGE("[%s] system_setting_table[i].set_value_cb = %x", __FUNCTION__, system_setting_table[i].set_value_cb);
499
500                 LOGE("[%s] system_setting_table[i].set_changed_cb = %x <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
501                 LOGE("[%s] system_setting_table[i].unset_changed_cb = %x", __FUNCTION__, system_setting_table[i].unset_changed_cb);
502                 LOGE("[%s] system_setting_table[i].changed_cb = %x", __FUNCTION__, system_setting_table[i].changed_cb);
503         }
504 }
505 #endif
506
507 /*  LCOV_EXCL_START */
508 static int _dump_context_node(int key)
509 {
510         int index = 0;
511
512         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
513                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
514         }
515
516         while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
517                 if (system_setting_table[index].key == key) {
518                         int i = index;
519                         LOGE("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
520                         LOGE("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
521                         LOGE("[%s] system_setting_table[i].get_value_cb = %x", __FUNCTION__, system_setting_table[i].get_value_cb);
522                         LOGE("[%s] system_setting_table[i].set_value_cb = %x", __FUNCTION__, system_setting_table[i].set_value_cb);
523                         LOGE("[%s] system_setting_table[i].set_changed_cb = %x <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
524                         LOGE("[%s] system_setting_table[i].unset_changed_cb = %x", __FUNCTION__, system_setting_table[i].unset_changed_cb);
525                         LOGE("[%s] system_setting_table[i].changed_cb = %x", __FUNCTION__, system_setting_table[i].changed_cb);
526                         return 0;
527                 }
528                 index++;
529         }
530
531         return -1;
532 }
533
534 /*  LCOV_EXCL_STOP */
535
536 int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
537 {
538         LOGE("Enter [%s], key=%d", __FUNCTION__, key);
539
540         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
541                 LOGE("Enter [%s] catch invalid parameter error (%d) ", __FUNCTION__, key);
542                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
543         }
544 #if 0
545         _dump_context();
546 #endif
547         int index = 0;
548         while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
549                 if (system_setting_table[index].key == key) {
550                         *item = &system_setting_table[index];
551                         LOGE("Enter [%s], index = %d, key = %d, type = %d", __FUNCTION__, index, key, (*item)->data_type);
552                         if (system_setting_table[index].feature_check_cb != NULL) {
553                                 int ret = system_setting_table[index].feature_check_cb(item);
554                                 if (ret == SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED) {
555                                         LOGE("Not supported API, because there is no feature!");
556                                 }
557                                 return ret;
558                         } else {
559                                 return SYSTEM_SETTINGS_ERROR_NONE;
560                         }
561                 }
562
563                 index++;
564         }
565
566         return TIZEN_ERROR_INVALID_PARAMETER;
567 }
568
569 int system_settings_get_value(system_settings_key_e key, system_setting_data_type_e data_type, void **value)
570 {
571         LOGE("Enter [%s]", __FUNCTION__);
572         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
573                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
574         }
575
576         system_setting_h system_setting_item;
577         system_setting_get_value_cb     system_setting_getter;
578
579         int ret = system_settings_get_item(key, &system_setting_item);
580         if (ret != 0) {
581                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER) {
582                         _dump_context_node(key);
583                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
584                 }
585                 return ret;
586         }
587
588         if (system_setting_item->data_type != data_type) {
589                 _dump_context_node(key);
590                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type --- key:(%d), datatype:(%d)", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, key, data_type);
591                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
592         }
593
594         system_setting_getter = system_setting_item->get_value_cb;
595
596         if (system_setting_getter == NULL) {
597                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
598                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
599         }
600
601         return system_setting_getter(key, system_setting_item->data_type, value);
602 }
603
604 /*  LCOV_EXCL_START */
605 int system_settings_set_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
606 {
607         LOGE("Enter [%s]", __FUNCTION__);
608         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
609                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
610         }
611
612
613         system_setting_h system_setting_item;
614         system_setting_set_value_cb     system_setting_setter;
615
616         int ret = system_settings_get_item(key, &system_setting_item);
617
618         if (ret != 0) {
619                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
620                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
621                 return ret;
622         }
623
624         /* type check */
625         if (system_setting_item->data_type != data_type) {
626                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
627                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
628         }
629
630         system_setting_setter = system_setting_item->set_value_cb;
631
632         if (system_setting_setter == NULL) {
633                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
634                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
635         }
636
637         return system_setting_setter(key, system_setting_item->data_type, value);
638 }
639 /*  LCOV_EXCL_STOP */
640
641
642
643 int system_settings_add_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
644 {
645         LOGE("Enter [%s]", __FUNCTION__);
646         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
647                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
648         }
649
650
651         system_setting_h system_setting_item;
652         system_setting_add_value_cb     system_setting_adder;
653
654         int ret = system_settings_get_item(key, &system_setting_item);
655
656         if (ret != 0) {
657                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
658                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
659                 return ret;
660         }
661
662         /* type check */
663         if (system_setting_item->data_type != data_type) {
664                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
665                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
666         }
667
668         system_setting_adder = system_setting_item->add_value_cb;
669
670         if (system_setting_adder == NULL) {
671                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
672                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
673         }
674
675         return system_setting_adder(key, system_setting_item->data_type, value);
676 }
677
678
679 int system_settings_del_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
680 {
681         LOGE("Enter [%s]", __FUNCTION__);
682         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
683                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
684         }
685
686
687         system_setting_h system_setting_item;
688         system_setting_del_value_cb     system_setting_deler;
689
690         int ret = system_settings_get_item(key, &system_setting_item);
691
692         if (0 != ret) {
693                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
694                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
695         }
696
697         /* type check */
698         if (system_setting_item->data_type != data_type) {
699                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
700                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
701         }
702
703         system_setting_deler = system_setting_item->del_value_cb;
704
705         if (system_setting_deler == NULL) {
706                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
707                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
708         }
709
710         return system_setting_deler(key, system_setting_item->data_type, value);
711 }
712
713
714
715
716
717 int system_settings_list_value(system_settings_key_e key, system_setting_data_type_e data_type, bool (*system_setting_data_iterator)(int, const char* , void *), void *user_data)
718 {
719         LOGE("Enter [%s]", __FUNCTION__);
720         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
721                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
722         }
723
724
725         system_setting_h system_setting_item;
726         system_setting_list_value_cb    system_setting_lister;
727
728         int ret = system_settings_get_item(key, &system_setting_item);
729
730         if (ret != 0) {
731                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
732                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
733                 return ret;
734         }
735
736         /* type check */
737         if (system_setting_item->data_type != data_type) {
738                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
739                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
740         }
741
742         //system_setting_list_value_cb list_changed_cb;
743         system_setting_lister = system_setting_item->list_value_cb;
744
745         if (system_setting_lister == NULL) {
746                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
747                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
748         }
749
750         return system_setting_lister(key, system_setting_item->data_type, system_setting_data_iterator, user_data);
751 }
752
753
754
755
756
757
758 /*  LCOV_EXCL_START */
759 int system_settings_set_value_int(system_settings_key_e key, int value)
760 {
761         LOGE("Enter [%s]", __FUNCTION__);
762         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
763                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
764         }
765
766         int *ptr = &value;
767         int **p_ptr = &ptr;
768         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void *)p_ptr);
769 }
770 /*  LCOV_EXCL_STOP */
771
772 int system_settings_get_value_int(system_settings_key_e key, int *value)
773 {
774         LOGE("Enter [%s]", __FUNCTION__);
775         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
776                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
777         }
778         int value_int = 0;
779         int *ptr = &value_int;
780         int **p_ptr = &ptr;
781         int ret = 0;
782         ret = system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void **)p_ptr);
783         *value = value_int;
784         return ret;
785 }
786
787 /*  LCOV_EXCL_START */
788 int system_settings_set_value_bool(system_settings_key_e key, bool value)
789 {
790         LOGE("Enter [%s]", __FUNCTION__);
791         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
792                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
793         }
794
795         bool *ptr = &value;
796         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void *)ptr);
797 }
798 /*  LCOV_EXCL_STOP */
799
800 int system_settings_get_value_bool(system_settings_key_e key, bool *value)
801 {
802         LOGE("Enter [%s]", __FUNCTION__);
803         SETTING_TRACE(" SIGNED LONG here ******************* log here *************** ");
804         signed long flag = 0;
805
806         int ret;
807
808         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
809                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
810         }
811
812         ret = system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void **)&flag);
813         SETTING_TRACE(" inf (flag) value : %d ", flag);
814         if (flag == 0) {
815                 *value = false;
816                 SETTING_TRACE(" flag == 0 ");
817         } else if (flag == 1) {
818                 *value = true;
819                 SETTING_TRACE(" flag == 1 ");
820         } else {
821                 *value = false;
822                 SETTING_TRACE(" exception here!!! ");
823         }
824
825         return ret;
826 }
827
828 /*  LCOV_EXCL_START */
829 int system_settings_set_value_string(system_settings_key_e key, const char *value)
830 {
831         LOGE("Enter [%s]", __FUNCTION__);
832         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
833                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
834         }
835
836
837         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
838                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
839
840         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
841 }
842 /*  LCOV_EXCL_STOP */
843
844 int system_settings_get_value_string(system_settings_key_e key, char **value)
845 {
846         LOGE("Enter [%s]", __FUNCTION__);
847         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
848                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
849         }
850
851         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void **)value);
852 }
853
854
855 /*PUBLIC*/
856 int system_settings_set_changed_cb(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
857 {
858         LOGE("Enter [%s]", __FUNCTION__);
859         system_setting_h system_setting_item;
860         system_setting_set_changed_callback_cb system_setting_set_changed_cb;
861
862         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
863                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
864         }
865
866         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
867                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
868
869         int ret = system_settings_get_item(key, &system_setting_item);
870         if (ret != 0) {
871                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
872                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
873                 return ret;
874         }
875
876         system_setting_set_changed_cb = system_setting_item->set_changed_cb;
877
878
879         /* Store the callback function from application side */
880         if (callback)
881                 system_setting_item->changed_cb = callback;
882
883         if (user_data)
884                 system_setting_item->user_data = user_data;
885
886         if (system_setting_set_changed_cb == NULL) {
887                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
888                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
889         }
890
891         return system_setting_set_changed_cb(key, callback, user_data);
892 }
893
894
895 int system_settings_unset_changed_cb(system_settings_key_e key)
896 {
897         LOGE("Enter [%s]", __FUNCTION__);
898         system_setting_h system_setting_item;
899         system_setting_unset_changed_callback_cb system_setting_unset_changed_cb;
900
901         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
902                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
903         }
904
905         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
906                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
907
908         int ret = system_settings_get_item(key, &system_setting_item);
909         if (ret != 0) {
910                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
911                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
912                 return ret;
913         }
914
915         system_setting_unset_changed_cb = system_setting_item->unset_changed_cb;
916
917         /* free the callback function from application side */
918         if (system_setting_item->changed_cb)
919                 system_setting_item->changed_cb = NULL;
920         /*----------------------------------------------------- */
921
922         if (system_setting_unset_changed_cb == NULL) {
923                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
924                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
925         }
926
927         return system_setting_unset_changed_cb(key);
928 }
929
930 //////////////////////////////////////////////////////////////////////////////////////////////////
931 // list
932 //////////////////////////////////////////////////////////////////////////////////////////////////
933
934 int system_settings_foreach_value_string(system_settings_key_e key, system_settings_iter_cb callback, void *value)
935 {
936         LOGE("Enter [%s]", __FUNCTION__);
937         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
938                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
939         }
940
941         return system_settings_list_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, callback, (void *)value);
942 }
943
944 //////////////////////////////////////////////////////////////////////////////////////////////////
945 // add
946 //////////////////////////////////////////////////////////////////////////////////////////////////
947
948 int system_settings_add_value_string(system_settings_key_e key, const char* value)
949 {
950         LOGE("Enter [%s]", __FUNCTION__);
951         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
952                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
953         }
954
955         return system_settings_add_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
956 }
957
958 //////////////////////////////////////////////////////////////////////////////////////////////////
959 // del
960 //////////////////////////////////////////////////////////////////////////////////////////////////
961
962 int system_settings_delete_value_string(system_settings_key_e key, const char* value)
963 {
964         LOGE("Enter [%s]", __FUNCTION__);
965         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
966                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
967         }
968
969         return system_settings_del_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
970 }
971
972