From: Jusung Son Date: Thu, 24 Sep 2020 00:31:09 +0000 (+0900) Subject: Add alias appid option using metadata X-Git-Tag: submit/tizen/20200925.013435~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3cb14830d2273f193d0c71eee9872493df97d6e7;p=platform%2Fcore%2Fapi%2Fapp-event.git Add alias appid option using metadata If you want to publish with alias appid please add metadata in the tizen-manifest.xml as below: +----------------------------------------------------------------------------------+ || +----------------------------------------------------------------------------------+ Change-Id: Id0e549e91da72029f37c5b6331da34af6c4614f0 Signed-off-by: Jusung Son --- diff --git a/packaging/capi-appfw-event.spec b/packaging/capi-appfw-event.spec index e32add0..2593d15 100644 --- a/packaging/capi-appfw-event.spec +++ b/packaging/capi-appfw-event.spec @@ -13,6 +13,7 @@ BuildRequires: pkgconfig(eventsystem) BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(aul) BuildRequires: pkgconfig(gmock) +BuildRequires: pkgconfig(pkgmgr-info) %if 0%{?gcov:1} BuildRequires: lcov diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 14c5f04..25f865a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,7 +9,7 @@ SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(INC_DIR ${CMAKE_SOURCE_DIR}/include) INCLUDE_DIRECTORIES(${INC_DIR}) -SET(requires "glib-2.0 dlog bundle eventsystem capi-base-common aul") +SET(requires "glib-2.0 dlog bundle eventsystem capi-base-common aul pkgmgr-info") SET(pc_requires "capi-base-common") INCLUDE(FindPkgConfig) diff --git a/src/event.c b/src/event.c index c0d3cbe..bcb660f 100644 --- a/src/event.c +++ b/src/event.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #ifdef LOG_TAG #undef LOG_TAG @@ -30,6 +32,13 @@ #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; @@ -44,8 +53,52 @@ static void *earlier_user_data; 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; @@ -76,11 +129,15 @@ bool get_real_event_name(const char *event_name, 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); @@ -224,7 +281,7 @@ int event_add_event_handler(const char *event_name, event_cb callback, __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) @@ -308,7 +365,10 @@ int event_publish_app_event(const char *event_name, bundle *event_data) 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 { @@ -329,7 +389,10 @@ int event_publish_trusted_app_event(const char *event_name, bundle *event_data) 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 { @@ -350,7 +413,7 @@ int event_keep_last_event_data(const char *event_name) 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;