Added SYSTEM_SETTINGS_KEY_VIBRATION.
[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_KEY_ACCESSIBILITY_TTS,
484                 SYSTEM_SETTING_DATA_TYPE_BOOL,
485                 system_setting_get_accessibility_tts,
486                 NULL,
487                 system_setting_set_changed_callback_accessibility_tts,
488                 system_setting_unset_changed_callback_accessibility_tts,
489                 NULL,
490                 NULL,           /* ADD */
491                 NULL,           /* DEL */
492                 NULL,           /* LIST */
493                 NULL,           /* feature check */
494                 NULL,           /* user data */
495         },
496         {
497                 SYSTEM_SETTINGS_KEY_VIBRATION,
498                 SYSTEM_SETTING_DATA_TYPE_BOOL,
499                 system_setting_get_vibration,
500                 system_setting_set_vibration,
501                 system_setting_set_changed_callback_vibration,
502                 system_setting_unset_changed_callback_vibration,
503                 NULL,
504                 NULL,           /* ADD */
505                 NULL,           /* DEL */
506                 NULL,           /* LIST */
507                 NULL,           /* feature check */
508                 NULL,           /* user data */
509         },
510         {
511                 SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
512         }
513 };
514
515 #if 0
516 static void _dump_context()
517 {
518         int i;
519         /*int max = SYSTEM_SETTINGS_MAX; */
520         int max = sizeof(system_setting_table) / sizeof(system_setting_s) - 1 ;
521
522         for (i = 0; i < max; i++) {
523                 LOGE("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
524                 LOGE("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
525                 LOGE("[%s] system_setting_table[i].get_value_cb = %x", __FUNCTION__, system_setting_table[i].get_value_cb);
526                 LOGE("[%s] system_setting_table[i].set_value_cb = %x", __FUNCTION__, system_setting_table[i].set_value_cb);
527
528                 LOGE("[%s] system_setting_table[i].set_changed_cb = %x <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
529                 LOGE("[%s] system_setting_table[i].unset_changed_cb = %x", __FUNCTION__, system_setting_table[i].unset_changed_cb);
530                 LOGE("[%s] system_setting_table[i].changed_cb = %x", __FUNCTION__, system_setting_table[i].changed_cb);
531         }
532 }
533 #endif
534
535 /*  LCOV_EXCL_START */
536 static int _dump_context_node(int key)
537 {
538         int index = 0;
539
540         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
541                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
542         }
543
544         while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
545                 if (system_setting_table[index].key == key) {
546                         int i = index;
547                         LOGE("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
548                         LOGE("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
549                         LOGE("[%s] system_setting_table[i].get_value_cb = %x", __FUNCTION__, system_setting_table[i].get_value_cb);
550                         LOGE("[%s] system_setting_table[i].set_value_cb = %x", __FUNCTION__, system_setting_table[i].set_value_cb);
551                         LOGE("[%s] system_setting_table[i].set_changed_cb = %x <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
552                         LOGE("[%s] system_setting_table[i].unset_changed_cb = %x", __FUNCTION__, system_setting_table[i].unset_changed_cb);
553                         LOGE("[%s] system_setting_table[i].changed_cb = %x", __FUNCTION__, system_setting_table[i].changed_cb);
554                         return 0;
555                 }
556                 index++;
557         }
558
559         return -1;
560 }
561
562 /*  LCOV_EXCL_STOP */
563
564 int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
565 {
566         LOGE("Enter [%s], key=%d", __FUNCTION__, key);
567
568         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
569                 LOGE("Enter [%s] catch invalid parameter error (%d) ", __FUNCTION__, key);
570                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
571         }
572 #if 0
573         _dump_context();
574 #endif
575         int index = 0;
576         while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
577                 if (system_setting_table[index].key == key) {
578                         *item = &system_setting_table[index];
579                         LOGE("Enter [%s], index = %d, key = %d, type = %d", __FUNCTION__, index, key, (*item)->data_type);
580                         if (system_setting_table[index].feature_check_cb != NULL) {
581                                 int ret = system_setting_table[index].feature_check_cb(item);
582                                 if (ret == SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED) {
583                                         LOGE("Not supported API, because there is no feature!");
584                                 }
585                                 return ret;
586                         } else {
587                                 return SYSTEM_SETTINGS_ERROR_NONE;
588                         }
589                 }
590
591                 index++;
592         }
593
594         return TIZEN_ERROR_INVALID_PARAMETER;
595 }
596
597 int system_settings_get_value(system_settings_key_e key, system_setting_data_type_e data_type, void **value)
598 {
599         LOGE("Enter [%s]", __FUNCTION__);
600         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
601                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
602         }
603
604         system_setting_h system_setting_item;
605         system_setting_get_value_cb     system_setting_getter;
606
607         int ret = system_settings_get_item(key, &system_setting_item);
608         if (ret != 0) {
609                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER) {
610                         _dump_context_node(key);
611                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
612                 }
613                 return ret;
614         }
615
616         if (system_setting_item->data_type != data_type) {
617                 _dump_context_node(key);
618                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type --- key:(%d), datatype:(%d)", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, key, data_type);
619                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
620         }
621
622         system_setting_getter = system_setting_item->get_value_cb;
623
624         if (system_setting_getter == NULL) {
625                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
626                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
627         }
628
629         return system_setting_getter(key, system_setting_item->data_type, value);
630 }
631
632 /*  LCOV_EXCL_START */
633 int system_settings_set_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
634 {
635         LOGE("Enter [%s]", __FUNCTION__);
636         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
637                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
638         }
639
640
641         system_setting_h system_setting_item;
642         system_setting_set_value_cb     system_setting_setter;
643
644         int ret = system_settings_get_item(key, &system_setting_item);
645
646         if (ret != 0) {
647                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
648                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
649                 return ret;
650         }
651
652         /* type check */
653         if (system_setting_item->data_type != data_type) {
654                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
655                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
656         }
657
658         system_setting_setter = system_setting_item->set_value_cb;
659
660         if (system_setting_setter == NULL) {
661                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
662                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
663         }
664
665         return system_setting_setter(key, system_setting_item->data_type, value);
666 }
667 /*  LCOV_EXCL_STOP */
668
669
670
671 int system_settings_add_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
672 {
673         LOGE("Enter [%s]", __FUNCTION__);
674         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
675                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
676         }
677
678
679         system_setting_h system_setting_item;
680         system_setting_add_value_cb     system_setting_adder;
681
682         int ret = system_settings_get_item(key, &system_setting_item);
683
684         if (ret != 0) {
685                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
686                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
687                 return ret;
688         }
689
690         /* type check */
691         if (system_setting_item->data_type != data_type) {
692                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
693                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
694         }
695
696         system_setting_adder = system_setting_item->add_value_cb;
697
698         if (system_setting_adder == NULL) {
699                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
700                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
701         }
702
703         return system_setting_adder(key, system_setting_item->data_type, value);
704 }
705
706
707 int system_settings_del_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
708 {
709         LOGE("Enter [%s]", __FUNCTION__);
710         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
711                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
712         }
713
714
715         system_setting_h system_setting_item;
716         system_setting_del_value_cb     system_setting_deler;
717
718         int ret = system_settings_get_item(key, &system_setting_item);
719
720         if (0 != ret) {
721                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
722                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
723         }
724
725         /* type check */
726         if (system_setting_item->data_type != data_type) {
727                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
728                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
729         }
730
731         system_setting_deler = system_setting_item->del_value_cb;
732
733         if (system_setting_deler == NULL) {
734                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
735                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
736         }
737
738         return system_setting_deler(key, system_setting_item->data_type, value);
739 }
740
741
742
743
744
745 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)
746 {
747         LOGE("Enter [%s]", __FUNCTION__);
748         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
749                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
750         }
751
752
753         system_setting_h system_setting_item;
754         system_setting_list_value_cb    system_setting_lister;
755
756         int ret = system_settings_get_item(key, &system_setting_item);
757
758         if (ret != 0) {
759                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
760                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
761                 return ret;
762         }
763
764         /* type check */
765         if (system_setting_item->data_type != data_type) {
766                 LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
767                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
768         }
769
770         //system_setting_list_value_cb list_changed_cb;
771         system_setting_lister = system_setting_item->list_value_cb;
772
773         if (system_setting_lister == NULL) {
774                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
775                 return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
776         }
777
778         return system_setting_lister(key, system_setting_item->data_type, system_setting_data_iterator, user_data);
779 }
780
781
782
783
784
785
786 /*  LCOV_EXCL_START */
787 int system_settings_set_value_int(system_settings_key_e key, int value)
788 {
789         LOGE("Enter [%s]", __FUNCTION__);
790         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
791                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
792         }
793
794         int *ptr = &value;
795         int **p_ptr = &ptr;
796         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void *)p_ptr);
797 }
798 /*  LCOV_EXCL_STOP */
799
800 int system_settings_get_value_int(system_settings_key_e key, int *value)
801 {
802         LOGE("Enter [%s]", __FUNCTION__);
803         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
804                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
805         }
806         int value_int = 0;
807         int *ptr = &value_int;
808         int **p_ptr = &ptr;
809         int ret = 0;
810         ret = system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_INT, (void **)p_ptr);
811         *value = value_int;
812         return ret;
813 }
814
815 /*  LCOV_EXCL_START */
816 int system_settings_set_value_bool(system_settings_key_e key, bool value)
817 {
818         LOGE("Enter [%s]", __FUNCTION__);
819         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
820                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
821         }
822
823         bool *ptr = &value;
824         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void *)ptr);
825 }
826 /*  LCOV_EXCL_STOP */
827
828 int system_settings_get_value_bool(system_settings_key_e key, bool *value)
829 {
830         LOGE("Enter [%s]", __FUNCTION__);
831         SETTING_TRACE(" SIGNED LONG here ******************* log here *************** ");
832         signed long flag = 0;
833
834         int ret;
835
836         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
837                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
838         }
839
840         ret = system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_BOOL, (void **)&flag);
841         SETTING_TRACE(" inf (flag) value : %d ", flag);
842         if (flag == 0) {
843                 *value = false;
844                 SETTING_TRACE(" flag == 0 ");
845         } else if (flag == 1) {
846                 *value = true;
847                 SETTING_TRACE(" flag == 1 ");
848         } else {
849                 *value = false;
850                 SETTING_TRACE(" exception here!!! ");
851         }
852
853         return ret;
854 }
855
856 /*  LCOV_EXCL_START */
857 int system_settings_set_value_string(system_settings_key_e key, const char *value)
858 {
859         LOGE("Enter [%s]", __FUNCTION__);
860         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
861                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
862         }
863
864
865         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
866                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
867
868         return system_settings_set_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
869 }
870 /*  LCOV_EXCL_STOP */
871
872 int system_settings_get_value_string(system_settings_key_e key, char **value)
873 {
874         LOGE("Enter [%s]", __FUNCTION__);
875         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
876                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
877         }
878
879         return system_settings_get_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void **)value);
880 }
881
882
883 /*PUBLIC*/
884 int system_settings_set_changed_cb(system_settings_key_e key, system_settings_changed_cb callback, void *user_data)
885 {
886         LOGE("Enter [%s]", __FUNCTION__);
887         system_setting_h system_setting_item;
888         system_setting_set_changed_callback_cb system_setting_set_changed_cb;
889
890         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
891                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
892         }
893
894         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
895                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
896
897         int ret = system_settings_get_item(key, &system_setting_item);
898         if (ret != 0) {
899                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
900                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
901                 return ret;
902         }
903
904         system_setting_set_changed_cb = system_setting_item->set_changed_cb;
905
906
907         /* Store the callback function from application side */
908         if (callback)
909                 system_setting_item->changed_cb = callback;
910
911         if (user_data)
912                 system_setting_item->user_data = user_data;
913
914         if (system_setting_set_changed_cb == NULL) {
915                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
916                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
917         }
918
919         return system_setting_set_changed_cb(key, callback, user_data);
920 }
921
922
923 int system_settings_unset_changed_cb(system_settings_key_e key)
924 {
925         LOGE("Enter [%s]", __FUNCTION__);
926         system_setting_h system_setting_item;
927         system_setting_unset_changed_callback_cb system_setting_unset_changed_cb;
928
929         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
930                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
931         }
932
933         if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
934                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
935
936         int ret = system_settings_get_item(key, &system_setting_item);
937         if (ret != 0) {
938                 if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
939                         LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
940                 return ret;
941         }
942
943         system_setting_unset_changed_cb = system_setting_item->unset_changed_cb;
944
945         /* free the callback function from application side */
946         if (system_setting_item->changed_cb)
947                 system_setting_item->changed_cb = NULL;
948         /*----------------------------------------------------- */
949
950         if (system_setting_unset_changed_cb == NULL) {
951                 LOGE("[%s] IO_ERROR(0x%08x) : failed to call getter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_IO_ERROR);
952                 return SYSTEM_SETTINGS_ERROR_IO_ERROR;
953         }
954
955         return system_setting_unset_changed_cb(key);
956 }
957
958 //////////////////////////////////////////////////////////////////////////////////////////////////
959 // list
960 //////////////////////////////////////////////////////////////////////////////////////////////////
961
962 int system_settings_foreach_value_string(system_settings_key_e key, system_settings_iter_cb callback, void *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_list_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, callback, (void *)value);
970 }
971
972 //////////////////////////////////////////////////////////////////////////////////////////////////
973 // add
974 //////////////////////////////////////////////////////////////////////////////////////////////////
975
976 int system_settings_add_value_string(system_settings_key_e key, const char* value)
977 {
978         LOGE("Enter [%s]", __FUNCTION__);
979         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
980                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
981         }
982
983         return system_settings_add_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
984 }
985
986 //////////////////////////////////////////////////////////////////////////////////////////////////
987 // del
988 //////////////////////////////////////////////////////////////////////////////////////////////////
989
990 int system_settings_delete_value_string(system_settings_key_e key, const char* value)
991 {
992         LOGE("Enter [%s]", __FUNCTION__);
993         if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
994                 return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
995         }
996
997         return system_settings_del_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
998 }
999
1000