Added feature check callback to support specific API. 32/118432/9 accepted/tizen/unified/20170429.024356 submit/tizen/20170428.082658
authorjinwang.an <jinwang.an@samsung.com>
Fri, 10 Mar 2017 09:22:45 +0000 (18:22 +0900)
committerjinwang.an <jinwang.an@samsung.com>
Fri, 28 Apr 2017 07:41:09 +0000 (16:41 +0900)
Signed-off-by: jinwang.an <jinwang.an@samsung.com>
Conflicts:
CMakeLists.txt
include/system_settings_private.h
packaging/capi-system-system-settings.spec
src/system_setting_platform.c
src/system_settings.c

Change-Id: Id4e560ccfdde654901523ec9dea96d5efbeea1a5
Signed-off-by: jinwang.an <jinwang.an@samsung.com>
CMakeLists.txt
include/system_settings.h
include/system_settings_private.h
packaging/capi-system-system-settings.spec
src/system_setting_platform.c
src/system_settings.c
src/system_settings_vconf.c

index 0e88d2f..3b9a7b0 100755 (executable)
@@ -31,7 +31,7 @@ SET(LIBDIR "${CMAKE_LIBDIR}")
 SET(INC_DIR include)
 INCLUDE_DIRECTORIES(${INC_DIR})
 
-SET(requires "dlog vconf fontconfig libxml-2.0 pkgmgr pkgmgr-info alarm-service capi-media-metadata-extractor eina elementary aul json-glib-1.0 capi-appfw-app-manager capi-appfw-package-manager")
+SET(requires "dlog vconf fontconfig libxml-2.0 pkgmgr pkgmgr-info alarm-service capi-media-metadata-extractor eina elementary aul json-glib-1.0 capi-appfw-app-manager capi-appfw-package-manager capi-system-info")
 SET(pc_requires "capi-base-common")
 
 
