Revert "Modify appid to pkgid" 45/92845/1
authorYunjin Lee <yunjin-.lee@samsung.com>
Wed, 19 Oct 2016 05:38:46 +0000 (14:38 +0900)
committerYunjin Lee <yunjin-.lee@samsung.com>
Wed, 19 Oct 2016 05:46:08 +0000 (14:46 +0900)
This reverts commit 78f0e4356dfc3130cd2d26e36954cf2ae016e777.

Change-Id: I11f50c1292b3af90f2801d6bfae55341bce25f70
Signed-off-by: Yunjin Lee <yunjin-.lee@samsung.com>
common/include/common_utils.h
common/src/common_utils.c
ui/CMakeLists.txt
ui/include/privacy_setting.h [new file with mode: 0755]
ui/include/privacy_view.h
ui/src/main_privacy_setting.c
ui/src/privacy_guard_list_view.c
ui/src/privacy_guard_package_list_view.c
ui/src/privacy_list_view.c
ui/src/privacy_menu_view.c
ui/src/privacy_package_list_view.c

index ea010ffde05c5f4a6f9a767f0f7d7f1503454e1d..0eace1fc2d60791e64f215a0d428fa97ce999b1c 100644 (file)
 #define __UI_PRIVACY_SETTING_COMMON_UTILS_H_
 
 #include <Elementary.h>
-#include <ui-gadget.h>
-#include <ui-gadget-module.h>
-#include <glib.h>
-#include <app.h>
 #include <dlog.h>
 
+#include "privacy_setting.h"
+
 #ifdef LOG_TAG
 #undef LOG_TAG
 #endif
@@ -62,23 +60,9 @@ extern "C" {
                } \
        }
 
-typedef struct _app_data_s{
-       Evas_Object *parent_layout;
-       Evas_Object *win;
-       Evas_Object *conform;
-       Evas_Object *bg;
-       Evas_Object *layout;
-       Evas_Object *nf;
-       void *data;
-       Elm_Theme *theme;
-
-       GList *privacy_list;
-       char* privacy;
-} app_data_s;
-
 
 Evas_Object *common_genlist_add(Evas_Object *parent);
-Evas_Object *common_back_btn_add(app_data_s *ad);
+Evas_Object *common_back_btn_add(struct app_data_s *ad);
 
 #ifdef _cplusplus
 }
index 11568c45048c192c0b78788ce717757e1d108e4a..9acd88f449f67d58c710794331f1719ebb7cad18 100644 (file)
@@ -42,12 +42,12 @@ Evas_Object *common_genlist_add(Evas_Object *parent)
 
 static void back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       app_data_s *ad = (app_data_s *)data;
+       struct app_data_s *ad = (struct app_data_s *)data;
        return_if(!ad, , , "ad is null");
        elm_naviframe_item_pop(ad->nf);
 }
 
