From: Kyuho Jo Date: Wed, 17 Jun 2015 10:38:24 +0000 (+0900) Subject: Merge latest code from tizen 2.4 X-Git-Tag: accepted/tizen/wearable/20150617.233425 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Ftags%2Faccepted%2Ftizen%2Fwearable%2F20150617.233425;p=platform%2Fcore%2Fappfw%2Fbadge.git Merge latest code from tizen 2.4 Change-Id: Ief4b00adb923213aa6307cf12b7193c04a3a2274 Signed-off-by: Kyuho Jo --- diff --git a/include/badge.h b/include/badge.h index 6fabf07..d021293 100755 --- a/include/badge.h +++ b/include/badge.h @@ -40,167 +40,53 @@ extern "C" { * @{ */ - -/** - * @internal - * @brief Enumeration for Badge Action. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - */ -enum badge_action { - BADGE_ACTION_CREATE = 0, /**< @internal Badge created */ - BADGE_ACTION_REMOVE, /**< @internal Badge removed */ - BADGE_ACTION_UPDATE, /**< @internal Badge updated */ - BADGE_ACTION_CHANGED_DISPLAY, /**< @internal The display option of the badge changed */ - BADGE_ACTION_SERVICE_READY, /**< @internal The badge service is ready */ -}; - - -/** - * @internal - * @brief Called to retrieve the badge existence. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - * @param[in] app_id The name of the application - * @param[in] count The count of the badge - * @param[in] data The user data passed from the foreach function - * @pre badge_foreach_existed() will invoke this callback. - * @see badge_foreach_existed() - */ -typedef void (*badge_cb)(const char *app_id, unsigned int count, void *data); - - -/** - * @internal - * @brief Called when the badge information is changed. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - * @param[in] action The type of the change - * @param[in] app_id The name of the application - * @param[in] count The count of the badge - * @param[in] data The user data passed from the callback register function - * @pre badge_register_changed_cb() will invoke this callback. - * @see badge_unregister_changed_cb() - */ -typedef void (*badge_change_cb)(unsigned int action, const char *app_id, - unsigned int count, void *data); - /** - * @internal - * @brief Retrieves all existing badges. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @deprecated Deprecated since 2.4 Use badge_add instead. + * @brief Creates a badge for the application itself. + * @since_tizen 2.3 * @privlevel public * @privilege %http://tizen.org/privilege/notification - * @param[in] callback The callback function - * @param[in] data The user data to be passed to the callback function + * @details Creates new badge to display. + * @param[in] writable_app_id The id of application which is authorized to change the badge * @return #BADGE_ERROR_NONE if success, other value if failure * @retval BADGE_ERROR_NONE Success * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method - * @retval BADGE_ERROR_FROM_DB Error form DB - * @retval BADGE_ERROR_OUT_OF_MEMORY Out of memory - * @retval BADGE_ERROR_NOT_EXIST Not exist + * @retval BADGE_ERROR_IO_ERROR Error from I/O + * @retval BADGE_ERROR_SERVICE_NOT_READY Service is not ready * @see #badge_error_e - * @see badge_get_count() - * @see badge_is_existing() - */ -int badge_foreach_existed(badge_cb callback, void *data); + * @par Sample code: + * @code +#include +... +{ + int err = BADGE_ERROR_NONE; -/** - * @internal - * @brief Registers a callback function to receive badge change event. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - * @privlevel public - * @privilege %http://tizen.org/privilege/notification - * @param[in] callback The callback function - * @param[in] data The user data to be passed to the callback function - * @return #BADGE_ERROR_NONE if success, other value if failure - * @retval BADGE_ERROR_NONE Success - * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method - * @retval BADGE_ERROR_OUT_OF_MEMORY Out of memory - * @see #badge_error_e - * @see badge_new() - * @see badge_remove() - * @see badge_set_count() - */ -int badge_register_changed_cb(badge_change_cb callback, void *data); + err = badge_new(app_id); + if(err != BADGE_ERROR_NONE) { + return; + } -/** - * @internal - * @brief Unregisters a callback function to receive badge change event. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - * @privlevel public - * @privilege %http://tizen.org/privilege/notification - * @param[in] callback The callback function - * @return #BADGE_ERROR_NONE if success, other value if failure - * @retval BADGE_ERROR_NONE Success - * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method - * @retval BADGE_ERROR_NOT_EXIST Not exist - * @see #badge_error_e - * @see badge_register_changed_cb() +} + * @endcode */ -int badge_unregister_changed_cb(badge_change_cb callback); +int badge_new(const char *writable_app_id); -/** - * @internal - * @brief This function checks whether badge service is ready - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - * @privlevel public - * @privilege %http://tizen.org/privilege/notification - * @remarks The specific error code can be obtained using the get_last_result() method. Error codes are described in Exception section. - * @return 1 if badge service is ready, other value if badge service isn't ready - * @exception BADGE_ERROR_NONE Success - * @exception BADGE_ERROR_SERVICE_NOT_READY Service is not ready - */ -int badge_is_service_ready(void); -/** - * @internal - * @brief This function adds deferred task. the registered task will be executed when badge service become ready - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - * @privlevel public - * @privilege %http://tizen.org/privilege/notification - * @param[in] badge_add_deferred_task The callback function - * @param[in] user_data The user data to be passed to the callback function - * @return #BADGE_ERROR_NONE if success, other value if failure - * @retval BADGE_ERROR_NONE Success - * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method - * @retval BADGE_ERROR_OUT_OF_MEMORY Out of memory - * @see #badge_error_e - * @see badge_is_service_ready() - */ -int badge_add_deferred_task( - void (*badge_add_deferred_task)(void *data), void *user_data); /** - * @internal - * @brief This function removes deferred task. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @brief Creates a badge for the application specified by the badge_app_id. + * @remarks Creating and updating a badge of the other application is allowed only when both applications are signed with the same certificate. + * @since_tizen 2.4 * @privlevel public * @privilege %http://tizen.org/privilege/notification - * @param[in] badge_add_deferred_task The callback function - * @return #BADGE_ERROR_NONE if success, other value if failure - * @retval BADGE_ERROR_NONE Success - * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method - * @see #badge_error_e - * @see badge_is_service_ready() - */ -int badge_del_deferred_task( - void (*badge_add_deferred_task)(void *data)); - -/** - * @brief Creates a badge for the application itself. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif - * @privlevel public - * @privilege %http://tizen.org/privilege/notification - * @details Creates new badge to display. - * @param[in] writable_app_id The id of application which is authorized to change the badge - * @return #BADGE_ERROR_NONE if success, other value if failure - * @retval BADGE_ERROR_NONE Success - * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter - * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method - * @retval BADGE_ERROR_IO_ERROR Error from I/O - * @retval BADGE_ERROR_SERVICE_NOT_READY Service is not ready + * @param[in] badge_app_id The id of the application for which the badge will be created. This parameter can be null when creating a badge for itself. + * @return #BADGE_ERROR_NONE If success, other value if failure + * @retval #BADGE_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method + * @retval #BADGE_ERROR_IO_ERROR Error from I/O + * @retval #BADGE_ERROR_SERVICE_NOT_READY Service is not ready + * @retval #BADGE_ERROR_INVALID_PACKAGE The caller application is not signed with the certificate of the badge_app_id * @see #badge_error_e * @par Sample code: * @code @@ -209,20 +95,19 @@ int badge_del_deferred_task( { int err = BADGE_ERROR_NONE; - err = badge_new(app_id); + err = badge_add("org.tizen.email"); if(err != BADGE_ERROR_NONE) { return; } - } * @endcode */ -int badge_new(const char *writable_app_id); +int badge_add(const char *badge_app_id); /** * @brief Removes the badge for the designated application. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @since_tizen 2.3 * @privlevel public * @privilege %http://tizen.org/privilege/notification * @param[in] app_id The name of the designated application @@ -252,7 +137,7 @@ int badge_remove(const char *app_id); /** * @brief Sets badge count for the designated application. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @since_tizen 2.3 * @privlevel public * @privilege %http://tizen.org/privilege/notification * @param[in] app_id The name of the designated application @@ -284,7 +169,7 @@ int badge_set_count(const char *app_id, unsigned int count); /** * @brief Gets badge count for the designated application. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @since_tizen 2.3 * @privlevel public * @privilege %http://tizen.org/privilege/notification * @param[in] app_id The name of the designated application @@ -319,7 +204,7 @@ int badge_get_count(const char *app_id, unsigned int *count); /** * @brief Sets the display option for the designated application. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @since_tizen 2.3 * @privlevel public * @privilege %http://tizen.org/privilege/notification * @param[in] app_id The name of the designated application @@ -351,7 +236,7 @@ int badge_set_display(const char *app_id, unsigned int is_display); /** * @brief Gets the display option for the designated application. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @since_tizen 2.3 * @privlevel public * @privilege %http://tizen.org/privilege/notification * @param[in] app_id The name of the designated application @@ -386,42 +271,95 @@ int badge_set_display(const char *app_id, unsigned int is_display); int badge_get_display(const char *app_id, unsigned int *is_display); /** - * @internal - * @brief Tests if the badge for the designated application exists or not. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @brief Callback function for getting result of badge_foreach. + * @since_tizen 2.4 + * @param[in] app_id The id of the application + * @param[in] count The count of the badge + * @param[in] user_data The user data passed from the badge_foreach function + * @return true to continue with the next iteration of the loop, false to break out of the loop + * @pre badge_foreach() will invoke this callback. + * @see badge_foreach() + */ +typedef bool (*badge_foreach_cb)(const char *app_id, unsigned int count, void *user_data); + + +/** + * @brief Retrieves all existing badges. + * @since_tizen 2.4 * @privlevel public * @privilege %http://tizen.org/privilege/notification - * @param[in] app_id The name of the designated application - * @param[out] existing The bool value of badge existence status + * @param[in] callback The callback function + * @param[in] user_data The user data to be passed to the callback function * @return #BADGE_ERROR_NONE if success, other value if failure * @retval BADGE_ERROR_NONE Success * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method - * @retval BADGE_ERROR_FROM_DB Error from DB + * @retval BADGE_ERROR_FROM_DB Error form DB + * @retval BADGE_ERROR_OUT_OF_MEMORY Out of memory * @retval BADGE_ERROR_NOT_EXIST Not exist - * @retval BADGE_ERROR_SERVICE_NOT_READY Service is not ready * @see #badge_error_e - * @see badge_new() - * @see badge_remove() - * @par Sample code: - * @code -#include -... -{ - int err = BADGE_ERROR_NONE; - bool exist; - - err = badge_is_existing(app_id, &exist); - if(err != BADGE_ERROR_NONE) { - return; - } + * @see badge_foreach_cb() + */ +int badge_foreach(badge_foreach_cb callback, void *user_data); -} - * @endcode +/** + * @brief Enumeration for Badge Action. + * @since_tizen 2.4 */ -int badge_is_existing(const char *app_id, bool *existing); +enum badge_action { + BADGE_ACTION_CREATE = 0, /**< Badge created */ + BADGE_ACTION_REMOVE, /**< Badge removed */ + BADGE_ACTION_UPDATE, /**< Badge updated */ + BADGE_ACTION_CHANGED_DISPLAY, /**< The display option of the badge changed */ + BADGE_ACTION_SERVICE_READY, /**< The badge service is ready */ +}; +/** + * @brief Called when the badge information is changed. + * @since_tizen 2.4 + * @param[in] action The type of the change. Refer #badge_action + * @param[in] app_id The name of the application + * @param[in] count The count of the badge + * @param[in] user_data The user data passed from the callback register function + * @pre badge_register_changed_cb() will invoke this callback. + * @see badge_unregister_changed_cb() + */ +typedef void (*badge_change_cb)(unsigned int action, const char *app_id, + unsigned int count, void *user_data); +/** + * @brief Registers a callback function to receive badge change event. + * @since_tizen 2.4 + * @privlevel public + * @privilege %http://tizen.org/privilege/notification + * @param[in] callback The callback function + * @param[in] user_data The user data to be passed to the callback function + * @return #BADGE_ERROR_NONE if success, other value if failure + * @retval BADGE_ERROR_NONE Success + * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter + * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method + * @retval BADGE_ERROR_OUT_OF_MEMORY Out of memory + * @see #badge_error_e + * @see badge_new() + * @see badge_remove() + * @see badge_set_count() + */ +int badge_register_changed_cb(badge_change_cb callback, void *user_data); +/** + * @brief Unregisters a callback function to receive badge change event. + * @since_tizen 2.4 + * @privlevel public + * @privilege %http://tizen.org/privilege/notification + * @param[in] callback The callback function + * @return #BADGE_ERROR_NONE if success, other value if failure + * @retval BADGE_ERROR_NONE Success + * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter + * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method + * @retval BADGE_ERROR_NOT_EXIST Not exist + * @see #badge_error_e + * @see badge_register_changed_cb() + */ +int badge_unregister_changed_cb(badge_change_cb callback); /** * @} diff --git a/include/badge_error.h b/include/badge_error.h index e88678d..1caa303 100755 --- a/include/badge_error.h +++ b/include/badge_error.h @@ -54,6 +54,7 @@ typedef enum _badge_error_e { BADGE_ERROR_FROM_DBUS = TIZEN_ERROR_BADGE | 0x03, /**< Error from DBus */ BADGE_ERROR_NOT_EXIST = TIZEN_ERROR_BADGE | 0x04, /**< Not exist */ BADGE_ERROR_SERVICE_NOT_READY = TIZEN_ERROR_BADGE | 0x05, /**< Error service not ready */ + BADGE_ERROR_INVALID_PACKAGE = TIZEN_ERROR_BADGE | 0x06, /**< The caller application is not signed with the certificate of the badge owner*/ } badge_error_e; /** diff --git a/include/badge_internal.h b/include/badge_internal.h index 610582d..8b9509a 100755 --- a/include/badge_internal.h +++ b/include/badge_internal.h @@ -33,17 +33,107 @@ #define EXPORT_API __attribute__ ((visibility("default"))) #endif +#ifndef DEPRECATED +#define DEPRECATED __attribute__((deprecated)) +#endif + + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _badge_h badge_h; + +/** + * @internal + * @brief This function checks whether badge service is ready + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/notification + * @remarks The specific error code can be obtained using the get_last_result() method. Error codes are described in Exception section. + * @return 1 if badge service is ready, other value if badge service isn't ready + * @exception BADGE_ERROR_NONE Success + * @exception BADGE_ERROR_SERVICE_NOT_READY Service is not ready + */ +int badge_is_service_ready(void); + +/** + * @internal + * @brief This function adds deferred task. the registered task will be executed when badge service become ready + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/notification + * @param[in] badge_add_deferred_task The callback function + * @param[in] user_data The user data to be passed to the callback function + * @return #BADGE_ERROR_NONE if success, other value if failure + * @retval BADGE_ERROR_NONE Success + * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method + * @retval BADGE_ERROR_OUT_OF_MEMORY Out of memory + * @see #badge_error_e + * @see badge_is_service_ready() + */ +int badge_add_deferred_task( + void (*badge_add_deferred_task)(void *data), void *user_data); + +/** + * @internal + * @brief This function removes deferred task. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/notification + * @param[in] badge_add_deferred_task The callback function + * @return #BADGE_ERROR_NONE if success, other value if failure + * @retval BADGE_ERROR_NONE Success + * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter + * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method + * @see #badge_error_e + * @see badge_is_service_ready() + */ +int badge_del_deferred_task( + void (*badge_add_deferred_task)(void *data)); + +/** + * @internal + * @brief Tests if the badge for the designated application exists or not. + * @since_tizen 2.3 + * @privlevel public + * @privilege %http://tizen.org/privilege/notification + * @param[in] app_id The name of the designated application + * @param[out] existing The bool value of badge existence status + * @return #BADGE_ERROR_NONE if success, other value if failure + * @retval BADGE_ERROR_NONE Success + * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter + * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method + * @retval BADGE_ERROR_FROM_DB Error from DB + * @retval BADGE_ERROR_NOT_EXIST Not exist + * @retval BADGE_ERROR_SERVICE_NOT_READY Service is not ready + * @see #badge_error_e + * @see badge_new() + * @see badge_remove() + * @par Sample code: + * @code +#include +... +{ + int err = BADGE_ERROR_NONE; + bool exist; + + err = badge_is_existing(app_id, &exist); + if(err != BADGE_ERROR_NONE) { + return; + } + +} + * @endcode + */ +int badge_is_existing(const char *app_id, bool *existing); + char *_badge_get_pkgname_by_pid(void); int _badge_is_existing(const char *pkgname, bool *existing); -int _badge_foreach_existed(badge_cb callback, void *data); +int _badge_foreach_existed(badge_foreach_cb callback, void *data); int _badge_insert(badge_h *badge); @@ -79,7 +169,7 @@ void badge_changed_cb_call(unsigned int action, const char *pkgname, /** * @internal * @brief Creates a badge for the designated package. - * @since_tizen @if WEARABLE 2.3.1 @elseif MOBILE 2.3 @endif + * @since_tizen 2.3 * @privlevel public * @privilege %http://tizen.org/privilege/notification * @details Creates new badge to display. @@ -124,6 +214,40 @@ int badge_setting_property_set(const char *pkgname, const char *property, const */ int badge_setting_property_get(const char *pkgname, const char *property, char **value); +/** + * @internal + * @brief Called to retrieve the badge existence. + * @since_tizen 2.4 + * @param[in] app_id The name of the application + * @param[in] count The count of the badge + * @param[in] user_data The user data passed from the foreach function + * @pre badge_foreach_existed() will invoke this callback. + * @see badge_foreach_existed() + */ +typedef void (*badge_cb)(const char *app_id, unsigned int count, void *user_data) DEPRECATED; + + +/** + * @internal + * @brief Retrieves all existing badges. + * @since_tizen 2.4 + * @privlevel public + * @privilege %http://tizen.org/privilege/notification + * @param[in] callback The callback function + * @param[in] user_data The user data to be passed to the callback function + * @return #BADGE_ERROR_NONE if success, other value if failure + * @retval BADGE_ERROR_NONE Success + * @retval BADGE_ERROR_INVALID_PARAMETER Invalid parameter + * @retval BADGE_ERROR_PERMISSION_DENIED The application does not have the privilege to call this method + * @retval BADGE_ERROR_FROM_DB Error form DB + * @retval BADGE_ERROR_OUT_OF_MEMORY Out of memory + * @retval BADGE_ERROR_NOT_EXIST Not exist + * @see #badge_error_e + * @see badge_get_count() + * @see badge_is_existing() + */ +int badge_foreach_existed(badge_cb callback, void *user_data) DEPRECATED; + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/src/badge.c b/src/badge.c index 4f7f843..66726f5 100755 --- a/src/badge.c +++ b/src/badge.c @@ -22,6 +22,7 @@ #include #include +#include #include "badge.h" #include "badge_log.h" @@ -70,24 +71,76 @@ int badge_new(const char *writable_app_id) } EXPORT_API +int badge_add(const char *badge_app_id) +{ + char *caller = NULL; + int err = BADGE_ERROR_NONE; + + caller = _badge_get_pkgname_by_pid(); + if (!caller) { + ERR("fail to get caller pkgname"); + return BADGE_ERROR_PERMISSION_DENIED; + } + + if (badge_app_id == NULL) { + badge_app_id = caller; + } + else { + int pkgmgr_ret = PACKAGE_MANAGER_ERROR_NONE; + package_manager_compare_result_type_e compare_result = PACKAGE_MANAGER_COMPARE_MISMATCH; + + pkgmgr_ret = package_manager_compare_app_cert_info(badge_app_id, caller, &compare_result); + + if (pkgmgr_ret != PACKAGE_MANAGER_ERROR_NONE || compare_result != PACKAGE_MANAGER_COMPARE_MATCH) { + err = BADGE_ERROR_INVALID_PACKAGE; + goto out; + } + } + + err = badge_ipc_request_insert(badge_app_id, caller, caller); + +out: + if (caller) + free(caller); + return err; +} + +EXPORT_API int badge_remove(const char *app_id) { char *caller = NULL; int result = BADGE_ERROR_NONE; + bool existing = false; if (app_id == NULL) { return BADGE_ERROR_INVALID_PARAMETER; } + result = _badge_is_existing(app_id, &existing); + + if (result != BADGE_ERROR_NONE) { + ERR("_badge_is_existing failed [%x]", result); + goto out; + } + + if (existing == false) { + ERR("app_id is not exist [%s]", app_id); + result = BADGE_ERROR_NOT_EXIST; + goto out; + } + caller = _badge_get_pkgname_by_pid(); if (!caller) { ERR("fail to get caller pkgname"); - return BADGE_ERROR_PERMISSION_DENIED; + result = BADGE_ERROR_PERMISSION_DENIED; + goto out; } result = badge_ipc_request_delete(app_id, caller); - free(caller); +out : + if (caller) + free(caller); return result; } @@ -101,7 +154,13 @@ int badge_is_existing(const char *app_id, bool *existing) EXPORT_API int badge_foreach_existed(badge_cb callback, void *data) { - return _badge_foreach_existed(callback, data); + return _badge_foreach_existed((badge_foreach_cb)callback, data); +} + +EXPORT_API +int badge_foreach(badge_foreach_cb callback, void *user_data) +{ + return _badge_foreach_existed(callback, user_data); } EXPORT_API @@ -109,20 +168,36 @@ int badge_set_count(const char *app_id, unsigned int count) { char *caller = NULL; int result = BADGE_ERROR_NONE; + bool existing = false; if (app_id == NULL) { return BADGE_ERROR_INVALID_PARAMETER; } + result = _badge_is_existing(app_id, &existing); + + if (result != BADGE_ERROR_NONE) { + ERR("_badge_is_existing failed [%x]", result); + goto out; + } + + if (existing == false) { + ERR("app_id is not exist [%s]", app_id); + result = BADGE_ERROR_NOT_EXIST; + goto out; + } + caller = _badge_get_pkgname_by_pid(); if (!caller) { ERR("fail to get caller pkgname"); - return BADGE_ERROR_PERMISSION_DENIED; + result = BADGE_ERROR_PERMISSION_DENIED; + goto out; } result = badge_ipc_request_set_count(app_id, caller, count); - - free(caller); +out: + if (caller) + free(caller); return result; } @@ -137,20 +212,37 @@ int badge_set_display(const char *app_id, unsigned int is_display) { char *caller = NULL; int result = BADGE_ERROR_NONE; + bool existing = false; if (app_id == NULL) { return BADGE_ERROR_INVALID_PARAMETER; } + result = _badge_is_existing(app_id, &existing); + + if (result != BADGE_ERROR_NONE) { + ERR("_badge_is_existing failed [%x]", result); + goto out; + } + + if (existing == false) { + ERR("app_id is not exist [%s]", app_id); + result = BADGE_ERROR_NOT_EXIST; + goto out; + } + caller = _badge_get_pkgname_by_pid(); if (!caller) { ERR("fail to get caller pkgname"); - return BADGE_ERROR_PERMISSION_DENIED; + result = BADGE_ERROR_PERMISSION_DENIED; + goto out; } result = badge_ipc_request_set_display(app_id, caller, is_display); - free(caller); +out : + if (caller) + free(caller); return result; } diff --git a/src/badge_internal.c b/src/badge_internal.c index 6fe7cd9..74a8eda 100755 --- a/src/badge_internal.c +++ b/src/badge_internal.c @@ -341,7 +341,7 @@ int _badge_is_existing(const char *pkgname, bool *existing) return BADGE_ERROR_NONE; } -int _badge_foreach_existed(badge_cb callback, void *data) +int _badge_foreach_existed(badge_foreach_cb callback, void *data) { sqlite3 *db = NULL; int result = BADGE_ERROR_NONE;