Fix to check SYSTEM_SETTINGS_KEY_AUTOMATIC_TIME_UPDATE feature
[platform/core/api/system-settings.git] / src / sst_interface.c
index 0a01952..06df781 100644 (file)
 
 #include <vconf.h>
 #include "sst.h"
-#include "sst_core.h"
 #include "sst_font.h"
-#include "sst_utils.h"
+#include "sst_misc.h"
 #include "sst_vconf.h"
+#include "sst_sound.h"
 #include "sst_screen.h"
 #include "sst_feature.h"
-#include "sst_ringtones.h"
 #include "sst_time_N_locale.h"
 
-#define SYSTEM_SETTINGS_MAX -1
-
-struct _system_setting_s system_setting_table[] = {
-       {
+static sst_interface sst_iface_table[] = {
+       [SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE] = {
                SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE,
                VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_incoming_call_ringtone,
-               system_setting_set_incoming_call_ringtone,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               system_setting_add_incoming_call_ringtone,      /* ADD */
-               system_setting_del_incoming_call_ringtone,      /* DEL */
-               system_setting_list_incoming_call_ringtone,     /* LIST */
-               system_setting_feature_check_incoming_call,             /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
+               .feature_checker = sst_feature_check_incoming_call,
+               .getter.s = sst_sound_get_call_ringtone,
+               .setter.s = sst_sound_set_call_ringtone
        },
-
-       {
+       [SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN] = {
                SYSTEM_SETTINGS_KEY_WALLPAPER_HOME_SCREEN,
                VCONFKEY_BGSET,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_vconf,
-               system_setting_set_wallpaper_home_screen,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_home_screen,               /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
+               .feature_checker = sst_feature_check_home_screen,
+               .getter.s = sst_vconf_get_str,
+               .setter.s = sst_screen_set_home_wallpaper
        },
-
-       {
+       [SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN] = {
                SYSTEM_SETTINGS_KEY_WALLPAPER_LOCK_SCREEN,
                VCONFKEY_IDLE_LOCK_BGSET,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_vconf,
-               system_setting_set_wallpaper_lock_screen,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_lock_screen,               /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
+               .feature_checker = sst_feature_check_lock_screen,
+               .getter.s = sst_vconf_get_str,
+               .setter.s = sst_screen_set_lock_wallpaper
        },
-
-       {
+       [SYSTEM_SETTINGS_KEY_FONT_SIZE] = {
                SYSTEM_SETTINGS_KEY_FONT_SIZE,
                VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE,
                SYSTEM_SETTING_DATA_TYPE_INT,
-               system_setting_get_vconf,
-               system_setting_set_font_size,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_font,              /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
+               .feature_checker = sst_feature_check_font,
+               .getter.i = sst_vconf_get_int,
+               .setter.i = sst_font_set_size
        },
-
-       {
+       [SYSTEM_SETTINGS_KEY_FONT_TYPE] = {
                SYSTEM_SETTINGS_KEY_FONT_TYPE,
                VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_vconf,
-               system_setting_set_font_type,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_font,              /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
+               .feature_checker = sst_feature_check_font,
+               .getter.s = sst_font_get_type,
+               .setter.s = sst_font_set_type
        },
-
-       {
+       [SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION] = {
                SYSTEM_SETTINGS_KEY_MOTION_ACTIVATION,
                VCONFKEY_SETAPPL_MOTION_ACTIVATION,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
        },
-
-       {
+       [SYSTEM_SETTINGS_KEY_EMAIL_ALERT_RINGTONE] = {
                SYSTEM_SETTINGS_KEY_EMAIL_ALERT_RINGTONE,
                VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_email_alert_ringtone,
-               system_setting_set_email_alert_ringtone,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_notification_email,                /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_notification_email,
+               .getter.s = sst_sound_get_email_alert,
+               .setter.s = sst_sound_set_email_alert
+       },
+       [SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED] = {
                SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED,
                VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED] = {
                SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED,
                VCONFKEY_3G_ENABLE,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       //{ /* Deprecated */
-       //      -5, NULL, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, { NULL, 0 }, NULL
-       //},
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_LOCKSCREEN_APP] = {
                SYSTEM_SETTINGS_KEY_LOCKSCREEN_APP,
                VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_lockscreen_app,
-               system_setting_set_lockscreen_app,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_lock_screen,               /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_lock_screen,
+               .getter.s = sst_screen_get_lockscreen,
+               .setter.s = sst_screen_set_lockscreen
+       },
+       [SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE] = {
                SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE,
                NULL,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_default_font_type,
-               NULL,
-               NULL,
-               NULL,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_font,              /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_font,
+               .getter.s = sst_font_get_default_type,
+               .setter.s = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY] = {
                SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY,
                VCONFKEY_REGIONFORMAT,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_locale_country,
-               system_setting_set_locale_country,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.s = sst_locale_get_country,
+               .setter.s = sst_locale_set_country
+       },
+       [SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE] = {
                SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE,
                VCONFKEY_LANGSET,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_locale_language,
-               system_setting_set_locale_language,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.s = sst_locale_get_language,
+               .setter.s = sst_locale_set_language
+       },
+       [SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR] = {
                SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
                VCONFKEY_REGIONFORMAT_TIME1224,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_locale_timeformat_24hour,
-               system_setting_set_locale_timeformat_24hour,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_locale_get_timeformat_24hour,
+               .setter.b = sst_locale_set_timeformat_24hour
+       },
+       [SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE] = {
                SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE,
                VCONFKEY_SETAPPL_TIMEZONE_ID,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_locale_timezone,
-               system_setting_set_locale_timezone,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.s = sst_locale_get_timezone,
+               .setter.s = sst_locale_set_timezone
+       },
+       [SYSTEM_SETTINGS_KEY_TIME_CHANGED] = {
                SYSTEM_SETTINGS_KEY_TIME_CHANGED,
                VCONFKEY_SYSTEM_TIME_CHANGED,
                SYSTEM_SETTING_DATA_TYPE_INT,
-               system_setting_get_time_changed,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.i = sst_time_get_changed,
+               .setter.i = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_SOUND_LOCK] = {
                SYSTEM_SETTINGS_KEY_SOUND_LOCK,
                VCONFKEY_SETAPPL_SOUND_LOCK_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE] = {
                SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE,
                VCONFKEY_SETAPPL_SOUND_STATUS_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_sound_silent_mode,
-               system_setting_set_sound_silent_mode,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_sound_get_silent_mode,
+               .setter.b = sst_sound_set_silent_mode
+       },
+       [SYSTEM_SETTINGS_KEY_SOUND_TOUCH] = {
                SYSTEM_SETTINGS_KEY_SOUND_TOUCH,
                VCONFKEY_SETAPPL_TOUCH_SOUNDS_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO] = {
                SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO,
                VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_DEVICE_NAME] = {
                SYSTEM_SETTINGS_KEY_DEVICE_NAME,
                VCONFKEY_SETAPPL_DEVICE_NAME_STR,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_vconf,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.s = sst_vconf_get_str,
+               .setter.s = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_MOTION_ENABLED] = {
                SYSTEM_SETTINGS_KEY_MOTION_ENABLED,
                VCONFKEY_SETAPPL_MOTION_ACTIVATION,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_NETWORK_WIFI_NOTIFICATION] = {
                SYSTEM_SETTINGS_KEY_NETWORK_WIFI_NOTIFICATION,
                VCONFKEY_WIFI_ENABLE_QS,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_network_wifi_notification,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_wifi,              /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_wifi,
+               .getter.b = sst_misc_get_wifi_QS_noti,
+               .setter.b = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE] = {
                SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE,
                VCONFKEY_TELEPHONY_FLIGHT_MODE,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME] = {
                SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME,
                VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL,
                SYSTEM_SETTING_DATA_TYPE_INT,
-               system_setting_get_vconf,
-               system_setting_set_screen_backlight_time,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.i = sst_vconf_get_int,
+               .setter.i = sst_screen_set_backlight_time
+       },
+       [SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION] = {
                SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION,
                VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_vconf,
-               system_setting_set_sound_notification,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_incoming_call,             /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_incoming_call,
+               .getter.s = sst_vconf_get_str,
+               .setter.s = sst_sound_set_notification
+       },
+       [SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION_REPETITION_PERIOD] = {
                SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION_REPETITION_PERIOD,
                VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT,
                SYSTEM_SETTING_DATA_TYPE_INT,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.i = sst_vconf_get_int,
+               .setter.i = sst_vconf_set_int
+       },
+       [SYSTEM_SETTINGS_KEY_LOCK_STATE] = {
                SYSTEM_SETTINGS_KEY_LOCK_STATE,
                VCONFKEY_IDLE_LOCK_STATE_READ_ONLY,
                SYSTEM_SETTING_DATA_TYPE_INT,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* add */
-               NULL,           /* del */
-               NULL,           /* list */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.i = sst_vconf_get_int,
+               .setter.i = sst_vconf_set_int
+       },
+       [SYSTEM_SETTINGS_KEY_ADS_ID] = {
                SYSTEM_SETTINGS_KEY_ADS_ID,
                VCONFKEY_SETAPPL_AD_ID,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               system_setting_get_ads_id,
-               system_setting_set_ads_id,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* add */
-               NULL,           /* del */
-               NULL,           /* list */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
+               .feature_checker = NULL,
+               .getter.s = sst_misc_get_ads_id,
+               .setter.s = sst_misc_set_ads_id
        },
-
-       {
+       [SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE] = {
                SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE,
                VCONFKEY_SETAPPL_UDSM,
                SYSTEM_SETTING_DATA_TYPE_INT,
-               system_setting_get_uds_state,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* add */
-               NULL,           /* del */
-               NULL,           /* list */
-               system_setting_feature_check_telephony,         /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_telephony,
+               .getter.i = sst_misc_get_uds_state,
+               .setter.i = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE_PKG_LIST] = {
                SYSTEM_SETTINGS_KEY_ULTRA_DATA_SAVE_PKG_LIST,
                VCONFKEY_SETAPPL_UDSM_PKGID_LIST,
                SYSTEM_SETTING_DATA_TYPE_STRING,
-               NULL,
-               NULL,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* add */
-               NULL,           /* del */
-               NULL,           /* list */
-               system_setting_feature_check_telephony,         /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_telephony,
+               .getter.s = NULL,
+               .setter.s = NULL
+       },
+       [SYSTEM_SETTINGS_KEY_ACCESSIBILITY_TTS] = {
                SYSTEM_SETTINGS_KEY_ACCESSIBILITY_TTS,
                VCONFKEY_SETAPPL_ACCESSIBILITY_TTS,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_VIBRATION] = {
                SYSTEM_SETTINGS_KEY_VIBRATION,
                VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_AUTOMATIC_TIME_UPDATE] = {
                SYSTEM_SETTINGS_KEY_AUTOMATIC_TIME_UPDATE,
                VCONFKEY_SETAPPL_STATE_AUTOMATIC_TIME_UPDATE_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_telephony,         /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_automatic_time_update,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_DEVELOPER_OPTION_STATE] = {
                SYSTEM_SETTINGS_KEY_DEVELOPER_OPTION_STATE,
                VCONFKEY_SETAPPL_DEVELOPER_OPTION_STATE,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               NULL,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = NULL,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_ACCESSIBILITY_GRAYSCALE] = {
                SYSTEM_SETTINGS_KEY_ACCESSIBILITY_GRAYSCALE,
                VCONFKEY_SETAPPL_ACCESSIBILITY_GREYSCALE,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_accessibility_grayscale,           /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_accessibility_grayscale,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_ACCESSIBILITY_NEGATIVE_COLOR] = {
                SYSTEM_SETTINGS_KEY_ACCESSIBILITY_NEGATIVE_COLOR,
                VCONFKEY_SETAPPL_ACCESSIBILITY_HIGH_CONTRAST,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_accessibility_negative,            /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
+               .feature_checker = sst_feature_check_accessibility_negative,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
+       },
+       [SYSTEM_SETTINGS_KEY_ROTARY_EVENT_ENABLED] = {
                SYSTEM_SETTINGS_KEY_ROTARY_EVENT_ENABLED,
                VCONFKEY_SETAPPL_ROTARY_EVENT_ENABLED_BOOL,
                SYSTEM_SETTING_DATA_TYPE_BOOL,
-               system_setting_get_vconf,
-               system_setting_set_vconf,
-               system_setting_set_changed_vconf_genernal_callback,
-               system_setting_unset_changed_vconf_genernal_callback,
-               NULL,
-               NULL,           /* ADD */
-               NULL,           /* DEL */
-               NULL,           /* LIST */
-               system_setting_feature_check_wearable_profile,          /* feature check */
-               { NULL, 0 }, /* changed callabck list */
-               NULL,           /* user data */
-       },
-       {
-               SYSTEM_SETTINGS_MAX, NULL, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, { NULL, 0 }, NULL
+               .feature_checker = sst_feature_check_rotary,
+               .getter.b = sst_vconf_get_bool,
+               .setter.b = sst_vconf_set_bool
        }
 };
 
-
-#if DEBUG_DUMP_CONTEXT
-static void _dump_context()
+int sst_get_interface(system_settings_key_e key, sst_interface **iface)
 {
-       int i;
-       /*int max = SYSTEM_SETTINGS_MAX; */
-       int max = sizeof(system_setting_table) / sizeof(struct _system_setting_s) - 1;
+       RETVM_IF(key < 0 || SYSTEM_SETTINGS_KEY_MAX <= key,
+               SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, "Invalid Key(%d)", key);
 
-       for (i = 0; i < max; i++) {
-               ERR("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
-               ERR("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
-               ERR("[%s] system_setting_table[i].get_value_cb = %x", __FUNCTION__, system_setting_table[i].get_value_cb);
-               ERR("[%s] system_setting_table[i].set_value_cb = %x", __FUNCTION__, system_setting_table[i].set_value_cb);
-
-               ERR("[%s] system_setting_table[i].set_changed_cb = %x <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
-               ERR("[%s] system_setting_table[i].unset_changed_cb = %x", __FUNCTION__, system_setting_table[i].unset_changed_cb);
-               ERR("[%s] system_setting_table[i].changed_cb = %x", __FUNCTION__, system_setting_table[i].changed_cb);
-       }
-}
-#endif
-
-int sst_dump_context_node(int key)
-{
-       int index = 0;
-
-       if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key))
+       if (sst_iface_table[key].key != key) {
+               ERR("Invalid interface for key(%d)", key);
                return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
-
-       while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
-               if (system_setting_table[index].key == key) {
-                       int i = index;
-                       ERR("[%s] system_setting_table[i].key = %d", __FUNCTION__, system_setting_table[i].key);
-                       ERR("[%s] system_setting_table[i].data_type = %d", __FUNCTION__, system_setting_table[i].data_type);
-                       ERR("[%s] system_setting_table[i].get_value_cb = %p", __FUNCTION__, system_setting_table[i].get_value_cb);
-                       ERR("[%s] system_setting_table[i].set_value_cb = %p", __FUNCTION__, system_setting_table[i].set_value_cb);
-                       ERR("[%s] system_setting_table[i].set_changed_cb = %p <---", __FUNCTION__, system_setting_table[i].set_changed_cb);
-                       ERR("[%s] system_setting_table[i].unset_changed_cb = %p", __FUNCTION__, system_setting_table[i].unset_changed_cb);
-                       ERR("[%s] system_setting_table[i].changed_cb = %p", __FUNCTION__, system_setting_table[i].changed_cb);
-                       return 0;
-               }
-               index++;
        }
 
-       return -1;
-}
-#if 0
-int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
-{
-       ERR("Enter [%s], key=%d", __FUNCTION__, key);
-
-       if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
-               ERR("Enter [%s] catch invalid parameter error (%d) ", __FUNCTION__, key);
-               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
-       }
-#if DEBUG_DUMP_CONTEXT
-       _dump_context();
-#endif
-       int index = 0;
-       while (system_setting_table[index].key != SYSTEM_SETTINGS_MAX) {
-               if (system_setting_table[index].key == key) {
-                       *item = &system_setting_table[index];
-                       ERR("Enter [%s], index = %d, key = %d, type = %d", __FUNCTION__, index, key, (*item)->data_type);
-                       if (system_setting_table[index].feature_check_cb != NULL) {
-                               int ret = system_setting_table[index].feature_check_cb(item);
-                               if (ret == SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED)
-                                       ERR("Not supported API, because there is no feature!");
-
-                               return ret;
-                       } else {
-                               return SYSTEM_SETTINGS_ERROR_NONE;
-                       }
+       if (sst_iface_table[key].feature_checker) {
+               int ret = sst_iface_table[key].feature_checker(iface);
+               if (SYSTEM_SETTINGS_ERROR_NONE != ret) {
+                       ERR("feature_checker(%d) Fail(%d)", key, ret);
+                       return ret;
                }
-
-               index++;
        }
 
-       return TIZEN_ERROR_INVALID_PARAMETER;
-}
-#else
-
-static int binary_search_for_item(system_settings_key_e key)
-{
-       int start = 0;
-       int end = SYSTEM_SETTINGS_KEY_MAX;
-
-       while (start <= end) {
-               int mid = (start + end) / 2;
-               if (system_setting_table[mid].key == key)
-                       return mid;
-               else if (system_setting_table[mid].key < key)
-                       start = mid + 1;
-               else
-                       end = mid - 1;
-       }
-
-       ERR("Enter [%s], key=%d, Can NOT find the key", __FUNCTION__, key);
-       return -1;
-}
+       *iface = &sst_iface_table[key];
+       INFO("key = %d, type = %d", key, (*iface)->data_type);
 
-int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
-{
-       ERR("Enter [%s], key=%d", __FUNCTION__, key);
-
-       if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
-               ERR("Enter [%s] catch invalid parameter error (%d) ", __FUNCTION__, key);
-               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
-       }
-#if DEBUG_DUMP_CONTEXT
-       _dump_context();
-#endif
-       int idx = binary_search_for_item(key);
-       if (-1 == idx)
-               return TIZEN_ERROR_INVALID_PARAMETER;
-
-       *item = &system_setting_table[idx];
-       ERR("Enter [%s],  key = %d, type = %d", __FUNCTION__, key, (*item)->data_type);
-       if (system_setting_table[idx].feature_check_cb != NULL) {
-               int ret = system_setting_table[idx].feature_check_cb(item);
-               if (ret == SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED)
-                       ERR("Not supported API, because there is no feature!");
-
-               return ret;
-       }
        return SYSTEM_SETTINGS_ERROR_NONE;
 }
-#endif