Add privilege filter for app info 81/179681/4
authorJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 21 May 2018 07:09:45 +0000 (16:09 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 5 Jun 2018 02:42:10 +0000 (11:42 +0900)
- This patch will enable filtering app list with pkg privilege.

Change-Id: I46e3cee50991a2a2a6043a85be2ffafc3b296321
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
include/pkgmgr-info.h
src/pkgmgrinfo_appinfo.c
src/pkgmgrinfo_private.c
src/pkgmgrinfo_private.h

index fe251f1..71247de 100644 (file)
@@ -143,6 +143,8 @@ extern "C" {
 #define        PMINFO_APPINFO_PROP_APP_PACKAGE         "PMINFO_APPINFO_PROP_APP_PACKAGE"
  /** String property for filtering based on app info*/
 #define        PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE               "PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE"
+ /** String property for filtering based on app info*/
+#define        PMINFO_APPINFO_PROP_PRIVILEGE   "PMINFO_APPINFO_PROP_PRIVILEGE"
 
 /** Integer property for filtering app support mode */
 #define        PMINFO_APPINFO_PROP_APP_SUPPORT_MODE            "PMINFO_APPINFO_PROP_APP_SUPPORT_MODE"
index 48b041c..f05c371 100644 (file)
@@ -52,6 +52,9 @@ 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_privilege[] =
+       " LEFT OUTER JOIN package_privilege_info"
+       " ON ai.package=package_privilege_info.package ";
 
 static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
        const char *locale, uid_t uid, char **query, GList **bind_params)
@@ -104,6 +107,8 @@ static int _get_filtered_query(pkgmgrinfo_filter_x *filter,
                strncat(tmp_query, join_app_control, sizeof(tmp_query) - strlen(tmp_query) - 1);
        if (joined & E_PMINFO_APPINFO_JOIN_METADATA)
                strncat(tmp_query, join_metadata, sizeof(tmp_query) - strlen(tmp_query) - 1);
+       if (joined & E_PMINFO_APPINFO_JOIN_PRIVILEGE)
+               strncat(tmp_query, join_privilege, sizeof(tmp_query) - strlen(tmp_query) - 1);
 
        strncat(tmp_query, buf, sizeof(tmp_query) - strlen(tmp_query) - 1);
 
index 1bad2d0..ce7cca6 100644 (file)
@@ -100,7 +100,8 @@ static struct _appinfo_str_map_t appinfo_str_prop_map[] = {
        {E_PMINFO_APPINFO_PROP_APP_HWACCELERATION,      PMINFO_APPINFO_PROP_APP_HWACCELERATION},
        {E_PMINFO_APPINFO_PROP_APP_SCREENREADER,        PMINFO_APPINFO_PROP_APP_SCREENREADER},
        {E_PMINFO_APPINFO_PROP_APP_PACKAGE,     PMINFO_APPINFO_PROP_APP_PACKAGE},
-       {E_PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE,   PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE}
+       {E_PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE,   PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE},
+       {E_PMINFO_APPINFO_PROP_PRIVILEGE,       PMINFO_APPINFO_PROP_PRIVILEGE}
 };
 
 struct _appinfo_int_map_t {
@@ -417,6 +418,10 @@ int __get_filter_condition(gpointer data, uid_t uid, char **condition, GList **p
        case E_PMINFO_APPINFO_PROP_APP_CHECK_STORAGE:
                *condition = NULL;
                return 0;
+       case E_PMINFO_APPINFO_PROP_PRIVILEGE:
+               snprintf(buf, sizeof(buf), "package_privilege_info.privilege=?");
+               flag = E_PMINFO_APPINFO_JOIN_PRIVILEGE;
+               break;
        default:
                _LOGE("Invalid Property Type\n");
                *condition = NULL;
index 7cfaa89..9d581b5 100644 (file)
@@ -128,7 +128,8 @@ typedef enum _pkgmgrinfo_appinfo_filter_prop_str {
        E_PMINFO_APPINFO_PROP_APP_SCREENREADER,
        E_PMINFO_APPINFO_PROP_APP_PACKAGE,
        E_PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE,
-       E_PMINFO_APPINFO_PROP_APP_MAX_STR = E_PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE
+       E_PMINFO_APPINFO_PROP_PRIVILEGE,
+       E_PMINFO_APPINFO_PROP_APP_MAX_STR = E_PMINFO_APPINFO_PROP_PRIVILEGE
 } pkgmgrinfo_appinfo_filter_prop_str;
 
 /*Boolean properties for filtering based on app info*/
@@ -174,6 +175,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_PRIVILEGE = 0x0010,
 } pkgmgrinfo_appinfo_join_flag;
 
 typedef enum _pkgmgrinfo_appinfo_disable_type {