static const char join_metadata[] =
" LEFT OUTER JOIN package_app_app_metadata"
" ON ai.app_id=package_app_app_metadata.app_id ";
+static const char join_appinfo_for_uid[] =
+ " LEFT OUTER JOIN package_app_info_for_uid"
+ " ON ai.app_id=package_app_info_for_uid.app_id ";
static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
- const char *locale, char **query, GList **bind_params)
+ const char *locale, uid_t uid, char **query, GList **bind_params)
{
int joined = 0;
size_t len = 0;
}
for (list = filter->list; list; list = list->next) {
- joined |= __get_filter_condition(list->data, &condition, bind_params);
+ joined |= __get_filter_condition(list->data, uid, &condition, bind_params);
if (condition == NULL)
continue;
strncat(tmp_query, join_metadata, MAX_QUERY_LEN - len - 1);
len += strlen(join_metadata);
}
+ if (joined & E_PMINFO_APPINFO_JOIN_APPINFO_FOR_UID) {
+ strncat(tmp_query, join_appinfo_for_uid, MAX_QUERY_LEN - len - 1);
+ len += strlen(join_appinfo_for_uid);
+ }
strncat(tmp_query, buf, MAX_QUERY_LEN - len - 1);
len += strlen(buf);
_save_column_str(stmt, 0, &info->splash_screen_display);
if (strcasecmp(info->is_disabled, "false") == 0) {
_save_column_str(stmt, 1, &is_disabled);
- if (strcasecmp(is_disabled, "true") == 0)
- ret = PMINFO_R_ERROR;
- free(is_disabled);
+ if (strcasecmp(is_disabled, "true") == 0) {
+ free(info->is_disabled);
+ info->is_disabled = is_disabled;
+ } else {
+ free(is_disabled);
+ }
}
}
sqlite3_finalize(stmt);
- return ret;
+ return PMINFO_R_OK;
}
static void __free_applications(gpointer data)
is_check_storage = __check_app_storage_status(filter);
- ret = _get_filtered_query(filter, locale, &constraint, &bind_params);
+ ret = _get_filtered_query(filter, locale, uid, &constraint, &bind_params);
if (ret != PMINFO_R_OK) {
LOGE("Failed to get WHERE clause");
goto catch;
if (db_uid == GLOBAL_USER) {
ret = __get_appinfo_for_uid(db, info, uid);
if (ret != PMINFO_R_OK) {
+ LOGI("Failed to get appinfo for given uid[%d]", (int)uid);
pkgmgrinfo_basic_free_application(info);
info = NULL;
continue;
ret = _appinfo_get_applications(uid, uid, locale, filter,
PMINFO_APPINFO_GET_ALL, list);
if (!g_hash_table_size(list) && uid != GLOBAL_USER)
- ret = _appinfo_get_applications(GLOBAL_USER, GLOBAL_USER, locale, filter,
+ ret = _appinfo_get_applications(GLOBAL_USER, uid, locale, filter,
PMINFO_APPINFO_GET_ALL, list);
if (!g_hash_table_size(list)) {
" ON pi.package=package_privilege_info.package";
static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
- const char *locale, char **query, GList **bind_params)
+ const char *locale, uid_t uid, char **query, GList **bind_params)
{
int joined = 0;
char buf[MAX_QUERY_LEN] = { '\0' };
len += strlen(" WHERE 1=1 ");
strncat(buf, " WHERE 1=1 ", MAX_QUERY_LEN - len - 1);
for (list = filter->list; list; list = list->next) {
- joined |= __get_filter_condition(list->data, &condition,
+ joined |= __get_filter_condition(list->data, uid, &condition,
bind_params);
if (condition == NULL)
continue;
strncat(query, query_from_clause, MAX_QUERY_LEN - query_len - 1);
query_len += strlen(query_from_clause);
- ret = _get_filtered_query(tmp_filter, locale, &constraints, &bind_params);
+ ret = _get_filtered_query(tmp_filter, locale, uid, &constraints, &bind_params);
if (ret != PMINFO_R_OK) {
LOGE("Failed to get WHERE clause");
goto catch;
return prop;
}
-int __get_filter_condition(gpointer data, char **condition, GList **params)
+int __get_filter_condition(gpointer data, uid_t uid, char **condition, GList **params)
{
pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x *)data;
char buf[MAX_QUERY_LEN] = {'\0'};
flag = E_PMINFO_APPINFO_JOIN_METADATA;
break;
case E_PMINFO_APPINFO_PROP_APP_DISABLE:
- snprintf(buf, MAX_QUERY_LEN, "ai.app_disable=? COLLATE NOCASE");
+ if (strcasecmp(node->value, "true") == 0)
+ snprintf(buf, MAX_QUERY_LEN, "(ai.app_disable=? COLLATE NOCASE OR "
+ "ai.app_id IN (SELECT app_id FROM package_app_info_for_uid "
+ "WHERE uid=%d AND is_disabled='true'))", uid);
+ else
+ snprintf(buf, MAX_QUERY_LEN, "(ai.app_disable=? COLLATE NOCASE AND "
+ "ai.app_id NOT IN (SELECT app_id FROM package_app_info_for_uid "
+ "WHERE uid=%d AND is_disabled='true'))", uid);
+ flag = E_PMINFO_APPINFO_JOIN_APPINFO_FOR_UID;
break;
case E_PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE:
snprintf(buf, MAX_QUERY_LEN, "ai.app_support_disable=? COLLATE NOCASE");
E_PMINFO_APPINFO_JOIN_CATEGORY = 0x0002,
E_PMINFO_APPINFO_JOIN_APP_CONTROL = 0x0004,
E_PMINFO_APPINFO_JOIN_METADATA = 0x0008,
+ E_PMINFO_APPINFO_JOIN_APPINFO_FOR_UID = 0x0010,
} pkgmgrinfo_appinfo_join_flag;
typedef struct _pkgmgr_pkginfo_x {
void _save_column_int(sqlite3_stmt *stmt, int idx, int *i);
void _save_column_str(sqlite3_stmt *stmt, int idx, char **str);
char *_get_system_locale(void);
-int __get_filter_condition(gpointer data, char **condition, GList **param);
+int __get_filter_condition(gpointer data, uid_t uid, char **condition, GList **param);
int _add_icon_info_into_list(const char *locale, char *value, GList **icon);
int _add_label_info_into_list(const char *locale, char *value, GList **label);
int __pkginfo_check_installed_storage(package_x *pkginfo);