-Evas_Object *common_back_btn_add(app_data_s *ad)
+Evas_Object *common_back_btn_add(struct app_data_s *ad)
 {
        Evas_Object *btn = elm_button_add(ad->nf);
        elm_object_style_set(btn, "naviframe/back_btn/default");
index 1f4e2e0694c0cf0f53cab042336f60a003a42fbc..e7897391af9b9063bed19dcd3f0908c92e2ea6bb 100755 (executable)
@@ -1,7 +1,7 @@
 INCLUDE(FindPkgConfig)
 SET(pkg_name "org.tizen.privacy-setting")
 
-pkg_check_modules(${pkg_name} REQUIRED glib-2.0 ui-gadget-1 evas elementary edje eina efl-extension security-privilege-manager dlog security-manager pkgmgr-info privacy-guard-client)
+pkg_check_modules(${pkg_name} REQUIRED glib-2.0 ui-gadget-1 evas elementary edje eina efl-extension security-privilege-manager icu-i18n dlog security-manager pkgmgr-info privacy-guard-client)
 
 SET(SRCS
        ${CMAKE_SOURCE_DIR}/common/src/common_utils.c
diff --git a/ui/include/privacy_setting.h b/ui/include/privacy_setting.h
new file mode 100755 (executable)
index 0000000..9e80536
--- /dev/null
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+/*
+ * @file        privacy_setting.h
+ * @author      Yunjin Lee <yunjin-.lee@samsung.com>
+ * @version     1.0
+ * @brief
+ */
+
+#ifndef __UI_PRIVACY_SETTING_H__
+#define __UI_PRIVACY_SETTING_H__
+
+#include <Elementary.h>
+#include <ui-gadget.h>
+#include <ui-gadget-module.h>
+#include <glib.h>
+#include <app.h>
+
+#define PRIVACY_MENU_SETTING "IDS_ST_HEADER_PRIVACY_SETTINGS_ABB"
+#define PRIVACY_MENU_ACCESS "Privacy access"
+
+struct app_data_s {
+       Evas_Object *parent_layout;
+       Evas_Object *win;
+       Evas_Object *conform;
+       Evas_Object *bg;
+       Evas_Object *layout;
+       Evas_Object *nf;
+       void *data;
+       Elm_Theme *theme;
+
+       GList *privacy_list;
+       char* privacy;
+};
+
+struct app_data_s *get_app_data();
+
+#endif /* __UI_PRIVACY_SETTING_H__ */
index 4a9f6b2fb1e98ff67ad940456bea378b070966ad..484d5714bdf5597ba448a0ce427ff712d1a21a06 100644 (file)
 #include <glib.h>
 #include <app.h>
 
-#include "common_utils.h"
-
-#define PRIVACY_MENU_SETTING "IDS_ST_HEADER_PRIVACY_SETTINGS_ABB"
-#define PRIVACY_MENU_ACCESS "Privacy accesses"
+#include "privacy_setting.h"
 
 typedef struct {
        char* pkgid;
        char* label;
        char* icon;
+       GList* applist;
        GList* privlist;
        bool change; /* toggle */
        bool status; /* original status */
        bool is_global;
 } pkg_data_s;
 
-typedef struct {
+typedef struct item_data {
        int index;
        char *title;
        char *pkgid;
@@ -69,13 +67,13 @@ typedef struct {
        bool status;
 } pg_item_data_s;
 
-void create_privacy_package_list_view(app_data_s *ad);
+void create_privacy_package_list_view(struct app_data_s *ad);
 
-void create_privacy_list_view(app_data_s *ad);
+void create_privacy_list_view(struct app_data_s *ad);
 
-void create_privacy_menu_view(app_data_s *ad);
+void create_privacy_menu_view(struct app_data_s *ad);
 
-void create_privacy_guard_list_view(app_data_s *ad);
+void create_privacy_guard_list_view(struct app_data_s *ad);
 
-void create_privacy_guard_package_list_view(app_data_s *ad);
+void create_privacy_guard_package_list_view(struct app_data_s *ad);
 
index 34d9d45c1cc62857760bba0b166a12a87316b8d1..8d29a63f5e1d5502a46899f917b169dd2208ec3e 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "common_utils.h"
 
+#include "privacy_setting.h"
 #include "privacy_view.h"
 
 static void win_delete_request_cb(void *data, Evas_Object * obj, void *event_info)
@@ -36,7 +37,7 @@ static void win_delete_request_cb(void *data, Evas_Object * obj, void *event_inf
 
 static void app_start(void* data)
 {
-       app_data_s* ad = (app_data_s*)data;
+       struct app_data_s* ad = (struct app_data_s*)data;
 
        /* Add conformant to window */
        ad->conform = elm_conformant_add(ad->win);
@@ -68,7 +69,7 @@ static void app_start(void* data)
 
 static bool app_create(void * data)
 {
-       app_data_s *ad = (app_data_s*)data;
+       struct app_data_s *ad = (struct app_data_s*)data;
 
        elm_app_base_scale_set(1.8);
 
@@ -117,7 +118,7 @@ static void ui_app_lang_changed(app_event_info_h event_info, void *user_data)
 
 int main(int argc, char *argv[])
 {
-       app_data_s ad = {0, };
+       struct app_data_s ad = {0, };
        int ret = 0;
 
        ui_app_lifecycle_callback_s event_callback = {0, };
index f940966bef38997455a1d92ecb47b3c3ea36003a..2a99c4bc94e7462a3ee99cbf63335441038af953 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <efl_extension.h>
 #include "common_utils.h"
+#include "privacy_setting.h"
 #include "privacy_view.h"
 #include "privilege_info.h"
 
@@ -49,7 +50,7 @@ static void _privacy_selected_cb(void *data, Evas_Object *obj, void *event_info)
        /* Unhighlight selected item */
        elm_genlist_item_selected_set(ei, EINA_FALSE);
 
-       app_data_s *ad = (app_data_s *)data;
+       struct app_data_s *ad = (struct app_data_s *)data;
        return_if(ad == NULL, , , "ad is null");
 
        ad->privacy = (char*)selected_id->privacy;
@@ -57,7 +58,7 @@ static void _privacy_selected_cb(void *data, Evas_Object *obj, void *event_info)
        create_privacy_guard_package_list_view(ad);
 }
 
-void create_privacy_guard_list_view(app_data_s *ad)
+void create_privacy_guard_list_view(struct app_data_s *ad)
 {
        Evas_Object *genlist = common_genlist_add(ad->nf);
 
index 798aa15dc649c4d3d39a71924e30547d5f8634da..4af7f0f1a93f84221e735e8a830fabaf59bc2bf8 100644 (file)
@@ -27,6 +27,7 @@
 #include <tzplatform_config.h>
 #include <privacy_guard_client.h>
 #include "common_utils.h"
+#include "privacy_setting.h"
 #include "privacy_view.h"
 
 #define DEFAULT_ICON_PATH _TZ_SYS_RO_APP"/org.tizen.privacy-setting/res/icon/default.png"
@@ -135,7 +136,8 @@ static bool _privacy_package_info_cb(const char *package_id, const int count, co
        return true;
 }
 
-void create_privacy_guard_package_list_view(app_data_s* ad)
+void create_privacy_guard_package_list_view(struct app_data_s* ad)
+
 {
        /* Add genlist */
        Evas_Object *genlist = common_genlist_add(ad->nf);
index 9660fd8320bc297d7fc85e9d481c437557e56680..88d73e5e603161c0f04af5f39c989dd6475c9276 100644 (file)
@@ -23,6 +23,7 @@
 #include <efl_extension.h>
 
 #include "common_utils.h"
+#include "privacy_setting.h"
 #include "privacy_view.h"
 #include "privilege_info.h"
 
@@ -50,7 +51,7 @@ static void privacy_selected_cb(void *data, Evas_Object *obj, void *event_info)
        /* Unhighlight selected item */
        elm_genlist_item_selected_set(ei, EINA_FALSE);
 
-       app_data_s *ad = (app_data_s *)data;
+       struct app_data_s *ad = (struct app_data_s *)data;
        return_if(ad == NULL, , , "ad is null");
 
        ad->privacy = (char*)selected_id->privacy;
@@ -59,7 +60,7 @@ static void privacy_selected_cb(void *data, Evas_Object *obj, void *event_info)
 }
 
 /*Privacy List*/
-void create_privacy_list_view(app_data_s *ad)
+void create_privacy_list_view(struct app_data_s *ad)
 {
        Evas_Object *genlist = common_genlist_add(ad->nf);
 
index 0264566678e58e67f1629875e3917ed68942ea17..b49a4f566adcaf278b45704660a0fd456f300a7b 100644 (file)
 #include <glib.h>
 
 #include "common_utils.h"
+#include "privacy_setting.h"
 #include "privacy_view.h"
 
 GList *privacy_menu_list;
 
 static Eina_Bool quit_cb(void *data, Elm_Object_Item *it)
 {
-       app_data_s* ad = (app_data_s*)data;
+       struct app_data_s* ad = (struct app_data_s*)data;
        return_if(!ad, , EINA_FALSE, "ad is null");
        ui_app_exit();
 
@@ -63,7 +64,7 @@ static void menu_selected_cb(void *data, Evas_Object *obj, void *event_info)
        /* Unhighlight selected item */
        elm_genlist_item_selected_set(ei, EINA_FALSE);
 
-       app_data_s *ad = (app_data_s *)data;
+       struct app_data_s *ad = (struct app_data_s *)data;
        return_if(ad == NULL, , , "ad is null");
 
        int ret = privilege_info_get_privacy_list(&(ad->privacy_list));
@@ -79,7 +80,7 @@ static void menu_selected_cb(void *data, Evas_Object *obj, void *event_info)
 }
 
 /*Privacy Menu List*/
-void create_privacy_menu_view(app_data_s *ad)
+void create_privacy_menu_view(struct app_data_s *ad)
 {
        Evas_Object *genlist = common_genlist_add(ad->nf);
 
index 82aa853404a489a520a7759faddfb0fb9a7f752a..c068167851c5c3fafbf7441d779a6f3295f134df 100644 (file)
@@ -28,6 +28,7 @@
 #include <tzplatform_config.h>
 
 #include "common_utils.h"
+#include "privacy_setting.h"
 #include "privacy_view.h"
 
 static GList* pkg_list;
@@ -39,6 +40,8 @@ Evas_Object *save_btn;
 bool first;
 
 #define DEFAULT_ICON_PATH _TZ_SYS_RO_APP"/org.tizen.privacy-setting/res/icon/default.png"
+#define UIDMAXLEN 10
+#define GLOBAL_UID tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
 
 static void gl_del_cb(void *data, Evas_Object *obj)
 {
@@ -113,50 +116,61 @@ static void privacy_package_selected_cb(void *data, Evas_Object *obj, void *even
 static void __get_package_privacy_status(pkg_data_s* pkg_data, char* privilege_name)
 {
        GList* l;
+       char uid[UIDMAXLEN];
+       if (pkg_data->is_global)
+               snprintf(uid, UIDMAXLEN, "%d", GLOBAL_UID);
+       else
+               snprintf(uid, UIDMAXLEN, "%d", getuid());
+
+       for (l = pkg_data->applist; l != NULL; l = l->next) {
+               char* appid = (char*)l->data;
+
+               /* Make policy filter to get specific uid, appid and privilege's status */
+               policy_entry* p_filter;
+               int ret = 0;
+               ret = security_manager_policy_entry_new(&p_filter);
+               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %s", ret);
+               log_if(p_filter == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
+               ret = security_manager_policy_entry_set_application(p_filter, appid);
+               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
+
+               /* TBD: Remove set user part becuase there's no notion of global app's policy changes. User update their own app's policy only.
+               ret = security_manager_policy_entry_set_user(p_filter, uid);
+               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_user failed. ret = %d", ret); */
+               security_manager_policy_entry_set_privilege(p_filter, privilege_name);
+               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
+
+               /* Get policy filtered by p_filter */
+               policy_entry **pp_policy = NULL;
+               size_t pp_policy_size = 0;
+               ret = security_manager_get_policy(p_filter, &pp_policy, &pp_policy_size);
+               log_if(ret != SECURITY_MANAGER_SUCCESS || pp_policy_size <= 0, 1, "security_manager_get_policy failed. ret = %d, pp_policy_size = %d", ret, pp_policy_size);
+
+               /* Get level from policy */
+               unsigned int i = 0;
+               for (i = 0; i < pp_policy_size; ++i) {
+                       char* result = (char*)security_manager_policy_entry_get_level(pp_policy[i]);
+                       log_if(result == NULL, 1, "security_manager_policy_entry_get_level failed. No policy is declared for pkgid: %s, uid: %s, appid: %s, privilege: %s", pkg_data->pkgid, uid, appid, privilege_name);
+                       if (strcmp("Allow", result) == 0) {
+                               pkg_data->status = EINA_TRUE;
+                               break;
+                       } else if (strcmp("Deny", result) == 0) {/* TBD: Handle AskUser case? */
+                               pkg_data->status = EINA_FALSE;
+                               break;
+                       } else {
+                               LOGE("Unknown policy level: %s", result);
+                               break;
+                       }
+               }
 
-       char* pkgid = pkg_data->pkgid;
+               /* Free policy entries */
+               security_manager_policy_entry_free(p_filter);
+               for (i = 0; i < pp_policy_size ; ++i)
+                       security_manager_policy_entry_free(pp_policy[i]);
 
-       /* Make policy filter to get specific uid, pkgid and privilege's status */
-       policy_entry* p_filter;
-       int ret = 0;
-       ret = security_manager_policy_entry_new(&p_filter);
-       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %s", ret);
-       log_if(p_filter == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
-
-       ret = security_manager_policy_entry_set_application(p_filter, pkgid);
-       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
-
-       security_manager_policy_entry_set_privilege(p_filter, privilege_name);
-       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
-
-       /* Get policy filtered by p_filter */
-       policy_entry **pp_policy = NULL;
-       size_t pp_policy_size = 0;
-       ret = security_manager_get_policy(p_filter, &pp_policy, &pp_policy_size);
-       log_if(ret != SECURITY_MANAGER_SUCCESS || pp_policy_size <= 0, 1, "security_manager_get_policy failed. ret = %d, pp_policy_size = %d", ret, pp_policy_size);
-
-       /* Get level from policy */
-       unsigned int i = 0;
-       for (i = 0; i < pp_policy_size; ++i) {
-               char* result = (char*)security_manager_policy_entry_get_level(pp_policy[i]);
-               log_if(result == NULL, 1, "security_manager_policy_entry_get_level failed. No policy is declared for pkgid: %s, pkgid: %s, privilege: %s", pkg_data->pkgid, pkgid, privilege_name);
-               if (strcmp("Allow", result) == 0) {
-                       pkg_data->status = EINA_TRUE;
-                       break;
-               } else if (strcmp("Deny", result) == 0) {/* TBD: Handle AskUser case? */
-                       pkg_data->status = EINA_FALSE;
+               if (pkg_data->status == EINA_TRUE)
                        break;
-               } else {
-                       LOGE("Unknown policy level: %s", result);
-                       break;
-               }
        }
-
-       /* Free policy entries */
-       security_manager_policy_entry_free(p_filter);
-       for (i = 0; i < pp_policy_size ; ++i)
-               security_manager_policy_entry_free(pp_policy[i]);
-
 }
 static Eina_Bool get_package_privacy_status(char* package)
 {
@@ -221,6 +235,11 @@ static void _save_btn_clicked_cb(void *user_data, Evas_Object *obj, void *event_
                pkg_data_s* pkg_data = (pkg_data_s*)l->data;
                char* pkgid = (char*)pkg_data->pkgid;
                if (pkg_data->change) {
+                       char uid[UIDMAXLEN];
+                       if (pkg_data->is_global)
+                               snprintf(uid, UIDMAXLEN, "%d", GLOBAL_UID);
+                       else
+                               snprintf(uid, UIDMAXLEN, "%d", getuid());
                        char* level;
                        if (pkg_data->status) {
                                level = "Deny";
@@ -230,37 +249,45 @@ static void _save_btn_clicked_cb(void *user_data, Evas_Object *obj, void *event_
                                pkg_data->status = true;
                        }
 
-                       LOGD("%s will be changed to %s", pkgid, level);
+                       LOGD("uid: %s, %s will be changed to %s", uid, pkgid, level);
 
-                       int entry_num = g_list_length(pkg_data->privlist);
-                       LOGD("entry_num = %d", entry_num);
+                       int priv_num = g_list_length(pkg_data->privlist);
+                       int app_num = g_list_length(pkg_data->applist);
+                       int entry_num = priv_num*app_num;
+                       LOGD("priv_num = %d, app_num = %d, entry_num = %d", priv_num, app_num, entry_num);
 
                        /* Make policy update request */
                        policy_update_req *policy_update_request;
                        ret = security_manager_policy_update_req_new(&policy_update_request);
                        log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_update_req_new failed. ret = %d", ret);
                        log_if(policy_update_request == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy request did not allocate memory");
-                       /* Make policy entries to update according to the number of privilege of package */
+                       /* Make policy entries to update according to the number of privilege and appid of package */
                        policy_entry *entry[entry_num];
                        int entry_index = 0;
-                       for (lll = pkg_data->privlist; lll != NULL; lll = lll->next) {
-                               char* privilege_name = (char*)lll->data;
-                               LOGD("%d: Change to %s => pkgid: %s, privilege_name: %s", entry_index, level, pkgid, privilege_name);
-                               /* Make entries by each privilege_name */
-                               ret = security_manager_policy_entry_new(&entry[entry_index]);
-                               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %d", ret);
-                               log_if(entry[entry_index] == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
-                               ret = security_manager_policy_entry_set_application(entry[entry_index], pkgid);
-                               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
-                               ret = security_manager_policy_entry_set_privilege(entry[entry_index], privilege_name);
-                               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
-                               ret = security_manager_policy_entry_set_level(entry[entry_index], level);
-                               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_level failed. ret = %d", ret);
-
-                               /* Add entry to policy update request */
-                               ret = security_manager_policy_update_req_add_entry(policy_update_request, entry[entry_index]);
-                               log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_update_req_add_entry failed. ret = %d", ret);
-                               entry_index++;
+                       for (ll = pkg_data->applist; ll != NULL; ll = ll->next) {
+                               char* appid = (char*)ll->data;
+                               for (lll = pkg_data->privlist; lll != NULL; lll = lll->next) {
+                                       char* privilege_name = (char*)lll->data;
+                                       LOGD("%d: Change to %s => uid: %s, appid: %s, privilege_name: %s", entry_index, level, uid, appid, privilege_name);
+                                       /* Make entries by each uid, appid, and privilege_name */
+                                       ret = security_manager_policy_entry_new(&entry[entry_index]);
+                                       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_new failed. ret = %d", ret);
+                                       log_if(entry[entry_index] == NULL, 1, "security_manager_policy_entry_new failed failed. creation of new policy entry did not allocate memory");
+                                       ret = security_manager_policy_entry_set_application(entry[entry_index], appid);
+                                       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_application failed. ret = %d", ret);
+                                       ret = security_manager_policy_entry_set_privilege(entry[entry_index], privilege_name);
+                                       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_privilege failed. ret = %d", ret);
+                                       /* TBD: Remove set user part becuase there's no notion of global app's policy changes. User update their own app's policy only.
+                                       ret = security_manager_policy_entry_set_user(entry[entry_index], uid);
+                                       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_user failed. ret = %d", ret); */
+                                       ret = security_manager_policy_entry_set_level(entry[entry_index], level);
+                                       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_entry_set_level failed. ret = %d", ret);
+
+                                       /* Add entry to policy update request */
+                                       ret = security_manager_policy_update_req_add_entry(policy_update_request, entry[entry_index]);
+                                       log_if(ret != SECURITY_MANAGER_SUCCESS, 1, "security_manager_policy_update_req_add_entry failed. ret = %d", ret);
+                                       entry_index++;
+                               }
                        }
                        /* Send policy update request */
                        ret = security_manager_policy_update_send(policy_update_request);
@@ -278,6 +305,18 @@ static void _save_btn_clicked_cb(void *user_data, Evas_Object *obj, void *event_
        evas_object_hide(save_btn);
 }
 
+static int pkg_app_list_cb(pkgmgrinfo_appinfo_h pkg_handle, void* user_data)
+{
+       char* appid = NULL;
+       pkg_data_s* pkg_data = (pkg_data_s*)user_data;
+       int ret = pkgmgrinfo_appinfo_get_appid(pkg_handle, &appid);
+       return_if(ret != PMINFO_R_OK, , -1, "pkgmgrinfo_appinfo_get_appid failed");
+       char* appidd = strdup(appid);
+       return_if(appid == NULL, , -1, "appid strdup failed");
+       pkg_data->applist = g_list_append(pkg_data->applist, appidd);
+       return ret;
+}
+
 static int pkg_list_cb(pkgmgrinfo_pkginfo_h filter_handle, void *user_data)
 {
        char* privilege_name = strdup((char*)user_data);
@@ -314,9 +353,13 @@ static int pkg_list_cb(pkgmgrinfo_pkginfo_h filter_handle, void *user_data)
        pkg_data->privlist = NULL;
        pkg_data->privlist = g_list_append(pkg_data->privlist, privilege_name);
 
+       /* Add app list to package data item */
+       pkg_data->applist = NULL;
        pkgmgrinfo_pkginfo_h pkg_handle;
        ret = pkgmgrinfo_pkginfo_get_pkginfo(pkgid, &pkg_handle);
        return_if(ret != PMINFO_R_OK, , -1, "pkgmgrinfo_pkginfo_get_pkginfo failed");
+       ret = pkgmgrinfo_appinfo_get_list(pkg_handle, PMINFO_ALL_APP, pkg_app_list_cb, pkg_data);
+       return_if(ret != PMINFO_R_OK, pkgmgrinfo_pkginfo_destroy_pkginfo(pkg_handle), -1, "pkgmgrinfo_appinfo_get_list failed");
 
        /* See if the package is global. TBD: If notion for handling of global app is required. */
        pkg_data->is_global = false;
@@ -382,6 +425,11 @@ static int get_uniq_pkg_list_by_privacy(const char* privacy)
                pkg_data_s* temp = (pkg_data_s*)l->data;
                LOGD(" * PACKAGE ID : %s LABEL: %s is global? %d", temp->pkgid, temp->label, temp->is_global);
                GList* ll;
+               LOGD(" * APP ID");
+               for (ll = temp->applist; ll != NULL; ll = ll->next) {
+                       char* temp_appid = (char*)ll->data;
+                       LOGD(" - %s", temp_appid);
+               }
                LOGD(" * PRIVILEGE");
                for (ll = temp->privlist; ll != NULL; ll = ll->next) {
                        char* temp_privname = (char*)ll->data;
@@ -391,7 +439,7 @@ static int get_uniq_pkg_list_by_privacy(const char* privacy)
 
        return ret;
 }
-void create_privacy_package_list_view(app_data_s* ad)
+void create_privacy_package_list_view(struct app_data_s* ad)
 {
        /* Add genlist */
        Evas_Object *genlist = common_genlist_add(ad->nf);