Add support for watch-application to pkgmgr-parser
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_appinfo.c
index cf97628..15383a0 100644 (file)
@@ -250,20 +250,6 @@ static int _appinfo_get_label(sqlite3 *db, const char *appid,
        return PMINFO_R_OK;
 }
 
-static void _appinfo_modify_icon(const char *appid, const char **icon)
-{
-       char buf[PKG_VALUE_STRING_LEN_MAX];
-       const char *tmp;
-
-       if (*icon == NULL || (*icon)[0] == '/' || !strcasecmp(*icon, ""))
-               return;
-
-       tmp = *icon;
-       snprintf(buf, sizeof(buf), "%s%s.png", getIconPath(getuid()), appid);
-       *icon = strdup(buf);
-       free((char *)tmp);
-}
-
 static int _appinfo_get_icon(sqlite3 *db, const char *appid, const char *locale,
                GList **icon)
 {
@@ -300,8 +286,6 @@ static int _appinfo_get_icon(sqlite3 *db, const char *appid, const char *locale,
                }
                idx = 0;
                _save_column_str(stmt, idx++, &info->text);
-               /* FIXME: this is a workaround. this must be removed later */
-               _appinfo_modify_icon(appid, &info->text);
                _save_column_str(stmt, idx++, &info->lang);
                *icon = g_list_append(*icon, info);
        }
@@ -503,6 +487,52 @@ static int _appinfo_get_metadata(sqlite3 *db, const char *appid,
 
 }
 
