SET(INC_DIR include)
INCLUDE_DIRECTORIES(${INC_DIR})
-SET(requires "dlog vconf fontconfig libxml-2.0 pkgmgr pkgmgr-info alarm-service uuid")
+SET(requires "dlog vconf fontconfig libxml-2.0 pkgmgr pkgmgr-info alarm-service capi-media-metadata-extractor eina elementary aul json-glib-1.0")
SET(pc_requires "capi-base-common")
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
ENDFOREACH(flag)
-#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Werror")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -Wall -Werror-implicit-function-declaration")
+#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC")
SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
IF("${ARCH}" STREQUAL "arm")
CLEAN_DIRECT_OUTPUT 1
)
+# Test application - TC
+#ADD_EXECUTABLE(test TC/test.c)
+#TARGET_LINK_LIBRARIES(test ${fw_name})
+
+#SET_TARGET_PROPERTIES(test PROPERTIES OUTPUT_NAME test_system_settings)
+#INSTALL(TARGETS test DESTINATION /usr/local/bin)
+#---------------------------------------------------------------------
+
+# Test application - TC_gui
+#ADD_EXECUTABLE(test_gui TC_gui/main.c)
+#
+#INCLUDE(FindPkgConfig)
+#pkg_check_modules(test_gui REQUIRED "elementary appcore-efl ecore-imf eina ecore ecore-evas ecore-input")
+#FOREACH(flag ${test_gui_CFLAGS})
+# SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+#ENDFOREACH(flag)
+#
+#TARGET_LINK_LIBRARIES(test_gui ${fw_name})
+#SET_TARGET_PROPERTIES(test_gui PROPERTIES OUTPUT_NAME test_system_settings_gui)
+#INSTALL(TARGETS test_gui DESTINATION /usr/local/bin)
+#---------------------------------------------------------------------
+
+
+
INSTALL(TARGETS ${fw_name} DESTINATION ${LIBDIR})
INSTALL(
DIRECTORY ${INC_DIR}/ DESTINATION include/system
FILES_MATCHING
PATTERN "*_private.h" EXCLUDE
+ PATTERN "*_json.h" EXCLUDE
+ PATTERN "*_ringtones.h" EXCLUDE
PATTERN "${INC_DIR}/*.h"
)
)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIBDIR}/pkgconfig)
+# INSTALL (TARGETS test DESTINATION bin)
IF(UNIX)
-name install_manifest.txt -or
-name *.pc -or
-name *~ \)
+ | grep -v TC | xargs rm -rf
TARGET distclean
VERBATIM
)
ENDIF(UNIX)
+
SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */
SYSTEM_SETTINGS_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */
SYSTEM_SETTINGS_ERROR_IO_ERROR = TIZEN_ERROR_IO_ERROR, /**< Internal I/O error */
- SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permition denied */
+ SYSTEM_SETTINGS_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */
SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported @if MOBILE (Since 2.3.1) @endif */
SYSTEM_SETTINGS_ERROR_CALL_UNSUPPORTED_API = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported @if MOBILE (Since 2.3.1) @endif */
/**
+ * @platform
+ * @brief Called to get each string value from string typed list.
+ * @since_tizen 3.0
+ * @param[in] index zero based number indicating index of node in a list
+ * @param[in] value value returned from the list
+ * @param[in] cb_data The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop, otherwise false to break out of the loop
+ */
+typedef bool (*system_settings_iter_cb)(int index, const char* value, void *cb_data);
+
+/**
+ * @platform
+ * @brief Iterate the system settings value associated with the given key as a string type.
+ * @since_tizen 3.0
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/systemsettings.admin
+ * @param[in] key The key name of the system settings
+ * @param[in] callback The callback-function name for iteration
+ * @param[in] user_data The user data passed from caller-side
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #SYSTEM_SETTINGS_ERROR_NONE Successful
+ * @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
+ */
+int system_settings_foreach_value_string(system_settings_key_e key, system_settings_iter_cb callback, void *user_value);
+
+/**
+ * @platform
+ * @brief Adds the system settings value associated with the given key as a string type if it supports List iteration.
+ * @since_tizen 3.0
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/systemsettings.admin
+ * @param[in] key The key name of the system settings
+ * @param[in] value string typed value to be appended
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #SYSTEM_SETTINGS_ERROR_NONE Successful
+ * @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
+ */
+int system_settings_add_value_string(system_settings_key_e key, const char *value);
+
+/**
+ * @platform
+ * @brief Delete the system settings value associated with the given key as an string type if it supports List iteration.
+ * @since_tizen 3.0
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/systemsettings.admin
+ * @param[in] key The key name of the system settings
+ * @param[in] value string typed value to be removed
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #SYSTEM_SETTINGS_ERROR_NONE Successful
+ * @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
+ */
+int system_settings_delete_value_string(system_settings_key_e key, const char *value);
+
+/**
* @}
*/
--- /dev/null
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __TIZEN_SYSTEM_SETTING_JSON_H__
+#define __TIZEN_SYSTEM_SETTING_JSON_H__
+
+#include <stdlib.h>
+#include <string.h>
+#include <glib-object.h>
+#include <json-glib/json-glib.h>
+
+//#define USE_JSONFILE
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+JsonParser* ss_json_ringtone_open_file(char* path);
+JsonParser* ss_json_ringtone_load_from_data();
+
+void ss_json_ringtone_add(JsonNode *root, char* filename, char* nameval, char* pathval);
+
+void ss_json_ringtone_print(JsonNode *root);
+
+void ss_json_ringtone_remove(JsonNode *root, char* filename, char* path_to_del);
+
+bool ss_json_ringtone_contain(JsonNode *root, char* newfile);
+
+void ss_json_ringtone_list(JsonNode *root);
+
+/*// */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TIZEN_SYSTEM_SETTING_JSON_H__ */
+
+
+
#endif
#include <dlog.h>
+#include <system_settings.h>
#ifdef LOG_TAG
#undef LOG_TAG
*/
typedef int (*system_setting_set_value_cb)(system_settings_key_e key, system_setting_data_type_e data_type, void *value);
+typedef int (*system_setting_add_value_cb)(system_settings_key_e key, system_setting_data_type_e data_type, void *value);
+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);
+
/**
* @internal
* @since_tizen 2.3
system_setting_set_changed_callback_cb set_changed_cb; /**< function pointer to register for notification callback */
system_setting_unset_changed_callback_cb unset_changed_cb ; /**< function pointer to un-register for notification callback */
-
system_settings_changed_cb changed_cb; /* registered by user application */
+
+ system_setting_add_value_cb add_value_cb;
+ system_setting_del_value_cb del_value_cb;
+ system_setting_list_value_cb list_value_cb;
+
void *user_data; /* user_data */
} system_setting_s;
*/
int system_setting_set_incoming_call_ringtone(system_settings_key_e key, system_setting_data_type_e data_type, void *value);
+
+/**
+ * @todo add comment here
+ */
+int system_setting_add_incoming_call_ringtone(system_settings_key_e key, system_setting_data_type_e data_type, void *value);
+
+
+/**
+ * @todo add comment here
+ */
+int system_setting_del_incoming_call_ringtone(system_settings_key_e key, system_setting_data_type_e data_type, void *value);
+
+
+/**
+ * @todo add comment here
+ */
+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);
+
/**
* @internal
* @since_tizen 2.3
--- /dev/null
+#ifndef __SYSTEM_SETTINGS_RINGTONES_H__
+#define __SYSTEM_SETTINGS_RINGTONES_H__
+
+#include <sys/types.h>
+#include <dirent.h>
+#include <metadata_extractor.h>
+#include <Elementary.h>
+
+typedef struct _ugFsNodeInfo fileNodeInfo;
+struct _ugFsNodeInfo {
+ char *path;
+ char *name;
+ char *media_name;
+};
+
+int get_filelist_from_dir_path(char *path, Eina_List **file_list);
+char *get_filename_from_fullname(const char *fullname);
+inline char *strlower(char *str);
+
+#if 0
+void ringtone_play_sound(const char *sound_file, player_h **mp_handle);
+void ringtone_stop_sound(void *data);
+#endif
+
+#endif /* __SYSTEM_SETTINGS_RINGTONES_H__ */
BuildRequires: pkgconfig(vconf)
BuildRequires: pkgconfig(elementary)
BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(eina)
+BuildRequires: pkgconfig(aul)
BuildRequires: pkgconfig(fontconfig)
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(pkgmgr)
BuildRequires: pkgconfig(libtzplatform-config)
BuildRequires: pkgconfig(alarm-service)
BuildRequires: pkgconfig(uuid)
+BuildRequires: pkgconfig(capi-media-metadata-extractor)
+
+BuildRequires: pkgconfig(json-glib-1.0)
+BuildRequires: pkgconfig(glib-2.0)
+
+
Requires(post): /sbin/ldconfig
Requires(postun): /sbin/ldconfig
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <aul.h>
#include <regex.h>
#include <fontconfig/fontconfig.h>
-#include <alarm.h>
-
#include <pkgmgr-info.h>
#include <system_settings.h>
#include <system_settings_private.h>
+#include <system_settings_ringtones.h>
+#include <system_settings_json.h>
+
#include <tzplatform_config.h>
+#include <alarm.h>
#ifdef USE_EFL_ASSIST
#include <efl_assist.h>
#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"
#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)
+
+
int _is_file_accessible(const char *path);
static bool dl_is_supported_image_type_load(char *path);
*
* @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;
*value = pkg_name;
return SYSTEM_SETTINGS_ERROR_NONE;
}
-/* LCOV_EXCL_STOP */
/*////////////////////////////////////////////////////////////////////////////////////////////////// */
}
}
+
+
+/*////////////////////////////////////////////////////////////////////////////////////////////////// */
+// @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)
{
system_setting_set_changed_callback_incoming_call_ringtone,
system_setting_unset_changed_callback_incoming_call_ringtone,
NULL,
+ 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_set_changed_callback_wallpaper_home_screen,
system_setting_unset_changed_callback_wallpaper_home_screen,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
system_setting_set_changed_callback_wallpaper_lock_screen,
system_setting_unset_changed_callback_wallpaper_lock_screen,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
system_setting_set_changed_callback_font_size,
system_setting_unset_changed_callback_font_size,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
system_setting_set_changed_callback_font_type,
system_setting_unset_changed_callback_font_type,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
system_setting_set_changed_callback_motion_activation,
system_setting_unset_changed_callback_motion_activation,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
system_setting_set_changed_callback_email_alert_ringtone,
system_setting_unset_changed_callback_email_alert_ringtone,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_usb_debugging_option,
system_setting_unset_changed_callback_usb_debugging_option,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_3g_data_network,
system_setting_unset_changed_callback_3g_data_network,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_lockscreen_app,
system_setting_unset_changed_callback_lockscreen_app,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
NULL,
NULL,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_locale_country,
system_setting_unset_changed_callback_locale_country,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_locale_language,
system_setting_unset_changed_callback_locale_language,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_locale_timeformat_24hour,
system_setting_unset_changed_callback_locale_timeformat_24hour,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_locale_timezone,
system_setting_unset_changed_callback_locale_timezone,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_time_changed,
system_setting_unset_changed_callback_time_changed,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_sound_lock,
system_setting_unset_changed_callback_sound_lock,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_sound_silent_mode,
system_setting_unset_changed_callback_sound_silent_mode,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_sound_touch,
system_setting_unset_changed_callback_sound_touch,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_auto_rotation_mode,
system_setting_unset_changed_callback_auto_rotation_mode,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_screen_backlight_time,
system_setting_unset_changed_callback_screen_backlight_time,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_sound_notification,
system_setting_unset_changed_callback_sound_notification,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_notification_repetition_period,
system_setting_unset_changed_callback_notification_repetition_period,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_device_name,
system_setting_unset_changed_callback_device_name,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_motion_activation,
system_setting_unset_changed_callback_motion_activation,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_network_flight_mode,
system_setting_unset_changed_callback_network_flight_mode,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_network_wifi_notification,
system_setting_unset_changed_callback_network_wifi_notification,
NULL,
+ NULL, /* ADD */
+ NULL, /* DEL */
+ NULL, /* LIST */
NULL /* user data */
},
{
system_setting_set_changed_callback_lock_state,
system_setting_unset_changed_callback_lock_state,
NULL,
+ NULL, /* add */
+ NULL, /* del */
+ NULL, /* list */
NULL /* user data */
},
{
system_setting_set_changed_callback_ads_id,
system_setting_unset_changed_callback_ads_id,
NULL,
+ NULL, /* add */
+ NULL, /* del */
+ NULL, /* list */
NULL /* user data */
},
+
{
SYSTEM_SETTINGS_MAX, -1, NULL, NULL, NULL, NULL, NULL, NULL
}
}
/* LCOV_EXCL_STOP */
+
+
+int system_settings_add_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
+{
+ LOGE("Enter [%s]", __FUNCTION__);
+ if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+
+ system_setting_h system_setting_item;
+ system_setting_add_value_cb system_setting_adder;
+
+ 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;
+ }
+
+ /* type check */
+ if (system_setting_item->data_type != data_type) {
+ LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+ system_setting_adder = system_setting_item->add_value_cb;
+
+ if (system_setting_adder == NULL) {
+ LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
+ return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+ }
+
+ return system_setting_adder(key, system_setting_item->data_type, value);
+}
+
+
+int system_settings_del_value(system_settings_key_e key, system_setting_data_type_e data_type, void *value)
+{
+ LOGE("Enter [%s]", __FUNCTION__);
+ if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+
+ system_setting_h system_setting_item;
+ system_setting_del_value_cb system_setting_deler;
+
+ 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;
+ }
+
+ /* type check */
+ if (system_setting_item->data_type != data_type) {
+ LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+ system_setting_deler = system_setting_item->del_value_cb;
+
+ if (system_setting_deler == NULL) {
+ LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
+ return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+ }
+
+ return system_setting_deler(key, system_setting_item->data_type, value);
+}
+
+
+
+
+
+//system_setting_list_value_cb list_changed_cb;
+int system_settings_list_value(system_settings_key_e key, system_setting_data_type_e data_type, bool (*system_setting_data_iterator)(int, void *, void *), void *value)
+{
+ LOGE("Enter [%s]", __FUNCTION__);
+ if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key) || value == NULL) {
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+
+ system_setting_h system_setting_item;
+ system_setting_list_value_cb system_setting_lister;
+
+ 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;
+ }
+
+ /* type check */
+ if (system_setting_item->data_type != data_type) {
+ LOGE("[%s] INVALID_PARAMETER(0x%08x) : invalid data type", __FUNCTION__, SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER);
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+ //system_setting_list_value_cb list_changed_cb;
+ system_setting_lister = system_setting_item->list_value_cb;
+
+ if (system_setting_lister == NULL) {
+ LOGE("[%s] IO_ERROR(0x%08x) : failed to call setter for the system settings", __FUNCTION__, SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED);
+ return SYSTEM_SETTINGS_ERROR_NOT_SUPPORTED;
+ }
+
+ return system_setting_lister(key, system_setting_item->data_type, system_setting_data_iterator, value);
+}
+
+
+
+
+
+
/* LCOV_EXCL_START */
int system_settings_set_value_int(system_settings_key_e key, int value)
{
return system_setting_unset_changed_cb(key);
}
+//////////////////////////////////////////////////////////////////////////////////////////////////
+// list
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+int system_settings_foreach_value_string(system_settings_key_e key, system_settings_iter_cb callback, void *value)
+{
+ LOGE("Enter [%s]", __FUNCTION__);
+ if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+ return system_settings_list_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, callback, (void *)value);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+// add
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+int system_settings_add_value_string(system_settings_key_e key, const char* value)
+{
+ LOGE("Enter [%s]", __FUNCTION__);
+ if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+ return system_settings_add_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+// del
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+int system_settings_delete_value_string(system_settings_key_e key, const char* value)
+{
+ LOGE("Enter [%s]", __FUNCTION__);
+ if (!(key >= 0 && SYSTEM_SETTINGS_KEY_MAX > key)) {
+ return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
+ }
+
+ return system_settings_del_value(key, SYSTEM_SETTING_DATA_TYPE_STRING, (void *)value);
+}
+
+
--- /dev/null
+
+#include <system_settings.h>
+#include <system_settings_private.h>
+#include <system_settings_json.h>
+
+#include <vconf.h>
+
+//#define VCONFKEY_SETAPPL_CALL_RINGTONE_USER_LIST
+
+static void ss_json_ringtone_save(JsonNode *root)
+{
+ // write here
+ JsonGenerator *generator = json_generator_new();
+ json_generator_set_root(generator, root);
+ g_object_set(generator, "pretty", TRUE, NULL);
+#ifdef USE_JSONFILE
+ GError *error = NULL;
+ gboolean ret = json_generator_to_file(generator, filename, &error);
+#else
+ gchar* result = json_generator_to_data(generator, NULL);
+ vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_USER_LIST, (char*)result);
+#endif
+ g_object_unref(generator);
+}
+
+
+JsonParser* ss_json_ringtone_open_file(char* path)
+{
+ JsonParser *parser;
+ //JsonNode *root;
+ GError *error;
+
+ parser = json_parser_new();
+
+ error = NULL;
+ json_parser_load_from_file(parser, path, &error);
+ if (error) {
+ SETTING_TRACE("Unable to parse `%s': %s\n", path, error->message);
+ g_error_free(error);
+ g_object_unref(parser);
+ return NULL;
+ }
+
+ return parser;
+}
+
+JsonParser* ss_json_ringtone_load_from_data()
+{
+ JsonParser *parser;
+ //JsonNode *root;
+ GError *error;
+
+ parser = json_parser_new();
+
+ error = NULL;
+ char* load_data = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_USER_LIST);
+ json_parser_load_from_data(parser, load_data, -1, &error);
+ if (error) {
+ SETTING_TRACE("Unable to load data : %s \n", error->message);
+ g_error_free(error);
+ g_object_unref(parser);
+ return NULL;
+ }
+ return parser;
+}
+
+void ss_json_ringtone_add(JsonNode *root, char* filename, char* nameval, char* pathval)
+{
+ SETTING_TRACE_BEGIN;
+
+ JsonNode* menu_item = json_node_new(JSON_NODE_OBJECT);
+ JsonObject *object = json_object_new();
+ json_node_take_object(menu_item, object);
+ json_object_set_string_member(object, "name", nameval);
+ json_object_set_string_member(object, "path", pathval);
+
+ JsonArray* menu = json_node_get_array(root);
+ json_array_add_element(menu, menu_item);
+
+ ss_json_ringtone_save(root);
+}
+
+void ss_json_ringtone_print(JsonNode *root)
+{
+ JsonNode *node = root;
+
+ JsonGenerator *generator = json_generator_new();
+ g_object_set(generator, "pretty", TRUE, NULL);
+ json_generator_set_root(generator, node);
+ gchar *data = json_generator_to_data(generator, NULL);
+ //SETTING_TRACE("%s", (char * )data);
+ SETTING_TRACE("-------------------------------------------------------\n");
+ SETTING_TRACE("%s", data);
+ SETTING_TRACE("-------------------------------------------------------\n");
+
+ SETTING_TRACE("VCONFKEY_SETAPPL_CALL_RINGTONE_USER_LIST SET !!!!\n");
+ vconf_set_str(VCONFKEY_SETAPPL_CALL_RINGTONE_USER_LIST, (char*)data);
+ g_free(data);
+ g_object_unref(generator);
+}
+
+void ss_json_ringtone_remove(JsonNode *root, char* filename, char* path_to_del)
+{
+ int size = json_array_get_length(json_node_get_array(root));
+
+ SETTING_TRACE("BBB size : (%d) \n", size);
+ 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");
+
+ if (pathval && !strcmp(pathval, path_to_del)) {
+ json_array_remove_element(json_node_get_array(root), i);
+ SETTING_TRACE("remove BBB : (%s) --- (%s) \n", pathval, path_to_del);
+ }
+ }
+
+ ss_json_ringtone_save(root);
+}
+
+bool ss_json_ringtone_contain(JsonNode *root, char* newfile)
+{
+ int size = json_array_get_length(json_node_get_array(root));
+
+ bool ret = false;
+
+ 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", name, path);
+
+
+ if (pathval && !strcmp(pathval, newfile)) {
+ //SETTING_TRACE("FOUND\n");
+ ret = true;
+ break;
+ } else {
+ //SETTING_TRACE("*NOT* FOUND\n");
+ ret = false;
+ }
+ }
+
+ return ret;
+}
+
+void ss_json_ringtone_list(JsonNode *root)
+{
+ 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 *name = (char *)json_object_get_string_member(ringtone, "name");
+ char *path = (char *)json_object_get_string_member(ringtone, "path");
+ SETTING_TRACE("(%s) --- (%s) \n", name, path);
+ }
+}
+
+
--- /dev/null
+/*
+ * system_settings_ringtones.c
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <system_settings.h>
+#include <system_settings_private.h>
+#include "system_settings_ringtones.h"
+#include "system_settings_json.h"
+
+inline char *strlower(char *str)
+{
+ if (!str) return NULL;
+ char *orig = str;
+ for (; *str != '\0'; str++)
+ *str = tolower(*str);
+ return orig;
+};
+
+/*remove ext name */
+char *get_filename_from_fullname(const char *fullname)
+{
+ //retvm_if(fullname == NULL, NULL, "fullname == NULL");
+ if (fullname == NULL) return NULL;
+
+ char tmp[512];
+ snprintf(tmp, sizeof(tmp), "%s", fullname);
+
+ char *name = strrchr(tmp, '.');
+ if (name != NULL)
+ *name = '\0';
+
+ return strdup((char*)tmp);
+}
+
+char *get_media_basename(const char *dir_path, const char *name)
+{
+ //retv_if(isEmptyStr(dir_path) || isEmptyStr(name), NULL);
+ if (dir_path == NULL) return NULL;
+
+ char path[512] = {0, };
+ snprintf(path, sizeof(path), "%s/%s", dir_path, name);
+
+ metadata_extractor_h metadata = NULL;
+ char *title = NULL;
+ int ret = metadata_extractor_create(&metadata);
+ if (ret == METADATA_EXTRACTOR_ERROR_NONE && metadata) {
+ ret = metadata_extractor_set_path(metadata, path);
+ if (ret == METADATA_EXTRACTOR_ERROR_NONE) {
+ ret = metadata_extractor_get_metadata(
+ metadata, METADATA_TITLE, &title);
+ metadata_extractor_destroy(metadata);
+ if (title)
+ /*return (char *)g_strdup(title);*/
+ return (char *)title;
+ else
+ return strdup(name);
+ } else {
+ metadata_extractor_destroy(metadata);
+ return strdup(name);
+ }
+ } else {
+ return strdup(name);
+ }
+}
+
+int get_filelist_from_dir_path(char *path, Eina_List **file_list)
+{
+ SETTING_TRACE_BEGIN;
+ DIR *pDir = NULL;
+ struct dirent ent, *result;
+
+ if (path == NULL) {
+ SETTING_TRACE("dir path is null");
+ return -1;
+ }
+
+ if (file_list == NULL) {
+ SETTING_TRACE("file_list is null");
+ return -1;
+ }
+
+ pDir = opendir(path);
+
+ if (pDir == NULL)
+ return -2;
+
+ while (readdir_r(pDir, &ent, &result) == 0) {
+ if (result == NULL)
+ break;
+
+ fileNodeInfo *pNode = NULL;
+
+ if (strncmp(ent.d_name, ".", 1) == 0
+ || strcmp(ent.d_name, "..") == 0)
+ continue;
+
+ if ((ent.d_type & DT_REG) == 0)
+ continue;
+
+ pNode = (fileNodeInfo *) malloc(sizeof(fileNodeInfo));
+ if (pNode == NULL)
+ continue;
+
+ memset(pNode, 0, sizeof(fileNodeInfo));
+
+ pNode->path = strdup(path);
+ pNode->name = strdup(ent.d_name);
+ pNode->media_name = get_media_basename(
+ pNode->path, pNode->name);
+
+ *file_list = eina_list_append(*file_list, pNode);
+ }
+ closedir(pDir);
+ //SETTING_TRACE_END;
+
+ return 0;
+}
+