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 bool _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);
164 ad->privacy_id = strdup(privacy_id);
166 r = privacy_info_get_privacy_display_name(privacy_info, &privacy_name);
168 SETTING_TRACE_ERROR("privacy_info_get_privacy_display_name failed : %d", r);
172 r = privacy_info_get_privacy_description(privacy_info, &privacy_desc);
174 SETTING_TRACE_ERROR("privacy_info_get_privacy_description failed : %d", r);
178 r = privacy_info_is_enabled(privacy_info, &enabled);
180 SETTING_TRACE_ERROR("privacy_info_is_enabled failed : %d", r);
184 setting_privacy_privacyinfo_t *app_info = NULL;
185 app_info = (setting_privacy_privacyinfo_t*)malloc(sizeof(setting_privacy_privacyinfo_t));
186 retv_if(app_info == NULL, -1);
187 memset(app_info, 0, sizeof(setting_privacy_privacyinfo_t));
188 app_info->privacy_id = strdup(privacy_id);
189 app_info->privacy_name = strdup(privacy_name);
190 app_info->privacy_desc = strdup(privacy_desc);
191 app_info->enabled = enabled;
193 ad->privacy_service =
194 setting_create_Gendial_field_def(ad->scroller,
195 &(ad->itc_1text_1icon),
196 setting_privacy_service_list_Gendial_mouse_up_cb,
201 app_info->enabled, /* the initial state */
203 setting_privacy_service_list_Gendial_chk_btn_cb);
205 if(ad->privacy_service) {
206 ad->privacy_service->userdata = ad;
208 SETTING_TRACE_ERROR("ad->privacy_service is NULL");
212 ad->privacy_check_list = eina_list_append(ad->privacy_check_list, app_info);
221 * get 3rd party applist from AIL & searching dir/file by the defined rule
223 * if data is NULL --> just get how many items are there
224 * if data is NOT NULL --> draw UI code
226 static void setting_privacy_get_privacy_list(void* data)
229 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
234 r = privacy_manager_foreach_privacy_info(pkg_id ,_privacy_info_cb, ad);
236 SETTING_TRACE_ERROR("privacy_manager_foreach_privacy_info failed. %d", r);
241 /* ***************************************************
245 ****************************************************/
246 static int setting_privacy_service_create(void *cb)
249 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
251 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
254 int tts_value = FALSE;
255 vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &tts_value);\
257 elm_config_access_set(EINA_TRUE);
260 //seperate default from app control
262 service_h service = ad->bundle_data;
263 service_get_extra_data(service, "pkg_id", &pkg_id);
265 //need to pkgname from pkgid(pkgmgr)
266 ad->pkg_id = strdup(pkg_id);
268 SETTING_TRACE("pkgid [%s]", ad->pkg_id);
269 int r = _get_privacy_appinfo_by_pkgid(ad);
271 SETTING_TRACE("_get_privacy_app_pkg_by_pkgid : fail");
274 ad->privacy_check_list = NULL;
277 setting_create_Gendial_itc("1text.1icon.3", &(ad->itc_1text_1icon));
279 Elm_Object_Item *item = NULL;
280 Evas_Object *scroller = NULL;
282 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
285 _("IDS_COM_BODY_BACK"), //_("IDS_COM_BODY_BACK"),
286 _("IDS_COM_SK_OK"), //
287 setting_privacy_service_click_softkey_back_cb, //setting_privacy_service_click_softkey_back_cb,
288 setting_privacy_service_click_softkey_ok_cb,
294 item = elm_genlist_item_append(ad->scroller , &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
295 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
297 setting_create_Gendial_field_def(ad->scroller, &itc_multiline_text, NULL,
298 ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
299 NULL, NULL, 0, KeyStr_PrivacyService_desc, NULL, NULL);
301 item = elm_genlist_item_append(ad->scroller , &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
302 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
305 setting_privacy_get_privacy_list(ad);
308 item = elm_genlist_item_append(ad->scroller , &itc_bottom_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
309 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
312 setting_view_privacy_service.is_create = 1;
313 return SETTING_RETURN_SUCCESS;
316 static int setting_privacy_service_destroy(void *cb)
320 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
321 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
326 setting_privacy_privacyinfo_t *list_data = NULL;
327 if(ad->privacy_check_list)
328 EINA_LIST_FREE(ad->privacy_check_list, list_data);
330 if (ad->view_to_load == &setting_view_privacy_service) {
332 evas_object_del(ad->ly_main);
336 elm_naviframe_item_pop(ad->navi_bar);
338 setting_view_privacy_service.is_create = 0;
340 return SETTING_RETURN_SUCCESS;
343 static int setting_privacy_service_update(void *cb)
347 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
348 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
350 if (ad->ly_main != NULL) {
351 evas_object_show(ad->ly_main);
354 return SETTING_RETURN_SUCCESS;
357 static int setting_privacy_service_cleanup(void *cb)
361 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
363 SettingPrivacyUG *ad = (SettingPrivacyUG *) cb;
364 return setting_privacy_service_destroy(ad);
367 /* ***************************************************
371 ****************************************************/
372 static void setting_privacy_service_click_softkey_back_cb(void *data, Evas_Object *obj,
377 retm_if(data == NULL, "Data parameter is NULL");
378 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
381 if (service_create(&svc))
384 service_add_extra_data(svc, "exit_key", "back_btn");
385 ug_send_result(ad->ug, svc);
386 service_destroy(svc);
388 /* Send destroy request */
389 ug_destroy_me(ad->ug);
393 static void setting_privacy_service_click_softkey_ok_cb(void *data, Evas_Object *obj,
398 retm_if(data == NULL, "Data parameter is NULL");
399 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
402 if (service_create(&svc))
405 service_add_extra_data(svc, "exit_key", "ok_btn");
406 ug_send_result(ad->ug, svc);
407 service_destroy(svc);
409 /* TEMP:Send destroy request */
410 ug_destroy_me(ad->ug);
415 static void setting_privacy_service_list_Gendial_mouse_up_cb(void *data, Evas_Object *obj,
420 retm_if(data == NULL, "Data parameter is NULL");
421 SettingPrivacyUG *ad = (SettingPrivacyUG *) data;
423 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
424 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
425 elm_genlist_item_selected_set(item, 0);
426 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
428 int old_status = elm_check_state_get(list_item->eo_check);
430 list_item->chk_status = !old_status;
431 elm_check_state_set(list_item->eo_check, list_item->chk_status);
434 int r = _set_privacy(list_item, list_item->chk_status);
436 SETTING_TRACE("_set_privacy : faied [%d]", r);
439 static void setting_privacy_service_list_Gendial_chk_btn_cb(void *data, Evas_Object *obj,
444 retm_if(data == NULL, "Data parameter is NULL");
445 SettingPrivacyUG *ad = NULL;
446 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
447 ad = list_item->userdata;
450 list_item->chk_status = elm_check_state_get(list_item->eo_check);
453 int r = _set_privacy(list_item, list_item->chk_status);
455 SETTING_TRACE("_set_privacy : faied [%d]", r);