Add privilege filter for app info 76/179876/1
authorJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 21 May 2018 07:09:45 +0000 (16:09 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Wed, 23 May 2018 06:50:25 +0000 (06:50 +0000)
- 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 a8f3971..f339a67 100644 (file)
@@ -141,6 +141,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 a3833c1..10d6d75 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 cea1f68..7ce8f30 100644 (file)
@@ -99,7 +99,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 {
@@ -413,6 +414,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 4ccc425..41c11ef 100644 (file)
@@ -127,7 +127,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*/
@@ -173,6 +174,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 {