Fix appinfo to check additional db 50/108850/4 accepted/tizen/3.0/common/20170131.161800 accepted/tizen/3.0/ivi/20170131.090416 accepted/tizen/3.0/mobile/20170131.090326 accepted/tizen/3.0/tv/20170131.090348 accepted/tizen/3.0/wearable/20170131.090402 submit/tizen_3.0/20170131.015755
authorJunghyun Yeon <jungh.yeon@samsung.com>
Fri, 6 Jan 2017 04:59:35 +0000 (13:59 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Thu, 12 Jan 2017 09:09:25 +0000 (18:09 +0900)
- Add codes to check package_app_info_for_uid table to check
certain global app is disabled for this user or not.

Change-Id: Id0f0fb80872cb6443795e860f4a7e07f033d3b04
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/pkgmgrinfo_appinfo.c
src/pkgmgrinfo_pkginfo.c
src/pkgmgrinfo_private.c
src/pkgmgrinfo_private.h

index edf146a..92c8647 100644 (file)
@@ -52,9 +52,12 @@ static const char join_app_control[] =
 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;
@@ -75,7 +78,7 @@ static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
        }
 
        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;
 
@@ -105,6 +108,10 @@ static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
                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);
@@ -426,14 +433,17 @@ static int __get_appinfo_for_uid(sqlite3 *db, application_x *info, uid_t uid)
                _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)
@@ -582,7 +592,7 @@ static int _appinfo_get_applications(uid_t db_uid, uid_t uid,
 
        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;
@@ -674,6 +684,7 @@ static int _appinfo_get_applications(uid_t db_uid, uid_t uid,
                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;
@@ -796,7 +807,7 @@ static int _pkgmgrinfo_get_appinfo(const char *appid, uid_t uid,
        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)) {
index 5add4b0..5c0792c 100644 (file)
@@ -220,7 +220,7 @@ static const char join_privilege_info[] =
        "  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' };
@@ -235,7 +235,7 @@ static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
        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;
@@ -419,7 +419,7 @@ static int _pkginfo_get_packages(uid_t uid, const char *locale,
        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;
index 7e26eb0..1d31430 100644 (file)
@@ -235,7 +235,7 @@ inline pkgmgrinfo_appinfo_filter_prop_bool _pminfo_appinfo_convert_to_prop_bool(
        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'};
@@ -386,7 +386,15 @@ int __get_filter_condition(gpointer data, char **condition, GList **params)
                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");
index b86d19e..f78c5cb 100644 (file)
@@ -176,6 +176,7 @@ typedef enum _pkgmgrinfo_appinfo_join_flag {
        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 {
@@ -240,7 +241,7 @@ int __open_cert_db(uid_t uid, bool readonly);
 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);