Merge latest code from tizen 2.4 76/41776/1 accepted/tizen/mobile/20150617.233401 accepted/tizen/tv/20150617.233417 accepted/tizen/wearable/20150617.233425 submit/tizen/20150617.121920
authorKyuho Jo <kyuho.jo@samsung.com>
Wed, 17 Jun 2015 10:38:24 +0000 (19:38 +0900)
committerKyuho Jo <kyuho.jo@samsung.com>
Wed, 17 Jun 2015 10:39:42 +0000 (19:39 +0900)
Change-Id: Ief4b00adb923213aa6307cf12b7193c04a3a2274
Signed-off-by: Kyuho Jo <kyuho.jo@samsung.com>
include/badge.h
include/badge_error.h
include/badge_internal.h
src/badge.c
src/badge_internal.c

index 6fabf07..d021293 100755 (executable)
@@ -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 <badge.h>
+...
+{
+       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 <badge.h>
-...
-{
-       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);
 
 /**
  * @}
index e88678d..1caa303 100755 (executable)
@@ -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;
 
 /**
index 610582d..8b9509a 100755 (executable)
 #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 <badge.h>
+...
+{
+       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 */
index 4f7f843..66726f5 100755 (executable)
@@ -22,6 +22,7 @@
 
 #include <stdlib.h>
 #include <stdarg.h>
+#include <package_manager.h>
 
 #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;
 }
 
index 6fe7cd9..74a8eda 100755 (executable)
@@ -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;