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.
22 #include <setting-security.h>
23 #include <setting-cfg.h>
25 #include <efl_extension.h>
28 #include <app_manager.h>
29 #if SUPPORT_ENCRYPTION
33 #include <bundle_internal.h>
36 #define Max_Passwd_View_Type_Len 64
38 #define UG_MODULE_API __attribute__ ((visibility("default")))
48 void setting_security_ug_popup_resp_cb(void *data, Evas_Object *obj, void *event_info)
50 retm_if(data == NULL, "Data parameter is NULL");
52 SettingSecurityUG *ad = (SettingSecurityUG *)data;
54 evas_object_del(ad->save_popup);
55 ad->save_popup = NULL;
57 ug_destroy_me(ad->ug);
60 int pwd_handler_do_nothing(SettingSecurityUG *data, void *arg)
63 /*SettingSecurityUG *ad = (SettingSecurityUG *)data; */
68 int pwd_handler_sec_pw_passwd(SettingSecurityUG *data, void *arg)
71 #if SUPPORT_ENCRYPTION
72 SettingSecurityUG *ad = (SettingSecurityUG *)data;
74 if (setting_view_security_encryption.is_create == TRUE && ad->pw_type == SETTING_SEC_PW_ENCRYPTION) {
75 if (setting_view_get_topview(&setting_view_security_confirm_encryption) != &setting_view_security_encryption) {
76 SETTING_TRACE("view stack is missed. initialize again.");
77 setting_view_node_table_intialize();
78 /*SETTING_TRACE("viewtype 0x%x", ad->viewtype); */
79 if (ad->viewtype == SETTING_SEC_VIEWTYPE_ENCRYPTION) {
80 setting_view_node_table_register(&setting_view_security_encryption, NULL);
81 setting_view_node_table_register(&setting_view_security_confirm_encryption, &setting_view_security_encryption);
83 setting_view_node_table_register(&setting_view_security_main, NULL);
84 setting_view_node_table_register(&setting_view_security_sim_settings, &setting_view_security_main);
85 setting_view_node_table_register(&setting_view_security_update, &setting_view_security_main);
86 setting_view_node_table_register(&setting_view_security_encryption, &setting_view_security_main);
87 setting_view_node_table_register(&setting_view_security_confirm_encryption, &setting_view_security_encryption);
90 setting_view_change(&setting_view_security_encryption, &setting_view_security_confirm_encryption, ad);
95 if (vconf_set_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, SETTING_SCREEN_LOCK_TYPE_PASSWORD) == 0) {
98 SETTING_TRACE_ERROR("setting vconf value failed : screen_lock_type");
105 __face_voice_done_cb(void *data, Evas_Object *obj, void *event_info)
108 retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
109 SettingSecurityUG *ad = (SettingSecurityUG *) data;
112 while (elm_naviframe_top_item_get(ad->navi_bar) != ad->screen_lock_main_item) {
113 elm_naviframe_item_pop(ad->navi_bar);
114 /*SETTING_TRACE("i:%d",i); */
117 if (elm_naviframe_top_item_get(ad->navi_bar) == elm_naviframe_bottom_item_get(ad->navi_bar)) {
123 int pwd_handler_sec_pw_simple_passwd(SettingSecurityUG *data, void *arg)
126 SettingSecurityUG *ad = (SettingSecurityUG *)data;
128 SETTING_TRACE("ad->selected_lock_type:%s", ad->selected_lock_type);
129 /*'face and voice ' and 'simple password' share the same PASSWD_TYPE and callback function */
130 int lock_type = SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD;
131 if (!safeStrCmp(ad->selected_lock_type, Keystr_FaceAndVoice)) {
132 lock_type = SETTING_SCREEN_LOCK_TYPE_FACE_AND_VOICE;
133 setting_create_guild_layout(ad->navi_bar, Setup_Face_Unlock_Str,
134 _("IDS_SA_BUTTON_DONE_ABB"), NULL, NULL,
135 __face_voice_done_cb, NULL, NULL,
136 _(Finish_Setup_Face),
137 NULL, NULL, NULL, NULL, ad);
140 if (vconf_set_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, lock_type) == 0) {
141 /* Success to save */
143 SETTING_TRACE_ERROR("setting vconf value failed : screen_lock_type");
148 int pwd_handler_sec_pw_sim_lock_on(SettingSecurityUG *data, void *arg)
151 SettingSecurityUG *ad = (SettingSecurityUG *)data;
152 if (tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_PS, setting_security_sim_get_facility_cb, ad) != TAPI_API_SUCCESS) {
153 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
159 int pwd_handler_sec_pw_sim_lock_off(SettingSecurityUG *data, void *arg)
162 SettingSecurityUG *ad = (SettingSecurityUG *)data;
163 if (tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_PS, setting_security_sim_get_facility_cb, ad) != TAPI_API_SUCCESS) {
164 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
170 int pwd_handler_sec_pw_pin_lock_on(SettingSecurityUG *data, void *arg)
174 SettingSecurityUG *ad = (SettingSecurityUG *)data;
176 if (tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_SC, setting_security_pin_get_facility_cb, ad) != TAPI_API_SUCCESS) {
177 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
183 int pwd_handler_sec_pw_pin_lock_off(SettingSecurityUG *data, void *arg)
186 SettingSecurityUG *ad = (SettingSecurityUG *)data;
187 if (tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_SC, setting_security_pin_get_facility_cb, ad) != TAPI_API_SUCCESS) {
188 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
194 int pwd_handler_sec_pw_sim_lock_disabled(SettingSecurityUG *data, void *arg)
197 SettingSecurityUG *ad = (SettingSecurityUG *)data;
198 /* [in] Evas_Object *checkbtn */
200 setting_disable_genlist_item(ad->data_sim_lk->item);
206 int pwd_handler_sec_pw_change_pin1(SettingSecurityUG *data, void *arg)
209 SettingSecurityUG *ad = (SettingSecurityUG *)data;
211 setting_create_popup(ad, ad->ly_main, NULL, "IDS_ST_POP_PIN_CHANGED",
213 POPUP_INTERVAL, FALSE, FALSE, 0);
218 int pwd_handler_sec_pw_fdn_mode_on(SettingSecurityUG *data, void *arg)
221 SettingSecurityUG *ad = (SettingSecurityUG *)data;
222 if (tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_FD, setting_security_sim_get_facility_cb, ad) != TAPI_API_SUCCESS) {
223 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
229 int pwd_handler_sec_pw_fdn_mode_off(SettingSecurityUG *data, void *arg)
232 SettingSecurityUG *ad = (SettingSecurityUG *)data;
233 if (tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_FD, setting_security_sim_get_facility_cb, ad) != TAPI_API_SUCCESS) {
234 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
240 int pwd_handler_sec_pw_change_pin2(SettingSecurityUG *data, void *arg)
246 static void setting_security_pin1_blocked_resp_cb(void *data, Evas_Object *obj, void *event_info)
250 SettingSecurityUG *ad = data;
254 bundle *b = bundle_create();
256 bundle_add(b, "after_bootup", "1");
257 ret = aul_launch_app("org.tizen.pwlock", b);
258 SETTING_TRACE("aul_launch_app() returns %d", ret);
263 evas_object_del(ad->sim_popup);
264 ad->sim_popup = NULL;
268 int pwd_handler_sec_pw_pin1_blocked(SettingSecurityUG *data, void *arg)
271 SettingSecurityUG *ad = (SettingSecurityUG *)data;
274 evas_object_del(ad->sim_popup);
275 ad->sim_popup = NULL;
278 /* To do : draw popup, */
279 /* content - PIN Blocked\n The PIN is now blocked. Enter your PUK code to continue. */
281 char popup_text[2048] = {0,};
282 snprintf(popup_text, 2048, "%s", _(PIN_BLOCKED_ENTER_PUK_DESC));
284 Ecore_X_Window xwin = 0;
285 Ecore_X_Display *disp = NULL;
288 disp = ecore_x_display_get();
289 xwin = elm_win_xwindow_get(ad->win_get);
291 ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NOTIFICATION);
292 utilx_set_system_notification_level(disp, xwin, UTILX_NOTIFICATION_LEVEL_LOW);
294 ret = eext_win_keygrab_set(xwin, "XF86Back");
296 SETTING_TRACE("eext_win_keygrab_set() failed.");
297 ret = eext_win_keygrab_set(xwin, "XF86Home");
299 SETTING_TRACE("eext_win_keygrab_set() failed.");
300 ret = eext_win_keygrab_set(xwin, "XF86AudioRaiseVolume");
302 SETTING_TRACE("eext_win_keygrab_set() failed.");
303 ret = eext_win_keygrab_set(xwin, "XF86AudioLowerVolume");
305 SETTING_TRACE("eext_win_keygrab_set() failed.");
308 val[0] = 0; /* always enable F */
309 val[1] = 0; /* quickpanel enable F */
310 val[2] = 0; /* apptray enable F */
311 /* set quickpanel disable */
312 Ecore_X_Atom ATOM_PANEL_SCROLLABLE_STATE = 0;
313 ATOM_PANEL_SCROLLABLE_STATE = ecore_x_atom_get("_E_MOVE_PANEL_SCROLLABLE_STATE");
314 ecore_x_window_prop_card32_set(xwin, ATOM_PANEL_SCROLLABLE_STATE, val, 3);
316 ad->sim_popup = setting_create_popup(ad, ad->win_get, NULL,
318 setting_security_pin1_blocked_resp_cb,
320 1, "IDS_ST_BUTTON_OK");
321 eext_object_event_callback_del(ad->sim_popup, EEXT_CALLBACK_BACK, setting_popup_del_cb);
327 int pwd_handler_sec_pw_pin2_blocked(SettingSecurityUG *data, void *arg)
331 SettingSecurityUG *ad = (SettingSecurityUG *)data;
333 if (tel_get_sim_facility(ad->handle, TAPI_SIM_LOCK_FD, setting_security_sim_get_facility_cb, ad) != TAPI_API_SUCCESS) {
334 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
339 evas_object_del(ad->sim_popup);
340 ad->sim_popup = NULL;
342 char popup_text[2048] = {0,};
343 snprintf(popup_text, 2048, "%s", _("IDS_ST_POP_PIN2_BLOCKED"));
345 setting_create_popup(ad, ad->win_get, NULL,
350 ad->pin2_blocked_flag = TRUE;
351 setting_view_update(&setting_view_security_sim_settings, ad);
356 int pwd_handler_sec_pw_pin2_unblocked(SettingSecurityUG *data, void *arg)
360 SettingSecurityUG *ad = (SettingSecurityUG *)data;
361 ad->pin2_blocked_flag = FALSE;
362 setting_view_update(&setting_view_security_sim_settings, ad);
367 int pwd_handler_sec_pw_puk1_blocked(SettingSecurityUG *data, void *arg)
370 SettingSecurityUG *ad = (SettingSecurityUG *)data;
371 if (setting_view_security_sim_settings.is_create == TRUE) {
372 setting_view_change(&setting_view_security_sim_settings, &setting_view_security_main, ad);
373 } else if (setting_view_security_main.is_create == TRUE) {
374 setting_view_update(&setting_view_security_main, ad);
380 static struct _security_item security_table[] = {
381 { SETTING_SEC_PW_PASSWORD, "SETTING_PW_TYPE_PASSWORD", pwd_handler_sec_pw_passwd },
382 { SETTING_SEC_PW_SIMPLE_PASSWD, "SETTING_PW_TYPE_SIMPLE_PASSWORD", pwd_handler_sec_pw_simple_passwd },
383 { SETTING_SEC_PW_ENTER_LOCK_TYPE, "SETTING_PW_TYPE_ENTER_LOCK_TYPE", pwd_handler_do_nothing},
384 { SETTING_SEC_PW_ENCRYPTION, "SETTING_PW_TYPE_ENCRYPTION", pwd_handler_sec_pw_passwd},
385 { SETTING_SEC_PW_SIM_LOCK_ON, "SETTING_PW_TYPE_SIM_LOCK_ON", pwd_handler_sec_pw_sim_lock_on },
386 { SETTING_SEC_PW_SIM_LOCK_OFF, "SETTING_PW_TYPE_SIM_LOCK_OFF", pwd_handler_sec_pw_sim_lock_off },
387 { SETTING_SEC_PW_SIM_LOCK_DISABLED, "SETTING_PW_TYPE_SIM_LOCK_DISABLE", pwd_handler_sec_pw_sim_lock_disabled},
388 { SETTING_SEC_PW_PIN_LOCK_ON, "SETTING_PW_TYPE_PIN_LOCK_ON", pwd_handler_sec_pw_pin_lock_on },
389 { SETTING_SEC_PW_PIN_LOCK_OFF, "SETTING_PW_TYPE_PIN_LOCK_OFF", pwd_handler_sec_pw_pin_lock_off },
390 { SETTING_SEC_PW_CHANGE_PIN1, "SETTING_PW_TYPE_CHANGE_PIN", pwd_handler_sec_pw_change_pin1},
392 { SETTING_SEC_PW_FDN_MODE_ON, "SETTING_PW_TYPE_FDN_MODE_ON", pwd_handler_sec_pw_fdn_mode_on},
393 { SETTING_SEC_PW_FDN_MODE_OFF, "SETTING_PW_TYPE_FDN_MODE_OFF", pwd_handler_sec_pw_fdn_mode_off},
395 { SETTING_SEC_PW_CHANGE_PIN2, "SETTING_PW_TYPE_CHANGE_PIN2", pwd_handler_sec_pw_change_pin2},
396 { SETTING_SEC_PW_PIN1_BLOCKED, "SETTING_PW_TYPE_PIN_BLOCKED", pwd_handler_sec_pw_pin1_blocked},
397 { SETTING_SEC_PW_PIN2_BLOCKED, "SETTING_PW_TYPE_PIN2_BLOCKED", pwd_handler_sec_pw_pin2_blocked},
398 { SETTING_SEC_PW_PIN1_UNBLOCKED, "SETTING_PW_TYPE_PIN1_UNBLOCKED", pwd_handler_sec_pw_pin_lock_on},
399 { SETTING_SEC_PW_PIN2_UNBLOCKED, "SETTING_PW_TYPE_PIN2_UNBLOCKED", pwd_handler_sec_pw_pin2_unblocked},
400 { SETTING_SEC_PW_PUK1_BLOCKED, "SETTING_PW_TYPE_PUK1_BLOCKED", pwd_handler_sec_pw_puk1_blocked},
401 { SETTING_SEC_PW_PUK2_BLOCKED, "SETTING_PW_TYPE_PUK2_BLOCKED", pwd_handler_do_nothing},
402 /*------------------------------------------------------------------------------------------------------------*/
403 { SETTING_SEC_PW_MAX, NULL, pwd_handler_do_nothing}
406 static void setting_security_ug_cb_resize(void *data, Evas *e,
407 Evas_Object *obj, void *event_info)
409 ret_if(data == NULL);
411 SettingSecurityUG *ad = (SettingSecurityUG *) data; /* ad is point to data */
412 if (ad->viewtype == SETTING_SEC_VIEWTYPE_MAIN)
413 setting_view_update(&setting_view_security_main, ad);
416 setting_view *__get_security_view_to_load(void *data, app_control_h service)
419 SettingSecurityUG *ad = (SettingSecurityUG *)data;
421 char *viewtype = NULL;
423 app_control_get_extra_data(service, "viewtype", &viewtype);
427 if (!safeStrCmp(viewtype, "encryption"))
428 ad->viewtype = SETTING_SEC_VIEWTYPE_ENCRYPTION;
429 else if (!safeStrCmp(viewtype, "update"))
430 ad->viewtype = SETTING_SEC_VIEWTYPE_UPDATE;
432 ad->viewtype = SETTING_SEC_VIEWTYPE_MAIN;
434 ad->viewtype = SETTING_SEC_VIEWTYPE_MAIN;
438 if (ad->viewtype == SETTING_SEC_VIEWTYPE_MAIN) {
439 setting_view_node_table_register(&setting_view_security_main, NULL);
440 setting_view_node_table_register(&setting_view_security_sim_settings, &setting_view_security_main);
441 setting_view_node_table_register(&setting_view_security_update, &setting_view_security_main);
442 #if SUPPORT_ENCRYPTION
443 setting_view_node_table_register(&setting_view_security_encryption, &setting_view_security_main);
444 setting_view_node_table_register(&setting_view_security_confirm_encryption, &setting_view_security_encryption);
446 return &setting_view_security_main;
447 } else if (ad->viewtype == SETTING_SEC_VIEWTYPE_UPDATE) {
448 setting_view_node_table_register(&setting_view_security_update, NULL);
449 return &setting_view_security_update;
451 #if SUPPORT_ENCRYPTION
452 else if (ad->viewtype == SETTING_SEC_VIEWTYPE_ENCRYPTION) {
453 setting_view_node_table_register(&setting_view_security_encryption, NULL);
454 setting_view_node_table_register(&setting_view_security_confirm_encryption, &setting_view_security_encryption);
455 /*setting_view_node_table_register(&setting_view_security_enc_processing, &setting_view_security_confirm_encryption); */
456 return &setting_view_security_encryption;
460 /* unknown viewtype */
465 static void *setting_security_ug_on_create(ui_gadget_h ug,
466 enum ug_mode mode, app_control_h service,
469 setting_retvm_if((!priv), NULL, "!priv");
471 SettingSecurityUG *securityUG = priv;
474 securityUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
475 securityUG->win_get = (Evas_Object *) ug_get_window();
476 evas_object_show(securityUG->win_main_layout);
477 securityUG->evas = evas_object_evas_get(securityUG->win_main_layout);
479 setting_retvm_if(securityUG->win_main_layout == NULL, NULL,
480 "[Setting >> About] cannot get main window ");
482 /*setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR); */
483 bindtextdomain(SETTING_PACKAGE, SETTING_LOCALEDIR);
485 /* register view node table */
486 setting_view_node_table_intialize();
488 setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE, &(securityUG->itc_1text));
489 setting_create_Gendial_itc(SETTING_GENLIST_ICON_1LINE_STYLE, &(securityUG->itc_1text_1icon));
490 setting_create_Gendial_itc(SETTING_GENLIST_GROUP_INDEX_STYLE, &(securityUG->itc_group_item));
491 setting_create_Gendial_itc("multiline_sub", &(securityUG->itc_bg_1icon));
492 setting_create_Gendial_itc(SETTING_GENLIST_2LINE_STYLE, &(securityUG->itc_2text_2));
493 setting_create_Gendial_itc(SETTING_GENLIST_2LINE_STYLE, &(securityUG->itc_2text_3_parent));
495 securityUG->update_view_timer = NULL;
496 securityUG->remove_sim_popup_timer = NULL;
497 securityUG->tapi_async_cb_check_timer = NULL;
498 securityUG->input_pwd = NULL;
499 /*securityUG->cur_enc_mode = 0; */
500 /* creating a view. */
501 securityUG->handle = tel_init(NULL);
502 if (!securityUG->handle) {
503 SETTING_TRACE_ERROR("*** [ERR] tel_init. ***");
506 securityUG->view_to_load = __get_security_view_to_load(securityUG, service);
507 setting_retvm_if(NULL == securityUG->view_to_load, NULL,
508 "NULL == securityUG->view_to_load");
510 app_control_get_extra_data(service, "current", &(securityUG->input_pwd));
512 setting_view_node_set_cur_view(securityUG->view_to_load);
513 setting_view_create(securityUG->view_to_load, (void *)securityUG);
514 evas_object_event_callback_add(securityUG->win_main_layout,
515 EVAS_CALLBACK_RESIZE,
516 setting_security_ug_cb_resize, securityUG);
518 return securityUG->ly_main;
521 static void setting_security_ug_on_start(ui_gadget_h ug, app_control_h service,
526 static void setting_security_ug_on_pause(ui_gadget_h ug, app_control_h service,
530 setting_retm_if((!priv), "!priv");
531 SettingSecurityUG *securityUG = priv;
533 if (setting_view_security_sim_settings.is_create == TRUE) {
534 bool is_running = FALSE;
535 app_manager_is_running("org.tizen.pwlock", &is_running);
537 SETTING_TRACE_DEBUG("pwlock is running");
538 Ecore_X_Window xwin = 0;
539 Ecore_X_Display *disp = NULL;
541 disp = ecore_x_display_get();
542 xwin = elm_win_xwindow_get(securityUG->win_get);
544 ecore_x_netwm_window_type_set(xwin, ECORE_X_WINDOW_TYPE_NORMAL);
546 ret = eext_win_keygrab_unset(xwin, "XF86Back");
548 SETTING_TRACE("eext_win_keygrab_unset() failed.");
549 ret = eext_win_keygrab_unset(xwin, "XF86Home");
551 SETTING_TRACE("eext_win_keygrab_unset() failed.");
552 ret = eext_win_keygrab_unset(xwin, "XF86AudioRaiseVolume");
554 SETTING_TRACE("eext_win_keygrab_unset() failed.");
555 ret = eext_win_keygrab_unset(xwin, "XF86AudioLowerVolume");
557 SETTING_TRACE("eext_win_keygrab_unset() failed.");
560 val[0] = 1; /* always enable */
561 val[1] = 1; /* quickpanel enable */
562 val[2] = 1; /* apptray enable */
563 /* set quickpanel enable */
564 Ecore_X_Atom ATOM_PANEL_SCROLLABLE_STATE = 0;
565 ATOM_PANEL_SCROLLABLE_STATE = ecore_x_atom_get("_E_MOVE_PANEL_SCROLLABLE_STATE");
566 ecore_x_window_prop_card32_set(xwin, ATOM_PANEL_SCROLLABLE_STATE, val, 3);
571 static void setting_security_ug_on_resume(ui_gadget_h ug, app_control_h service,
575 setting_retm_if((!priv), "!priv");
576 SettingSecurityUG *securityUG = priv;
578 if (setting_view_security_sim_settings.is_create == TRUE) {
579 if (tel_get_sim_facility(securityUG->handle, TAPI_SIM_LOCK_SC, setting_security_pin_get_facility_cb, securityUG) != TAPI_API_SUCCESS) {
580 SETTING_TRACE_ERROR("tel_get_sim_facility(TAPI_SIM_LOCK_PS) failed");
585 static void setting_security_ug_on_destroy(ui_gadget_h ug, app_control_h service,
589 setting_retm_if((!priv), "!priv");
590 SettingSecurityUG *securityUG = priv;
593 evas_object_event_callback_del(securityUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_security_ug_cb_resize); /* fix flash issue for gallery */
595 if (securityUG->handle && tel_deinit(securityUG->handle) != TAPI_API_SUCCESS) {
597 ("%s*** [ERR] setting_network_unsubscribe_tapi_events. ***%s",
598 SETTING_FONT_RED, SETTING_FONT_BLACK);
601 FREE(securityUG->input_pwd);
602 #if SUPPORT_ENCRYPTION
603 if (securityUG->viewtype == SETTING_SEC_VIEWTYPE_ENCRYPTION) {
604 setting_view_destroy(&setting_view_security_confirm_encryption, securityUG);
605 setting_view_destroy(&setting_view_security_encryption, securityUG);
608 setting_view_destroy(&setting_view_security_sim_settings, securityUG);
609 setting_view_destroy(&setting_view_security_update, securityUG);
610 setting_view_destroy(&setting_view_security_main, securityUG);
611 #if SUPPORT_ENCRYPTION
612 setting_view_destroy(&setting_view_security_confirm_encryption, securityUG);
613 setting_view_destroy(&setting_view_security_encryption, securityUG);
617 if (NULL != ug_get_layout(securityUG->ug)) {
618 evas_object_hide((Evas_Object *) ug_get_layout(securityUG->ug));
619 evas_object_del((Evas_Object *) ug_get_layout(securityUG->ug));
623 static void setting_security_ug_on_message(ui_gadget_h ug, app_control_h msg,
624 app_control_h service, void *priv)
629 static void setting_security_ug_on_event(ui_gadget_h ug,
630 enum ug_event event, app_control_h service,
635 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
638 case UG_EVENT_LOW_MEMORY:
640 case UG_EVENT_LOW_BATTERY:
642 case UG_EVENT_LANG_CHANGE:
644 setting_navi_items_update(ad->navi_bar);
647 case UG_EVENT_ROTATE_PORTRAIT:
649 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
651 case UG_EVENT_ROTATE_LANDSCAPE:
653 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
655 case UG_EVENT_REGION_CHANGE:
662 static void setting_security_ug_on_key_event(ui_gadget_h ug,
663 enum ug_key_event event,
664 app_control_h service, void *priv)
668 SettingSecurityUG *ad = (SettingSecurityUG *) priv; /* ad is point to priv */
670 case UG_KEY_EVENT_END: {
671 if (elm_naviframe_top_item_get(ad->navi_bar) ==
672 elm_naviframe_bottom_item_get(ad->navi_bar)) {
675 /* elm_naviframe_item_pop(ad->navi_bar); */
676 setting_view_cb_at_endKey(ad);
686 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
688 SettingSecurityUG *securityUG = calloc(1, sizeof(SettingSecurityUG));
689 setting_retvm_if(!securityUG, -1,
690 "Create SettingSecurityUG obj failed");
692 memset(securityUG, 0x00, sizeof(SettingSecurityUG));
694 ops->create = setting_security_ug_on_create;
695 ops->start = setting_security_ug_on_start;
696 ops->pause = setting_security_ug_on_pause;
697 ops->resume = setting_security_ug_on_resume;
698 ops->destroy = setting_security_ug_on_destroy;
699 ops->message = setting_security_ug_on_message;
700 ops->event = setting_security_ug_on_event;
701 ops->key_event = setting_security_ug_on_key_event;
702 ops->priv = securityUG;
703 ops->opt = UG_OPT_INDICATOR_ENABLE;
708 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
710 struct SettingSecurityUG *securityUG;
711 setting_retm_if(!ops, "ops == NULL");
713 securityUG = ops->priv;
718 /* ***************************************************
722 ***************************************************/
723 void setting_security_sim_get_facility_cb(TapiHandle *handle, int result, void *data, void *user_data)
728 SETTING_TRACE_DEBUG("user_data is not NULL");
731 SETTING_TRACE_DEBUG("data is not NULL");
733 TelSimPinOperationResult_t sec_rt = result;
734 TelSimFacilityInfo_t *fi = data;
735 SettingSecurityUG *ad = user_data;
736 ad->enter_tapi_async_cb_flag++;
738 SETTING_TRACE("sec_rt[%d]", sec_rt);
739 SETTING_TRACE("fi->type[%d]", fi->type);
740 SETTING_TRACE("fi->f_status[%d]", fi->f_status);
741 if (sec_rt == TAPI_SIM_PIN_OPERATION_SUCCESS) {
742 SETTING_TRACE_DEBUG("PIN_OPERATION_SUCCESS");
744 case TAPI_SIM_LOCK_PS:/*sim status */
745 ad->sim_status = fi->f_status;
751 /*if failed, do nothing.. */
754 /* Update SIM Settings view if created. */
755 if (setting_view_security_sim_settings.is_create == 1) {
756 SETTING_TRACE_DEBUG("SIM settings view is already created. [%d]", setting_view_security_sim_settings.is_create);
757 setting_view_update(&setting_view_security_sim_settings, ad);
759 SETTING_TRACE_DEBUG("Change view");
760 setting_view_change(&setting_view_security_main, &setting_view_security_sim_settings, ad);
766 void setting_security_pin2_get_lock_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
770 SETTING_TRACE_DEBUG("user_data is not NULL");
773 SETTING_TRACE_DEBUG("data is not NULL");
775 TelSimPinOperationResult_t sec_rt = result;
776 TelSimLockInfo_t *lock = data;
778 SettingSecurityUG *ad = (SettingSecurityUG *)user_data;
780 SETTING_TRACE_DEBUG("sec_ret[%d], lock_type[%d], lock_status[%d], retry_count[%d]", sec_rt, lock->lock_type, lock->lock_status, lock->retry_count);
781 if (lock->lock_type == TAPI_SIM_LOCK_FD
782 && lock->lock_status == TAPI_SIM_LOCK_KEY_PUK2) {
783 ad->pin2_blocked_flag = TRUE;
787 void setting_security_pin_get_facility_cb(TapiHandle *handle, int result, void *data, void *user_data)
792 SETTING_TRACE_DEBUG("user_data is not NULL");
795 SETTING_TRACE_DEBUG("data is not NULL");
797 TelSimPinOperationResult_t sec_rt = result;
798 TelSimFacilityInfo_t *fi = data;
799 SettingSecurityUG *ad = user_data;
801 SETTING_TRACE("sec_rt[%d]", sec_rt);
802 SETTING_TRACE("fi->type[%d]", fi->type);
803 SETTING_TRACE("fi->f_status[%d]", fi->f_status);
804 if (sec_rt == TAPI_SIM_PIN_OPERATION_SUCCESS) {
805 SETTING_TRACE_DEBUG("PIN_OPERATION_SUCCESS");
807 case TAPI_SIM_LOCK_SC:/*pin1 status */
808 ad->pin1_status = fi->f_status;
810 case TAPI_SIM_LOCK_FD:/*pin2/fdn status */
811 ad->pin2_status = fi->f_status;
817 /*if failed, do nothing.. */
820 if (ad->tapi_async_cb_check_timer) {
821 ecore_timer_del(ad->tapi_async_cb_check_timer);
822 ad->tapi_async_cb_check_timer = NULL;
824 ad->enter_tapi_async_cb_flag = 1;
826 /* Update SIM Settings view if created. */
827 if (setting_view_security_sim_settings.is_create == 1) {
828 SETTING_TRACE_DEBUG("SIM settings view is already created. [%d]", setting_view_security_sim_settings.is_create);
829 setting_view_update(&setting_view_security_sim_settings, ad);
831 SETTING_TRACE_DEBUG("Change view");
832 setting_view_change(&setting_view_security_main, &setting_view_security_sim_settings, ad);
838 void setting_security_layout_passwd_ug_cb(ui_gadget_h ug,
839 enum ug_mode mode, void *priv)
844 Evas_Object *base = ug_get_layout(ug);
849 case UG_MODE_FULLVIEW:
850 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
851 evas_object_show(base);
860 void setting_security_destroy_password_ug_cb(ui_gadget_h ug,
864 ret_if(priv == NULL);
865 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
868 elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
871 setting_ug_destroy(ug);
874 SETTING_TRACE_DEBUG("[TEST] current : %s", ad->input_pwd);
877 void setting_security_end_password_ug_cb(ui_gadget_h ug,
881 ret_if(priv == NULL);
882 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
883 ad->ug_passwd = NULL;
885 if (setting_view_security_sim_settings.is_create == TRUE && ad->pw_type == SETTING_SEC_PW_PIN1_UNBLOCKED) {
886 SETTING_TRACE("ungrab keys");
888 Ecore_X_Window xwin = 0;
889 Ecore_X_Display *disp = NULL;
893 disp = ecore_x_display_get();
894 xwin = elm_win_xwindow_get((Evas_Object *)ug_get_window());
896 ret = eext_win_keygrab_unset(xwin, "XF86Back");
898 SETTING_TRACE("KEY_BACK ungrab failed.");
899 ret = eext_win_keygrab_unset(xwin, "XF86Home");
901 SETTING_TRACE("XF86Home ungrab failed.");
902 ret = eext_win_keygrab_unset(xwin, "XF86AudioRaiseVolume");
904 SETTING_TRACE("KEY_VOLUMEUP ungrab failed.");
905 ret = eext_win_keygrab_unset(xwin, "XF86AudioLowerVolume");
907 SETTING_TRACE("KEY_VOLUMEDOWN ungrab failed.");
909 #if SUPPORT_ENCRYPTION
910 if (setting_view_security_confirm_encryption.is_create == TRUE) {
911 SETTING_TRACE_DEBUG("[TEST] current : %s", ad->input_pwd);
912 setting_view_update(&setting_view_security_confirm_encryption, ad);
913 } else if (setting_view_security_encryption.is_create == TRUE) {
914 SETTING_TRACE_DEBUG("[TEST] current : %s", ad->input_pwd);
915 setting_view_update(&setting_view_security_encryption, ad);
920 gboolean setting_security_create_password_sg(void *data)
924 retv_if(data == NULL, FALSE);
926 SettingSecurityUG *ad = (SettingSecurityUG *) data; /* ad is point to data */
928 /* prevent the ug from being loaded again due to window event queuing */
929 /* added by JTS: CQ H0100135346 */
931 SETTING_TRACE("Password UG is already loaded.");
935 if ((ad->pw_type < 0) || (ad->pw_type > SETTING_SEC_PW_MAX))
938 char str[Max_Passwd_View_Type_Len + 1] = { 0, };
939 safeCopyStr(str, security_table[ad->pw_type].pw_type_string, Max_Passwd_View_Type_Len);
941 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
945 cbs->layout_cb = setting_security_layout_passwd_ug_cb;
946 cbs->result_cb = setting_security_result_password_ug_cb;
947 cbs->destroy_cb = setting_security_destroy_password_ug_cb;
948 cbs->end_cb = setting_security_end_password_ug_cb;
949 cbs->priv = (void *)ad;
952 if (app_control_create(&svc)) {
957 app_control_add_extra_data(svc, "viewtype", str);
959 SETTING_TRACE_DEBUG("send viewtype to password : %s", str);
961 if ((ad->pw_type != SETTING_SEC_PW_ENTER_LOCK_TYPE) && ad->input_pwd) {
962 SETTING_TRACE_SECURE_DEBUG("Send current : %s", ad->input_pwd);
963 app_control_add_extra_data(svc, "current", ad->input_pwd);
967 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
968 ad->ug_removed = FALSE;
969 ad->ug_passwd = setting_ug_create(ad->ug, "setting-password-efl", UG_MODE_FULLVIEW, svc, cbs);
970 if (NULL == ad->ug_passwd) { /* error handling */
971 evas_object_show(ad->ly_main);
974 app_control_destroy(svc);
980 void setting_security_layout_lockscreen_options_ug_cb(ui_gadget_h ug,
981 enum ug_mode mode, void *priv)
986 Evas_Object *base = ug_get_layout(ug);
991 case UG_MODE_FULLVIEW:
992 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
994 evas_object_show(base);
1003 void setting_security_destroy_lockscreen_options_ug_cb(ui_gadget_h ug,
1006 ret_if(priv == NULL);
1007 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
1009 setting_ug_destroy(ug);
1010 ad->ug_lockscreen = NULL;
1014 gboolean setting_security_create_lockscreen_options_sg(void *data)
1017 retv_if(data == NULL, FALSE);
1019 SettingSecurityUG *ad = (SettingSecurityUG *) data; /* ad is point to data */
1021 if (ad->ug_lockscreen) {
1022 SETTING_TRACE("Password UG is already loaded.");
1025 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1029 cbs->layout_cb = setting_security_layout_lockscreen_options_ug_cb;
1030 cbs->result_cb = NULL;
1031 cbs->destroy_cb = setting_security_destroy_lockscreen_options_ug_cb;
1032 cbs->priv = (void *)ad;
1035 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1036 ad->ug_lockscreen = setting_ug_create(ad->ug, "lockscreen-options", UG_MODE_FULLVIEW, NULL, cbs);
1037 if (NULL == ad->ug_lockscreen) { /* error handling */
1038 SETTING_TRACE_ERROR("NULL == ad->ug_lockscreen");
1039 evas_object_show(ad->ly_main);
1046 #if SUPPORT_ENCRYPTION
1047 void setting_security_layout_mmc_encryption_ug_cb(ui_gadget_h ug,
1048 enum ug_mode mode, void *priv)
1053 Evas_Object *base = ug_get_layout(ug);
1058 case UG_MODE_FULLVIEW:
1059 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1061 evas_object_show(base);
1070 void setting_security_destroy_mmc_encryption_ug_cb(ui_gadget_h ug,
1073 ret_if(priv == NULL);
1074 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
1076 setting_ug_destroy(ug);
1077 ad->ug_mmc_encryption = NULL;
1082 gboolean setting_security_create_mmc_encryption_sg(void *data)
1085 retv_if(data == NULL, FALSE);
1087 SettingSecurityUG *ad = (SettingSecurityUG *) data; /* ad is point to data */
1089 if (ad->ug_mmc_encryption) {
1090 SETTING_TRACE("mmc encryption UG is already loaded.");
1093 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1097 cbs->layout_cb = setting_security_layout_mmc_encryption_ug_cb;
1098 cbs->result_cb = NULL;
1099 cbs->destroy_cb = setting_security_destroy_mmc_encryption_ug_cb;
1100 cbs->priv = (void *)ad;
1103 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1104 ad->ug_mmc_encryption = setting_ug_create(ad->ug, "setting-mmc-encryption-efl", UG_MODE_FULLVIEW, NULL, cbs);
1105 if (NULL == ad->ug_mmc_encryption) { /* error handling */
1106 SETTING_TRACE_ERROR("NULL == ad->ug_mmc_encryption");
1107 evas_object_show(ad->ly_main);
1116 void setting_security_layout_firewall_ug_cb(ui_gadget_h ug,
1117 enum ug_mode mode, void *priv)
1119 Evas_Object *base = ug_get_layout(ug);
1124 case UG_MODE_FULLVIEW:
1125 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1127 /*elm_win_resize_object_add(ad->win_get, base); */
1128 evas_object_show(base);
1137 void setting_security_destroy_firewall_ug_cb(ui_gadget_h ug,
1140 ret_if(priv == NULL);
1141 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
1143 elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
1145 setting_ug_destroy(ug);
1146 ad->ug_firewall = NULL;
1150 gboolean setting_security_create_firewall_sg(void *data)
1152 retv_if(data == NULL, FALSE);
1154 SettingSecurityUG *ad = (SettingSecurityUG *) data;
1155 if (ad->ug_firewall) {
1156 SETTING_TRACE("firewall UG is already loaded.");
1159 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1163 cbs->layout_cb = setting_security_layout_firewall_ug_cb;
1164 cbs->result_cb = NULL;
1165 cbs->destroy_cb = setting_security_destroy_firewall_ug_cb;
1166 cbs->priv = (void *)ad;
1169 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1170 ad->ug_firewall = setting_ug_create(ad->ug, "setting-firewall-efl", UG_MODE_FULLVIEW, NULL, cbs);
1171 if (NULL == ad->ug_firewall) {
1172 SETTING_TRACE_ERROR("NULL == ad->ug_firewall");
1173 evas_object_show(ad->ly_main);
1181 /* ***************************************************
1185 ***************************************************/
1187 /* 0~n on success */
1188 int _get_security_table_index(char *name)
1192 for (i = 0; i < SETTING_SEC_PW_MAX; i++) {
1193 if (0 == safeStrCmp(name, security_table[i].pw_type_string))
1200 setting_security_result_password_ug_cb(ui_gadget_h ug, app_control_h service,
1203 SETTING_TRACE_BEGIN;
1205 retm_if(priv == NULL, "Data paremeter is NULL");
1207 SettingSecurityUG *ad = (SettingSecurityUG *) priv; /* ad is point to priv */
1210 elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
1212 char *result = NULL;
1213 char *current = NULL;
1215 app_control_get_extra_data(service, "result", &result);
1216 app_control_get_extra_data(service, "current", ¤t);
1218 /* divided pw view type */
1219 SETTING_TRACE("ad->pw_type: %d result :%s", ad->pw_type, result);
1220 ret_if(NULL == result);
1222 if (safeStrCmp(result, "Cancel") == 0) {
1224 if (setting_view_security_sim_settings.is_create == 1) {
1225 setting_view_update(&setting_view_security_sim_settings, ad);
1229 /* To do : rollback previouse status. */
1230 } else if (safeStrCmp(result, "SETTING_PW_TYPE_ENTER_LOCK_TYPE") == 0) {
1231 /*ug_destroy(ug); */
1232 /*ad->ug_passwd = NULL; */
1233 /*setting_view_update(&setting_view_security_locktype, ad); */
1234 ad->pw_type = SETTING_SEC_PW_ENTER_LOCK_TYPE;
1235 } else if (safeStrCmp(result, "SETTING_PW_TYPE_ENTER_LOCK_TYPE:Fail") == 0) {
1237 ug_destroy_me(ad->ug);
1243 int index = _get_security_table_index(result);
1246 security_table[index].passwd_handler(ad, NULL);
1247 ad->pw_type = security_table[index].pw_type_num;
1249 SETTING_TRACE_ERROR("no table entry");
1252 FREE(ad->input_pwd);
1256 SETTING_TRACE_SECURE_DEBUG("current : %s", current);
1257 ad->input_pwd = (char *)strdup(current);
1261 evas_object_show(ad->ly_main);
1270 static Setting_Cfg_Node_T s_cfg_node_array[] = {
1271 {"IDS_JAVA_OPT_SIM_SETTINGS", NULL, "viewtype:frontpage;tab:first;keyword:IDS_JAVA_OPT_SIM_SETTINGS", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
1272 {"IDS_ST_BODY_DECRYPT_DEVICE", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_DECRYPT_DEVICE", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
1273 {"IDS_ST_HEADER_ENCRYPT_DEVICE", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_HEADER_ENCRYPT_DEVICE", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
1274 {"IDS_DN_BODY_ENCRYPT_SD_CARD", NULL, "viewtype:frontpage;tab:first;keyword:IDS_DN_BODY_ENCRYPT_SD_CARD", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
1275 {"IDS_ST_BODY_FIREWALL", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_FIREWALL", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
1276 {"IDS_ST_BODY_ANTIVIRUS_SOFTWARE_ABB", NULL, "viewtype:frontpage;tab:first;keyword:IDS_ST_BODY_ANTIVIRUS_SOFTWARE_ABB", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
1277 {"IDS_EMAIL_POP_SECURITY_UPDATE_ABB", NULL, "viewtype:frontpage;tab:first;keyword:IDS_EMAIL_POP_SECURITY_UPDATE_ABB", 0, 0, 0, Cfg_Item_View_Node, NULL, NULL, NULL, NULL},
1280 UG_MODULE_API int setting_plugin_search_init(app_control_h service, void *priv, char **applocale)
1282 SETTING_TRACE_BEGIN;
1283 SETTING_TRACE(">> setting-security-efl DB search code");
1285 *applocale = strdup("setting:/usr/apps/org.tizen.setting/res/locale");
1287 Eina_List **pplist = (Eina_List **)priv;
1289 int size = sizeof(s_cfg_node_array) / sizeof(s_cfg_node_array[0]);
1290 for (i = 0; i < size; i++) {
1291 Setting_Cfg_Node_T *node = setting_plugin_search_item_subindex_add(s_cfg_node_array[i].key_name, s_cfg_node_array[i].ug_args, IMG_Security, s_cfg_node_array[i].item_type, s_cfg_node_array[i].data, "Security");
1292 *pplist = eina_list_append(*pplist, node);
1297 #if SUPPORT_SECURITY_FIREWALL
1298 int setting_security_system_command(const char *command, const char *commandex)
1300 SETTING_TRACE_BEGIN;
1301 int pid = 0 , status = 0;
1302 char *argv[2] = {NULL,};
1305 if (command == 0 && commandex == 0) {
1306 /*not exist input */
1312 SETTING_TRACE("parent");
1314 return WEXITSTATUS(status);
1319 argv[0] = (char *)command,
1320 argv[1] = (char *)commandex,
1324 SETTING_TRACE_DEBUG("[%s]:%s", argv[0], argv[1]);
1325 execv("/usr/apps/org.tizen.setting/bin/firewall", args);
1330 int setting_security_firewall_reset()
1332 SETTING_TRACE_BEGIN;
1334 struct dirent *next_file;
1339 theFolder = opendir(SEC_FIREWALL_DIR);
1340 next_file = readdir(theFolder);
1342 /* build the full path for each file in the folder */
1343 sprintf(filepath, "%s/%s", SEC_FIREWALL_DIR, next_file->d_name);
1344 SETTING_TRACE_DEBUG("[%s]", filepath);
1345 /*(void) remove(filepath); */
1346 if (remove(filepath) != 0) { /*delete the file */
1349 next_file = readdir(theFolder);
1352 closedir(theFolder);