#include <app_event.h>
#include <eventsystem.h>
#include <aul_svc.h>
+#include <aul.h>
+#include <pkgmgr-info.h>
#ifdef LOG_TAG
#undef LOG_TAG
#define LOG_TAG "CAPI_APPFW_EVENT"
#define MAX_SIZE 100
+#define MAX_APP_ID_LEN 256
+
+enum alias_appid_mode {
+ ALIAS_APPID_MODE_UNKNOWN,
+ ALIAS_APPID_MODE_OFF,
+ ALIAS_APPID_MODE_ON
+};
typedef struct event_handler {
char *event_name;
static pthread_mutex_t register_sync_lock = PTHREAD_MUTEX_INITIALIZER;
static GHashTable *event_table;
+#define KEY_ALIAS_APP_ID "http://tizen.org/metadata/app-event/alias-appid-mode"
+
+int check_alias_appid_mode(const char *real_appid)
+{
+ pkgmgrinfo_appinfo_h handle;
+ int ret;
+ char *on_off;
+ int alias_mode = ALIAS_APPID_MODE_OFF;
+
+ ret = pkgmgrinfo_appinfo_get_appinfo(real_appid, &handle);
+ if (ret != PMINFO_R_OK) {
+ LOGE("fail to get %s appinfo %d", real_appid, ret);
+ return ALIAS_APPID_MODE_UNKNOWN;
+ }
+
+ ret = pkgmgrinfo_appinfo_get_metadata_value(handle, KEY_ALIAS_APP_ID, &on_off);
+ if (ret == PMINFO_R_OK && strcmp(on_off, "yes") == 0)
+ alias_mode = ALIAS_APPID_MODE_ON;
+
+ pkgmgrinfo_appinfo_destroy_appinfo(handle);
+ LOGD("alias_appid_mode %d", alias_mode);
+
+ return alias_mode;
+}
+
+int get_publication_alias_appid_mode(void)
+{
+ static int alias_appid_mode = ALIAS_APPID_MODE_UNKNOWN;
+ int ret;
+ char buffer[MAX_APP_ID_LEN] = {0, };
+
+ if (alias_appid_mode != ALIAS_APPID_MODE_UNKNOWN)
+ return alias_appid_mode;
+
+ ret = aul_app_get_appid_bypid(getpid(), buffer, sizeof(buffer));
+ if(ret != AUL_R_OK) {
+ LOGE("Failed to get the application ID: %d", ret);
+ return alias_appid_mode;
+ }
+
+ alias_appid_mode = check_alias_appid_mode(buffer);
+ return alias_appid_mode;
+}
+
bool get_real_event_name(const char *event_name,
- char **real_event_name)
+ char **real_event_name, bool publish)
{
char *prefix, *user_defined_name;
char *real_appid, *alias_appid, *real_event;
prefix += 1;
snprintf(alias_appid, len, "%s", prefix);
+
ret = aul_svc_get_appid_by_alias_appid(alias_appid, &real_appid);
free(alias_appid);
if (ret < 0)
return false;
+ if (publish == false && check_alias_appid_mode(real_appid) != ALIAS_APPID_MODE_ON)
+ return false;
+
len = 6 /* event. */ + strlen(real_appid)
+ 1 /* . */ + strlen(user_defined_name);
real_event = malloc(sizeof(char) * len + 1);
__FUNCTION__, NULL);
}
- if (get_real_event_name(event_name, &real_event_name)) {
+ if (get_real_event_name(event_name, &real_event_name, false)) {
handler->event_name = real_event_name;
ret = set_real_event_info(real_event_name, event_name);
if (ret != ES_R_OK)
if (event_data == NULL || event_name == NULL)
return event_error(EVENT_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- if (get_real_event_name(event_name, &real_event_name)) {
+ ret = get_publication_alias_appid_mode();
+
+ if (ret == ALIAS_APPID_MODE_ON
+ && get_real_event_name(event_name, &real_event_name, true)) {
ret = eventsystem_send_user_event(real_event_name, event_data, false);
free(real_event_name);
} else {
if (event_data == NULL || event_name == NULL)
return event_error(EVENT_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- if (get_real_event_name(event_name, &real_event_name)) {
+ ret = get_publication_alias_appid_mode();
+
+ if (ret == ALIAS_APPID_MODE_ON
+ && get_real_event_name(event_name, &real_event_name, true)) {
ret = eventsystem_send_user_event(real_event_name, event_data, true);
free(real_event_name);
} else {
if (event_name == NULL)
return event_error(EVENT_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- if (get_real_event_name(event_name, &real_event_name)) {
+ if (get_real_event_name(event_name, &real_event_name, false)) {
ret = set_real_event_info(real_event_name, event_name);
if (ret != ES_R_OK)
goto out;