4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #include <setting-privacy-service.h>
22 #include <package-manager.h>
23 #include <privacy_manager.h>
24 #include <pkgmgr-info.h>
25 //#include <privacy_info.h>
27 static int setting_privacy_service_create(void *cb);
28 static int setting_privacy_service_destroy(void *cb);
29 static int setting_privacy_service_update(void *cb);
30 static int setting_privacy_service_cleanup(void *cb);
32 setting_view setting_view_privacy_service = {
33 .create = setting_privacy_service_create,
34 .destroy = setting_privacy_service_destroy,
35 .update = setting_privacy_service_update,
36 .cleanup = setting_privacy_service_cleanup,
39 void _init_privacy_list(void *data)
42 SettingPrivacyUG *ad = (SettingPrivacyUG *)data;
44 setting_privacy_privacyinfo_t *list_data = NULL;
45 if(ad->privacy_check_list)
46 EINA_LIST_FREE(ad->privacy_check_list, list_data);
48 SETTING_TRACE_DEBUG("ad->privacy_check_list %d items", eina_list_count(ad->privacy_check_list));
51 static int _get_privacy_appinfo_by_pkgid(void* data)
54 SettingPrivacyUG *ad = (SettingPrivacyUG *)data;
57 pkgmgr_pkginfo_h pkg_handle = NULL;
58 char *pkg_name = NULL;
59 char *icon_path = NULL;
60 char *main_appid = NULL;
61 char *pkg_label = NULL;
62 pkgmgrinfo_appinfo_h appinfo_h = NULL;
65 SETTING_TRACE("pkgid [%s]", ad->pkg_id);
66 ret = pkgmgr_pkginfo_get_pkginfo(ad->pkg_id, &pkg_handle);
69 SETTING_TRACE_ERROR("pkgmgr_pkginfo_get_pkginfo failed. %d", ret);
74 pkgmgrinfo_pkginfo_h handle = (pkgmgrinfo_pkginfo_h)pkg_handle;
75 ret = pkgmgrinfo_pkginfo_get_pkgid(handle, &pkg_name);
77 SETTING_TRACE_ERROR("pkgmgrinfo_pkginfo_get_pkgid is failed %d", ret);
80 SETTING_TRACE_DEBUG("pkg_name: %s", pkg_name);
83 ret = pkgmgrinfo_pkginfo_get_mainappid(handle, &main_appid);
86 SETTING_TRACE_ERROR("pkgmgrinfo_pkginfo_get_mainappid failed. %d", ret);
89 SETTING_TRACE_DEBUG("main_appid: %s", main_appid);
92 ret = pkgmgrinfo_appinfo_get_appinfo(main_appid, &appinfo_h);
94 SETTING_TRACE_ERROR("pkgmgrinfo_appinfo_get_appinfo is failed %d", ret);
99 ret = pkgmgrinfo_appinfo_get_label(appinfo_h, &pkg_label);
101 SETTING_TRACE_ERROR("pkgmgrinfo_appinfo_get_label is failed %d", ret);
105 ad->pkg_label = (char*)strdup(pkg_label);
106 SETTING_TRACE_DEBUG("pkg_label: %s", pkg_label);
110 pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
115 static void _privacy_info_cb(const privacy_info_h* privacy_info, void* data)
118 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
121 char *privacy_id = NULL;
122 char *privacy_name = NULL;
123 char *privacy_desc = NULL;
124 bool enabled = false;
125 r = privacy_info_get_privacy_id(privacy_info, &privacy_id);
127 SETTING_TRACE_ERROR("privacy_info_get_privacy_id failed : %d", r);
129 ad->privacy_id = strdup(privacy_id);
130 SETTING_TRACE("privacy_id : [%s]", privacy_id);
132 r = privacy_info_get_privacy_display_name(privacy_info, &privacy_name);
134 SETTING_TRACE_ERROR("privacy_info_get_privacy_display_name failed : %d", r);
136 SETTING_TRACE("privacy_name : [%s]", privacy_name);
138 r = privacy_info_get_privacy_description(privacy_info, &privacy_desc);
140 SETTING_TRACE_ERROR("privacy_info_get_privacy_description failed : %d", r);
142 SETTING_TRACE("privacy_desc : [%s]", privacy_desc);
144 r = privacy_info_is_enabled(privacy_info, &enabled);
146 SETTING_TRACE_ERROR("privacy_info_is_enabled failed : %d", r);
148 SETTING_TRACE("enabled : [%d]", enabled);
150 setting_privacy_privacyinfo_t *app_info = NULL;
151 app_info = (setting_privacy_privacyinfo_t*)malloc(sizeof(setting_privacy_privacyinfo_t));
152 retv_if(app_info == NULL, -1);
153 memset(app_info, 0, sizeof(setting_privacy_privacyinfo_t));
154 app_info->privacy_id = strdup(privacy_id);
155 app_info->privacy_name = strdup(privacy_name);
156 app_info->privacy_desc = strdup(privacy_desc);
157 app_info->enabled = enabled;
159 ad->privacy_service =
160 setting_create_Gendial_field_def(ad->scroller,
161 &(ad->itc_1text_1icon),
162 setting_privacy_service_list_Gendial_mouse_up_cb,
167 app_info->enabled, /* the initial state */
169 setting_privacy_service_list_Gendial_chk_btn_cb);
171 if(ad->privacy_service) {
172 ad->privacy_service->userdata = ad;
174 SETTING_TRACE_ERROR("ad->privacy_service is NULL");
175 return SETTING_RETURN_FAIL;
178 //ad->privacy_check_list = eina_list_append(ad->privacy_check_list, app_info);
181 //FREE(privacy_name);
182 //FREE(privacy_desc);
186 * get 3rd party applist from AIL & searching dir/file by the defined rule
188 * if data is NULL --> just get how many items are there
189 * if data is NOT NULL --> draw UI code
191 static void setting_privacy_get_privacy_list(void* data)
194 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
199 r = privacy_manager_foreach_privacy_info(pkg_id ,_privacy_info_cb, ad);
201 SETTING_TRACE_ERROR("privacy_manager_foreach_privacy_info failed. %d", r);
206 /* ***************************************************
210 ****************************************************/
211 static int setting_privacy_service_create(void *cb)
214 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
216 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
218 //seperate default from app control
220 service_h service = ad->bundle_data;
221 service_get_extra_data(service, "pkg_id", &pkg_id);
223 //need to pkgname from pkgid(pkgmgr)
224 ad->pkg_id = strdup(pkg_id);
225 SETTING_TRACE("pkgid [%s]", ad->pkg_id);
226 int r = _get_privacy_appinfo_by_pkgid(ad);
228 SETTING_TRACE("_get_privacy_app_pkg_by_pkgid : fail");
231 ad->privacy_check_list = NULL;
234 setting_create_Gendial_itc("1text.1icon.3", &(ad->itc_1text_1icon));
236 Elm_Object_Item *item = NULL;
237 Evas_Object *scroller = NULL;
239 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
242 _("IDS_COM_BODY_BACK"),
243 NULL, //_("IDS_COM_SK_OK")
244 setting_privacy_service_click_softkey_back_cb,
251 item = elm_genlist_item_append(ad->scroller , &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
252 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
254 setting_create_Gendial_field_def(ad->scroller, &itc_multiline_text, NULL,
255 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
256 NULL, NULL, 0, KeyStr_PrivacyService_desc, NULL, NULL);
258 item = elm_genlist_item_append(ad->scroller , &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
259 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
262 setting_privacy_get_privacy_list(ad);
265 item = elm_genlist_item_append(ad->scroller , &itc_bottom_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
266 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
269 setting_view_privacy_service.is_create = 1;
270 return SETTING_RETURN_SUCCESS;
273 static int setting_privacy_service_destroy(void *cb)
277 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
278 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
280 if (ad->view_to_load == &setting_view_privacy_service) {
282 evas_object_del(ad->ly_main);
286 elm_naviframe_item_pop(ad->navi_bar);
288 setting_view_privacy_service.is_create = 0;
290 return SETTING_RETURN_SUCCESS;
293 static int setting_privacy_service_update(void *cb)
297 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
298 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
300 if (ad->ly_main != NULL) {
301 evas_object_show(ad->ly_main);
304 return SETTING_RETURN_SUCCESS;
307 static int setting_privacy_service_cleanup(void *cb)
311 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
313 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
314 return setting_privacy_service_destroy(ad);
317 /* ***************************************************
321 ****************************************************/
322 static void setting_privacy_service_click_softkey_back_cb(void *data, Evas_Object *obj,
327 retm_if(data == NULL, "Data parameter is NULL");
328 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
330 /* Send destroy request */
331 ug_destroy_me(ad->ug);
335 static void setting_privacy_service_click_softkey_ok_cb(void *data, Evas_Object *obj,
340 retm_if(data == NULL, "Data parameter is NULL");
341 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
346 static void setting_privacy_service_list_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
351 retm_if(data == NULL, "Data parameter is NULL");
352 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
354 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
355 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
356 elm_genlist_item_selected_set(item, 0);
357 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
359 int old_status = elm_check_state_get(list_item->eo_check);
361 list_item->chk_status = !old_status;
362 elm_check_state_set(list_item->eo_check, list_item->chk_status);
365 SETTING_TRACE("ad->pkg_id : %s, ad->privacy_id:%s, list_item->chk_status:%d", ad->pkg_id, ad->privacy_id, list_item->chk_status);
366 int r = privacy_manager_set_package_privacy(ad->pkg_id, ad->privacy_id, list_item->chk_status);
368 SETTING_TRACE("privacy_manager_set_package_privacy : faied [%d]", r);
371 static void setting_privacy_service_list_Gendial_chk_btn_cb(void *data, Evas_Object *obj,
376 //retm_if(data == NULL, "Data parameter is NULL");
377 //SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
378 SettingPrivacyUG *ad = NULL;
380 retm_if(data == NULL, "Data parameter is NULL");
381 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
382 ad = list_item->userdata;
385 list_item->chk_status = elm_check_state_get(list_item->eo_check);
388 SETTING_TRACE("ad->pkg_id : %s, ad->privacy_id:%s, list_item->chk_status:%d", ad->pkg_id, ad->privacy_id, list_item->chk_status);
389 int r = privacy_manager_set_package_privacy(ad->pkg_id, ad->privacy_id, list_item->chk_status);
391 SETTING_TRACE("privacy_manager_set_package_privacy : faied [%d]", r);