From e34bb3889082d6058b6368ba2d73dd68a9c764ab Mon Sep 17 00:00:00 2001 From: jongmyeongko Date: Tue, 30 May 2017 16:40:40 +0900 Subject: [PATCH] Add new APIs related to application component A getter function and a filter property are added. // API usage ret = app_info_create(test_appid, &app_info); ret = app_info_get_app_component_type(app_info, &component_type); app_info_destroy(app_info); // filter usage app_info_filter_h handle; ret = app_info_filter_create(&handle); ret = app_info_filter_add_string(handle, PACKAGE_INFO_PROP_APP_COMPONENT_TYPE, "uiapp"); ret = app_info_filter_foreach_appinfo(handle, appinfo_cb, NULL); app_info_filter_destroy(handle); Change-Id: I109912534378364dc244bdec027db5808116b7b6 Signed-off-by: jongmyeongko --- include/app_info.h | 42 ++++++++++++++++++++++++++++++++++++++++++ src/app_info.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/include/app_info.h b/include/app_info.h index 765514a..190db03 100644 --- a/include/app_info.h +++ b/include/app_info.h @@ -77,6 +77,33 @@ extern "C" { #define PACKAGE_INFO_PROP_APP_DISABLED "PACKAGE_INFO_PROP_APP_DISABLED" /** + * @brief Definition for string property for filtering based on app info: String property for + * filtering with the application component type. + * Value related with this property should be one of "uiapp", "svcapp", "widgetapp" + * and "watchapp". + * @since_tizen 4.0 + * @see app_info_app_component_e + * @see app_info_get_app_component_type() + */ +#define PACKAGE_INFO_PROP_APP_COMPONENT_TYPE "PACKAGE_INFO_PROP_APP_COMPONENT_TYPE" + +/** + * @brief Enumeration for application component type. + * @since_tizen 4.0 + * @details A component is an application considered as a part of a package. + * The application component type indicates what type of + * a component an application is in a package. + * @see PACKAGE_INFO_PROP_APP_COMPONENT_TYPE + * @see app_info_get_app_component_type() + */ +typedef enum { + APP_INFO_APP_COMPONENT_TYPE_UI_APP, /**< UI application */ + APP_INFO_APP_COMPONENT_TYPE_SERVICE_APP, /**< Service application */ + APP_INFO_APP_COMPONENT_TYPE_WIDGET_APP, /**< Widget application */ + APP_INFO_APP_COMPONENT_TYPE_WATCH_APP, /**< Watch application */ +} app_info_app_component_type_e; + +/** * @brief Application information handle. * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif */ @@ -262,6 +289,21 @@ int app_info_get_package(app_info_h app_info, char **package); int app_info_get_type(app_info_h app_info, char **type); /** + * @brief Gets the application component type. + * @since_tizen 4.0 + * @param[in] app_info The application information + * @param[out] component The application component type + * @return @c 0 on success, + * otherwise a negative error value + * @retval #APP_MANAGER_ERROR_NONE Successful + * @retval #APP_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #APP_MANAGER_ERROR_IO_ERROR I/O error + * @see PACKAGE_INFO_PROP_APP_COMPONENT_TYPE + * @see app_info_app_component_type_e + */ +int app_info_get_app_component_type(app_info_h app_info, app_info_app_component_type_e *type); + +/** * @brief Gets the list of metadata for a particular application. * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif * @param[in] app_info The application information diff --git a/src/app_info.c b/src/app_info.c index 76cc6d1..c4f0c1a 100644 --- a/src/app_info.c +++ b/src/app_info.c @@ -79,6 +79,8 @@ static int app_info_convert_str_property(const char *property, char **converted_ *converted_property = PMINFO_APPINFO_PROP_APP_CATEGORY; else if (strcmp(property, PACKAGE_INFO_PROP_APP_INSTALLED_STORAGE) == 0) *converted_property = PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE; + else if (strcmp(property, PACKAGE_INFO_PROP_APP_COMPONENT_TYPE) == 0) + *converted_property = PMINFO_APPINFO_PROP_APP_COMPONENT; else return -1; @@ -102,6 +104,22 @@ static int app_info_convert_bool_property(const char *property, char **converted return 0; } +static int app_info_convert_app_component(pkgmgrinfo_app_component component, app_info_app_component_type_e *converted_component) +{ + if (component == PMINFO_UI_APP) + *converted_component = APP_INFO_APP_COMPONENT_TYPE_UI_APP; + else if (component == PMINFO_SVC_APP) + *converted_component = APP_INFO_APP_COMPONENT_TYPE_SERVICE_APP; + else if (component == PMINFO_WIDGET_APP) + *converted_component = APP_INFO_APP_COMPONENT_TYPE_WIDGET_APP; + else if (component == PMINFO_WATCH_APP) + *converted_component = APP_INFO_APP_COMPONENT_TYPE_WATCH_APP; + else + return -1; + + return 0; +} + static int app_info_foreach_app_filter_cb(pkgmgrinfo_appinfo_h handle, void *user_data) { int retval = 0; @@ -518,6 +536,28 @@ API int app_info_get_type(app_info_h app_info, char **type) return APP_MANAGER_ERROR_NONE; } +API int app_info_get_app_component_type(app_info_h app_info, app_info_app_component_type_e *type) +{ + pkgmgrinfo_app_component comp_val; + app_info_app_component_type_e converted_comp_val; + int ret = 0; + + if (app_info == NULL || type == NULL) + return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL); + + ret = pkgmgrinfo_appinfo_get_component(app_info->pkg_app_info, &comp_val); + if (ret < 0) + return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL); + + ret = app_info_convert_app_component(comp_val, &converted_comp_val); + if (ret < 0) + return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL); + + *type = converted_comp_val; + + return APP_MANAGER_ERROR_NONE; +} + API int app_info_foreach_metadata(app_info_h app_info, app_info_metadata_cb callback, void *user_data) { int retval = 0; -- 2.7.4