#include <app_control_internal.h>
#include <package_manager.h>
#include <aul.h>
-#include <ail.h>
#include <appsvc.h>
#include <tizen.h>
#include <vconf-keys.h>
#define NOTI_TEXT_RESULT_LEN 2048
#define NOTI_PKGNAME_LEN 512
+#define REGULAR_UID_MIN 5000
+
char *notification_get_pkgname_by_pid(void)
{
char pkgname[NOTI_PKGNAME_LEN + 1] = { 0, };
char buf_key[32] = { 0, };
char *ret_val = NULL;
- /* Check noti and image_path are valid data */
if (noti == NULL || image_path == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check image type is valid type */
if (type <= NOTIFICATION_IMAGE_TYPE_NONE
|| type >= NOTIFICATION_IMAGE_TYPE_MAX)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check image path bundle is exist */
if (noti->b_image_path) {
- /* If image path bundle is exist, store local bundle value */
b = noti->b_image_path;
- /* Set image type to key as char string type */
snprintf(buf_key, sizeof(buf_key), "%d", type);
- /* Get value using key */
bundle_get_str(b, buf_key, &ret_val);
if (ret_val != NULL)
- /* If key is exist, remove this value to store new image path */
bundle_del(b, buf_key);
- /* Add new image path with type key */
bundle_add_str(b, buf_key, image_path);
} else {
- /* If image path bundle is not exist, create new one */
b = bundle_create();
- /* Set image type to key as char string type */
snprintf(buf_key, sizeof(buf_key), "%d", type);
- /* Add new image path with type key */
bundle_add_str(b, buf_key, image_path);
- /* Save to image path bundle */
noti->b_image_path = b;
}
char buf_key[32] = { 0, };
char *ret_val = NULL;
- /* Check noti and image_path is valid data */
if (noti == NULL || image_path == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check image type is valid data */
if (type <= NOTIFICATION_IMAGE_TYPE_NONE
|| type >= NOTIFICATION_IMAGE_TYPE_MAX)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check image path bundle exist */
if (noti->b_image_path) {
- /* If image path bundle exist, store local bundle data */
b = noti->b_image_path;
- /* Set image type to key as char string type */
snprintf(buf_key, sizeof(buf_key), "%d", type);
- /* Get value of key */
bundle_get_str(b, buf_key, &ret_val);
*image_path = ret_val;
/* If image path is NULL and type is ICON, icon path set from AIL */
/* order : user icon -> launch_pkgname icon -> caller_pkgname icon -> service app icon */
if (*image_path == NULL && type == NOTIFICATION_IMAGE_TYPE_ICON) {
- /* Check App icon path is already set */
if (noti->app_icon_path != NULL)
- /* image path will be app icon path */
*image_path = noti->app_icon_path;
else
*image_path = NULL;
EXPORT_API int notification_set_time(notification_h noti, time_t input_time)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
if (input_time == 0)
- /* If input time is 0, set current time */
noti->time = time(NULL);
else
- /* save input time */
noti->time = input_time;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_get_time(notification_h noti, time_t *ret_time)
{
- /* Check noti and time is valid data */
if (noti == NULL || ret_time == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set time infomation */
*ret_time = noti->time;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_get_insert_time(notification_h noti,
time_t *ret_time)
{
- /* Check noti and ret_time is valid data */
if (noti == NULL || ret_time == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set insert time information */
*ret_time = noti->insert_time;
return NOTIFICATION_ERROR_NONE;
notification_count_pos_type_e var_value_count =
NOTIFICATION_COUNT_POS_NONE;
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check text type is valid type */
if (type <= NOTIFICATION_TEXT_TYPE_NONE
|| type >= NOTIFICATION_TEXT_TYPE_MAX)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check text bundle exist */
if (text != NULL) {
if (noti->b_text != NULL) {
- /* If text bundle exist, store local bundle data */
b = noti->b_text;
- /* Make type to key as char string */
snprintf(buf_key, sizeof(buf_key), "%d", type);
- /* Get value using type key */
bundle_get_str(b, buf_key, &ret_val);
if (ret_val != NULL)
- /* If value exist, remove this to add new value */
bundle_del(b, buf_key);
snprintf(buf_val, sizeof(buf_val), "%s", text);
- /* Add new text value */
bundle_add_str(b, buf_key, buf_val);
} else {
- /* If text bundle does not exist, create new one */
b = bundle_create();
- /* Make type to key as char string */
snprintf(buf_key, sizeof(buf_key), "%d", type);
-
snprintf(buf_val, sizeof(buf_val), "%s", text);
- /* Add new text value */
bundle_add_str(b, buf_key, buf_val);
- /* Save text bundle */
noti->b_text = b;
}
} else {
- /* Reset if text is NULL */
if (noti->b_text != NULL) {
- /* If text bundle exist, store local bundle data */
b = noti->b_text;
- /* Make type to key as char string */
snprintf(buf_key, sizeof(buf_key), "%d", type);
- /* Get value using type key */
bundle_get_str(b, buf_key, &ret_val);
if (ret_val != NULL)
- /* If value exist, remove this */
bundle_del(b, buf_key);
}
}
- /* Save key if key is valid data */
if (key != NULL) {
- /* Check key bundle exist */
if (noti->b_key != NULL) {
- /* If key bundle exist, store local bundle data */
b = noti->b_key;
- /* Make type to key as char string */
snprintf(buf_key, sizeof(buf_key), "%d", type);
- /* Get value using type key */
bundle_get_str(b, buf_key, &ret_val);
if (ret_val != NULL)
- /* If value exist, remove this to add new value */
bundle_del(b, buf_key);
snprintf(buf_val, sizeof(buf_val), "%s", key);
- /* Add new key value */
bundle_add_str(b, buf_key, buf_val);
} else {
- /* If key bundle does not exist, create new one */
b = bundle_create();
- /* Make type to key as char string */
snprintf(buf_key, sizeof(buf_key), "%d", type);
snprintf(buf_val, sizeof(buf_val), "%s", key);
- /* Add new key value */
bundle_add_str(b, buf_key, buf_val);
- /* Save key bundle */
noti->b_key = b;
}
} else {
- /* Reset if key is NULL */
if (noti->b_key != NULL) {
- /* If key bundle exist, store local bundle data */
b = noti->b_key;
- /* Make type to key as char string */
snprintf(buf_key, sizeof(buf_key), "%d", type);
- /* Get value using type key */
bundle_get_str(b, buf_key, &ret_val);
if (ret_val != NULL)
- /* If value exist, remove this */
bundle_del(b, buf_key);
}
}
char *ret_val = NULL;
char *get_str = NULL;
notification_text_type_e check_type = NOTIFICATION_TEXT_TYPE_NONE;
- /* int display_option_flag = 0; */
char *temp_str = NULL;
char *translated_str = NULL;
int src_len = 0;
int max_len = 0;
- /* Check noti is valid data */
if (noti == NULL || text == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check text type is valid type */
if (type <= NOTIFICATION_TEXT_TYPE_NONE
|| type >= NOTIFICATION_TEXT_TYPE_MAX)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check key */
if (noti->b_key != NULL) {
b = noti->b_key;
bindtextdomain(noti->domain, noti->dir);
get_str = dgettext(noti->domain, ret_val);
+ if (get_str == ret_val) /* not found */
+ get_str = NULL;
} else if (ret_val != NULL) {
/* Get system string */
get_str = dgettext("sys_string", ret_val);
+ if (get_str == ret_val) /* not found */
+ get_str = NULL;
} else {
get_str = NULL;
}
if (get_str == NULL && noti->b_text != NULL) {
b = noti->b_text;
- /* Get basic text */
+
snprintf(buf_key, sizeof(buf_key), "%d", type);
bundle_get_str(b, buf_key, &get_str);
}
+ if (get_str == NULL && ret_val != NULL)
+ get_str = ret_val; /* fallback for printing anything */
+
check_type = type;
if (get_str != NULL) {
const char *domain,
const char *dir)
{
- /* check noti and domain is valid data */
if (noti == NULL || domain == NULL || dir == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check domain */
if (noti->domain)
- /* Remove previous domain */
free(noti->domain);
- /* Copy domain */
noti->domain = strdup(domain);
- /* Check locale dir */
if (noti->dir)
- /* Remove previous locale dir */
free(noti->dir);
- /* Copy locale dir */
noti->dir = strdup(dir);
return NOTIFICATION_ERROR_NONE;
char **domain,
char **dir)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Get domain */
if (domain != NULL && noti->domain != NULL)
*domain = noti->domain;
- /* Get locale dir */
if (dir != NULL && noti->dir != NULL)
*dir = noti->dir;
notification_sound_type_e type,
const char *path)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
-
- /* Check type is valid */
if (type < NOTIFICATION_SOUND_TYPE_NONE
|| type >= NOTIFICATION_SOUND_TYPE_MAX)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Save sound type */
noti->sound_type = type;
/* Save sound path if user data type */
notification_sound_type_e *type,
const char **path)
{
- /* check noti and type is valid data */
if (noti == NULL || type == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set sound type */
*type = noti->sound_type;
/* Set sound path if user data type */
notification_vibration_type_e type,
const char *path)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check type is valid */
if (type < NOTIFICATION_VIBRATION_TYPE_NONE
|| type >= NOTIFICATION_VIBRATION_TYPE_MAX)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Save vibration type */
noti->vibration_type = type;
/* Save sound path if user data type */
notification_vibration_type_e *type,
const char **path)
{
- /* check noti and type is valid data */
if (noti == NULL || type == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set vibration type */
*type = noti->vibration_type;
/* Set sound path if user data type */
notification_led_op_e operation,
int led_argb)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Check operation is valid */
if (operation < NOTIFICATION_LED_OP_OFF
|| operation >= NOTIFICATION_LED_OP_MAX)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Save led operation */
noti->led_operation = operation;
/* Save led argb if operation is turning on LED with custom color */
notification_led_op_e *operation,
int *led_argb)
{
- /* check noti and operation is valid data */
if (noti == NULL || operation == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set led operation */
*operation = noti->led_operation;
/* Save led argb if operation is turning on LED with custom color */
EXPORT_API int notification_set_led_time_period(notification_h noti,
int on_ms, int off_ms)
{
- /* Check noti is valid data */
if (noti == NULL || on_ms < 0 || off_ms < 0)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Save led operation */
noti->led_on_ms = on_ms;
noti->led_off_ms = off_ms;
EXPORT_API int notification_get_led_time_period(notification_h noti,
int *on_ms, int *off_ms)
{
- /* check noti and operation is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
}
if (event_type < NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_1
- || event_type > NOTIFICATION_EVENT_TYPE_CLICK_ON_THUMBNAIL) {
+ || event_type >= NOTIFICATION_EVENT_TYPE_MAX) {
NOTIFICATION_ERR("NOTIFICATION_ERROR_INVALID_PARAMETER");
err = NOTIFICATION_ERROR_INVALID_PARAMETER;
goto out;
NOTIFICATION_ERR("NOTIFICATION_ERROR_INVALID_PARAMETER");
goto out;
}
+
if (event_handler == NULL) {
err = NOTIFICATION_ERROR_INVALID_PARAMETER;
NOTIFICATION_ERR("NOTIFICATION_ERROR_INVALID_PARAMETER");
goto out;
}
+
if (event_type < NOTIFICATION_EVENT_TYPE_CLICK_ON_BUTTON_1
- || event_type > NOTIFICATION_EVENT_TYPE_CLICK_ON_THUMBNAIL) {
+ || event_type >= NOTIFICATION_EVENT_TYPE_MAX) {
NOTIFICATION_ERR("NOTIFICATION_ERROR_INVALID_PARAMETER");
err = NOTIFICATION_ERROR_INVALID_PARAMETER;
goto out;
}
b = noti->b_event_handler[event_type];
-
if (b == NULL) {
NOTIFICATION_DBG("No event handler\n");
err = NOTIFICATION_ERROR_NOT_EXIST_ID;
return err;
}
-
-
-
-
EXPORT_API int notification_set_property(notification_h noti,
int flags)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set flags */
noti->flags_for_property = flags;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_get_property(notification_h noti,
int *flags)
{
- /* Check noti and flags are valid data */
if (noti == NULL || flags == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set flags */
*flags = noti->flags_for_property;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_set_display_applist(notification_h noti,
int applist)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
-
- /* Set app list */
if (applist == 0xffffffff) /* 0xffffffff means old NOTIFICATION_DISPLAY_APP_ALL */
applist = NOTIFICATION_DISPLAY_APP_ALL;
EXPORT_API int notification_get_display_applist(notification_h noti,
int *applist)
{
- /* Check noti and applist are valid data */
if (noti == NULL || applist == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set app list */
*applist = noti->display_applist;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_set_size(notification_h noti,
double size)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Save progress size */
noti->progress_size = size;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_get_size(notification_h noti,
double *size)
{
- /* Check noti and size is valid data */
if (noti == NULL || size == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set progress size */
*size = noti->progress_size;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_set_progress(notification_h noti,
double percentage)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Save progress percentage */
noti->progress_percentage = percentage;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_get_progress(notification_h noti,
double *percentage)
{
- /* Check noti and percentage are valid data */
if (noti == NULL || percentage == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set progress percentage */
*percentage = noti->progress_percentage;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_get_pkgname(notification_h noti,
char **pkgname)
{
- /* Check noti and pkgname are valid data */
if (noti == NULL || pkgname == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Get caller pkgname */
if (noti->caller_pkgname)
*pkgname = noti->caller_pkgname;
else
EXPORT_API int notification_set_layout(notification_h noti,
notification_ly_type_e layout)
{
- /* check noti and pkgname are valid data */
if (noti == NULL || (layout < NOTIFICATION_LY_NONE || layout >= NOTIFICATION_LY_MAX))
return NOTIFICATION_ERROR_INVALID_PARAMETER;
EXPORT_API int notification_get_layout(notification_h noti,
notification_ly_type_e *layout)
{
- /* Check noti and pkgname are valid data */
if (noti == NULL || layout == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
EXPORT_API int notification_get_type(notification_h noti,
notification_type_e *type)
{
- /* Check noti and type is valid data */
if (noti == NULL || type == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
- /* Set noti type */
*type = noti->type;
return NOTIFICATION_ERROR_NONE;
EXPORT_API int notification_post(notification_h noti)
{
- int ret = 0;
- int id = 0;
-
- /* Check noti is vaild data */
- if (noti == NULL)
- return NOTIFICATION_ERROR_INVALID_PARAMETER;
-
- /* Check noti type is valid type */
- if (noti->type <= NOTIFICATION_TYPE_NONE
- || noti->type >= NOTIFICATION_TYPE_MAX)
- return NOTIFICATION_ERROR_INVALID_PARAMETER;
-
- /* Save insert time */
- noti->insert_time = time(NULL);
-
- ret = notification_ipc_request_insert(noti, &id);
- if (ret != NOTIFICATION_ERROR_NONE)
- return ret;
-
- noti->priv_id = id;
- NOTIFICATION_DBG("from master:%d", id);
-
- return NOTIFICATION_ERROR_NONE;
+ return notification_post_for_uid(noti, getuid());
}
-
-
EXPORT_API int notification_update(notification_h noti)
{
- int ret = 0;
-
- /* Check noti is valid data */
- if (noti != NULL) {
- /* Update insert time ? */
- noti->insert_time = time(NULL);
- ret = notification_ipc_request_update(noti);
- } else {
- notification_ipc_request_refresh();
- return NOTIFICATION_ERROR_INVALID_PARAMETER;
- }
- return ret;
+ return notification_update_for_uid(noti, getuid());
}
EXPORT_API int notification_delete_all(notification_type_e type)
{
- int ret = 0;
- char *caller_pkgname = NULL;
-
- if (type <= NOTIFICATION_TYPE_NONE || type >= NOTIFICATION_TYPE_MAX)
- return NOTIFICATION_ERROR_INVALID_PARAMETER;
-
- caller_pkgname = notification_get_pkgname_by_pid();
-
- ret = notification_ipc_request_delete_multiple(type, caller_pkgname);
-
- if (caller_pkgname)
- free(caller_pkgname);
-
- return ret;
+ return notification_delete_all_for_uid(type, getuid());
}
EXPORT_API int notification_delete(notification_h noti)
{
- int ret = 0;
-
- if (noti == NULL)
- return NOTIFICATION_ERROR_INVALID_PARAMETER;
-
- ret = notification_ipc_request_delete_single(NOTIFICATION_TYPE_NONE, noti->caller_pkgname, noti->priv_id);
-
- return ret;
+ return notification_delete_for_uid(noti, getuid());
}
static notification_h _notification_create(notification_type_e type)
return NULL;
}
- noti = (notification_h) calloc(1, sizeof(struct _notification));
+ noti = (notification_h)calloc(1, sizeof(struct _notification));
if (noti == NULL) {
NOTIFICATION_ERR("NO MEMORY : noti == NULL");
set_last_result(NOTIFICATION_ERROR_OUT_OF_MEMORY);
else if (type == NOTIFICATION_TYPE_ONGOING)
noti->layout = NOTIFICATION_LY_ONGOING_PROGRESS;
- noti->caller_pkgname = notification_get_pkgname_by_pid();
noti->group_id = NOTIFICATION_GROUP_ID_NONE;
- noti->priv_id = NOTIFICATION_PRIV_ID_NONE;
noti->sound_type = NOTIFICATION_SOUND_TYPE_NONE;
noti->vibration_type = NOTIFICATION_VIBRATION_TYPE_NONE;
noti->led_operation = NOTIFICATION_LED_OP_OFF;
noti->display_applist = NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY | NOTIFICATION_DISPLAY_APP_TICKER | NOTIFICATION_DISPLAY_APP_INDICATOR;
noti->auto_remove = true;
+ noti->ongoing_flag = false;
+ noti->default_button_index = 0;
+ noti->type = NOTIFICATION_ONGOING_VALUE_TYPE_PERCENT;
+ noti->timeout = 0;
+
+ if (getuid() >= REGULAR_UID_MIN) {
+ noti->caller_pkgname = notification_get_pkgname_by_pid();
+
+ err_app_manager = app_manager_get_app_id(getpid(), &app_id);
+ if (err_app_manager != APP_MANAGER_ERROR_NONE || app_id == NULL) {
+ NOTIFICATION_WARN("app_manager_get_app_id failed err[%d] app_id[%p]",
+ err_app_manager, app_id);
+ goto out;
+ }
- err_app_manager = app_manager_get_app_id(getpid(), &app_id);
- if (err_app_manager != APP_MANAGER_ERROR_NONE || app_id == NULL) {
- NOTIFICATION_WARN("app_manager_get_app_id failed err[%d] app_id[%p]", err_app_manager, app_id);
- goto out;
- }
-
- /* app name is used as domain name */
- /* domain_name is allocated by app_get_package_app_name */
- err_app_manager = app_get_package_app_name(app_id, &domain_name);
+ /* app name is used as domain name */
+ /* domain_name is allocated by app_get_package_app_name */
+ err_app_manager = app_get_package_app_name(app_id, &domain_name);
- if (err_app_manager != APP_ERROR_NONE || domain_name == NULL) {
- NOTIFICATION_WARN("app_get_package_app_name failed err[%d] domain_name[%p]", err_app_manager, domain_name);
- goto out;
- }
+ if (err_app_manager != APP_ERROR_NONE || domain_name == NULL) {
+ NOTIFICATION_WARN("app_get_package_app_name failed err[%d] domain_name[%p]",
+ err_app_manager, domain_name);
+ goto out;
+ }
- err_app_manager = package_info_create(noti->caller_pkgname, &package_info);
+ err_app_manager = package_info_create(noti->caller_pkgname, &package_info);
- if (err_app_manager != PACKAGE_MANAGER_ERROR_NONE || package_info == NULL) {
- NOTIFICATION_WARN("package_info_create failed err[%d] package_info[%p] caller_pkgname[%s]",
- err_app_manager, package_info, noti->caller_pkgname);
- goto out;
- }
+ if (err_app_manager != PACKAGE_MANAGER_ERROR_NONE || package_info == NULL) {
+ NOTIFICATION_WARN("package_info_create failed err[%d] package_info[%p] caller_pkgname[%s]",
+ err_app_manager, package_info, noti->caller_pkgname);
+ goto out;
+ }
- err_app_manager = package_info_get_root_path(package_info, &app_root_path);
+ err_app_manager = package_info_get_root_path(package_info, &app_root_path);
- if (err_app_manager != PACKAGE_MANAGER_ERROR_NONE || app_root_path == NULL) {
- NOTIFICATION_WARN("package_info_get_root_path failed err[%d] app_root_path[%p]", err_app_manager, app_root_path);
- goto out;
- }
+ if (err_app_manager != PACKAGE_MANAGER_ERROR_NONE || app_root_path == NULL) {
+ NOTIFICATION_WARN("package_info_get_root_path failed err[%d] app_root_path[%p]",
+ err_app_manager, app_root_path);
+ goto out;
+ }
- snprintf(locale_directory, PATH_MAX, "%s/res/locale", app_root_path);
+ snprintf(locale_directory, PATH_MAX, "%s/res/locale", app_root_path);
- noti->domain = strdup(domain_name);
- noti->dir = strdup(locale_directory);
+ noti->domain = strdup(domain_name);
+ noti->dir = strdup(locale_directory);
+ }
out:
if (domain_name)
return _notification_create(type);
}
-EXPORT_API notification_h notification_load_by_tag(const char *tag)
+EXPORT_API notification_h notification_load_by_tag(const char *tag)
{
- int ret = 0;
- notification_h noti = NULL;
- char *caller_pkgname = NULL;
-
- if (tag == NULL) {
- NOTIFICATION_ERR("Invalid parameter");
- set_last_result(NOTIFICATION_ERROR_INVALID_PARAMETER);
- return NULL;
- }
-
- caller_pkgname = notification_get_pkgname_by_pid();
- if (!caller_pkgname) {
- NOTIFICATION_ERR("Failed to get a package name");
- set_last_result(NOTIFICATION_ERROR_OUT_OF_MEMORY);
- return NULL;
- }
-
- noti = (notification_h)calloc(1, sizeof(struct _notification));
- if (noti == NULL) {
- NOTIFICATION_ERR("Failed to alloc a new notification");
- set_last_result(NOTIFICATION_ERROR_OUT_OF_MEMORY);
- free(caller_pkgname);
-
- return NULL;
- }
-
- ret = notification_ipc_request_load_noti_by_tag(noti, caller_pkgname, (char *)tag);
- free(caller_pkgname);
-
- set_last_result(ret);
- if (ret != NOTIFICATION_ERROR_NONE) {
- notification_free(noti);
- return NULL;
- }
-
- return noti;
+ return notification_load_by_tag_for_uid(tag, getuid());
}
EXPORT_API int notification_clone(notification_h noti, notification_h *clone)
else
new_noti->b_key = NULL;
+ if (noti->tag != NULL)
+ new_noti->tag = strdup(noti->tag);
+ else
+ new_noti->tag = NULL;
+
if (noti->b_format_args != NULL)
new_noti->b_format_args = bundle_dup(noti->b_format_args);
else
new_noti->progress_percentage = noti->progress_percentage;
new_noti->ongoing_flag = noti->ongoing_flag;
+ new_noti->ongoing_value_type = noti->ongoing_value_type;
+ new_noti->ongoing_current = noti->ongoing_current;
+ new_noti->ongoing_duration = noti->ongoing_duration;
new_noti->auto_remove = noti->auto_remove;
+ new_noti->default_button_index = noti->default_button_index;
+ new_noti->timeout = noti->timeout;
+ new_noti->text_input_max_length = noti->text_input_max_length;
+ new_noti->uid = noti->uid;
new_noti->app_icon_path = NULL;
new_noti->app_name = NULL;
EXPORT_API int notification_set_tag(notification_h noti, const char *tag)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
if (tag != NULL) {
- /* save input TAG */
if (noti->tag != NULL)
free(noti->tag);
EXPORT_API int notification_get_tag(notification_h noti, const char **tag)
{
- /* Check noti is valid data */
if (noti == NULL)
return NOTIFICATION_ERROR_INVALID_PARAMETER;
return NOTIFICATION_ERROR_NONE;
}
+/* LCOV_EXCL_START */
void notification_call_posted_toast_cb(const char *message)
{
if (posted_toast_message_cb != NULL)
posted_toast_message_cb((void *)message);
}
+/* LCOV_EXCL_STOP */
EXPORT_API int notification_set_ongoing_flag(notification_h noti, bool ongoing_flag)
{
return NOTIFICATION_ERROR_NONE;
}
+EXPORT_API int notification_save_as_template(notification_h noti, const char *template_name)
+{
+ if (noti == NULL || template_name == NULL) {
+ NOTIFICATION_ERR("Invalid parameter");
+ return NOTIFICATION_ERROR_INVALID_PARAMETER;
+ }
+
+ return notification_ipc_request_save_as_template(noti, template_name);
+}
+
+EXPORT_API notification_h notification_create_from_template(const char *template_name)
+{
+ int ret = 0;
+ notification_h noti = NULL;
+
+ if (template_name == NULL) {
+ NOTIFICATION_ERR("Invalid parameter");
+ set_last_result(NOTIFICATION_ERROR_INVALID_PARAMETER);
+ return NULL;
+ }
+
+ noti = (notification_h)calloc(1, sizeof(struct _notification));
+ if (noti == NULL) {
+ NOTIFICATION_ERR("Failed to alloc a new notification");
+ set_last_result(NOTIFICATION_ERROR_OUT_OF_MEMORY);
+ return NULL;
+ }
+
+ ret = notification_ipc_request_create_from_template(noti, template_name);
+
+ set_last_result(ret);
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ notification_free(noti);
+ return NULL;
+ }
+
+ return noti;
+}
+
+EXPORT_API int notification_get_noti_block_state(notification_block_state_e *state)
+{
+ int ret;
+ char *pkgname;
+ int do_not_disturb;
+ int do_not_disturb_except;
+ int allow_to_notify;
+
+ if (state == NULL)
+ return NOTIFICATION_ERROR_INVALID_PARAMETER;
+
+ pkgname = notification_get_pkgname_by_pid();
+
+ ret = notification_ipc_get_noti_block_state(pkgname, &do_not_disturb, &do_not_disturb_except, &allow_to_notify, getuid());
+
+ if (ret != NOTIFICATION_ERROR_NONE) {
+ if (pkgname)
+ free(pkgname);
+ return ret;
+ }
+
+ if (allow_to_notify) {
+ *state = NOTIFICATION_BLOCK_STATE_ALLOWED;
+ if (do_not_disturb && !do_not_disturb_except)
+ *state = NOTIFICATION_BLOCK_STATE_DO_NOT_DISTURB;
+ } else {
+ *state = NOTIFICATION_BLOCK_STATE_BLOCKED;
+ }
+
+ if (pkgname)
+ free(pkgname);
+
+ return ret;
+}
+
+EXPORT_API int notification_set_text_input(notification_h noti, int text_input_max_length)
+{
+ if (noti == NULL)
+ return NOTIFICATION_ERROR_INVALID_PARAMETER;
+
+ noti->text_input_max_length = text_input_max_length;
+
+ return NOTIFICATION_ERROR_NONE;
+}