X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fsystem_setting_platform.c;h=e0fd469aab71ed2f079c264b8bb30a36a3e93770;hb=9379e14f2562b44c01574351ce594d0b8e0c6d80;hp=863d0293843ec4c7dbabc389dd45325cd801cb69;hpb=8d8863af139af28941f143fde05ec958b0612da9;p=platform%2Fcore%2Fapi%2Fsystem-settings.git diff --git a/src/system_setting_platform.c b/src/system_setting_platform.c index 863d029..e0fd469 100644 --- a/src/system_setting_platform.c +++ b/src/system_setting_platform.c @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -37,19 +38,23 @@ #include -#include - #include #include #include +#include +#include + #include +#include #ifdef USE_EFL_ASSIST #include #endif + + #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" @@ -58,6 +63,20 @@ #define SETTING_TZONE_SYMLINK_PATH "/opt/etc/localtime" +#define __FREE(del, arg) do { \ + if (arg) { \ + del((void *)(arg)); /*cast any argument to (void*) to avoid build warring*/\ + arg = NULL; \ + } \ + } while (0); +#define FREE(arg) __FREE(free, arg) + +#ifdef SETTING_ARCH_64 +#define SETTING_UTILS_SO_FILE_PATH "/usr/lib64/libsystem-settings-util.so.0.1.0" +#else +#define SETTING_UTILS_SO_FILE_PATH "/usr/lib/libsystem-settings-util.so.0.1.0" +#endif + int _is_file_accessible(const char *path); static bool dl_is_supported_image_type_load(char *path); @@ -147,11 +166,12 @@ int system_setting_get_font_size(system_settings_key_e key, system_setting_data_ { SETTING_TRACE_BEGIN; int vconf_value; + int ** val = (int**)value; if (system_setting_vconf_get_value_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &vconf_value)) { return SYSTEM_SETTINGS_ERROR_IO_ERROR; } - *value = (void *)vconf_value; + **val = vconf_value; return SYSTEM_SETTINGS_ERROR_NONE; } @@ -226,7 +246,6 @@ int system_setting_get_3g_data_network(system_settings_key_e key, system_setting * * @return SYSTEM_SETTINGS_ERROR_LOCKSCREEN_APP_PASSWORD_MODE raise exception if current lock type is 'password' */ -/* LCOV_EXCL_START */ int system_setting_get_lockscreen_app(system_settings_key_e key, system_setting_data_type_e data_type, void **value) { SETTING_TRACE_BEGIN; @@ -245,7 +264,6 @@ int system_setting_get_lockscreen_app(system_settings_key_e key, system_setting_ *value = pkg_name; return SYSTEM_SETTINGS_ERROR_NONE; } -/* LCOV_EXCL_STOP */ /*////////////////////////////////////////////////////////////////////////////////////////////////// */ @@ -264,6 +282,198 @@ int _is_file_accessible(const char *path) } } + + +/*////////////////////////////////////////////////////////////////////////////////////////////////// */ +// @todo move to CMake +#define DEF_RINGTONE_FILE_PATH "/opt/share/settings/Ringtones" +#define USR_RINGTONE_FILE_PATH "/home/owner/content/Sounds/Ringtones" +#define JSONFILE "/opt/home/owner/apps_rw/org.tizen.setting/data/.user-ringtones.json" + +#if 0 +static char* _get_json_file_path() +{ + // for testing + return JSONFILE; +} +#endif + +int system_setting_add_incoming_call_ringtone(system_settings_key_e key, system_setting_data_type_e data_type, void *value) +{ + SETTING_TRACE_BEGIN; + char* pathval = (char*)value; + +#ifdef USE_JSONFILE + // NOT IN USE + JsonParser *parser = ss_json_ringtone_open_file(JSONFILE); +#else + JsonParser *parser = ss_json_ringtone_load_from_data(); +#endif + + JsonNode *root = json_parser_get_root(parser); + + // dirname + // basename + int ret = SYSTEM_SETTINGS_ERROR_NONE; + if (false == ss_json_ringtone_contain(root, pathval)) { + SETTING_TRACE("---> dirname is : %s ", dirname(strdup(pathval))); + SETTING_TRACE("---> basename is : %s ", basename(strdup(pathval))); + // @todo : MAKE SURE THE ACTUAL FILE IS THERE ON PATHVAL(SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER) + ss_json_ringtone_add(root, JSONFILE, pathval, pathval); + SETTING_TRACE("pathval is : %s -- OK", pathval); + } else { + SETTING_TRACE("pathval is duplicated : %s", pathval); + SETTING_TRACE("---> dirname is : %s ", dirname(strdup(pathval))); + SETTING_TRACE("---> basename is : %s ", basename(strdup(pathval))); + ret = SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER; + } + + if (parser) { + g_object_unref(parser); + parser = NULL; + } + + return ret; +} + +int system_setting_del_incoming_call_ringtone(system_settings_key_e key, system_setting_data_type_e data_type, void *value) +{ + SETTING_TRACE_BEGIN; + char* pathval = (char*)value; +#ifdef USE_JSONFILE + // NOT IN USE + JsonParser* parser = ss_json_ringtone_open_file(JSONFILE); +#else + JsonParser* parser = ss_json_ringtone_load_from_data(); +#endif + JsonNode *root = json_parser_get_root(parser); + + ss_json_ringtone_remove(root, JSONFILE, pathval); + //void ss_json_ringtone_remove(JsonNode *root, char* filename, char* path_to_del) + + ss_json_ringtone_print(root); + if (parser) { + g_object_unref(parser); + parser = NULL; + } + + return SYSTEM_SETTINGS_ERROR_NONE; +} + + +static int _compare_cb(const void *d1, const void *d2) +{ + fileNodeInfo *pNode1 = (fileNodeInfo *)d1; + fileNodeInfo *pNode2 = (fileNodeInfo *)d2; + + return strcmp(pNode1->media_name, pNode2->media_name); +} + +/* + * get the RINGTONE list + */ +static void _get_default_ringtones(system_settings_key_e key, system_setting_data_type_e data_type, system_settings_iter_cb callback, void *data) +{ + SETTING_TRACE_BEGIN; + /*Get file list */ + Eina_List *filelist = NULL; + Eina_List *l = NULL; + fileNodeInfo *node = NULL; + int idx = 0; + + //----------------------------------------------------------------------------------------------------------------- + // 1. get the default ringtone list + //----------------------------------------------------------------------------------------------------------------- + int ret = get_filelist_from_dir_path(DEF_RINGTONE_FILE_PATH, &filelist); + if (ret != 0) { + SETTING_TRACE("Failed to get filelist, ret = %d %s", ret, DEF_RINGTONE_FILE_PATH); + } + filelist = eina_list_sort(filelist, eina_list_count(filelist), _compare_cb); + + EINA_LIST_FOREACH(filelist, l, node) + { + SETTING_TRACE("file path = (%d) : name:%s path:%s [%s]", ret, node->name, node->path, node->media_name); + // @todo assert NULL check + if (callback) { + char temp[1024]; + snprintf(temp, 1024, "%s/%s", node->path, node->name); + char* path = strdup(temp); + bool ret = callback(idx, (void *)(path), data); + if (path) { + free(path); + path = NULL; + } + if (ret == false) { + SETTING_TRACE("quit the iteration by return value == false : %d", ret); + break; + } + + } else { + SETTING_TRACE("--> system_setting_data_iterator is NULL"); + } + } + + l = NULL; + node = NULL; + EINA_LIST_FOREACH(filelist, l, node) + { + FREE(node->path); + FREE(node->name); + FREE(node->media_name); + FREE(node); + } + eina_list_free(filelist); + filelist = NULL; + +} + +static void _get_user_ringtones(system_settings_key_e key, system_setting_data_type_e data_type, system_settings_iter_cb callback, void *data) +{ + SETTING_TRACE_BEGIN; + +#ifdef USE_JSONFILE + // NOT IN USE + JsonParser* parser = ss_json_ringtone_open_file(JSONFILE); +#else + JsonParser* parser = ss_json_ringtone_load_from_data(); +#endif + + JsonNode *root = json_parser_get_root(parser); + int size = json_array_get_length(json_node_get_array(root)); + + int i = 0; + for (i = 0; i < size ; i++) { + JsonObject *ringtone = json_array_get_object_element(json_node_get_array(root), i); + char *nameval = (char *)json_object_get_string_member(ringtone, "name"); + char *pathval = (char *)json_object_get_string_member(ringtone, "path"); + SETTING_TRACE("(%s) --- (%s) \n", nameval, pathval); + if (callback) { + char* path = strdup(pathval); + bool ret = callback(i, (void *)(path), data); + if (ret == false) { + SETTING_TRACE("quit the iteration by return value == false : %d", ret); + break; + } + } else { + SETTING_TRACE("--> callback is NULL"); + } + } +} + +int system_setting_list_incoming_call_ringtone(system_settings_key_e key, system_setting_data_type_e data_type, system_settings_iter_cb callback, void *data) +{ + SETTING_TRACE_BEGIN; + + _get_default_ringtones(key, data_type, callback, data); + //----------------------------------------------------------------------------------------------------------------- + // 2. get the USER ringtone list + //----------------------------------------------------------------------------------------------------------------- + _get_user_ringtones(key, data_type, callback, data); + + return SYSTEM_SETTINGS_ERROR_NONE; +} + + /* LCOV_EXCL_START */ int system_setting_set_incoming_call_ringtone(system_settings_key_e key, system_setting_data_type_e data_type, void *value) { @@ -316,7 +526,7 @@ static bool dl_is_supported_image_type_load(char *path) bool ret = false; bool (*image_type_check)(char *path); - handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + handle = dlopen(SETTING_UTILS_SO_FILE_PATH, RTLD_LAZY); if (!handle) { SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); return false; @@ -344,7 +554,7 @@ static int dl_is_available_font(char *str) int ret = false; int (*check_available_font)(char *font_name); - handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + handle = dlopen(SETTING_UTILS_SO_FILE_PATH, RTLD_LAZY); if (!handle) { SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); return false; @@ -371,7 +581,7 @@ static void dl_font_size_set() char *error; void (*set_font_size)(); - handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + handle = dlopen(SETTING_UTILS_SO_FILE_PATH, RTLD_LAZY); if (!handle) { SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); return; @@ -398,7 +608,7 @@ static void dl_font_config_set_notification() char *error; void (*set_font_nodification)(); - handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + handle = dlopen(SETTING_UTILS_SO_FILE_PATH, RTLD_LAZY); if (!handle) { SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); return; @@ -426,7 +636,7 @@ static bool dl_font_config_set(char *font_name) bool ret = false; bool (*check_font_type)(char *font_name); - handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + handle = dlopen(SETTING_UTILS_SO_FILE_PATH, RTLD_LAZY); if (!handle) { SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); return false; @@ -454,7 +664,7 @@ static char *dl_get_font_info(char *str) char *ret = NULL; char *(*get_font_info)(); - handle = dlopen("/usr/lib/libsystem-settings-util.so.0.1.0", RTLD_LAZY); + handle = dlopen(SETTING_UTILS_SO_FILE_PATH, RTLD_LAZY); if (!handle) { SETTING_TRACE("ERROR!! canNOT find libsystem-settings-util.so.0.1.0"); return false; @@ -765,7 +975,7 @@ int system_setting_set_font_size(system_settings_key_e key, system_setting_data_ { SETTING_TRACE_BEGIN; int *vconf_value; - vconf_value = (int *)value; + vconf_value = *(int **)value; if (*vconf_value < 0 || *vconf_value > SYSTEM_SETTINGS_FONT_SIZE_GIANT) { return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER; @@ -1403,8 +1613,9 @@ int system_setting_get_time_changed(system_settings_key_e key, system_setting_da { SETTING_TRACE_BEGIN; time_t cur_tick; + int ** val = (int**)value; cur_tick = time(NULL); - *value = (void *)cur_tick; + **val = cur_tick; /* struct tm * localtime = time (cur_tick); */ /* printf("%s\n", ctime(&cur_tick); */ return SYSTEM_SETTINGS_ERROR_NONE; @@ -1620,11 +1831,12 @@ int system_setting_get_screen_backlight_time(system_settings_key_e key, system_s { SETTING_TRACE_BEGIN; int vconf_value; + int ** val = (int**)value; if (system_setting_vconf_get_value_int(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, &vconf_value)) { return SYSTEM_SETTINGS_ERROR_IO_ERROR; } - *value = (void *)vconf_value; + **val = vconf_value; return SYSTEM_SETTINGS_ERROR_NONE; } @@ -1635,9 +1847,9 @@ int system_setting_set_screen_backlight_time(system_settings_key_e key, system_s { SETTING_TRACE_BEGIN; int *vconf_value; - vconf_value = (int *)value; + vconf_value = *(int **)value; - if (!(*vconf_value > 0 && *vconf_value < 600)) { + if (!(*vconf_value > 0 && *vconf_value <= 600)) { SETTING_TRACE(" ERR Betweeny here 0 ~ 600"); return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER; } @@ -1653,7 +1865,7 @@ int system_setting_set_screen_backlight_time(system_settings_key_e key, system_s int system_setting_set_changed_callback_screen_backlight_time(system_settings_key_e key, system_settings_changed_cb callback, void *user_data) { SETTING_TRACE_BEGIN; - return system_setting_vconf_set_changed_cb(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, SYSTEM_SETTINGS_KEY_DISPLAY_SCREEN_ROTATION_AUTO, 2, user_data); + return system_setting_vconf_set_changed_cb(VCONFKEY_SETAPPL_LCD_TIMEOUT_NORMAL, SYSTEM_SETTINGS_KEY_SCREEN_BACKLIGHT_TIME, 2, user_data); } int system_setting_unset_changed_callback_screen_backlight_time(system_settings_key_e key) @@ -1683,10 +1895,13 @@ int system_setting_set_sound_notification(system_settings_key_e key, system_sett int is_load = _is_file_accessible(vconf_value); if (is_load == 0) { + //SETTING_TRACE(" system_setting_vconf_set_value_string(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, %s) TRY", vconf_value); if (system_setting_vconf_set_value_string(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, vconf_value)) { + //SETTING_TRACE(" system_setting_vconf_set_value_string(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, %s) FAIL", vconf_value); return SYSTEM_SETTINGS_ERROR_IO_ERROR; } } else { + //SETTING_TRACE(" is_file_accessibile FAILED - system_setting_vconf_set_value_string(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, %s) FAIL", vconf_value); return SYSTEM_SETTINGS_ERROR_IO_ERROR; } @@ -1697,7 +1912,7 @@ int system_setting_set_sound_notification(system_settings_key_e key, system_sett int system_setting_set_changed_callback_sound_notification(system_settings_key_e key, system_settings_changed_cb callback, void *user_data) { SETTING_TRACE_BEGIN; - return system_setting_vconf_set_changed_cb(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SYSTEM_SETTINGS_KEY_INCOMING_CALL_RINGTONE, 0, user_data); + return system_setting_vconf_set_changed_cb(VCONFKEY_SETAPPL_NOTI_MSG_RINGTONE_PATH_STR, SYSTEM_SETTINGS_KEY_SOUND_NOTIFICATION, 0, user_data); } int system_setting_unset_changed_callback_sound_notification(system_settings_key_e key) @@ -1709,12 +1924,13 @@ int system_setting_unset_changed_callback_sound_notification(system_settings_key int system_setting_get_notification_repetition_period(system_settings_key_e key, system_setting_data_type_e data_type, void **value) { SETTING_TRACE_BEGIN; + int ** val = (int**)value; int vconf_value; if (system_setting_vconf_get_value_int(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, &vconf_value)) { return SYSTEM_SETTINGS_ERROR_IO_ERROR; } - *value = (void *)vconf_value; + **val = vconf_value; return SYSTEM_SETTINGS_ERROR_NONE; } @@ -1724,7 +1940,7 @@ int system_setting_set_notification_repetition_period(system_settings_key_e key, { SETTING_TRACE_BEGIN; int *vconf_value; - vconf_value = (int *)value; + vconf_value = *(int **)value; if (system_setting_vconf_set_value_int(VCONFKEY_SETAPPL_NOTI_MSG_ALERT_REP_TYPE_INT, *vconf_value)) { return SYSTEM_SETTINGS_ERROR_IO_ERROR; @@ -1840,11 +2056,12 @@ int system_setting_unset_changed_callback_network_wifi_notification(system_setti int system_setting_get_lock_state(system_settings_key_e key, system_setting_data_type_e data_type, void **value) { int vconf_value; + int ** val = (int**)value; if (system_setting_vconf_get_value_int(VCONFKEY_IDLE_LOCK_STATE_READ_ONLY, &vconf_value)) { return SYSTEM_SETTINGS_ERROR_IO_ERROR; } - *value = (void *)vconf_value; + **val = vconf_value; return SYSTEM_SETTINGS_ERROR_NONE; } @@ -1855,7 +2072,7 @@ int system_setting_set_lock_state(system_settings_key_e key, system_setting_data { SETTING_TRACE_BEGIN; int *vconf_value; - vconf_value = (int *)value; + vconf_value = *(int **)value; if (system_setting_vconf_set_value_int(VCONFKEY_IDLE_LOCK_STATE_READ_ONLY, *vconf_value)) { return SYSTEM_SETTINGS_ERROR_IO_ERROR; @@ -1923,8 +2140,7 @@ int system_setting_set_ads_id(system_settings_key_e key, system_setting_data_typ char *vconf_value = NULL; vconf_value = (char *)value; - if (system_setting_vconf_set_value_string(VCONFKEY_SETAPPL_AD_ID, vconf_value)) - { + if (system_setting_vconf_set_value_string(VCONFKEY_SETAPPL_AD_ID, vconf_value)) { SETTING_TRACE("Setting VCONFKEY_SETAPPL_AD_ID failed"); return SYSTEM_SETTINGS_ERROR_IO_ERROR; }