} app_manager_error_e;
/**
- * @internal
* @brief Called when an application is launched or terminated.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
+ * @since_tizen 2.4
* @param[in] app_context The application context of the application launched or terminated
* @param[in] event The application context event
* @param[in] user_data The user data passed from the foreach function
*/
int app_manager_request_terminate_bg_app(app_context_h app_context);
-/* FIXME: should be separated */
-/**
- * @brief Opens the application.
- * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
- * @privlevel public
- * @privilege %http://tizen.org/privilege/appmanager.launch
- * @param[in] app_id The ID of the application
- * @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_NO_SUCH_APP No such application
- * @retval #APP_MANAGER_ERROR_REQUEST_FAILED Internal open error
- * @retval #APP_MANAGER_ERROR_PERMISSION_DENIED Permission denied
- */
-int app_manager_open_app(const char *app_id);
-
/**
* @brief Retrieves all installed applications information.
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
int app_manager_get_shared_trusted_path(const char *app_id, char **path);
/**
+ * @deprecated Deprecated since 2.4.
* @brief Gets the absolute path to the shared data directory of the application specified
* with an application ID.
* @details An application can only read the files of other application's shared data directory.
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif
* @remarks The specified @a path should be released.
+ * @remarks To access the path returned by this function may not work as intended in certain devices due to some implementation issues.
*
* @param[in] app_id The ID of the application
* @param[in,out] path The absolute path to the shared data directory of the application
int retval = 0;
char *appid = NULL;
app_info_h info = NULL;
+ bool iteration_next = true;
info = calloc(1, sizeof(struct app_info_s));
if (info == NULL)
}
info->app_id = strdup(appid);
+ if (info->app_id == NULL) {
+ if (info) {
+ free(info);
+ info = NULL;
+ }
+ return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+ }
info->pkg_app_info = handle;
- foreach_context->callback(info, foreach_context->user_data);
+ iteration_next = foreach_context->callback(info, foreach_context->user_data);
- return APP_MANAGER_ERROR_NONE;
+ if (info->app_id) {
+ free(info->app_id);
+ info->app_id = NULL;
+ }
+
+ if (info) {
+ free(info);
+ info = NULL;
+ }
+
+ if (iteration_next == true)
+ return PMINFO_R_OK;
+ else
+ return PMINFO_R_ERROR;
}
static int app_info_foreach_app_metadata_cb(const char *metadata_key, const char *metadata_value, void *user_data)
{
foreach_metadata_context_s *foreach_context = user_data;
+ bool iteration_next = true;
if (metadata_value == NULL || foreach_context == NULL)
return app_manager_error(APP_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
- foreach_context->callback(metadata_key, metadata_value, foreach_context->user_data);
-
- return APP_MANAGER_ERROR_NONE;
+ iteration_next = foreach_context->callback(metadata_key, metadata_value, foreach_context->user_data);
+ if (iteration_next == true)
+ return PMINFO_R_OK;
+ else
+ return PMINFO_R_ERROR;
}
static int app_info_foreach_app_info_cb(pkgmgrinfo_appinfo_h handle, void *cb_data)
API int app_info_get_app_id(app_info_h app_info, char **app_id)
{
- char *app_id_dup;
+ char *app_id_dup = NULL;
if (app_info == NULL || app_id == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ if (app_info->app_id == NULL)
+ return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
app_id_dup = strdup(app_info->app_id);
if (app_id_dup == NULL)
return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
API int app_info_get_exec(app_info_h app_info, char **exec)
{
- char *val;
- char *app_exec_dup;
+ char *val = NULL;
+ char *app_exec_dup = NULL;
+ int ret = -1;
if (app_info == NULL || exec == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- pkgmgrinfo_appinfo_get_exec(app_info->pkg_app_info, &val);
- if (val == NULL)
+ ret = pkgmgrinfo_appinfo_get_exec(app_info->pkg_app_info, &val);
+ if (ret != PMINFO_R_OK || val == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
app_exec_dup = strdup(val);
API int app_info_get_label(app_info_h app_info, char **label)
{
- char *val;
- char *app_label_dup;
+ char *val = NULL;
+ char *app_label_dup = NULL;
+ int ret = 0;
if (app_info == NULL || label == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- pkgmgrinfo_appinfo_get_label(app_info->pkg_app_info, &val);
- if (val == NULL)
+ ret = pkgmgrinfo_appinfo_get_label(app_info->pkg_app_info, &val);
+ if (ret < 0 || val == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
app_label_dup = strdup(val);
API int app_info_get_localed_label(const char *app_id, const char *locale, char **label)
{
- char *val;
- char *app_label_dup;
+ char *val = NULL;
+ char *app_label_dup = NULL;
if (app_id == NULL || locale == NULL || label == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
app_label_dup = strdup(val);
- if (app_label_dup == NULL)
+ if (app_label_dup == NULL) {
+ if (val) {
+ free(val);
+ val = NULL;
+ }
return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+ }
*label = app_label_dup;
free(val);
API int app_info_get_icon(app_info_h app_info, char **path)
{
- char *val;
- char *app_icon_dup;
+ char *val = NULL;
+ char *app_icon_dup = NULL;
+ int ret = -1;
if (app_info == NULL || path == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- pkgmgrinfo_appinfo_get_icon(app_info->pkg_app_info, &val);
- if (val == NULL)
+ ret = pkgmgrinfo_appinfo_get_icon(app_info->pkg_app_info, &val);
+ if (ret != PMINFO_R_OK || val == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
app_icon_dup = strdup(val);
API int app_info_get_package(app_info_h app_info, char **package)
{
- char *val;
- char *app_package_dup;
+ char *val = NULL;
+ char *app_package_dup = NULL;
+ int ret = 0;
if (app_info == NULL || package == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- pkgmgrinfo_appinfo_get_pkgname(app_info->pkg_app_info, &val);
+ ret = pkgmgrinfo_appinfo_get_pkgname(app_info->pkg_app_info, &val);
+ if (ret < 0)
+ return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+ if (val == NULL)
+ return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
app_package_dup = strdup(val);
if (app_package_dup == NULL)
API int app_info_get_type(app_info_h app_info, char **type)
{
- char *val;
- char *app_type_dup;
+ char *val = NULL;
+ char *app_type_dup = NULL;
+ int ret = 0;
if (app_info == NULL || type == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- pkgmgrinfo_appinfo_get_apptype(app_info->pkg_app_info, &val);
+ ret = pkgmgrinfo_appinfo_get_apptype(app_info->pkg_app_info, &val);
+ if (ret < 0)
+ return app_manager_error(APP_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+ if (val == NULL)
+ return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
app_type_dup = strdup(val);
if (app_type_dup == NULL)
API int app_manager_resume_app(app_context_h app_context)
{
char *app_id;
- int retval;
+ int retval = APP_MANAGER_ERROR_NONE;
if (app_context == NULL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, "failed to get the application ID");
if (aul_app_is_running(app_id) == 0) {
- free(app_id);
+ if (app_id) {
+ free(app_id);
+ app_id = NULL;
+ }
return app_manager_error(APP_MANAGER_ERROR_APP_NO_RUNNING, __FUNCTION__, NULL);
}
retval = aul_resume_app(app_id);
- free(app_id);
+ if (app_id)
+ free(app_id);
if (retval == AUL_R_EINVAL)
return app_manager_error(APP_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
return APP_MANAGER_ERROR_NONE;
}
-API int app_manager_open_app(const char *app_id)
-{
- int retval;
-
- retval = aul_open_app(app_id);
- if (retval == AUL_R_ERROR) {
- LOGE("[%s] APP_MANAGER_ERROR_NO_SUCH_APP(0x%08x) : No such application", __FUNCTION__, APP_MANAGER_ERROR_NO_SUCH_APP);
- return APP_MANAGER_ERROR_NO_SUCH_APP;
- } else if (retval == AUL_R_EINVAL) {
- LOGE("[%s] APP_MANAGER_ERROR_INVALID_PARAMETER(0x%08x) : Invalid param", __FUNCTION__, APP_MANAGER_ERROR_INVALID_PARAMETER);
- return APP_MANAGER_ERROR_INVALID_PARAMETER;
- } else if (retval == AUL_R_EILLACC) {
- LOGE("[%s] APP_MANAGER_ERROR_PERMISSION_DENIED(0x%08x) : Permission denied", __FUNCTION__, APP_MANAGER_ERROR_PERMISSION_DENIED);
- return APP_MANAGER_ERROR_PERMISSION_DENIED;
- } else if (retval < 0) {
- return APP_MANAGER_ERROR_REQUEST_FAILED;
- }
-
- return APP_MANAGER_ERROR_NONE;
-}
-
API int app_manager_get_shared_data_path(const char *app_id, char **path)
{
int r;