add SYSTEM_SETTINGS_KEY_ADS_ID key
[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
30 #ifdef LOG_TAG
31 #undef LOG_TAG
32 #endif
33
34 #define LOG_TAG "TIZEN_N_SYSTEM_SETTINGS"
35
36 #define SYSTEM_SETTINGS_MAX -1
37
38
39
40 system_setting_s system_setting_table[] = {
41
42         {
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,
49                 NULL,
50                 NULL            /* user data */
51         },
52
53         {
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,
60                 NULL,
61                 NULL            /* user data */
62         },
63
64         {
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,
71                 NULL,
72                 NULL            /* user data */
73         },
74
75         {
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,
82                 NULL,
83                 NULL            /* user data */
84         },
85
86         {
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,
93                 NULL,
94                 NULL            /* user data */
95         },
96
97         {
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,
104                 NULL,
105                 NULL            /* user data */
106         },
107
108         {
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,
115                 NULL,
116                 NULL            /* user data */
117         },
118         {
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,
125                 NULL,
126                 NULL            /* user data */
127         },
128         {
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,
135                 NULL,
136                 NULL            /* user data */
137         },
138         {
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,
145                 NULL,
146                 NULL            /* user data */
147         },
148         {
149                 SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE,
150                 SYSTEM_SETTING_DATA_TYPE_STRING,
151                 system_setting_get_default_font_type,
152                 NULL,
153                 NULL,
154                 NULL,
155                 NULL,
156                 NULL            /* user data */
157         },
158         {
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,
165                 NULL,
166                 NULL            /* user data */
167         },
168         {
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,
175                 NULL,
176                 NULL            /* user data */
177         },
178         {
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,
185                 NULL,
186                 NULL            /* user data */
187         },
188         {
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,
195                 NULL,
196                 NULL            /* user data */
197         },
198         {
199                 SYSTEM_SETTINGS_KEY_TIME_CHANGED,
200                 SYSTEM_SETTING_DATA_TYPE_INT,
201                 system_setting_get_time_changed,
202                 NULL,
203                 system_setting_set_changed_callback_time_changed,
204                 system_setting_unset_changed_callback_time_changed,
205                 NULL,
206                 NULL            /* user data */
207         },
208         {
209                 SYSTEM_SETTINGS_KEY_SOUND_LOCK,
210                 SYSTEM_SETTING_DATA_TYPE_BOOL,
211                 system_setting_get_sound_lock,
212                 NULL,
213                 system_setting_set_changed_callback_sound_lock,
214                 system_setting_unset_changed_callback_sound_lock,
215                 NULL,
216                 NULL            /* user data */
217         },
218         {
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,
225                 NULL,
226                 NULL            /* user data */
227         },
228         {
229                 SYSTEM_SETTINGS_KEY_SOUND_TOUCH,
230                 SYSTEM_SETTING_DATA_TYPE_BOOL,
231                 system_setting_get_sound_touch,
232                 NULL,
233                 system_setting_set_changed_callback_sound_touch,
234                 system_setting_unset_changed_callback_sound_touch,
235                 NULL,
236                 NULL            /* user data */
237         },
238         {
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,
245                 NULL,
246                 NULL            /* user data */
247         },
248         {
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,
255                 NULL,
256                 NULL            /* user data */
257         },
258         {
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,
265                 NULL,
266                 NULL            /* user data */
267         },
268         {
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,
275                 NULL,
276                 NULL            /* user data */
277         },
278         {
279                 SYSTEM_SETTINGS_KEY_DEVICE_NAME,
280                 SYSTEM_SETTING_DATA_TYPE_STRING,
281                 system_setting_get_device_name,
282                 NULL,
283                 system_setting_set_changed_callback_device_name,
284                 system_setting_unset_changed_callback_device_name,
285                 NULL,
286                 NULL            /* user data */
287         },
288         {
289                 SYSTEM_SETTINGS_KEY_MOTION_ENABLED,
290                 SYSTEM_SETTING_DATA_TYPE_BOOL,
291                 system_setting_get_motion_activation,
292                 NULL,
293                 system_setting_set_changed_callback_motion_activation,
294                 system_setting_unset_changed_callback_motion_activation,
295                 NULL,
296                 NULL            /* user data */
297         },
298         {
299                 SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE,
300                 SYSTEM_SETTING_DATA_TYPE_BOOL,
301                 system_setting_get_network_flight_mode,
302                 NULL,
303                 system_setting_set_changed_callback_network_flight_mode,
304                 system_setting_unset_changed_callback_network_flight_mode,
305                 NULL,
306                 NULL            /* user data */
307         },
308         {
309                 SYSTEM_SETTINGS_KEY_NETWORK_WIFI_NOTIFICATION,
310                 SYSTEM_SETTING_DATA_TYPE_BOOL,
311                 system_setting_get_network_wifi_notification,
312                 NULL,
313                 system_setting_set_changed_callback_network_wifi_notification,
314                 system_setting_unset_changed_callback_network_wifi_notification,
315                 NULL,
316                 NULL            /* user data */
317         },
318         {
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,
325                 NULL,
326                 NULL            /* user data */
327         },
328         {
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,
335                 NULL,
336                 NULL            /* user data */
337         },
338         {
339                 SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL, NULL
340         }
341 };
342
343 #if 0
344 static void _dump_context()
345 {
346         int i;
347         /*int max = SYSTEM_SETTINGS_MAX; */
348         int max = sizeof(system_setting_table) / sizeof(system_setting_s) - 1 ;
349
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);
355
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);
359         }
360 }
361 #endif
362
363 /*  LCOV_EXCL_START */
364 static int _dump_context_node(int key)
365 {
366         int index = 0;
367
368         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
369                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
370         }
371
372         while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
373                 if (system_setting_table[index].key == key) {
374                         int i = index;
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);
382                         return 0;
383                 }
384                 index++;
385         }
386
387         return -1;
388 }
389 /*  LCOV_EXCL_STOP */
390
391 int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
392 {
393         LOGE("Enter [%s], key=%d", __FUNCTION__, key);
394
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;
398         }
399 #if 0
400         _dump_context();
401 #endif
402         int index = 0;
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;
408                 }
409
410                 index++;
411         }
412
413         return TIZEN_ERROR_INVALID_PARAMETER;
414 }
415
416 int system_settings_get_value(system_settings_key_e key, system_setting_data_type_e data_type, void **value)
417 {
418         LOGE("Enter [%s]", __FUNCTION__);
419         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
420                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
421         }
422
423         system_setting_h system_setting_item;
424         system_setting_get_value_cb     system_setting_getter;
425
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;
430         }
431
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;
436         }
437
438         system_setting_getter = system_setting_item->get_value_cb;
439
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;
443         }
444
445         return system_setting_getter(key, system_setting_item->data_type, value);
446 }
447
448 /*  LCOV_EXCL_START */
449 int system_settings_set_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
450 {
451         LOGE("Enter [%s]", __FUNCTION__);
452         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
453                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
454         }
455
456
457         system_setting_h system_setting_item;
458         system_setting_set_value_cb     system_setting_setter;
459
460         int ret = system_settings_get_item(key, &system_setting_item);
461
462         if (0 != ret) {
463                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
464                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
465         }
466
467         /* type check */
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;
471         }
472
473         system_setting_setter = system_setting_item->set_value_cb;
474
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;
478         }
479
480         return system_setting_setter(key, system_setting_item->data_type, value);
481 }
482 /*  LCOV_EXCL_STOP */
483
484 /*  LCOV_EXCL_START */
485 int system_settings_set_value_int(system_settings_key_e key, int value)
486 {
487         LOGE("Enter [%s]", __FUNCTION__);
488         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
489                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
490         }
491
492         int *ptr = &value;
493         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void *)ptr);
494 }
495 /*  LCOV_EXCL_STOP */
496
497 int system_settings_get_value_int(system_settings_key_e key, int *value)
498 {
499         LOGE("Enter [%s]", __FUNCTION__);
500         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
501                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
502         }
503
504         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void **)value);
505 }
506
507 /*  LCOV_EXCL_START */
508 int system_settings_set_value_bool(system_settings_key_e key, bool value)
509 {
510         LOGE("Enter [%s]", __FUNCTION__);
511         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
512                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
513         }
514
515         bool *ptr = &value;
516         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void *)ptr);
517 }
518 /*  LCOV_EXCL_STOP */
519
520 int system_settings_get_value_bool(system_settings_key_e key, bool *value)
521 {
522         LOGE("Enter [%s]", __FUNCTION__);
523         SETTING_TRACE(" SIGNED LONG here ******************* log here *************** ");
524         signed long flag = 0;
525
526         int ret;
527
528         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
529                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
530         }
531
532         ret = system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void **)&flag);
533         SETTING_TRACE(" inf (flag) value : %d ", flag);
534         if (flag == 0) {
535                 *value = false;
536                 SETTING_TRACE(" flag == 0 ");
537         } else if (flag == 1) {
538                 *value = true;
539                 SETTING_TRACE(" flag == 1 ");
540         } else {
541                 *value = false;
542                 SETTING_TRACE(" exception here!!! ");
543         }
544
545         return ret;
546 }
547
548 /*  LCOV_EXCL_START */
549 int system_settings_set_value_string(system_settings_key_e key, const char *value)
550 {
551         LOGE("Enter [%s]", __FUNCTION__);
552         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
553                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
554         }
555
556
557         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
558                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
559
560         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
561 }
562 /*  LCOV_EXCL_STOP */
563
564 int system_settings_get_value_string(system_settings_key_e key, char **value)
565 {
566         LOGE("Enter [%s]", __FUNCTION__);
567         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
568                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
569         }
570
571         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void **)value);
572 }
573
574
575 /*PUBLIC*/
576 int system_settings_set_changed_cb(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
577 {
578         LOGE("Enter [%s]", __FUNCTION__);
579         system_setting_h system_setting_item;
580         system_setting_set_changed_callback_cb system_setting_set_changed_cb;
581
582         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
583                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
584         }
585
586         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
587                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
588
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;
592         }
593
594         system_setting_set_changed_cb = system_setting_item->set_changed_cb;
595
596
597         /* Store the callback function from application side */
598         if (callback)
599                 system_setting_item->changed_cb = callback;
600
601         if (user_data)
602                 system_setting_item->user_data = user_data;
603
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;
607         }
608
609         return system_setting_set_changed_cb(key, callback, user_data);
610 }
611
612
613 int system_settings_unset_changed_cb(system_settings_key_e key)
614 {
615         LOGE("Enter [%s]", __FUNCTION__);
616         system_setting_h system_setting_item;
617         system_setting_unset_changed_callback_cb system_setting_unset_changed_cb;
618
619         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
620                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
621         }
622
623         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
624                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
625
626         int ret = system_settings_get_item(key, &system_setting_item) ;
627         if (ret) {
628                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
629                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
630         }
631
632         system_setting_unset_changed_cb = system_setting_item->unset_changed_cb;
633
634         /* free the callback function from application side */
635         if (system_setting_item->changed_cb)
636                 system_setting_item->changed_cb = NULL;
637         /*----------------------------------------------------- */
638
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;
642         }
643
644         return system_setting_unset_changed_cb(key);
645 }
646