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 _set_privacy(void* data, int chk_status)
53 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
54 SettingPrivacyUG *ad = NULL;
55 ad = list_item->userdata;
58 setting_privacy_privacyinfo_t* node = NULL;
59 if (ad->privacy_check_list != NULL) {
62 EINA_LIST_FOREACH(ad->privacy_check_list, l, node) {
63 if (node->privacy_id != NULL)
65 if ( strcmp(list_item->keyStr, node->privacy_name) == 0)
67 node->enabled = chk_status;
68 SETTING_TRACE("SELECTED ITEM, list_item->keyStr[%s] : privacy_id[%s], privacy_name[%s] -- (state:%d) ",list_item->keyStr , node->privacy_id, node->privacy_name,node->enabled);
71 SETTING_TRACE("ad->pkg_id : %s, node->privacy_id:%s, list_item->chk_status:%d", ad->pkg_id, node->privacy_id, list_item->chk_status);
72 r = privacy_manager_set_package_privacy(ad->pkg_id, node->privacy_id, list_item->chk_status);
74 SETTING_TRACE("privacy_manager_set_package_privacy : faied [%d]", r);
77 SETTING_TRACE(" SELECTED ITEM is NULL - excpetion case");
85 static int _get_privacy_appinfo_by_pkgid(void* data)
88 SettingPrivacyUG *ad = (SettingPrivacyUG *)data;
91 pkgmgr_pkginfo_h pkg_handle = NULL;
92 char *pkg_name = NULL;
93 char *icon_path = NULL;
94 char *main_appid = NULL;
95 char *pkg_label = NULL;
96 pkgmgrinfo_appinfo_h appinfo_h = NULL;
99 SETTING_TRACE("pkgid [%s]", ad->pkg_id);
100 ret = pkgmgr_pkginfo_get_pkginfo(ad->pkg_id, &pkg_handle);
103 SETTING_TRACE_ERROR("pkgmgr_pkginfo_get_pkginfo failed. %d", ret);
108 pkgmgrinfo_pkginfo_h handle = (pkgmgrinfo_pkginfo_h)pkg_handle;
109 ret = pkgmgrinfo_pkginfo_get_pkgid(handle, &pkg_name);
111 SETTING_TRACE_ERROR("pkgmgrinfo_pkginfo_get_pkgid is failed %d", ret);
114 SETTING_TRACE_DEBUG("pkg_name: %s", pkg_name);
117 ret = pkgmgrinfo_pkginfo_get_mainappid(handle, &main_appid);
120 SETTING_TRACE_ERROR("pkgmgrinfo_pkginfo_get_mainappid failed. %d", ret);
123 SETTING_TRACE_DEBUG("main_appid: %s", main_appid);
126 ret = pkgmgrinfo_appinfo_get_appinfo(main_appid, &appinfo_h);
128 SETTING_TRACE_ERROR("pkgmgrinfo_appinfo_get_appinfo is failed %d", ret);
133 ret = pkgmgrinfo_appinfo_get_label(appinfo_h, &pkg_label);
135 SETTING_TRACE_ERROR("pkgmgrinfo_appinfo_get_label is failed %d", ret);
139 ad->pkg_label = (char*)strdup(pkg_label);
140 SETTING_TRACE_DEBUG("pkg_label: %s", pkg_label);
144 pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
149 static void _privacy_info_cb(const privacy_info_h* privacy_info, void* data)
152 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
155 char *privacy_id = NULL;
156 char *privacy_name = NULL;
157 char *privacy_desc = NULL;
158 bool enabled = false;
159 r = privacy_info_get_privacy_id(privacy_info, &privacy_id);
161 SETTING_TRACE_ERROR("privacy_info_get_privacy_id failed : %d", r);
163 ad->privacy_id = strdup(privacy_id);
165 r = privacy_info_get_privacy_display_name(privacy_info, &privacy_name);
167 SETTING_TRACE_ERROR("privacy_info_get_privacy_display_name failed : %d", r);
170 r = privacy_info_get_privacy_description(privacy_info, &privacy_desc);
172 SETTING_TRACE_ERROR("privacy_info_get_privacy_description failed : %d", r);
175 r = privacy_info_is_enabled(privacy_info, &enabled);
177 SETTING_TRACE_ERROR("privacy_info_is_enabled failed : %d", r);
180 setting_privacy_privacyinfo_t *app_info = NULL;
181 app_info = (setting_privacy_privacyinfo_t*)malloc(sizeof(setting_privacy_privacyinfo_t));
182 retv_if(app_info == NULL, -1);
183 memset(app_info, 0, sizeof(setting_privacy_privacyinfo_t));
184 app_info->privacy_id = strdup(privacy_id);
185 app_info->privacy_name = strdup(privacy_name);
186 app_info->privacy_desc = strdup(privacy_desc);
187 app_info->enabled = enabled;
189 ad->privacy_service =
190 setting_create_Gendial_field_def(ad->scroller,
191 &(ad->itc_1text_1icon),
192 setting_privacy_service_list_Gendial_mouse_up_cb,
197 app_info->enabled, /* the initial state */
199 setting_privacy_service_list_Gendial_chk_btn_cb);
201 if(ad->privacy_service) {
202 ad->privacy_service->userdata = ad;
204 SETTING_TRACE_ERROR("ad->privacy_service is NULL");
205 return SETTING_RETURN_FAIL;
208 ad->privacy_check_list = eina_list_append(ad->privacy_check_list, app_info);
211 //FREE(privacy_name);
212 //FREE(privacy_desc);
216 * get 3rd party applist from AIL & searching dir/file by the defined rule
218 * if data is NULL --> just get how many items are there
219 * if data is NOT NULL --> draw UI code
221 static void setting_privacy_get_privacy_list(void* data)
224 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
229 r = privacy_manager_foreach_privacy_info(pkg_id ,_privacy_info_cb, ad);
231 SETTING_TRACE_ERROR("privacy_manager_foreach_privacy_info failed. %d", r);
236 /* ***************************************************
240 ****************************************************/
241 static int setting_privacy_service_create(void *cb)
244 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
246 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
248 //seperate default from app control
250 service_h service = ad->bundle_data;
251 service_get_extra_data(service, "pkg_id", &pkg_id);
253 //need to pkgname from pkgid(pkgmgr)
254 ad->pkg_id = strdup(pkg_id);
256 SETTING_TRACE("pkgid [%s]", ad->pkg_id);
257 int r = _get_privacy_appinfo_by_pkgid(ad);
259 SETTING_TRACE("_get_privacy_app_pkg_by_pkgid : fail");
262 ad->privacy_check_list = NULL;
265 setting_create_Gendial_itc("1text.1icon.3", &(ad->itc_1text_1icon));
267 Elm_Object_Item *item = NULL;
268 Evas_Object *scroller = NULL;
270 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
273 _("IDS_COM_BODY_BACK"), //_("IDS_COM_BODY_BACK"),
274 _("IDS_COM_SK_OK"), //
275 setting_privacy_service_click_softkey_back_cb, //setting_privacy_service_click_softkey_back_cb,
276 setting_privacy_service_click_softkey_ok_cb,
282 item = elm_genlist_item_append(ad->scroller , &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
283 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
285 setting_create_Gendial_field_def(ad->scroller, &itc_multiline_text, NULL,
286 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
287 NULL, NULL, 0, KeyStr_PrivacyService_desc, NULL, NULL);
289 item = elm_genlist_item_append(ad->scroller , &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
290 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
293 setting_privacy_get_privacy_list(ad);
296 item = elm_genlist_item_append(ad->scroller , &itc_bottom_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
297 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
300 setting_view_privacy_service.is_create = 1;
301 return SETTING_RETURN_SUCCESS;
304 static int setting_privacy_service_destroy(void *cb)
308 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
309 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
314 setting_privacy_privacyinfo_t *list_data = NULL;
315 if(ad->privacy_check_list)
316 EINA_LIST_FREE(ad->privacy_check_list, list_data);
318 if (ad->view_to_load == &setting_view_privacy_service) {
320 evas_object_del(ad->ly_main);
324 elm_naviframe_item_pop(ad->navi_bar);
326 setting_view_privacy_service.is_create = 0;
328 return SETTING_RETURN_SUCCESS;
331 static int setting_privacy_service_update(void *cb)
335 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
336 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
338 if (ad->ly_main != NULL) {
339 evas_object_show(ad->ly_main);
342 return SETTING_RETURN_SUCCESS;
345 static int setting_privacy_service_cleanup(void *cb)
349 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
351 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
352 return setting_privacy_service_destroy(ad);
355 /* ***************************************************
359 ****************************************************/
360 static void setting_privacy_service_click_softkey_back_cb(void *data, Evas_Object *obj,
365 retm_if(data == NULL, "Data parameter is NULL");
366 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
369 if (service_create(&svc))
372 service_add_extra_data(svc, "exit_key", "back_btn");
373 ug_send_result(ad->ug, svc);
374 service_destroy(svc);
376 /* Send destroy request */
377 ug_destroy_me(ad->ug);
381 static void setting_privacy_service_click_softkey_ok_cb(void *data, Evas_Object *obj,
386 retm_if(data == NULL, "Data parameter is NULL");
387 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
390 if (service_create(&svc))
393 service_add_extra_data(svc, "exit_key", "ok_btn");
394 ug_send_result(ad->ug, svc);
395 service_destroy(svc);
397 /* TEMP:Send destroy request */
398 ug_destroy_me(ad->ug);
403 static void setting_privacy_service_list_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
408 retm_if(data == NULL, "Data parameter is NULL");
409 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
411 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
412 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
413 elm_genlist_item_selected_set(item, 0);
414 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
416 int old_status = elm_check_state_get(list_item->eo_check);
418 list_item->chk_status = !old_status;
419 elm_check_state_set(list_item->eo_check, list_item->chk_status);
422 int r = _set_privacy(list_item, list_item->chk_status);
424 SETTING_TRACE("_set_privacy : faied [%d]", r);
427 static void setting_privacy_service_list_Gendial_chk_btn_cb(void *data, Evas_Object *obj,
432 retm_if(data == NULL, "Data parameter is NULL");
433 SettingPrivacyUG *ad = NULL;
434 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
435 ad = list_item->userdata;
438 list_item->chk_status = elm_check_state_get(list_item->eo_check);
441 int r = _set_privacy(list_item, list_item->chk_status);
443 SETTING_TRACE("_set_privacy : faied [%d]", r);