index 1cd3183..2ef178b 100644 (file)
@@ -151,6 +151,7 @@ typedef void (*system_settings_changed_cb)(system_settings_key_e key, void *user
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  */
 int system_settings_set_value_int(system_settings_key_e key, int value);
 
@@ -164,6 +165,7 @@ int system_settings_set_value_int(system_settings_key_e key, int value);
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  * @warning %http://tizen.org/privilege/systemsettings (public level privilege) <b>MUST NOT</b> be declared to use this API since 2.3.1.
  */
 int system_settings_get_value_int(system_settings_key_e key, int *value);
@@ -182,6 +184,7 @@ int system_settings_get_value_int(system_settings_key_e key, int *value);
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  */
 int system_settings_set_value_bool(system_settings_key_e key, bool value);
 
@@ -195,6 +198,7 @@ int system_settings_set_value_bool(system_settings_key_e key, bool value);
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  * @warning %http://tizen.org/privilege/systemsettings (public level privilege) <b>MUST NOT</b> be declared to use this API since 2.3.1.
  */
 int system_settings_get_value_bool(system_settings_key_e key, bool *value);
@@ -213,6 +217,7 @@ int system_settings_get_value_bool(system_settings_key_e key, bool *value);
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  */
 int system_settings_set_value_string(system_settings_key_e key, const char *value);
 
@@ -227,6 +232,7 @@ int system_settings_set_value_string(system_settings_key_e key, const char *valu
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  * @warning %http://tizen.org/privilege/systemsettings (public level privilege) <b>MUST NOT</b> be declared to use this API since 2.3.1.
  */
 int system_settings_get_value_string(system_settings_key_e key, char **value);
@@ -242,6 +248,7 @@ int system_settings_get_value_string(system_settings_key_e key, char **value);
  * @retval     #SYSTEM_SETTINGS_ERROR_NONE Successful
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  * @post system_settings_changed_cb() will be invoked.
  *
  * @see system_settings_unset_changed_cb()
@@ -260,6 +267,7 @@ int system_settings_set_changed_cb(system_settings_key_e key, system_settings_ch
  * @retval     #SYSTEM_SETTINGS_ERROR_NONE Successful
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  *
  * @see system_settings_set_changed_cb()
  * @warning %http://tizen.org/privilege/systemsettings (public level privilege) <b>MUST NOT</b> be declared to use this API since 2.3.1.
@@ -292,6 +300,7 @@ typedef bool (*system_settings_iter_cb)(int index, const char* value, void *cb_d
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  */
 int system_settings_foreach_value_string(system_settings_key_e key, system_settings_iter_cb callback, void *user_value);
 
@@ -308,6 +317,7 @@ int system_settings_foreach_value_string(system_settings_key_e key, system_setti
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  */
 int system_settings_add_value_string(system_settings_key_e key, const char *value);
 
@@ -324,6 +334,7 @@ int system_settings_add_value_string(system_settings_key_e key, const char *valu
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  */
 int system_settings_delete_value_string(system_settings_key_e key, const char *value);
 
index 968fd2b..db48495 100644 (file)
@@ -62,6 +62,8 @@ extern "C"
 #endif
 
 
+#define SETTING_PROFILE_PATH "tizen.org/feature/profile"
+#define SETTING_3G_TELEPHONY_PATH "tizen.org/feature/network.telephony.service.cdma"
 
 /**
  * @internal
@@ -79,6 +81,19 @@ typedef enum {
 }
 system_setting_data_type_e;
 
+/**
+ * @internal
+ * @since_tizen 4.0
+ * Enumeration for supported profile info
+ */
+typedef enum {
+       SYSTEM_SETTING_SUPPORTED_PROFILE_MOBILE = 0x1,          /**< mobile */
+       SYSTEM_SETTING_SUPPORTED_PROFILE_WEARABLE = 0x2,        /**< wearable */
+       SYSTEM_SETTING_SUPPORTED_PROFILE_TV = 0x4,                      /**< tv */
+       SYSTEM_SETTING_SUPPORTED_PROFILE_COMMON = 0x8,          /**< common*/
+       SYSTEM_SETTING_SUPPORTED_PROFILE_ALL = 0xF,                     /**< all of profiles */
+}
+system_setting_supported_profile_info_e;
 
 /**
  * @internal
@@ -106,6 +121,8 @@ typedef int (*system_setting_add_value_cb)(system_settings_key_e key, system_set
 typedef int (*system_setting_del_value_cb)(system_settings_key_e key, system_setting_data_type_e data_type, void *value);
 typedef int (*system_setting_list_value_cb)(system_settings_key_e key, system_setting_data_type_e data_type, system_settings_iter_cb callback, void *user_data);
 
+typedef int (*system_setting_feature_check_cb)(void *value);
+
 /**
  * @internal
  * @since_tizen 2.3
@@ -151,6 +168,8 @@ typedef struct {
        system_setting_del_value_cb del_value_cb;
        system_setting_list_value_cb list_value_cb;
 
+       system_setting_feature_check_cb feature_check_cb;
+
        void *user_data;                                                                                                /* user_data */
 
 } system_setting_s;
@@ -166,6 +185,7 @@ typedef system_setting_s *system_setting_h;
  * @retval     #SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER Invalid parameter
  * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
  * @retval     #SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED Permission violation error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
  */
 int system_settings_get_item(system_settings_key_e key, system_setting_h *item);
 
@@ -1395,6 +1415,16 @@ int system_setting_set_changed_callback_uds_pkg_list(system_settings_key_e key,
  */
 int system_setting_unset_changed_callback_uds_pkg_list(system_settings_key_e key);
 
+
+/**
+ * @internal
+ * @since_tizen 4.0
+ * @return     0 on success, otherwise a negative error value
+ * @retval     #SYSTEM_SETTINGS_ERROR_NONE Successful
+ * @retval     #SYSTEM_SETTINGS_ERROR_IO_ERROR Internal I/O error
+ * @retval     #SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED Not support system-settings API
+ */
+int system_setting_feature_check_telephony(void *value);
 /*// */
 
 
index 6e97533..1f44f84 100755 (executable)
@@ -20,6 +20,8 @@ BuildRequires:  pkgconfig(libtzplatform-config)
 BuildRequires:  pkgconfig(alarm-service)
 BuildRequires:  pkgconfig(uuid)
 BuildRequires:  pkgconfig(capi-media-metadata-extractor)
+BuildRequires:  pkgconfig(capi-system-info)
+
 BuildRequires:  pkgconfig(json-glib-1.0)
 BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  pkgconfig(capi-appfw-app-manager)
index ff88546..b1d4e63 100644 (file)
@@ -52,7 +52,7 @@
 #include <tzplatform_config.h>
 #include <alarm.h>
 
-
+#include <system_info.h>
 
 #define SETTING_FONT_CONF_FILE _TZ_SYS_ETC"/fonts/conf.avail/99-tizen.conf"
 #define SETTING_DEFAULT_FONT_CONF_FILE _TZ_SYS_ETC"/fonts/conf.avail/99-tizen.conf"
@@ -2169,8 +2169,69 @@ int system_setting_unset_changed_callback_ads_id(system_settings_key_e key)
        SETTING_TRACE_BEGIN;
        return system_setting_vconf_unset_changed_cb(VCONFKEY_SETAPPL_AD_ID, 0);
 }
-//
-//----------------------------------------------------------------------------------------------------------------------------
+
+int system_setting_get_profile_info(int *value)
+{
+       char *profile_string = NULL;
+       static int is_first = 1;
+       static int profile_data = 0;
+
+       if (value == NULL)
+               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+
+       *value = 0;
+
+       if (!is_first) {
+               *value = profile_data;
+               return SYSTEM_SETTINGS_ERROR_NONE;
+       }
+
+       is_first = 0;
+
+       int ret = system_info_get_platform_string(SETTING_PROFILE_PATH, &profile_string);
+       if (ret != SYSTEM_INFO_ERROR_NONE) {
+               SETTING_TRACE("Setting - reading profile string failed, %d", ret);
+               return SYSTEM_SETTINGS_ERROR_IO_ERROR;
+       }
+
+       if (profile_string == NULL)
+               return SYSTEM_SETTINGS_ERROR_IO_ERROR;
+
+       LOGE("Profile : %s", profile_string);
+
+       if (!strcmp(profile_string, "mobile"))
+               *value = SYSTEM_SETTING_SUPPORTED_PROFILE_MOBILE;
+       else if (!strcmp(profile_string, "wearable"))
+               *value = SYSTEM_SETTING_SUPPORTED_PROFILE_WEARABLE;
+       else if (!strcmp(profile_string, "tv"))
+               *value = SYSTEM_SETTING_SUPPORTED_PROFILE_TV;
+       else if (!strcmp(profile_string, "common"))
+               *value = SYSTEM_SETTING_SUPPORTED_PROFILE_COMMON;
+       else {
+               FREE(profile_string);
+               return SYSTEM_SETTINGS_ERROR_IO_ERROR;
+       }
+
+       profile_data = *value;
+       FREE(profile_string);
+       return SYSTEM_SETTINGS_ERROR_NONE;
+}
+
+int system_setting_feature_check_telephony(void * value)
+{
+       int profile_data = 0;
+
+       if (system_setting_get_profile_info(&profile_data) != SYSTEM_SETTINGS_ERROR_NONE)
+               return SYSTEM_SETTINGS_ERROR_IO_ERROR;
+
+       if (profile_data == SYSTEM_SETTING_SUPPORTED_PROFILE_MOBILE ||
+                       profile_data == SYSTEM_SETTING_SUPPORTED_PROFILE_WEARABLE)
+               return SYSTEM_SETTINGS_ERROR_NONE;
+       else {
+               return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+       }
+}
+
 
 /*  LCOV_EXCL_START */
 int system_setting_get_uds_state(system_settings_key_e key, system_setting_data_type_e data_type, void **value)
index fd1f1aa..c2aec90 100644 (file)
@@ -26,7 +26,6 @@
 
 #include <glib.h>
 
-
 #ifdef LOG_TAG
 #undef LOG_TAG
 #endif
@@ -50,7 +49,8 @@ system_setting_s system_setting_table[] = {
                system_setting_add_incoming_call_ringtone,      /* ADD */
                system_setting_del_incoming_call_ringtone,      /* DEL */
                system_setting_list_incoming_call_ringtone,     /* LIST */
-               NULL            /* user data */
+               system_setting_feature_check_telephony,         /* feature check */
+               NULL,           /* user data */
        },
 
        {
@@ -64,7 +64,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               system_setting_feature_check_telephony,         /* feature check */
+               NULL,           /* user data */
        },
 
        {
@@ -78,7 +79,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               system_setting_feature_check_telephony,         /* feature check */
+               NULL,           /* user data */
        },
 
        {
@@ -92,7 +94,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
 
        {
@@ -106,7 +109,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
 
        {
@@ -120,7 +124,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
 
        {
@@ -134,7 +139,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               system_setting_feature_check_telephony,         /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_USB_DEBUGGING_ENABLED,
@@ -147,7 +153,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_3G_DATA_NETWORK_ENABLED,
@@ -160,7 +167,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_LOCKSCREEN_APP,
@@ -173,7 +181,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               system_setting_feature_check_telephony,         /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE,
@@ -186,7 +195,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_LOCALE_COUNTRY,
@@ -199,7 +209,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE,
@@ -212,7 +223,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_LOCALE_TIMEFORMAT_24HOUR,
@@ -225,7 +237,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE,
@@ -238,7 +251,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_TIME_CHANGED,
@@ -251,7 +265,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_SOUND_LOCK,
@@ -264,7 +279,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_SOUND_SILENT_MODE,
@@ -277,7 +293,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_SOUND_TOUCH,
@@ -290,7 +307,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO,
@@ -303,7 +321,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME,
@@ -316,7 +335,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION,
@@ -329,7 +349,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               system_setting_feature_check_telephony,         /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION_REPETITION_PERIOD,
@@ -342,7 +363,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_DEVICE_NAME,
@@ -355,7 +377,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_MOTION_ENABLED,
@@ -368,7 +391,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_NETWORK_FLIGHT_MODE,
@@ -381,7 +405,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_NETWORK_WIFI_NOTIFICATION,
@@ -394,7 +419,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* ADD */
                NULL,           /* DEL */
                NULL,           /* LIST */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_LOCK_STATE,
@@ -407,7 +433,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* add */
                NULL,           /* del */
                NULL,           /* list */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
        {
                SYSTEM_SETTINGS_KEY_ADS_ID,
@@ -420,7 +447,8 @@ system_setting_s system_setting_table[] = {
                NULL,           /* add */
                NULL,           /* del */
                NULL,           /* list */
-               NULL            /* user data */
+               NULL,           /* feature check */
+               NULL,           /* user data */
        },
 
        {
@@ -444,7 +472,7 @@ system_setting_s system_setting_table[] = {
                NULL            /* user data */
        },
        {
-               SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL, NULL
+               SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL
        }
 };
 
@@ -494,6 +522,7 @@ static int _dump_context_node(int key)
 
        return -1;
 }
+
 /*  LCOV_EXCL_STOP */
 
 int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
@@ -512,7 +541,17 @@ int system_settings_get_item(system_settings_key_e key, system_setting_h *item)
                if (system_setting_table[index].key == key) {
                        *item = &system_setting_table[index];
                        LOGE("Enter [%s], index = %d, key = %d, type = %d", __FUNCTION__, index, key, (*item)->data_type);
-                       return SYSTEM_SETTINGS_ERROR_NONE;
+                       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) {
+                                       LOGE("Not supported API, because there is no feature!");
+                                       return ret;
+                               }
+                               if (ret != SYSTEM_SETTINGS_ERROR_NONE)
+                                       return ret;
+                       } else {
+                               return SYSTEM_SETTINGS_ERROR_NONE;
+                       }
                }
 
                index++;
@@ -531,15 +570,18 @@ int system_settings_get_value(system_settings_key_e key, system_setting_data_typ
        system_setting_h system_setting_item;
        system_setting_get_value_cb     system_setting_getter;
 
-       if (0 != system_settings_get_item(key, &system_setting_item)) {
-               _dump_context_node(key);
-               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key --- (%d)", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, key);
-               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+       int ret = system_settings_get_item(key, &system_setting_item);
+       if (ret != 0) {
+               if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER) {
+                       _dump_context_node(key);
+                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               }
+               return ret;
        }
 
        if (system_setting_item->data_type != data_type) {
                _dump_context_node(key);
-               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type --- key : (%d), datatype:(%d)", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, key, data_type);
+               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type --- key:(%d), datatype:(%d)", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER, key, data_type);
                return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
        }
 
@@ -567,9 +609,10 @@ int system_settings_set_value(system_settings_key_e key, system_setting_data_typ
 
        int ret = system_settings_get_item(key, &system_setting_item);
 
-       if (0 != ret) {
-               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
-               return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+       if (ret != 0) {
+               if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               return ret;
        }
 
        /* type check */
@@ -604,9 +647,10 @@ int system_settings_add_value(system_settings_key_e key, system_setting_data_typ
 
        int ret = system_settings_get_item(key, &system_setting_item);
 
-       if (0 != ret) {
-               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
-               return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+       if (ret != 0) {
+               if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               return ret;
        }
 
        /* type check */
@@ -677,9 +721,10 @@ int system_settings_list_value(system_settings_key_e key, system_setting_data_ty
 
        int ret = system_settings_get_item(key, &system_setting_item);
 
-       if (0 != ret) {
-               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
-               return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+       if (ret != 0) {
+               if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               return ret;
        }
 
        /* type check */
@@ -815,9 +860,11 @@ int system_settings_set_changed_cb(system_settings_key_e key, system_settings_ch
        if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
                return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
 
-       if (system_settings_get_item(key, &system_setting_item)) {
-               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
-               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+       int ret = system_settings_get_item(key, &system_setting_item);
+       if (ret != 0) {
+               if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               return ret;
        }
 
        system_setting_set_changed_cb = system_setting_item->set_changed_cb;
@@ -852,10 +899,11 @@ int system_settings_unset_changed_cb(system_settings_key_e key)
        if (key == SYSTEM_SETTINGS_KEY_DEFAULT_FONT_TYPE)
                return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
 
-       int ret = system_settings_get_item(key, &system_setting_item) ;
-       if (ret) {
-               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
-               return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+       int ret = system_settings_get_item(key, &system_setting_item);
+       if (ret != 0) {
+               if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               return ret;
        }
 
        system_setting_unset_changed_cb = system_setting_item->unset_changed_cb;
index b4b12a5..3c9e778 100644 (file)
@@ -90,8 +90,10 @@ static void system_setting_vconf_event_cb0(keynode_t *node, void *event_data)
        if (node != NULL) {
                system_setting_h system_setting_item;
 
-               if (system_settings_get_item(pkey, &system_setting_item)) {
-                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               int ret = system_settings_get_item(pkey, &system_setting_item);
+               if (ret != 0) {
+                       if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
                }
 
                void *user_data = NULL;
@@ -109,8 +111,10 @@ static void system_setting_vconf_event_cb1(keynode_t *node, void *event_data)
        if (node != NULL) {
                system_setting_h system_setting_item;
 
-               if (system_settings_get_item(pkey, &system_setting_item)) {
-                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               int ret = system_settings_get_item(pkey, &system_setting_item);
+               if (ret != 0) {
+                       if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
                }
 
                void *user_data = NULL;
@@ -128,8 +132,10 @@ static void system_setting_vconf_event_cb2(keynode_t *node, void *event_data)
        if (node != NULL) {
                system_setting_h system_setting_item;
 
-               if (system_settings_get_item(pkey, &system_setting_item)) {
-                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               int ret = system_settings_get_item(pkey, &system_setting_item);
+               if (ret != 0) {
+                       if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
                }
 
                void *user_data = NULL;
@@ -147,8 +153,10 @@ static void system_setting_vconf_event_cb3(keynode_t *node, void *event_data)
        if (node != NULL) {
                system_setting_h system_setting_item;
 
-               if (system_settings_get_item(pkey, &system_setting_item)) {
-                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               int ret = system_settings_get_item(pkey, &system_setting_item);
+               if (ret != 0) {
+                       if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
                }
 
                void *user_data = NULL;
@@ -166,8 +174,10 @@ static void system_setting_vconf_event_cb4(keynode_t *node, void *event_data)
        if (node != NULL) {
                system_setting_h system_setting_item;
 
-               if (system_settings_get_item(pkey, &system_setting_item)) {
-                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               int ret = system_settings_get_item(pkey, &system_setting_item);
+               if (ret != 0) {
+                       if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
                }
 
                void *user_data = NULL;
@@ -185,8 +195,10 @@ static void system_setting_vconf_event_cb100(keynode_t *node, void *event_data)
        if (node != NULL) {
                system_setting_h system_setting_item;
 
-               if (system_settings_get_item(pkey, &system_setting_item)) {
-                       LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+               int ret = system_settings_get_item(pkey, &system_setting_item);
+               if (ret != 0) {
+                       if (ret == SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER)
+                               LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid key", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
                }
 
                void *user_data = NULL;