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