+static int _appinfo_get_splashscreens(sqlite3 *db, const char *appid,
+               GList **splashscreens)
+{
+       static const char query_raw[] =
+               "SELECT src, type, orientation, indicatordisplay, operation "
+               "FROM package_app_splash_screen WHERE app_id=%Q";
+       int ret;
+       char *query;
+       sqlite3_stmt *stmt;
+       int idx;
+       splashscreen_x *info;
+
+       query = sqlite3_mprintf(query_raw, appid);
+       if (query == NULL) {
+               LOGE("out of memory");
+               return PMINFO_R_ERROR;
+       }
+
+       ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
+       sqlite3_free(query);
+       if (ret != SQLITE_OK) {
+               LOGE("prepare failed: %s", sqlite3_errmsg(db));
+               return PMINFO_R_ERROR;
+       }
+
+       while (sqlite3_step(stmt) == SQLITE_ROW) {
+               info = calloc(1, sizeof(splashscreen_x));
+               if (info == NULL) {
+                       LOGE("out of memory");
+                       sqlite3_finalize(stmt);
+                       return PMINFO_R_ERROR;
+               }
+               idx = 0;
+               _save_column_str(stmt, idx++, &info->src);
+               _save_column_str(stmt, idx++, &info->type);
+               _save_column_str(stmt, idx++, &info->orientation);
+               _save_column_str(stmt, idx++, &info->indicatordisplay);
+               _save_column_str(stmt, idx++, &info->operation);
+               *splashscreens = g_list_append(*splashscreens, info);
+       }
+
+       sqlite3_finalize(stmt);
+
+       return PMINFO_R_OK;
+}
+
 static GList *__get_background_category(char *value)
 {
        GList *category_list = NULL;
@@ -545,7 +575,7 @@ static GList *__get_background_category(char *value)
 }
 
 static int _appinfo_get_application(sqlite3 *db, const char *appid,
-               const char *locale, application_x **application)
+               const char *locale, application_x **application, bool is_disabled)
 {
        static const char query_raw[] =
                "SELECT app_id, app_component, app_exec, app_nodisplay, "
@@ -559,16 +589,23 @@ static int _appinfo_get_application(sqlite3 *db, const char *appid,
                "app_support_disable, "
                "component_type, package, app_process_pool, app_installed_storage, "
                "app_background_category, app_package_type "
-               "FROM package_app_info WHERE app_id='%s' AND app_disable='false' "
-               "AND app_id NOT IN "
-               "(SELECT app_id from package_app_disable_for_user WHERE uid='%d')";
+               "FROM package_app_info WHERE app_id='%s' "
+               "AND (app_disable='%s' "
+               "%s app_id %s IN "
+               "(SELECT app_id from package_app_disable_for_user WHERE uid='%d'))";
        int ret;
        char query[MAX_QUERY_LEN] = { '\0' };
        sqlite3_stmt *stmt;
        int idx;
        application_x *info;
        char *bg_category_str = NULL;
-       snprintf(query, MAX_QUERY_LEN - 1, query_raw, appid, (int)getuid());
+       snprintf(query, MAX_QUERY_LEN - 1, query_raw,
+                       appid,
+                       is_disabled ? "true" : "false",
+                       is_disabled ? "OR" : "AND",
+                       is_disabled ? "" : "NOT",
+                       (int)getuid());
+
        ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
        if (ret != SQLITE_OK) {
                LOGE("prepare failed: %s", sqlite3_errmsg(db));
@@ -663,6 +700,12 @@ static int _appinfo_get_application(sqlite3 *db, const char *appid,
                return PMINFO_R_ERROR;
        }
 
+       if (_appinfo_get_splashscreens(db, info->appid, &info->splashscreens)) {
+               pkgmgrinfo_basic_free_application(info);
+               sqlite3_finalize(stmt);
+               return PMINFO_R_ERROR;
+       }
+
        *application = info;
 
        sqlite3_finalize(stmt);
@@ -671,7 +714,7 @@ static int _appinfo_get_application(sqlite3 *db, const char *appid,
 }
 
 static int _appinfo_get_appinfo(const char *appid, uid_t uid,
-               pkgmgr_appinfo_x **appinfo)
+               pkgmgr_appinfo_x **appinfo, bool is_disabled)
 {
        int ret;
        sqlite3 *db;
@@ -702,7 +745,7 @@ static int _appinfo_get_appinfo(const char *appid, uid_t uid,
                return PMINFO_R_ERROR;
        }
 
-       ret = _appinfo_get_application(db, appid, locale, &info->app_info);
+       ret = _appinfo_get_application(db, appid, locale, &info->app_info, is_disabled);
        if (ret != PMINFO_R_OK) {
                free(info);
                free(locale);
@@ -720,9 +763,215 @@ static int _appinfo_get_appinfo(const char *appid, uid_t uid,
        return ret;
 }
 
+API int pkgmgrinfo_appinfo_get_usr_disabled_appinfo(const char *appid, uid_t uid,
+               pkgmgrinfo_appinfo_h *handle)
+{
+       int ret;
+
+       if (appid == NULL || handle == NULL) {
+               LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       ret = _appinfo_get_appinfo(appid, uid, (pkgmgr_appinfo_x **)handle, true);
+       if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
+               ret = _appinfo_get_appinfo(appid, GLOBAL_USER,
+                               (pkgmgr_appinfo_x **)handle, true);
+
+       if (ret != PMINFO_R_OK)
+               _LOGE("failed to get appinfo of %s for user %d", appid, uid);
+
+       return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_disabled_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
+{
+       return pkgmgrinfo_appinfo_get_usr_disabled_appinfo(appid, GLOBAL_USER, handle);
+}
+
+API int pkgmgrinfo_appinfo_get_usr_appinfo(const char *appid, uid_t uid,
+               pkgmgrinfo_appinfo_h *handle)
+{
+       int ret;
+
+       if (appid == NULL || handle == NULL) {
+               LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       ret = _appinfo_get_appinfo(appid, uid, (pkgmgr_appinfo_x **)handle, false);
+       if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
+               ret = _appinfo_get_appinfo(appid, GLOBAL_USER,
+                               (pkgmgr_appinfo_x **)handle, false);
+
+       if (ret != PMINFO_R_OK)
+               _LOGE("failed to get appinfo of %s for user %d", appid, uid);
+
+       return ret;
+}
+
+API int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
+{
+       return pkgmgrinfo_appinfo_get_usr_appinfo(appid, GLOBAL_USER, handle);
+}
+
+static gpointer __copy_str(gconstpointer src, gpointer data)
+{
+       const char *tmp = (const char *)src;
+       const char *buffer;
+
+       buffer = strdup(tmp);
+       if (buffer == NULL) {
+               LOGE("memory alloc failed");
+               *(int *)data = -1;
+               return NULL;
+       }
+
+       return buffer;
+}
+
+static gpointer __copy_label(gconstpointer src, gpointer data)
+{
+       label_x *tmp = (label_x *)src;
+       label_x *label;
+
+       label = calloc(1, sizeof(label_x));
+       if (label == NULL) {
+               LOGE("memory alloc failed");
+               *(int *)data = -1;
+               return NULL;
+       }
+
+       if (tmp->name)
+               label->name = strdup(tmp->name);
+       if (tmp->text)
+               label->text = strdup(tmp->text);
+       if (tmp->lang)
+               label->lang = strdup(tmp->lang);
+
+       return label;
+}
+
+static gpointer __copy_icon(gconstpointer src, gpointer data)
+{
+       icon_x *tmp = (icon_x *)src;
+       icon_x *icon;
+
+       icon = calloc(1, sizeof(icon_x));
+       if (icon== NULL) {
+               LOGE("memory alloc failed");
+               *(int *)data = -1;
+               return NULL;
+       }
+
+       if (tmp->text)
+               icon->text = strdup(tmp->text);
+       if (tmp->lang)
+               icon->lang = strdup(tmp->lang);
+       if (tmp->section)
+               icon->section = strdup(tmp->section);
+       if (tmp->size)
+               icon->size = strdup(tmp->size);
+       if (tmp->resolution)
+               icon->resolution = strdup(tmp->resolution);
+
+       return icon;
+}
+
+static gpointer __copy_metadata(gconstpointer src, gpointer data)
+{
+       metadata_x *tmp = (metadata_x *)src;
+       metadata_x *metadata;
+
+       metadata = calloc(1, sizeof(metadata_x));
+       if (metadata == NULL) {
+               LOGE("memory alloc failed");
+               *(int *)data = -1;
+               return NULL;
+       }
+
+       if (tmp->key)
+               metadata->key = strdup(tmp->key);
+       if (tmp->value)
+               metadata->value = strdup(tmp->value);
+
+       return metadata;
+}
+
+static gpointer __copy_datacontrol(gconstpointer src, gpointer data)
+{
+       datacontrol_x *tmp = (datacontrol_x *)src;
+       datacontrol_x *datacontrol;
+
+       datacontrol = calloc(1, sizeof(datacontrol_x));
+       if (datacontrol == NULL) {
+               LOGE("memory alloc failed");
+               *(int *)data = -1;
+               return NULL;
+       }
+
+       if (tmp->providerid)
+               datacontrol->providerid = strdup(tmp->providerid);
+       if (tmp->access)
+               datacontrol->access = strdup(tmp->access);
+       if (tmp->type)
+               datacontrol->type = strdup(tmp->type);
+
+       return datacontrol;
+}
+
+static gpointer __copy_appcontrol(gconstpointer src, gpointer data)
+{
+       appcontrol_x *tmp = (appcontrol_x *)src;
+       appcontrol_x *appcontrol;
+
+       appcontrol = calloc(1, sizeof(appcontrol_x));
+       if (appcontrol ==NULL) {
+               LOGE("memory alloc failed");
+               *(int *)data = -1;
+               return NULL;
+       }
+
+       if (tmp->operation)
+               appcontrol->operation = strdup(tmp->operation);
+       if (tmp->uri)
+               appcontrol->uri = strdup(tmp->uri);
+       if (tmp->mime)
+               appcontrol->mime = strdup(tmp->mime);
+
+       return appcontrol;
+}
+
+static gpointer __copy_splashscreens(gconstpointer src, gpointer data)
+{
+       splashscreen_x *tmp = (splashscreen_x *)src;
+       splashscreen_x *splashscreen;
+
+       splashscreen = (splashscreen_x *)calloc(1, sizeof(splashscreen_x));
+       if (splashscreen == NULL) {
+               LOGE("memory alloc failed");
+               *(int *)data = -1;
+               return NULL;
+       }
+
+       if (tmp->src)
+               splashscreen->src = strdup(tmp->src);
+       if (tmp->type)
+               splashscreen->type = strdup(tmp->type);
+       if (tmp->orientation)
+               splashscreen->orientation = strdup(tmp->orientation);
+       if (tmp->indicatordisplay)
+               splashscreen->indicatordisplay = strdup(tmp->indicatordisplay);
+       if (tmp->operation)
+               splashscreen->operation = strdup(tmp->operation);
+
+       return splashscreen;
+}
+
 static int _appinfo_copy_appinfo(application_x **application, application_x *data)
 {
        application_x *app_info;
+       int ret;
 
        app_info = calloc(1, sizeof(application_x));
        if (app_info == NULL) {
@@ -746,8 +995,6 @@ static int _appinfo_copy_appinfo(application_x **application, application_x *dat
                app_info->type = strdup(data->type);
        if (data->categories != NULL)
                app_info->categories = strdup(data->categories);
-       if (data->extraid != NULL)
-               app_info->extraid = strdup(data->extraid);
        if (data->hwacceleration != NULL)
                app_info->hwacceleration = strdup(data->hwacceleration);
        if (data->screenreader != NULL)
@@ -766,8 +1013,6 @@ static int _appinfo_copy_appinfo(application_x **application, application_x *dat
                app_info->portraitimg = strdup(data->portraitimg);
        if (data->landscapeimg != NULL)
                app_info->landscapeimg = strdup(data->landscapeimg);
-       if (data->effectimage_type != NULL)
-               app_info->effectimage_type = strdup(data->effectimage_type);
        if (data->guestmode_visibility != NULL)
                app_info->guestmode_visibility = strdup(data->guestmode_visibility);
        if (data->component != NULL)
@@ -796,55 +1041,114 @@ static int _appinfo_copy_appinfo(application_x **application, application_x *dat
                app_info->ui_gadget = strdup(data->ui_gadget);
        if (data->launch_mode != NULL)
                app_info->launch_mode = strdup(data->launch_mode);
-       if (data->ambient_support != NULL)
-               app_info->ambient_support = strdup(data->ambient_support);
-       if (data->alias_appid != NULL)
-               app_info->alias_appid = strdup(data->alias_appid);
-       if (data->effective_appid != NULL)
-               app_info->effective_appid = strdup(data->effective_appid);
-
-       app_info->label = g_list_copy(data->label);
-       app_info->icon = g_list_copy(data->icon);
-       app_info->image = g_list_copy(data->image);
-       app_info->category = g_list_copy(data->category);
-       app_info->metadata = g_list_copy(data->metadata);
-       app_info->permission = g_list_copy(data->permission);
-       app_info->launchconditions = g_list_copy(data->launchconditions);
-       app_info->notification = g_list_copy(data->notification);
-       app_info->datashare = g_list_copy(data->datashare);
-       app_info->datacontrol = g_list_copy(data->datacontrol);
-       app_info->background_category = g_list_copy(data->background_category);
-       app_info->appcontrol = g_list_copy(data->appcontrol);
+       if (data->package_type != NULL)
+               app_info->package_type = strdup(data->package_type);
+
+       /* GList */
+       ret = 0;
+       app_info->label = g_list_copy_deep(data->label, __copy_label, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
+
+       ret = 0;
+       app_info->icon = g_list_copy_deep(data->icon, __copy_icon, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
+
+       ret = 0;
+       app_info->category = g_list_copy_deep(data->category, __copy_str, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
+
+       ret = 0;
+       app_info->metadata = g_list_copy_deep(data->metadata, __copy_metadata, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
+
+       ret = 0;
+       app_info->datacontrol = g_list_copy_deep(data->datacontrol, __copy_datacontrol, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
+
+       ret = 0;
+       app_info->appcontrol = g_list_copy_deep(data->appcontrol, __copy_appcontrol, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
+
+       ret = 0;
+       app_info->background_category = g_list_copy_deep(data->background_category, __copy_str, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
+
+       ret = 0;
+       app_info->splashscreens = g_list_copy_deep(data->splashscreens, __copy_splashscreens, &ret);
+       if (ret < 0) {
+               LOGE("memory alloc failed");
+               pkgmgrinfo_basic_free_application(app_info);
+               return PMINFO_R_ERROR;
+       }
 
        *application = app_info;
 
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_get_usr_appinfo(const char *appid, uid_t uid,
-               pkgmgrinfo_appinfo_h *handle)
+API int pkgmgrinfo_appinfo_clone_appinfo(pkgmgrinfo_appinfo_h handle,
+               pkgmgrinfo_appinfo_h *clone)
 {
-       int ret;
+       pkgmgr_appinfo_x *info;
+       pkgmgr_appinfo_x *temp = (pkgmgr_appinfo_x *)handle;
 
-       if (appid == NULL || handle == NULL) {
-               LOGE("invalid parameter");
+       if (handle == NULL)
                return PMINFO_R_EINVAL;
+
+       info = calloc(1, sizeof(pkgmgr_appinfo_x));
+       if (info == NULL) {
+               LOGE("memory alloc failed");
+               return PMINFO_R_ERROR;
        }
 
-       ret = _appinfo_get_appinfo(appid, uid, (pkgmgr_appinfo_x **)handle);
-       if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
-               ret = _appinfo_get_appinfo(appid, GLOBAL_USER,
-                               (pkgmgr_appinfo_x **)handle);
+       if (temp->package != NULL)
+               info->package = strdup(temp->package);
+       if (temp->locale != NULL)
+               info->locale = strdup(temp->locale);
 
-       if (ret != PMINFO_R_OK)
-               _LOGE("failed to get appinfo of %s for user %d", appid, uid);
+       info->app_component = temp->app_component;
 
-       return ret;
-}
+       if (_appinfo_copy_appinfo(&info->app_info, temp->app_info) < 0) {
+               LOGE("appinfo copy failed");
+               if (info->package)
+                       free((void *)info->package);
+               if (info->locale)
+                       free(info->locale);
+               free(info);
+               return PMINFO_R_ERROR;
+       }
 
-API int pkgmgrinfo_appinfo_get_appinfo(const char *appid, pkgmgrinfo_appinfo_h *handle)
-{
-       return pkgmgrinfo_appinfo_get_usr_appinfo(appid, GLOBAL_USER, handle);
+       *clone = info;
+
+       return PMINFO_R_OK;
 }
 
 static int _appinfo_get_filtered_foreach_appinfo(uid_t uid,
@@ -865,10 +1169,10 @@ static int _appinfo_get_filtered_foreach_appinfo(uid_t uid,
        for (tmp = list; tmp; tmp = tmp->next) {
                appid = (char *)tmp->data;
                if (stop == 0) {
-                       ret = _appinfo_get_appinfo(appid, uid, &info);
+                       ret = _appinfo_get_appinfo(appid, uid, &info, false);
                        if (ret == PMINFO_R_ENOENT && uid != GLOBAL_USER)
                                ret = _appinfo_get_appinfo(appid, GLOBAL_USER,
-                                               &info);
+                                               &info, false);
                        if (ret != PMINFO_R_OK) {
                                free(appid);
                                continue;
@@ -885,43 +1189,6 @@ static int _appinfo_get_filtered_foreach_appinfo(uid_t uid,
        return PMINFO_R_OK;
 }
 
-API int pkgmgrinfo_appinfo_get_clone(pkgmgrinfo_appinfo_h *clone,
-               pkgmgrinfo_appinfo_h handle)
-{
-       pkgmgr_appinfo_x *info;
-       pkgmgr_appinfo_x *temp = (pkgmgr_appinfo_x *)handle;
-
-       if (handle == NULL)
-               return PMINFO_R_EINVAL;
-
-       info = calloc(1, sizeof(pkgmgr_appinfo_x));
-       if (info == NULL) {
-               LOGE("memory alloc failed");
-               return PMINFO_R_ERROR;
-       }
-
-       if (temp->package != NULL)
-               info->package = strdup(temp->package);
-       if (temp->locale != NULL)
-               info->locale = strdup(temp->locale);
-
-       info->app_component = temp->app_component;
-
-       if (_appinfo_copy_appinfo(&info->app_info, temp->app_info) < 0) {
-               LOGE("appinfo copy failed");
-               if (info->package)
-                       free(info->package);
-               if (info->locale)
-                       free(info->locale);
-               free(info);
-               return PMINFO_R_ERROR;
-       }
-
-       *clone = info;
-
-       return PMINFO_R_OK;
-}
-
 API int pkgmgrinfo_appinfo_get_usr_list(pkgmgrinfo_pkginfo_h handle,
                pkgmgrinfo_app_component component,
                pkgmgrinfo_app_list_cb app_func, void *user_data, uid_t uid)
@@ -1242,10 +1509,14 @@ API int pkgmgrinfo_appinfo_get_localed_label(const char *appid, const char *loca
 
 static pkgmgrinfo_app_component __appcomponent_convert(const char *comp)
 {
-       if ( strcasecmp(comp, "uiapp") == 0)
+       if (strcasecmp(comp, "uiapp") == 0)
                return PMINFO_UI_APP;
-       else if ( strcasecmp(comp, "svcapp") == 0)
+       else if (strcasecmp(comp, "svcapp") == 0)
                return PMINFO_SVC_APP;
+       else if (strcasecmp(comp, "widgetapp") == 0)
+               return PMINFO_WIDGET_APP;
+       else if (strcasecmp(comp, "watchapp") == 0)
+               return PMINFO_WATCH_APP;
        else
                return -1;
 }
@@ -1528,8 +1799,8 @@ API int pkgmgrinfo_appinfo_get_effectimage(pkgmgrinfo_appinfo_h handle, char **p
        retvm_if(portrait_img == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
        retvm_if(landscape_img == NULL, PMINFO_R_EINVAL, "Argument supplied to hold return value is NULL");
 
-       if (info->app_info == NULL || info->app_info->portraitimg ||
-                       info->app_info->landscapeimg == NULL)
+       if (info->app_info == NULL || (info->app_info->portraitimg == NULL
+                       && info->app_info->landscapeimg == NULL))
                return PMINFO_R_ERROR;
 
        *portrait_img = (char *)info->app_info->portraitimg;
@@ -1847,6 +2118,38 @@ API int pkgmgrinfo_appinfo_foreach_background_category(
        return PMINFO_R_OK;
 }
 
+API int pkgmgrinfo_appinfo_foreach_splash_screen(pkgmgrinfo_appinfo_h handle,
+               pkgmgrinfo_app_splash_screen_list_cb splash_screen_func,
+               void *user_data)
+{
+       pkgmgr_appinfo_x *info = (pkgmgr_appinfo_x *)handle;
+       splashscreen_x *splashscreen;
+       GList *tmp;
+       int ret;
+
+       if (info == NULL || info->app_info == NULL
+                       || splash_screen_func == NULL) {
+               LOGE("invalid parameter");
+               return PMINFO_R_EINVAL;
+       }
+
+       for (tmp = info->app_info->splashscreens; tmp; tmp = tmp->next) {
+               splashscreen = (splashscreen_x *)tmp->data;
+               if (splashscreen == NULL)
+                       continue;
+               ret = splash_screen_func(splashscreen->src,
+                               splashscreen->type,
+                               splashscreen->orientation,
+                               splashscreen->indicatordisplay,
+                               splashscreen->operation,
+                               user_data);
+               if (ret < 0)
+                       break;
+       }
+
+       return PMINFO_R_OK;
+}
+
 API int pkgmgrinfo_appinfo_is_nodisplay(pkgmgrinfo_appinfo_h handle, bool *nodisplay)
 {
        retvm_if(handle == NULL, PMINFO_R_EINVAL, "appinfo handle is NULL");