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-password.h>
23 #include <setting-password-main.h>
24 #include <setting-common-data-slp-setting.h>
25 #include <openssl/sha.h>
26 #include <setting-debug.h>
29 #include <sys/types.h>
33 static int setting_password_main_create(void *cb);
34 static int setting_password_main_destroy(void *cb);
35 static int setting_password_main_update(void *cb);
36 static int setting_password_main_cleanup(void *cb);
38 setting_view setting_view_password_main = {
39 .create = setting_password_main_create,
40 .destroy = setting_password_main_destroy,
41 .update = setting_password_main_update,
42 .cleanup = setting_password_main_cleanup,
45 const char *sp_titles[5] = { "IDS_ST_BODY_ENTER_PASSWORD",
46 "IDS_ST_BODY_ENTER_NEW_PASSWORD",
47 "IDS_ST_BODY_ENTER_PASSWORD_AGAIN",
48 "IDS_ST_BODY_ENTER_CURRENT_PASSWORD",
51 #define SETTING_SP_TITLE_INDEX_START 0
52 #define SETTING_SP_TITLE_INDEX_MAX 3
54 #define ENTRY_CALLBACK_REPEAT_MAX 3
55 #define SETTING_COMPARE_PW_FAIL -2
57 static void _sp_changed_cb1(void *data, Evas_Object *obj, void *event_info);
58 static void _sp_changed_cb2(void *data, Evas_Object *obj, void *event_info);
59 static void _sp_changed_cb3(void *data, Evas_Object *obj, void *event_info);
60 static void _sp_changed_cb4(void *data, Evas_Object *obj, void *event_info);
63 int _count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym);
66 /* ***************************************************
70 ***************************************************/
72 __password_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj,
76 SettingPasswordUG *ad = (SettingPasswordUG *) data;
79 setting_hide_input_pannel_cb(ad->ed_pw1->eo_check);
82 setting_hide_input_pannel_cb(ad->ed_pw1->eo_check);
85 setting_hide_input_pannel_cb(ad->ed_pw1->eo_check);
90 static char *setting_password_main_get_title_str(void *data)
92 retvm_if(data == NULL, NULL,
93 "[Setting > Password] Data parameter is NULL");
94 SettingPasswordUG *ad = (SettingPasswordUG *) data;
96 switch (ad->view_type) {
97 case SETTING_PW_TYPE_PASSWORD:
98 case SETTING_PW_TYPE_SET_PASSWORD:
99 case SETTING_PW_TYPE_CHANGE_PASSWORD:
100 case SETTING_PW_TYPE_SIMPLE_PASSWORD:
101 case SETTING_PW_TYPE_SET_SIMPLE_PASSWORD:
102 case SETTING_PW_TYPE_CHANGE_SIMPLE_PASSWORD:
104 case SETTING_PW_TYPE_MDM_NEW_POLICY:
105 case SETTING_PW_TYPE_MDM_CHANGE_PASSWORD:
106 case SETTING_PW_TYPE_MDM_TO_SIMPLE:
108 return _("IDS_COM_BODY_AUTH_PASSWORD");
111 case SETTING_PW_TYPE_SIM_LOCK_ON:
112 case SETTING_PW_TYPE_SIM_LOCK_OFF:
113 return _("IDS_COM_BODY_AUTH_PASSWORD");
115 case SETTING_PW_TYPE_PIN_LOCK_ON:
116 case SETTING_PW_TYPE_PIN_LOCK_OFF:
117 return _("IDS_ST_BODY_PIN1");
119 case SETTING_PW_TYPE_CHANGE_PIN1:
120 return _("IDS_ST_BODY_CHANGE_PIN1");
123 case SETTING_PW_TYPE_CHANGE_PIN2:
124 return _("IDS_ST_BODY_CHANGE_PIN2");
127 case SETTING_PW_TYPE_PIN1_BLOCKED:
128 return _("IDS_ST_BODY_PUK1_CODE");
130 case SETTING_PW_TYPE_PIN2_BLOCKED:
132 return _("IDS_ST_BODY_PUK2");
135 SETTING_TRACE_DEBUG("%s*** Unknown Password Type. ***%s",
136 SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
144 _sp_back_key_up(void *data, Evas *e, Evas_Object *obj, void *event)
146 retm_if(data == NULL || event == NULL, "[Setting > Password] Data parameter is NULL");
148 SettingPasswordUG *ad = (SettingPasswordUG *) data;
150 ret_if(ad->sp_focused == NULL || ad->sp_entry1 == NULL || ad->sp_entry2 == NULL
151 || ad->sp_entry3 == NULL || ad->sp_entry4 == NULL);
153 Evas_Object *cur_entry = NULL;
154 Evas_Object *move_to = NULL;
156 Evas_Event_Key_Up *ev = (Evas_Event_Key_Up*)event;
158 cur_entry = ad->sp_focused;
160 if(cur_entry == ad->sp_entry1)
162 /* nothing to move. */
165 else if(cur_entry == ad->sp_entry2)
167 move_to = ad->sp_entry1;
169 else if(cur_entry == ad->sp_entry3)
171 move_to = ad->sp_entry2;
173 else if(cur_entry == ad->sp_entry4)
175 move_to = ad->sp_entry3;
182 if(strcmp(ev->keyname, "BackSpace") == 0)
184 SETTING_TRACE_DEBUG("BackSpace Key Up");
185 elm_object_focus_set(move_to, EINA_TRUE);
186 elm_entry_entry_set(move_to, "<font_size=52 align=center>");
187 elm_entry_cursor_end_set(move_to);
188 ad->sp_focused = move_to;
192 Elm_Object_Item* __create_navibar(void *data, Evas_Object *content, Evas_Object *navibar, setting_pw_navibar_style_t style)
195 retv_if(data == NULL || content == NULL || navibar == NULL, NULL);
197 SettingPasswordUG *ad = (SettingPasswordUG *)data;
199 Elm_Object_Item *navi_item = NULL;
200 Evas_Object *done_btn = NULL;
204 case SETTING_PW_NAVIBAR_WITH_LEFT_BTN :
205 SETTING_TRACE_DEBUG("with left btn");
206 navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
207 NULL, _("IDS_COM_SK_CANCEL"), NULL,
209 setting_password_main_click_softkey_cancel_cb,
210 NULL, ad, content, navibar);
212 case SETTING_PW_NAVIBAR_WITH_RIGHT_BTN :
213 SETTING_TRACE_DEBUG("with right btn");
214 navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
215 _("IDS_COM_SK_DONE"), NULL, NULL,
216 setting_password_main_click_softkey_done_cb, NULL,
217 NULL, ad, content, navibar);
219 case SETTING_PW_NAVIBAR_WITH_BOTH_BTN:
220 SETTING_TRACE_DEBUG("with both btn");
221 navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
222 _("IDS_COM_SK_DONE"), _("IDS_COM_SK_CANCEL"), NULL,
223 setting_password_main_click_softkey_done_cb,
224 setting_password_main_click_softkey_cancel_cb,
225 NULL, ad, content, navibar);
227 case SETTING_PW_NAVIBAR_WITH_NO_BTN:
228 SETTING_TRACE_DEBUG("with no btn");
229 navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
233 NULL, ad, content, navibar);
237 retv_if(!navi_item, NULL);
239 done_btn = elm_object_item_part_content_get(navi_item, NAVI_BTN_STYLE_LEFT);
242 setting_disable_evas_object(done_btn);
243 setting_dim_evas_object(done_btn, TRUE);
248 static int __create_common_password_frame(void *data)
251 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
253 SettingPasswordUG *ad = (SettingPasswordUG *)data;
254 Evas_Object *navi_bar = NULL;
255 static int count = 0;
259 if(ad->scroller != NULL)
261 evas_object_del(ad->scroller);
264 Evas_Object *pw_list = elm_genlist_add(ad->win_main_layout);
265 elm_object_style_set(pw_list, "dialogue");
267 return SETTING_RETURN_FAIL;
269 elm_genlist_clear(pw_list); /* first to clear list */
270 elm_genlist_mode_set(pw_list, ELM_LIST_COMPRESS);
273 #if SUPPORT_BOTTOM_BTNS
274 ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
275 retv_if(!ad->ly_main, SETTING_RETURN_FAIL);
277 navi_bar = setting_create_navi_bar(ad->ly_main);
278 retv_if(!navi_bar, SETTING_RETURN_FAIL);
281 if((ad->view_type == SETTING_PW_TYPE_MDM_NEW_POLICY)
282 || (ad->view_type == SETTING_PW_TYPE_MDM_CHANGE_PASSWORD))
284 ad->navi_it = __create_navibar(ad, pw_list, navi_bar, SETTING_PW_NAVIBAR_WITH_BOTH_BTN);
286 else if(ad->view_type == SETTING_PW_TYPE_MDM_TO_SIMPLE)
288 ad->navi_it = __create_navibar(ad, pw_list, navi_bar, SETTING_PW_NAVIBAR_WITH_LEFT_BTN);
293 if( (ad->view_type == SETTING_PW_TYPE_SIMPLE_PASSWORD)
294 || (ad->view_type == SETTING_PW_TYPE_SET_SIMPLE_PASSWORD)
295 || (ad->view_type == SETTING_PW_TYPE_CHANGE_SIMPLE_PASSWORD))
297 ad->navi_it = __create_navibar(ad, pw_list, navi_bar, SETTING_PW_NAVIBAR_WITH_LEFT_BTN);
301 ad->navi_it = __create_navibar(ad, pw_list, navi_bar, SETTING_PW_NAVIBAR_WITH_BOTH_BTN);
307 retv_if(!ad->navi_it, SETTING_RETURN_FAIL);
310 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
311 setting_password_main_get_title_str
312 (ad), _("IDS_COM_SK_CANCEL"),
313 _("IDS_COM_SK_DONE"), NULL,
314 setting_password_main_click_softkey_cancel_cb,
315 setting_password_main_click_softkey_done_cb,
316 NULL, ad, pw_list /* contents */ ,
317 &navi_bar, &(ad->controllbar));
318 elm_object_item_disabled_set(elm_toolbar_last_item_get(ad->controllbar), EINA_TRUE);
320 if(ad->ly_main == NULL)
321 return SETTING_RETURN_FAIL;
324 evas_object_event_callback_add(pw_list, EVAS_CALLBACK_MOUSE_UP,
325 __password_main_gl_mouse_up, ad);
327 Elm_Object_Item *item = elm_genlist_item_append(pw_list,
328 &(ad->itc_seperator), NULL, NULL,
329 ELM_GENLIST_ITEM_NONE, NULL, NULL);
330 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
332 ad->scroller = pw_list;
334 return SETTING_RETURN_SUCCESS;
337 static void _copy_chars_from_sp_entries(void *data, char *collection)
339 ret_if(data == NULL || collection == NULL);
341 SettingPasswordUG *ad = (SettingPasswordUG *) data;
343 if(ad->sp_entry1 == NULL || ad->sp_entry2 == NULL ||
344 ad->sp_entry3 == NULL || ad->sp_entry4 == NULL)
347 strncpy(&collection[0], elm_entry_entry_get(ad->sp_entry1), 1);
348 strncpy(&collection[1], elm_entry_entry_get(ad->sp_entry2), 1);
349 strncpy(&collection[2], elm_entry_entry_get(ad->sp_entry3), 1);
350 strncpy(&collection[3], elm_entry_entry_get(ad->sp_entry4), 1);
353 static int _handle_step1(void *data, char *collection)
355 retv_if(data == NULL, SETTING_RETURN_FAIL);
357 SettingPasswordUG *ad = (SettingPasswordUG *) data;
361 char svalue[SHA256_DIGEST_LENGTH];
362 memset(svalue, 0x0, SHA256_DIGEST_LENGTH);
364 _copy_chars_from_sp_entries(ad, collection);
366 ret = setting_password_main_check_simple_password(collection);
369 setting_password_main_draw_simple_password(ad, 3);
370 return SETTING_RETURN_FAIL;
373 ret = setting_password_check_password(collection, NULL, NULL);
374 if(ret != SETTING_RETURN_SUCCESS)
376 setting_password_main_draw_simple_password(ad, 3);
377 return SETTING_COMPARE_PW_FAIL;
382 if ( 0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_SIMPLE_PASSWORD"))
384 setting_get_bool_slp_key(BOOL_SLP_SETTING_POWER_ON_LOCK, &value, &err);
385 SETTING_TRACE_DEBUG("get VCONF POWER_ON_LOCK : %d", value);
388 ret = setting_set_bool_slp_key(BOOL_SLP_SETTING_POWER_ON_LOCK,
389 SETTING_ON_OFF_BTN_ON, &err);
391 ret = setting_set_bool_slp_key(BOOL_SLP_SETTING_POWER_ON_LOCK,
392 SETTING_ON_OFF_BTN_OFF, &err);
395 setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT,
396 PHONE_LOCK_ATTEMPS_MAX, &err);
397 setting_retvm_if(err == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "[Error] set value of vconf fail.");
399 /* Correct Password. Send Bundle to caller for status change */
403 if (service_create(&svc))
405 setting_password_main_draw_simple_password(ad, 3);
406 return SETTING_RETURN_FAIL;
409 service_add_extra_data(svc, "result", ad->view_type_string);
411 if(0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_ENTER_LOCK_TYPE"))
412 service_add_extra_data(svc, "current", collection);
414 /* reset static variables */
415 memset(collection, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
417 ug_send_result(ad->ug, svc);
418 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
419 service_destroy(svc);
420 /* Send destroy request */
421 ug_destroy_me(ad->ug);
423 return SETTING_RETURN_SUCCESS;
426 static int _handle_step_sp(void *data, int *step, char *collection1, char *collection2)
428 retv_if(data == NULL, SETTING_RETURN_FAIL);
430 SettingPasswordUG *ad = (SettingPasswordUG *) data;
433 char svalue[SHA256_DIGEST_LENGTH];
434 memset(svalue, 0x0, SHA256_DIGEST_LENGTH);
436 if(ad->is_simple_password_on == 1)
438 SETTING_TRACE_DEBUG("case ON->OFF");
439 _copy_chars_from_sp_entries(ad, collection1);
441 ret = setting_password_main_check_simple_password(collection1);
444 setting_password_main_draw_simple_password(ad, 3);
445 return SETTING_RETURN_FAIL;
448 SETTING_TRACE_DEBUG("collection_step1 : %s", collection1);
450 ret = setting_password_check_password(collection1, NULL, NULL);
451 if(ret != SETTING_RETURN_SUCCESS)
453 setting_password_main_draw_simple_password(ad, 3);
454 return SETTING_RETURN_FAIL;
456 ad->cur_pwd = (char*)strdup(collection1);
458 /* reset static variables */
459 memset(collection1, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
461 if(ad->sp_entry1 == NULL || ad->sp_entry2 == NULL || ad->sp_entry3 == NULL || ad->sp_entry4 == NULL)
462 return SETTING_RETURN_FAIL;
464 evas_object_event_callback_del(ad->sp_entry1, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
465 evas_object_event_callback_del(ad->sp_entry2, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
466 evas_object_event_callback_del(ad->sp_entry3, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
467 evas_object_event_callback_del(ad->sp_entry4, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
469 evas_object_smart_callback_del(ad->sp_entry1, "changed", _sp_changed_cb1);
470 evas_object_smart_callback_del(ad->sp_entry2, "changed", _sp_changed_cb2);
471 evas_object_smart_callback_del(ad->sp_entry3, "changed", _sp_changed_cb3);
472 evas_object_smart_callback_del(ad->sp_entry4, "changed", _sp_changed_cb4);
476 evas_object_del(ad->ly_main);
481 ecore_timer_del(ad->remove_timer);
482 ad->remove_timer = NULL;
486 if((ad->mdm_policy) && (ad->mdm_policy->quality != MDM_PASSWORD_QUALITY_UNSPECIFIED))
488 ad->view_type = SETTING_PW_TYPE_MDM_NEW_POLICY;
489 ad->step1_str = ad->cur_pwd;
493 ad->step1_str = NULL;
496 __create_common_password_frame(ad);
497 setting_password_main_draw_2line_password(ad, NULL);
499 else if(ad->is_simple_password_on == 0)
501 SETTING_TRACE_DEBUG("case OFF->ON");
502 if(*step == 0) /* Enter new password */
504 _copy_chars_from_sp_entries(ad, collection1);
506 ret = setting_password_main_check_simple_password(collection1);
509 setting_password_main_draw_simple_password(ad, 1);
510 return SETTING_RETURN_FAIL;
513 setting_password_main_draw_next_simple_password(ad, 2);
515 else if(*step == 1) /* Enter password again */
517 _copy_chars_from_sp_entries(ad, collection2);
519 ret = setting_password_main_check_simple_password(collection2);
522 setting_password_main_draw_simple_password(ad, 2);
523 return SETTING_RETURN_FAIL;
526 SETTING_TRACE_DEBUG("collection_step1 : %s", collection1);
527 SETTING_TRACE_DEBUG("collection_step2 : %s", collection2);
529 /* compare two input passwords : collection_step1, collection_step2 */
530 if(safeStrNCmp(collection1, collection2, 4) == 0)
532 ret = setting_password_set_password(ad->cur_pwd, collection1, ad);
535 /* Modify Setting Password */
536 if (SETTING_RETURN_SUCCESS == ret) {
537 SETTING_TRACE_DEBUG("success to save new password");
539 /* set vconfkey ON : if fail, try one more time. */
540 if(vconf_set_bool(VCONFKEY_SETAPPL_STATE_SIMPLE_PASSWORD_BOOL, 1) < 0)
541 return SETTING_RETURN_FAIL;
543 SETTING_TRACE_DEBUG("set vconfkey : simple password is ON");
546 setting_password_ug_create_popup_notitle_nobtn(ad,
547 _("IDS_ST_POP_NEW_PASSWD_SAVED"), TRUE);
550 /* reset static variables */
551 memset(collection1, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
552 memset(collection2, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
554 /* Correct Password. Send Bundle to caller for status change */
556 if (service_create(&svc))
558 setting_password_main_draw_simple_password(ad, 2);
559 return SETTING_RETURN_FAIL;
562 service_add_extra_data(svc, "result", ad->view_type_string);
563 ug_send_result(ad->ug, svc);
564 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
565 service_destroy(svc);
566 /* Send destroy request */
567 ug_destroy_me(ad->ug);
571 setting_password_main_draw_simple_password(ad, 2);
572 return SETTING_RETURN_FAIL;
577 setting_password_main_draw_simple_password(ad, 2);
578 return SETTING_RETURN_FAIL;
583 return SETTING_RETURN_SUCCESS;
587 static int _handle_step2(void *data, int *step, char *collection1, char*collection2)
589 retv_if(data == NULL, SETTING_RETURN_FAIL);
591 SettingPasswordUG *ad = (SettingPasswordUG *) data;
594 if(*step == 0) /* Enter new password */
596 _copy_chars_from_sp_entries(ad, collection1);
598 ret = setting_password_main_check_simple_password(collection1);
601 setting_password_main_draw_simple_password(ad, 1);
602 return SETTING_RETURN_FAIL;
605 setting_password_main_draw_next_simple_password(ad, 2);
607 else if(*step == 1) /* Enter password again */
609 _copy_chars_from_sp_entries(ad, collection2);
611 ret = setting_password_main_check_simple_password(collection2);
614 setting_password_main_draw_simple_password(ad, 2);
615 return SETTING_RETURN_FAIL;
618 /* compare two input passwords : collection_step1, collection_step2 */
619 if(safeStrNCmp(collection1, collection2, 4) == 0)
622 if((ad->view_type == SETTING_PW_TYPE_MDM_TO_SIMPLE) && (ad->step1_str))
624 ret = setting_password_set_password(ad->step1_str, collection1, ad);
628 ret = setting_password_set_password(ad->cur_pwd, collection1, ad);
630 if (SETTING_RETURN_SUCCESS == ret)
636 if (0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_PASSWORD"))
641 ret = setting_set_bool_slp_key(BOOL_SLP_SETTING_POWER_ON_LOCK,
642 SETTING_ON_OFF_BTN_ON, &err);
643 retvm_if(ret < 0, SETTING_RETURN_FAIL, "[ERR] setting vconfkey failed.");
646 else if (0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_MDM_CHANGE_PASSWORD"))
651 ret = setting_set_bool_slp_key(BOOL_SLP_SETTING_POWER_ON_LOCK,
652 SETTING_ON_OFF_BTN_ON, &err);
653 retvm_if(ret < 0, SETTING_RETURN_FAIL, "[ERR] setting vconfkey(phonelock) failed.");
655 ret = vconf_set_bool(VCONFKEY_SETAPPL_STATE_SIMPLE_PASSWORD_BOOL, TRUE);
656 retvm_if(ret < 0, SETTING_RETURN_FAIL, "[ERR] setting vconfkey(simplepassword) failed.");
658 mdm_set_password_status(MDM_PASSWORD_CHANGED);
663 if (service_create(&svc))
664 return SETTING_RETURN_FAIL;
666 service_add_extra_data(svc, "result", ad->view_type_string);
667 service_add_extra_data(svc, "current", collection1);
668 ug_send_result(ad->ug, svc);
669 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
671 service_destroy(svc);
673 if(safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_RESET"))
675 setting_password_ug_create_popup_notitle_nobtn(ad,
676 _("IDS_ST_POP_NEW_PASSWD_SAVED"), TRUE);
677 /* Send destroy request */
678 ug_destroy_me(ad->ug);
685 evas_object_del(ad->notify);
689 setting_password_main_draw_simple_password(ad, 1);
693 /* reset static variables */
694 memset(collection1, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
695 memset(collection2, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
699 setting_password_main_draw_simple_password(ad, 2);
700 return SETTING_RETURN_FAIL;
703 return SETTING_RETURN_SUCCESS;
706 static int _handle_step3(void *data, int *step, char *collection1, char *collection2, char *collection3)
708 retv_if(data == NULL, SETTING_RETURN_FAIL);
710 SettingPasswordUG *ad = (SettingPasswordUG *) data;
714 char svalue[SHA256_DIGEST_LENGTH];
715 memset(svalue, 0x0, SHA256_DIGEST_LENGTH);
717 if(*step == 0) /* Enter current password */
719 _copy_chars_from_sp_entries(ad, collection1);
721 ret = setting_password_main_check_simple_password(collection1);
724 setting_password_main_draw_simple_password(ad, 3);
725 return SETTING_RETURN_FAIL;
728 ret = setting_password_check_password(collection1, NULL, NULL);
729 if(ret != SETTING_RETURN_SUCCESS)
731 setting_password_main_draw_simple_password(ad, 3);
732 return SETTING_RETURN_FAIL;
735 setting_password_main_draw_next_simple_password(ad, 1);
737 else if(*step == 1) /* Enter new password */
739 _copy_chars_from_sp_entries(ad, collection2);
741 ret = setting_password_main_check_simple_password(collection2);
744 setting_password_main_draw_simple_password(ad, 1);
745 return SETTING_RETURN_FAIL;
749 setting_password_main_draw_next_simple_password(ad, 2);
751 else if(*step == 2) /* Enter password again */
753 _copy_chars_from_sp_entries(ad, collection3);
755 ret = setting_password_main_check_simple_password(collection3);
758 setting_password_main_draw_simple_password(ad, 2);
759 return SETTING_RETURN_FAIL;
762 /* compare two input passwords : collection_step1, collection_step2 */
763 if(safeStrNCmp(collection2, collection3, 4) == 0)
765 ret = setting_password_set_password(collection1, collection2, ad);
766 /* Modify Setting Password */
767 if (SETTING_RETURN_FAIL != ret) {
769 setting_password_ug_create_popup_notitle_nobtn(ad,
770 _("IDS_ST_POP_PASSWORD_CHANGED"), TRUE);
773 SETTING_TRACE_DEBUG("%s*** [ERR] setting_set_string_slp_key err=%d ***%s",
774 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
775 setting_password_ug_create_popup_notitle_nobtn(ad,
776 _("IDS_COM_POP_ERROR"), FALSE);
781 setting_password_main_draw_simple_password(ad, 2);
782 return SETTING_RETURN_FAIL;
785 /* reset static variables */
786 memset(collection1, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
787 memset(collection2, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
788 memset(collection3, 0x00, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1);
790 /* Send destroy request */
791 ug_destroy_me(ad->ug);
793 return SETTING_RETURN_SUCCESS;
796 static int setting_password_main_done_simple_password(void *data, int on_locking)
799 retv_if(data == NULL, SETTING_RETURN_FAIL);
801 SettingPasswordUG *ad = (SettingPasswordUG *) data;
805 static char collection_step1[SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1] = {0,};
806 static char collection_step2[SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1] = {0,};
807 static char collection_step3[SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH+1] = {0,};
809 switch(ad->view_type)
811 case SETTING_PW_TYPE_SIMPLE_PASSWORD:
812 SETTING_TRACE_DEBUG("case SIMPLE_PASSWORD");
813 return _handle_step1(ad, collection_step1);
815 case SETTING_PW_TYPE_SET_SIMPLE_PASSWORD:
817 case SETTING_PW_TYPE_MDM_TO_SIMPLE:
819 SETTING_TRACE_DEBUG("case SET_SIMPLE_PASSWORD");
820 return _handle_step2(ad, &step, collection_step1, collection_step2);
822 case SETTING_PW_TYPE_CHANGE_SIMPLE_PASSWORD:
823 SETTING_TRACE_DEBUG("case CHANGE_SIMPLE_PASSWORD");
824 return _handle_step3(ad, &step, collection_step1, collection_step2, collection_step3);
829 return SETTING_RETURN_SUCCESS;
832 static void _sp_changed_cb1(void *data, Evas_Object *obj, void *event_info)
834 ret_if(data == NULL);
836 SettingPasswordUG *ad = (SettingPasswordUG *)data;
838 if((ad->sp_entry1 == NULL) || (ad->sp_entry1 != obj) || (ad->sp_entry2 == NULL))
841 if(!elm_entry_is_empty(ad->sp_entry1) && elm_entry_is_empty(ad->sp_entry2))
843 SETTING_TRACE_DEBUG("entry1 : %s", elm_entry_entry_get(ad->sp_entry1));
844 if(safeStrNCmp(elm_entry_entry_get(ad->sp_entry1), "<font_size=52 align=center>", safeStrLen("<font_size=52 align=center>")) == 0)
846 /* focus on next entry */
847 elm_object_focus_set(ad->sp_entry2, EINA_TRUE);
848 elm_entry_entry_set(ad->sp_entry2, "<font_size=52 align=center>");
849 elm_entry_cursor_end_set(ad->sp_entry2);
850 ad->sp_focused = ad->sp_entry2;
854 static void _sp_changed_cb2(void *data, Evas_Object *obj, void *event_info)
856 ret_if(data == NULL);
858 SettingPasswordUG *ad = (SettingPasswordUG *)data;
860 if((ad->sp_entry2 == NULL) || (ad->sp_entry2 != obj) || (ad->sp_entry3 == NULL))
863 if(!elm_entry_is_empty(ad->sp_entry2) && elm_entry_is_empty(ad->sp_entry3))
865 SETTING_TRACE_DEBUG("entry2 : %s", elm_entry_entry_get(ad->sp_entry2));
866 if(safeStrNCmp(elm_entry_entry_get(ad->sp_entry2), "<font_size=52 align=center>", safeStrLen("<font_size=52 align=center>")) == 0)
868 /* focus on next entry */
869 elm_object_focus_set(ad->sp_entry3, EINA_TRUE);
870 elm_entry_entry_set(ad->sp_entry3, "<font_size=52 align=center>");
871 elm_entry_cursor_end_set(ad->sp_entry3);
872 ad->sp_focused = ad->sp_entry3;
876 static void _sp_changed_cb3(void *data, Evas_Object *obj, void *event_info)
878 ret_if(data == NULL);
880 SettingPasswordUG *ad = (SettingPasswordUG *)data;
882 if((ad->sp_entry3 == NULL) || (ad->sp_entry3 != obj) || (ad->sp_entry4 == NULL))
885 if(!elm_entry_is_empty(ad->sp_entry3) && elm_entry_is_empty(ad->sp_entry4))
887 SETTING_TRACE_DEBUG("entry3 : %s", elm_entry_entry_get(ad->sp_entry3));
888 if(safeStrNCmp(elm_entry_entry_get(ad->sp_entry3), "<font_size=52 align=center>", safeStrLen("<font_size=52 align=center>")) == 0)
890 /* focus on next entry */
891 elm_object_focus_set(ad->sp_entry4, EINA_TRUE);
892 elm_entry_entry_set(ad->sp_entry4, "<font_size=52 align=center>");
893 elm_entry_cursor_end_set(ad->sp_entry4);
894 ad->sp_focused = ad->sp_entry4;
898 static void _sp_changed_cb4(void *data, Evas_Object *obj, void *event_info)
900 ret_if(data == NULL);
902 static int counter = 0;
904 SettingPasswordUG *ad = (SettingPasswordUG *)data;
906 if((ad->sp_entry4 == NULL) || (ad->sp_entry4 != obj))
908 if((ad->sp_entry1 == NULL) || (ad->sp_entry2 == NULL) || (ad->sp_entry3 == NULL))
911 if(strcmp(elm_entry_entry_get(ad->sp_entry4), "") == 0)
913 SETTING_TRACE_DEBUG("this is align text");
916 if(safeStrNCmp(elm_entry_entry_get(ad->sp_entry4), "<font_size=52 align=center>", safeStrLen("<font_size=52 align=center>")) == 0)
919 SETTING_TRACE_DEBUG("entry4 : %s", elm_entry_entry_get(ad->sp_entry4));
920 /* add this below for removing IMF faster */
921 /* need to discuss with IMF or Entry developer more */
922 elm_object_focus_set(ad->sp_entry4, EINA_FALSE);
926 if(counter == ENTRY_CALLBACK_REPEAT_MAX)
930 ret = setting_password_main_done_simple_password(ad, TRUE);
932 if(ret == SETTING_RETURN_FAIL)
934 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_INCORRECT_PASSWORD_TRY_AGAIN"), FALSE);
936 else if(ret == SETTING_COMPARE_PW_FAIL)
938 if (0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_RESET")
939 || 0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_ENTER_LOCK_TYPE"))
941 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_INCORRECT_PASSWORD"), FALSE);
945 /** @todo setting_password_ug_check_attemps_left */
946 setting_int_slp_list item_attempts_left;
947 setting_str_slp_list item_lock_timestamp;
948 int attemps_left_max = 5;
950 item_attempts_left = INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT;
951 item_lock_timestamp = STR_SLP_SETTING_PHONE_LOCK_TIMESTAMP;
952 attemps_left_max = PHONE_LOCK_ATTEMPS_MAX;
955 int err = SETTING_RETURN_SUCCESS;
956 setting_get_int_slp_key(item_attempts_left, &value, &err);
957 setting_retm_if(err == SETTING_RETURN_FAIL, "[Error] get value of vconf fail.");
961 if (value > 0 && value <= attemps_left_max) {
962 setting_set_int_slp_key(item_attempts_left, value, &err);
963 setting_retm_if(err == SETTING_RETURN_FAIL, "[Error] set value of vconf fail.");
965 char speciliztion[MAX_SPECIALIZITION_LEN] = { 0, };
966 char temp[MAX_SPECIALIZITION_LEN] = {0,};
969 snprintf(temp, sizeof(temp), "%s. %s.", PW_ERR_DESC, ATTEMPTS_DESC);
971 snprintf(temp, sizeof(temp), "%s. %s.", PW_ERR_DESC, ATTEMPT_DESC);
973 snprintf(speciliztion, sizeof(speciliztion), temp, value);
974 setting_password_ug_display_desc(ad, speciliztion, FALSE);
975 } else if (value == 0) {
976 /* store the lock timestamp */
977 elm_object_focus_set(ad->sp_entry1, EINA_FALSE);
978 time_t cur_time = time(NULL);
979 char cur_timestamp[LOCK_TIMESTAMP_LEN] = { 0, };
980 int ret = snprintf(cur_timestamp, sizeof(cur_timestamp), "%ld", cur_time);
983 setting_set_string_slp_key(item_lock_timestamp, cur_timestamp, &err);
984 setting_retm_if(err == SETTING_RETURN_FAIL,
985 "[Error] set value of vconf fail.");
987 setting_set_int_slp_key(item_attempts_left, value, &err);
988 setting_retm_if(err == SETTING_RETURN_FAIL,
989 "[Error] set value of vconf fail.");
991 ad->disable_item_type = ad->view_type;
993 char temp[MAX_SPECIALIZITION_LEN] = {0,};
994 snprintf(temp, sizeof(temp), PW_ERR_DELAY_DESC, PW_ERR_DELAY_TIME);
995 setting_password_ug_create_popup_notitle_nobtn(ad, temp, TRUE);
1000 /* if you have more cases, modify here. */
1007 static char *__gl_sp_text_get(void *data, Evas_Object *obj, const char *part)
1009 retv_if(data == NULL, NULL);
1010 SettingPasswordUG *ad = (SettingPasswordUG*)data;
1012 SETTING_TRACE_DEBUG("[sp_label_get] label intex, %d", ad->sp_title_index);
1014 if(ad->sp_title_index < SETTING_SP_TITLE_INDEX_START || ad->sp_title_index > SETTING_SP_TITLE_INDEX_MAX)
1016 SETTING_TRACE_DEBUG("title index is invalid");
1021 return strdup(_(sp_titles[ad->sp_title_index]));
1025 static Evas_Object* __gl_sp_content_get(void *data, Evas_Object *obj, const char *part)
1027 retv_if(data == NULL, NULL);
1028 SettingPasswordUG *ad = (SettingPasswordUG*)data;
1030 Evas_Object *entry = NULL;
1032 static Elm_Entry_Filter_Limit_Size limit_filter_data;
1033 limit_filter_data.max_byte_count = 0;
1034 limit_filter_data.max_char_count = 1;
1036 entry = elm_entry_add(obj);
1037 elm_entry_password_set(entry, EINA_TRUE);
1038 elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
1039 elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NUMBERONLY);
1040 elm_entry_entry_set(entry, "<font_size=52 align=center>");
1041 evas_object_event_callback_add(entry, EVAS_CALLBACK_KEY_UP, _sp_back_key_up, ad);
1043 elm_config_password_show_last_set(EINA_TRUE);
1044 elm_config_password_show_last_timeout_set(0.1);
1046 if(safeStrCmp("elm.icon.1", part) == 0)
1048 SETTING_TRACE_DEBUG("create entry1");
1049 evas_object_smart_callback_add(entry, "changed", _sp_changed_cb1, ad);
1050 ad->sp_entry1 = entry;
1052 else if(safeStrCmp("elm.icon.2", part) == 0)
1054 SETTING_TRACE_DEBUG("create entry2");
1055 evas_object_smart_callback_add(entry, "changed", _sp_changed_cb2, ad);
1056 ad->sp_entry2 = entry;
1058 else if(safeStrCmp("elm.icon.3", part) == 0)
1060 SETTING_TRACE_DEBUG("create entry3");
1061 evas_object_smart_callback_add(entry, "changed", _sp_changed_cb3, ad);
1062 ad->sp_entry3 = entry;
1064 else if(safeStrCmp("elm.icon.4", part) == 0)
1066 SETTING_TRACE_DEBUG("create entry4");
1067 evas_object_smart_callback_add(entry, "changed", _sp_changed_cb4, ad);
1068 ad->sp_entry4 = entry;
1075 setting_password_main_create(void *cb)
1077 SETTING_TRACE_BEGIN;
1079 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1081 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
1084 ad->itc_sp_bg_1icon.item_style = "dialogue/1text.4icon";
1085 ad->itc_sp_bg_1icon.func.text_get = __gl_sp_text_get;
1086 ad->itc_sp_bg_1icon.func.content_get = __gl_sp_content_get;
1087 ad->itc_sp_bg_1icon.func.state_get = NULL;
1088 ad->itc_sp_bg_1icon.func.del = NULL;
1090 ret = __create_common_password_frame(ad);
1093 return SETTING_RETURN_FAIL;
1095 setting_password_main_create_ui(ad);
1097 setting_view_password_main.is_create = 1;
1099 return SETTING_RETURN_SUCCESS;
1102 static int setting_password_main_destroy(void *cb)
1105 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1107 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
1108 if (ad->remove_timer) {
1109 ecore_timer_del(ad->remove_timer);
1110 ad->remove_timer = NULL;
1113 if(ad->set_history_timer)
1115 ecore_timer_del(ad->set_history_timer);
1116 ad->set_history_timer = NULL;
1119 if( (ad->view_type == SETTING_PW_TYPE_SIMPLE_PASSWORD)
1120 || (ad->view_type == SETTING_PW_TYPE_SET_SIMPLE_PASSWORD)
1121 || (ad->view_type == SETTING_PW_TYPE_CHANGE_SIMPLE_PASSWORD))
1123 evas_object_event_callback_del(ad->sp_entry1, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
1124 evas_object_event_callback_del(ad->sp_entry2, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
1125 evas_object_event_callback_del(ad->sp_entry3, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
1126 evas_object_event_callback_del(ad->sp_entry4, EVAS_CALLBACK_KEY_UP, _sp_back_key_up);
1130 FREE(ad->step1_str);
1135 if (ad->ly_main != NULL) {
1136 evas_object_del(ad->ly_main);
1138 setting_view_password_main.is_create = 0;
1140 return SETTING_RETURN_SUCCESS;
1143 static int setting_password_main_update(void *cb)
1146 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1148 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
1150 if (ad->ly_main != NULL) {
1151 evas_object_show(ad->ly_main);
1154 return SETTING_RETURN_SUCCESS;
1157 static int setting_password_main_cleanup(void *cb)
1160 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1162 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
1164 if (ad->ly_main != NULL) {
1165 evas_object_hide(ad->ly_main);
1168 return SETTING_RETURN_SUCCESS;
1171 /* ***************************************************
1175 ***************************************************/
1177 static int setting_password_main_create_ui(void *data)
1180 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1181 "[Setting > Password] Data parameter is NULL");
1183 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1185 SETTING_TRACE_DEBUG("ad->view_type=%d ***", ad->view_type);
1187 switch (ad->view_type) {
1188 case SETTING_PW_TYPE_PASSWORD:
1189 case SETTING_PW_TYPE_SIM_LOCK_OFF:
1190 case SETTING_PW_TYPE_PIN_LOCK_ON:
1191 case SETTING_PW_TYPE_PIN_LOCK_OFF:
1193 case SETTING_PW_TYPE_MDM_CHANGE_PASSWORD:
1195 setting_password_main_draw_1line_password(ad, NULL);
1197 case SETTING_PW_TYPE_SIM_LOCK_ON:
1198 case SETTING_PW_TYPE_SET_PASSWORD:
1200 case SETTING_PW_TYPE_MDM_NEW_POLICY:
1202 setting_password_main_draw_2line_password(ad, NULL);
1205 case SETTING_PW_TYPE_CHANGE_PASSWORD:
1206 case SETTING_PW_TYPE_CHANGE_PIN1:
1207 case SETTING_PW_TYPE_CHANGE_PIN2:
1208 case SETTING_PW_TYPE_PIN1_BLOCKED:
1209 case SETTING_PW_TYPE_PIN2_BLOCKED:
1210 setting_password_main_draw_3line_password(ad, NULL);
1213 case SETTING_PW_TYPE_SET_SIMPLE_PASSWORD:
1215 case SETTING_PW_TYPE_MDM_TO_SIMPLE:
1217 setting_password_main_draw_simple_password(ad, 1);
1221 case SETTING_PW_TYPE_SIMPLE_PASSWORD:
1222 case SETTING_PW_TYPE_CHANGE_SIMPLE_PASSWORD:
1223 setting_password_main_draw_simple_password(ad, 3);
1227 SETTING_TRACE_DEBUG("%s*** Unknown Password Type. ***%s",
1228 SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
1232 /** @todo this function always return 0, not verifying the function flow with the value */
1237 setting_password_main_entry_changed_cb(void *data, Evas_Object *obj,
1240 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
1241 Setting_GenGroupItem_Data *list_item =
1242 (Setting_GenGroupItem_Data *) data;
1243 SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
1244 const char *entry_str = elm_entry_entry_get(obj);
1245 list_item->sub_desc = (char *)g_strdup(entry_str);
1246 bool isFoundEmptyEntry = FALSE;
1248 Evas_Object *layout = elm_object_parent_widget_get(obj);
1249 elm_object_part_text_set(layout, "elm.guidetext", "");
1253 entry_str = ad->ed_pw1->sub_desc;
1254 if (NULL == entry_str || '\0' == entry_str[0]) {
1255 isFoundEmptyEntry = TRUE;
1256 layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
1257 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1262 entry_str = ad->ed_pw2->sub_desc;
1263 if (NULL == entry_str || '\0' == entry_str[0]) {
1264 isFoundEmptyEntry = TRUE;
1265 layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
1266 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1271 entry_str = ad->ed_pw3->sub_desc;
1272 if (NULL == entry_str || '\0' == entry_str[0]) {
1273 isFoundEmptyEntry = TRUE;
1274 layout = elm_object_parent_widget_get(ad->ed_pw3->eo_check);
1275 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1282 bool disableFlag = isFoundEmptyEntry;
1284 #if SUPPORT_BOTTOM_BTNS
1285 Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, NAVI_BTN_STYLE_LEFT);
1287 if (!evas_object_pass_events_get(done_btn)) { /* it had not yet been disabled */
1288 setting_disable_evas_object(done_btn);
1289 setting_dim_evas_object(done_btn, TRUE);
1290 }/* else already disabled */
1292 setting_enable_evas_object(done_btn);
1293 setting_undo_dim_evas_object(done_btn, TRUE);
1296 elm_object_item_disabled_set(elm_toolbar_last_item_get
1297 (ad->controllbar), disableFlag);
1302 static Eina_Bool __focus_sp_on_idler(void *data)
1305 retv_if(data == NULL, FALSE);
1307 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1311 elm_object_focus_set(ad->sp_entry1, EINA_TRUE);
1312 ad->sp_focused = ad->sp_entry1;
1315 return ECORE_CALLBACK_CANCEL;
1318 static Eina_Bool __focus_on_idler(void *data)
1321 retv_if(data == NULL, FALSE);
1323 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1327 if (ad->ed_pw1->isFocusFlag || (ad->ed_pw1->eo_check != NULL))
1329 /* no matter how many edifileds, it only need focus on 1st editfiled */
1330 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
1334 return ECORE_CALLBACK_CANCEL;
1338 static int setting_password_main_draw_next_simple_password(void *data, int title_index)
1341 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1342 "[Setting > Password] Data parameter is NULL");
1344 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1346 setting_password_main_draw_simple_password(ad, title_index);
1348 return SETTING_RETURN_SUCCESS;
1351 static int setting_password_main_draw_simple_password(void *data, int title_index)
1354 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1355 "[Setting > Password] Data parameter is NULL");
1357 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1359 switch (ad->view_type) {
1360 case SETTING_PW_TYPE_SIMPLE_PASSWORD:
1361 case SETTING_PW_TYPE_SET_SIMPLE_PASSWORD:
1362 case SETTING_PW_TYPE_CHANGE_SIMPLE_PASSWORD:
1364 case SETTING_PW_TYPE_MDM_TO_SIMPLE:
1366 ad->sp_title_index = title_index;
1368 if(ad->sp_item != NULL)
1370 elm_genlist_item_update(ad->sp_item);
1374 elm_genlist_clear(ad->scroller);
1375 ad->sp_item = elm_genlist_item_append(ad->scroller, &(ad->itc_sp_bg_1icon), ad, NULL,
1376 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1379 if(ad->view_type == SETTING_PW_TYPE_MDM_TO_SIMPLE)
1381 if(ad->is_expired == SETTING_PW_STATUS_EXPIRED)
1382 setting_password_ug_display_mdm_desc(ad, PASSWORD_EXPIRED);
1384 setting_password_ug_display_mdm_desc(ad, NEW_PASSWORD_NECESSARY);
1388 ecore_idler_add(__focus_sp_on_idler, ad);
1395 static int setting_password_main_draw_1line_password(void *data, void *cb)
1398 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1399 "[Setting > Password] Data parameter is NULL");
1401 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1403 switch (ad->view_type) {
1404 case SETTING_PW_TYPE_PASSWORD:
1406 case SETTING_PW_TYPE_MDM_CHANGE_PASSWORD:
1409 setting_create_Gendial_field_entry(ad->scroller,
1411 (ad->itc_variable_height),
1413 SWALLOW_Type_LAYOUT_ENTRY,
1415 "IDS_COM_BODY_PASSWORD",
1417 setting_password_main_entry_changed_cb,
1418 ELM_INPUT_PANEL_LAYOUT_NORMAL,
1420 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
1423 case SETTING_PW_TYPE_SIM_LOCK_OFF:
1425 setting_create_Gendial_field_entry(ad->scroller,
1427 (ad->itc_variable_height),
1429 SWALLOW_Type_LAYOUT_ENTRY,
1431 "IDS_ST_BODY_SIM_PASSWORD",
1433 setting_password_main_entry_changed_cb,
1434 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1436 SETTING_PW_UG_SIM_MAX_LENGTH,
1437 0, "0123456789", NULL);
1440 case SETTING_PW_TYPE_PIN_LOCK_ON:
1441 case SETTING_PW_TYPE_PIN_LOCK_OFF:
1443 setting_create_Gendial_field_entry(ad->scroller,
1445 (ad->itc_variable_height),
1447 SWALLOW_Type_LAYOUT_ENTRY,
1449 "IDS_ST_BODY_PIN1", NULL,
1450 setting_password_main_entry_changed_cb,
1451 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1453 SETTING_PW_UG_PIN_MAX_LENGTH,
1454 0, "0123456789", NULL);
1460 ecore_idler_add(__focus_on_idler, ad);
1464 static int setting_password_main_clear_1line_password(void *data)
1467 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1468 "[Setting > Password] Data parameter is NULL");
1470 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1471 retv_if(NULL == ad->ed_pw1, -1);
1473 ad->ed_pw1->sub_desc = NULL;
1474 ad->ed_pw1->isFocusFlag = FALSE;
1476 elm_entry_entry_set(ad->ed_pw1->eo_check, "");
1477 Evas_Object *layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
1478 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1482 static int setting_password_main_draw_2line_password(void *data, void *cb)
1485 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1487 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1489 switch (ad->view_type) {
1490 case SETTING_PW_TYPE_SET_PASSWORD:
1492 case SETTING_PW_TYPE_MDM_NEW_POLICY:
1495 setting_create_Gendial_field_entry(ad->scroller,
1497 (ad->itc_variable_height),
1499 SWALLOW_Type_LAYOUT_ENTRY,
1503 setting_password_main_entry_changed_cb,
1504 ELM_INPUT_PANEL_LAYOUT_NORMAL,
1506 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
1510 setting_create_Gendial_field_entry(ad->scroller,
1512 (ad->itc_variable_height),
1514 SWALLOW_Type_LAYOUT_ENTRY,
1516 PW_SHORT_GUIDE_CONFIRM,
1518 setting_password_main_entry_changed_cb,
1519 ELM_INPUT_PANEL_LAYOUT_NORMAL,
1521 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
1524 if(ad->view_type == SETTING_PW_TYPE_MDM_NEW_POLICY)
1526 if(ad->is_expired == SETTING_PW_STATUS_EXPIRED)
1528 setting_password_ug_display_mdm_desc(ad, PASSWORD_EXPIRED);
1532 setting_password_ug_display_mdm_desc(ad, NEW_PASSWORD_NECESSARY);
1539 case SETTING_PW_TYPE_SIM_LOCK_ON:
1541 setting_create_Gendial_field_entry(ad->scroller,
1543 (ad->itc_variable_height),
1545 SWALLOW_Type_LAYOUT_ENTRY,
1549 setting_password_main_entry_changed_cb,
1550 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1552 SETTING_PW_UG_SIM_MAX_LENGTH,
1553 0, "0123456789", NULL);
1556 setting_create_Gendial_field_entry(ad->scroller,
1558 (ad->itc_variable_height),
1560 SWALLOW_Type_LAYOUT_ENTRY,
1562 PW_SHORT_GUIDE_CONFIRM,
1564 setting_password_main_entry_changed_cb,
1565 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1567 SETTING_PW_UG_SIM_MAX_LENGTH,
1568 0, "0123456789", NULL);
1574 ecore_idler_add(__focus_on_idler, ad);
1578 static int setting_password_main_clear_2line_password(void *data)
1581 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1582 "[Setting > Password] Data parameter is NULL");
1584 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1585 Evas_Object *layout = NULL;
1587 retv_if(NULL == ad->ed_pw1, -1);
1588 ad->ed_pw1->sub_desc = NULL;
1589 ad->ed_pw1->isFocusFlag = FALSE;
1590 elm_entry_entry_set(ad->ed_pw1->eo_check, "");
1591 layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
1592 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1594 retv_if(NULL == ad->ed_pw2, -1);
1595 ad->ed_pw2->sub_desc = NULL;
1596 ad->ed_pw2->isFocusFlag = FALSE;
1597 elm_entry_entry_set(ad->ed_pw2->eo_check, "");
1598 layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
1599 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1603 static int setting_password_main_draw_3line_password(void *data, void *cb)
1606 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1607 "[Setting > Password] Data parameter is NULL");
1609 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1610 Elm_Input_Panel_Layout ime_style = ELM_INPUT_PANEL_LAYOUT_NORMAL;
1612 switch (ad->view_type) {
1613 case SETTING_PW_TYPE_CHANGE_PASSWORD:
1615 setting_create_Gendial_field_entry(ad->scroller,
1617 (ad->itc_variable_height),
1619 SWALLOW_Type_LAYOUT_ENTRY,
1621 "IDS_ST_BODY_CURRENT_PASSWORD",
1623 setting_password_main_entry_changed_cb,
1626 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
1630 setting_create_Gendial_field_entry(ad->scroller,
1632 (ad->itc_variable_height),
1634 SWALLOW_Type_LAYOUT_ENTRY,
1636 "IDS_ST_BODY_NEW_PASSWORD",
1638 setting_password_main_entry_changed_cb,
1641 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
1645 setting_create_Gendial_field_entry(ad->scroller,
1647 (ad->itc_variable_height),
1649 SWALLOW_Type_LAYOUT_ENTRY,
1651 "IDS_ST_BODY_CONFIRM_PASSWORD",
1653 setting_password_main_entry_changed_cb,
1656 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
1659 if(ad->mdm_data != NULL)
1661 ad->mdm_policy = (mdm_password_policy_t*)(ad->mdm_data->data);
1663 if(ad->mdm_policy->quality != MDM_PASSWORD_QUALITY_UNSPECIFIED)
1664 elm_genlist_item_append(ad->scroller, &(ad->itc_mdm_desc), ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1669 case SETTING_PW_TYPE_CHANGE_PIN1:
1671 setting_create_Gendial_field_entry(ad->scroller,
1673 (ad->itc_variable_height),
1675 SWALLOW_Type_LAYOUT_ENTRY,
1677 PW_SHORT_GUIDE_CURRENT,
1679 setting_password_main_entry_changed_cb,
1680 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1682 SETTING_PW_UG_PIN_MAX_LENGTH,
1683 0, "0123456789", NULL);
1686 setting_create_Gendial_field_entry(ad->scroller,
1688 (ad->itc_variable_height),
1690 SWALLOW_Type_LAYOUT_ENTRY,
1694 setting_password_main_entry_changed_cb,
1695 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1697 SETTING_PW_UG_PIN_MAX_LENGTH,
1698 0, "0123456789", NULL);
1701 setting_create_Gendial_field_entry(ad->scroller,
1703 (ad->itc_variable_height),
1705 SWALLOW_Type_LAYOUT_ENTRY,
1707 PW_SHORT_GUIDE_CONFIRM,
1709 setting_password_main_entry_changed_cb,
1710 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1712 SETTING_PW_UG_PIN_MAX_LENGTH,
1713 0, "0123456789", NULL);
1716 case SETTING_PW_TYPE_CHANGE_PIN2:
1718 setting_create_Gendial_field_entry(ad->scroller,
1720 (ad->itc_variable_height),
1722 SWALLOW_Type_LAYOUT_ENTRY,
1724 PW_SHORT_GUIDE_CURRENT,
1726 setting_password_main_entry_changed_cb,
1727 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1729 SETTING_PW_UG_PIN_MAX_LENGTH,
1730 0, "0123456789", NULL);
1733 setting_create_Gendial_field_entry(ad->scroller,
1735 (ad->itc_variable_height),
1737 SWALLOW_Type_LAYOUT_ENTRY,
1741 setting_password_main_entry_changed_cb,
1742 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1744 SETTING_PW_UG_PIN_MAX_LENGTH,
1745 0, "0123456789", NULL);
1748 setting_create_Gendial_field_entry(ad->scroller,
1750 (ad->itc_variable_height),
1752 SWALLOW_Type_LAYOUT_ENTRY,
1754 PW_SHORT_GUIDE_CONFIRM,
1756 setting_password_main_entry_changed_cb,
1757 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1759 SETTING_PW_UG_PIN_MAX_LENGTH,
1760 0, "0123456789", NULL);
1763 case SETTING_PW_TYPE_PIN1_BLOCKED:
1765 setting_create_Gendial_field_entry(ad->scroller,
1767 (ad->itc_variable_height),
1769 SWALLOW_Type_LAYOUT_ENTRY,
1771 "IDS_ST_BODY_PUK1_CODE",
1773 setting_password_main_entry_changed_cb,
1774 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1776 SETTING_PW_UG_PIN_MAX_LENGTH,
1777 0, "0123456789", NULL);
1780 setting_create_Gendial_field_entry(ad->scroller,
1782 (ad->itc_variable_height),
1784 SWALLOW_Type_LAYOUT_ENTRY,
1786 "IDS_ST_BODY_NEW_PIN1",
1788 setting_password_main_entry_changed_cb,
1789 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1791 SETTING_PW_UG_PIN_MAX_LENGTH,
1792 0, "0123456789", NULL);
1795 setting_create_Gendial_field_entry(ad->scroller,
1797 (ad->itc_variable_height),
1799 SWALLOW_Type_LAYOUT_ENTRY,
1801 "IDS_ST_BODY_CONFIRM_NEW_PIN1",
1803 setting_password_main_entry_changed_cb,
1804 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1806 SETTING_PW_UG_PIN_MAX_LENGTH,
1807 0, "0123456789", NULL);
1810 case SETTING_PW_TYPE_PIN2_BLOCKED:
1812 setting_create_Gendial_field_entry(ad->scroller,
1814 (ad->itc_variable_height),
1816 SWALLOW_Type_LAYOUT_ENTRY,
1818 "IDS_ST_BODY_PUK2", NULL,
1819 setting_password_main_entry_changed_cb,
1820 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1822 SETTING_PW_UG_PIN_MAX_LENGTH,
1823 0, "0123456789", NULL);
1826 setting_create_Gendial_field_entry(ad->scroller,
1828 (ad->itc_variable_height),
1830 SWALLOW_Type_LAYOUT_ENTRY,
1832 "IDS_ST_BODY_NEW_PIN2",
1834 setting_password_main_entry_changed_cb,
1835 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1837 SETTING_PW_UG_PIN_MAX_LENGTH,
1838 0, "0123456789", NULL);
1841 setting_create_Gendial_field_entry(ad->scroller,
1843 (ad->itc_variable_height),
1845 SWALLOW_Type_LAYOUT_ENTRY,
1847 "IDS_ST_BODY_CONFIRM_NEW_PIN2",
1849 setting_password_main_entry_changed_cb,
1850 ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
1852 SETTING_PW_UG_PIN_MAX_LENGTH,
1853 0, "0123456789", NULL);
1859 ecore_idler_add(__focus_on_idler, ad);
1863 static int setting_password_main_clear_3line_password(void *data)
1866 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
1867 "[Setting > Password] Data parameter is NULL");
1869 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1870 Evas_Object *layout = NULL;
1872 retv_if(NULL == ad->ed_pw1, -1);
1873 ad->ed_pw1->sub_desc = NULL;
1874 ad->ed_pw1->isFocusFlag = FALSE;
1875 elm_entry_entry_set(ad->ed_pw1->eo_check, "");
1876 layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
1877 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1879 retv_if(NULL == ad->ed_pw2, -1);
1880 ad->ed_pw2->sub_desc = NULL;
1881 ad->ed_pw2->isFocusFlag = FALSE;
1882 elm_entry_entry_set(ad->ed_pw2->eo_check, "");
1883 layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
1884 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1886 retv_if(NULL == ad->ed_pw3, -1);
1887 ad->ed_pw3->sub_desc = NULL;
1888 ad->ed_pw3->isFocusFlag = FALSE;
1889 elm_entry_entry_set(ad->ed_pw3->eo_check, "");
1890 layout = elm_object_parent_widget_get(ad->ed_pw3->eo_check);
1891 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
1895 static int setting_password_main_check_simple_password(const char *collection)
1897 retv_if(collection == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1899 int sp_len = safeStrLen(collection);
1903 SETTING_TRACE_DEBUG("collection length is %d", sp_len);
1906 return SETTING_RETURN_FAIL;
1908 /* check if digit. */
1909 for(index = 0; index < sp_len; index++)
1911 temp = (char)(collection[index]);
1912 if((temp < '0') || ( temp > '9'))
1913 return SETTING_RETURN_FAIL;
1915 SETTING_TRACE_DEBUG("temp %c", temp);
1918 return SETTING_RETURN_SUCCESS;
1921 static int setting_password_main_check_1line_password(void *data)
1924 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1926 SettingPasswordUG *ad = (SettingPasswordUG *) data;
1928 const char *entry_str = ad->ed_pw1->sub_desc;
1929 ad->focus_data = ad->ed_pw1;
1932 if (isEmptyStr(entry_str)) {
1933 #ifdef SUPPORT_POPUP
1934 setting_password_ug_create_popup_notitle_nobtn(ad,
1935 _("IDS_ST_BODY_PASSWORD_EMPTY"),
1938 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
1941 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
1945 int entry_str_len = safeStrLen(entry_str);
1946 switch (ad->view_type) {
1947 case SETTING_PW_TYPE_PASSWORD:
1949 if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
1950 || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH)
1952 setting_password_main_warning_entry_added_byte_popup(ad,
1953 SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH, SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
1954 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
1961 if( _count_string(entry_str, &letter, &digit, &symbol) == SETTING_RETURN_SUCCESS)
1964 return SETTING_PW_ERROR_INCLUDE_NO_LETTER;
1969 case SETTING_PW_TYPE_PIN_LOCK_ON:
1970 case SETTING_PW_TYPE_PIN_LOCK_OFF:
1972 if (entry_str_len < SETTING_PW_UG_PIN_MIN_LENGTH
1973 || entry_str_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
1974 setting_password_main_warning_entry_added_byte_popup
1975 (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
1976 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
1980 case SETTING_PW_TYPE_SIM_LOCK_OFF:
1982 if (entry_str_len < SETTING_PW_UG_SIM_MIN_LENGTH
1983 || entry_str_len > SETTING_PW_UG_SIM_MAX_LENGTH) {
1984 setting_password_main_warning_entry_added_byte_popup
1985 (ad, SETTING_PW_UG_SIM_MIN_LENGTH, SETTING_PW_UG_SIM_MAX_LENGTH);
1986 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
1992 return SETTING_RETURN_SUCCESS;
1996 int _count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym)
1998 SETTING_TRACE_BEGIN;
1999 retv_if(str == NULL || cnt_letter == NULL || cnt_digit == NULL || cnt_sym == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2001 int length = strlen(str);
2010 SETTING_TRACE_DEBUG("[DEBUG] invalid input length");
2011 return SETTING_RETURN_FAIL;
2014 for(index = 0; index < length; index++)
2016 temp = (char)(str[index]);
2017 SETTING_TRACE_DEBUG("temp %c", temp);
2019 if((temp >= '0') && (temp <= '9')) /* digit */
2023 else if((temp >= 'a') && (temp <= 'z')) /* lower letter */
2027 else if((temp >= 'A') && (temp <= 'Z')) /* upper letter */
2031 else if((temp >= ' ') && (temp <= '~')) /* symbol means special char that enables to input from IME. */
2036 SETTING_TRACE_DEBUG("%s includes %d letters, %d digits, and %d symbols", str, letter, digit, symbol);
2037 *cnt_letter = letter;
2040 return SETTING_RETURN_SUCCESS;
2043 int _check_min_length(int str_length, int min_length)
2045 /* if min_length is 0~3, it operates the same as 4. */
2046 if((min_length < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH)
2047 && (str_length < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH))
2049 return SETTING_RETURN_FAIL;
2051 else if(min_length < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH)
2055 else if((min_length > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH)
2056 || (str_length > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH))
2058 return SETTING_RETURN_FAIL;
2060 else if(min_length > str_length)
2062 return SETTING_RETURN_FAIL;
2065 return SETTING_RETURN_SUCCESS;
2068 int _check_min_complex(int min_complex, int digit, int symbol)
2076 SETTING_TRACE_DEBUG("[ERROR] should include 1 digit at list.");
2077 return SETTING_RETURN_FAIL;
2081 if((digit < 1) || (symbol < 1))
2083 SETTING_TRACE_DEBUG("[ERROR] should include 1 digit and 1 symbol at list.");
2084 return SETTING_RETURN_FAIL;
2088 if((digit >= 1) && (symbol >= 2))
2092 else if((digit >= 2) && (symbol >= 1))
2098 SETTING_TRACE_DEBUG("[ERROR] digits or symbols are not enough.");
2099 return SETTING_RETURN_FAIL;
2103 if((digit >= 1) && (symbol >= 3))
2107 else if((digit >= 3) && (symbol >= 1))
2111 else if((digit >= 2) && (symbol >= 2))
2117 SETTING_TRACE_DEBUG("[ERROR] digits or symbols are not enough.");
2118 return SETTING_RETURN_FAIL;
2122 SETTING_TRACE_DEBUG("unknown value of min_complex, %d", min_complex);
2124 return SETTING_RETURN_SUCCESS;
2127 int _is_numeric(const char *str)
2129 SETTING_TRACE_BEGIN;
2130 int length = strlen(str);
2136 SETTING_TRACE_DEBUG("[DEBUG] invalid input length");
2137 return SETTING_RETURN_FAIL;
2139 for(index = 0; index < length; index++)
2141 temp = (char)(str[index]);
2142 if((temp < '0') || ( temp > '9'))
2144 SETTING_TRACE_DEBUG("[DEBUG] %c is not a digit", temp);
2145 return SETTING_RETURN_FAIL;
2148 SETTING_TRACE_DEBUG("temp %c", temp);
2150 return SETTING_RETURN_SUCCESS;
2153 static int setting_password_main_match_with_mdm_policy(const char* input, mdm_password_policy_t *policy)
2155 retv_if(input == NULL || policy == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2160 int length = strlen(input);
2163 if(_count_string(input, &letter, &digit, &symbol) != SETTING_RETURN_SUCCESS)
2164 return SETTING_RETURN_FAIL;
2166 if(letter < 1) /* should include 1 letter at least. */
2167 return SETTING_PW_ERROR_INCLUDE_NO_LETTER;
2169 ret = _check_min_length(length, policy->min_length);
2170 if(ret != SETTING_RETURN_SUCCESS)
2172 SETTING_TRACE_DEBUG("[ERROR] _check_min_length(): invalid return %d", ret);
2173 return SETTING_PW_ERROR_INVALID_LENGTH;
2176 if(policy->quality == MDM_PASSWORD_QUALITY_ALPHANUMERIC)
2178 ret = _check_min_complex(policy->min_complex, digit, symbol);
2179 if(ret != SETTING_RETURN_SUCCESS)
2181 SETTING_TRACE_DEBUG("[ERROR] _check_min_complex(): invalid return %d", ret);
2182 return SETTING_PW_ERROR_NO_MATCH_MIN_COMPLEX;
2187 int cflags = REG_EXTENDED;
2193 if((policy->pattern != NULL) && (strlen(policy->pattern) > 0))
2195 ret = regcomp(®, policy->pattern, cflags);
2198 SETTING_TRACE_DEBUG("[DEBUG] fail to compile pattern");
2199 return SETTING_RETURN_FAIL;
2201 ret = regexec(®, policy->pattern, 1, &pmatch, eflags);
2204 SETTING_TRACE_DEBUG("[DEBUG] input does not match with pattern");
2205 return SETTING_RETURN_FAIL;
2207 match_len = pmatch.rm_eo - pmatch.rm_so;
2208 if((pmatch.rm_so != 0) || (match_len != strlen(policy->pattern)))
2210 SETTING_TRACE_DEBUG("[DEBUG] input does not match with pattern");
2211 return SETTING_RETURN_FAIL;
2216 // 3. no need to check max_num_wipe, expire time, and history count
2218 return SETTING_RETURN_SUCCESS;
2222 static int setting_password_main_check_2line_password(void *data)
2225 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2227 SettingPasswordUG *ad = (SettingPasswordUG *) data;
2229 const char *entry_str1 = ad->ed_pw1->sub_desc;
2230 const char *entry_str2 = ad->ed_pw2->sub_desc;
2231 ad->focus_data = ad->ed_pw1;
2234 if (isEmptyStr(entry_str1)) {
2235 #ifdef SUPPORT_POPUP
2236 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2238 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2240 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
2243 if (isEmptyStr(entry_str2)) {
2244 ad->focus_data = ad->ed_pw2;
2245 #ifdef SUPPORT_POPUP
2246 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2248 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2250 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
2254 int entry_str_len = safeStrLen(entry_str1);
2255 switch (ad->view_type) {
2256 case SETTING_PW_TYPE_SET_PASSWORD:
2258 if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
2259 || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH)
2261 setting_password_main_warning_entry_added_byte_popup
2262 (ad, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH, SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
2263 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2268 case SETTING_PW_TYPE_SIM_LOCK_ON:
2270 if (entry_str_len < SETTING_PW_UG_SIM_MIN_LENGTH
2271 || entry_str_len > SETTING_PW_UG_SIM_MAX_LENGTH) {
2272 setting_password_main_warning_entry_added_byte_popup
2273 (ad, SETTING_PW_UG_SIM_MIN_LENGTH, SETTING_PW_UG_SIM_MAX_LENGTH);
2274 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2283 if (0 != safeStrCmp(entry_str1, entry_str2)) {
2284 #ifdef SUPPORT_POPUP
2285 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
2287 setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
2289 return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
2293 if(ad->view_type == SETTING_PW_TYPE_SET_PASSWORD)
2299 if( _count_string(entry_str1, &letter, &digit, &symbol) == SETTING_RETURN_SUCCESS)
2302 return SETTING_PW_ERROR_INCLUDE_NO_LETTER;
2308 if(ad->view_type == SETTING_PW_TYPE_MDM_NEW_POLICY)
2311 ret = setting_password_main_match_with_mdm_policy(entry_str1, ad->mdm_policy);
2312 if(ret == SETTING_RETURN_FAIL)
2313 return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
2316 return SETTING_RETURN_SUCCESS;
2320 setting_password_main_warning_entry_added_byte_popup(SettingPasswordUG *ad,
2323 char str[MAX_SPECIALIZITION_LEN + 1] = { 0 };
2325 snprintf(str, MAX_SPECIALIZITION_LEN, "%d~%d %s", min, max, _("characters required"));
2327 /* SETTING_TRACE("str:%s", str); */
2328 #ifdef SUPPORT_POPUP
2329 setting_password_ug_create_popup_notitle_nobtn(ad, str, FALSE);
2331 setting_password_ug_display_desc(ad, str, FALSE);
2335 static int setting_password_main_check_3line_password(void *data)
2338 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2340 SettingPasswordUG *ad = (SettingPasswordUG *) data;
2342 const char *entry_str1 = ad->ed_pw1->sub_desc;
2343 const char *entry_str2 = ad->ed_pw2->sub_desc;
2344 const char *entry_str3 = ad->ed_pw3->sub_desc;
2345 ad->focus_data = ad->ed_pw1;
2348 if (isEmptyStr(entry_str1)) {
2349 #ifdef SUPPORT_POPUP
2350 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2352 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2354 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
2357 if (isEmptyStr(entry_str2)) {
2358 ad->focus_data = ad->ed_pw2;
2359 #ifdef SUPPORT_POPUP
2360 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2362 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2364 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
2367 if (isEmptyStr(entry_str3)) {
2368 ad->focus_data = ad->ed_pw3;
2369 #ifdef SUPPORT_POPUP
2370 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2372 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
2374 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
2378 int entry_str1_len = safeStrLen(entry_str1);
2379 int entry_str2_len = safeStrLen(entry_str2);
2380 int entry_str3_len = safeStrLen(entry_str3);
2381 switch (ad->view_type) {
2382 case SETTING_PW_TYPE_CHANGE_PASSWORD:
2384 if (entry_str1_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
2385 || entry_str1_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
2386 setting_password_main_warning_entry_added_byte_popup
2387 (ad, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH, SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
2388 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2390 if (entry_str2_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
2391 || entry_str2_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
2392 ad->focus_data = ad->ed_pw2;
2393 setting_password_main_warning_entry_added_byte_popup
2394 (ad, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH, SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
2395 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2397 if (entry_str3_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
2398 || entry_str3_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
2399 ad->focus_data = ad->ed_pw3;
2400 setting_password_main_warning_entry_added_byte_popup
2401 (ad, SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH, SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
2402 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2407 case SETTING_PW_TYPE_PIN1_BLOCKED:
2408 case SETTING_PW_TYPE_PIN2_BLOCKED:
2409 case SETTING_PW_TYPE_CHANGE_PIN1:
2410 case SETTING_PW_TYPE_CHANGE_PIN2:
2412 if (entry_str1_len < SETTING_PW_UG_PIN_MIN_LENGTH
2413 || entry_str1_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
2414 setting_password_main_warning_entry_added_byte_popup
2415 (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
2416 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2418 if (entry_str2_len < SETTING_PW_UG_PIN_MIN_LENGTH
2419 || entry_str2_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
2420 ad->focus_data = ad->ed_pw2;
2421 setting_password_main_warning_entry_added_byte_popup
2422 (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
2423 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2425 if (entry_str3_len < SETTING_PW_UG_PIN_MIN_LENGTH
2426 || entry_str3_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
2427 ad->focus_data = ad->ed_pw3;
2428 setting_password_main_warning_entry_added_byte_popup
2429 (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
2430 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
2439 if (0 != safeStrCmp(entry_str2, entry_str3)) {
2440 ad->focus_data = ad->ed_pw2;
2441 #ifdef SUPPORT_POPUP
2442 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
2444 setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
2446 return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
2450 if(ad->view_type == SETTING_PW_TYPE_CHANGE_PASSWORD)
2456 if( _count_string(entry_str2, &letter, &digit, &symbol) == SETTING_RETURN_SUCCESS)
2459 return SETTING_PW_ERROR_INCLUDE_NO_LETTER;
2464 return SETTING_RETURN_SUCCESS;
2468 setting_password_main_click_softkey_cancel_cb(void *data, Evas_Object *obj,
2472 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
2474 SettingPasswordUG *ad = (SettingPasswordUG *) data;
2478 /* add this below for removing IMF faster */
2479 /* need to discuss with IMF or Entry developer more */
2480 elm_object_focus_set(ad->sp_entry4, EINA_FALSE);
2484 /* send result : Cancel */
2486 if(service_create(&svc))
2489 service_add_extra_data(svc, "result", "Cancel");
2490 ug_send_result(ad->ug, svc);
2491 SETTING_TRACE("Send Result : %s\n", "Cancel");
2493 service_destroy(svc);
2495 /* Send destroy request */
2496 ug_destroy_me(ad->ug);
2501 setting_password_main_click_softkey_done_cb(void *data, Evas_Object *obj,
2505 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
2509 char svalue[SHA256_DIGEST_LENGTH] = { 0, };
2511 memset(svalue, 0x0, SHA256_DIGEST_LENGTH);
2513 SettingPasswordUG *ad = (SettingPasswordUG *) data;
2515 if (service_create(&svc))
2518 SETTING_TRACE("ad->view_type:%d", ad->view_type);
2520 switch (ad->view_type) {
2521 case SETTING_PW_TYPE_PASSWORD:
2522 ret = setting_password_main_check_1line_password(ad);
2524 if (ret == SETTING_RETURN_SUCCESS) {
2525 const char *entry_str;
2526 entry_str = ad->ed_pw1->sub_desc;
2528 ret = setting_password_check_password(entry_str, NULL, NULL);
2529 if(ret == SETTING_RETURN_SUCCESS)
2533 if(safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_PASSWORD") == 0) {
2536 setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT,
2537 PHONE_LOCK_ATTEMPS_MAX, &err);
2538 setting_retm_if(err == SETTING_RETURN_FAIL, "[Error] set value of vconf fail.");
2540 else if(0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_ENTER_LOCK_TYPE"))
2542 service_add_extra_data(svc, "current", entry_str);
2545 /* Incorrect Password. Display Popup. */
2546 setting_password_main_clear_1line_password(ad);
2547 ad->focus_data = ad->ed_pw1;
2548 if (safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_PASSWORD") == 0) {
2549 setting_password_ug_check_attemps_left(ad);
2552 #ifdef SUPPORT_POPUP
2553 setting_password_ug_create_popup_notitle_nobtn(ad,
2554 _("IDS_COM_POP_INCORRECT_PASSWORD"), FALSE);
2556 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
2558 if(safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_RESET") == 0)
2560 service_add_extra_data(svc, "result", "Fail");
2561 ug_send_result(ad->ug, svc);
2562 SETTING_TRACE("Send Result : %s\n", "Fail");
2564 service_destroy(svc);
2565 /* Send destroy request */
2566 ug_destroy_me(ad->ug);
2571 setting_password_main_clear_1line_password(ad);
2577 case SETTING_PW_TYPE_MDM_NEW_POLICY:
2578 SETTING_TRACE("case SETTING_PW_TYPE_MDM_NEW_POLICY");
2579 ret = setting_password_main_check_2line_password(ad);
2581 if (SETTING_RETURN_SUCCESS == ret)
2583 const char *entry_str;
2584 entry_str = ad->ed_pw1->sub_desc;
2586 if (isEmptyStr(entry_str)) {
2587 ad->focus_data = ad->ed_pw1;
2588 SETTING_TRACE_DEBUG("%s*** [ERR] elm_entry_entry_get return NULL ***%s",
2589 SETTING_FONT_RED, SETTING_FONT_BLACK);
2594 ret = setting_password_set_password(ad->step1_str, entry_str, ad);
2596 ret = setting_password_set_password(NULL, entry_str, ad);
2598 if(ret == SETTING_RETURN_SUCCESS)
2600 FREE(ad->step1_str);
2602 SETTING_TRACE_DEBUG("[DEBUG] success to set password");
2604 /* To Do : 1. phone lock on */
2605 /* 2. if quality is something, simple password on.*/
2606 /* 3. else, simple password off */
2607 setting_set_bool_slp_key(BOOL_SLP_SETTING_POWER_ON_LOCK,
2608 SETTING_ON_OFF_BTN_ON, &err);
2609 setting_retm_if(err == SETTING_RETURN_FAIL, "[Error] set value of vconf fail.");
2611 setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT,
2612 ad->mdm_policy->max_num_wipe, &err);
2613 setting_retm_if(err == SETTING_RETURN_FAIL, "[Error] set value of vconf fail.");
2615 vconf_set_bool(VCONFKEY_SETAPPL_STATE_SIMPLE_PASSWORD_BOOL, FALSE);
2619 SETTING_TRACE_DEBUG("[DEBUG] send status to mdm");
2620 mdm_set_password_status(MDM_PASSWORD_CHANGED);
2621 setting_password_ug_create_popup_notitle_nobtn(ad,
2622 _("IDS_ST_POP_NEW_PASSWD_SAVED"), TRUE);
2624 else if(ret == SECURITY_SERVER_API_ERROR_PASSWORD_REUSED)
2626 setting_password_ug_display_mdm_desc(ad, PASSWORD_MUST_NOT_MATCH_PREV);
2631 setting_password_ug_display_mdm_desc(ad, ENTER_ANOTHER_PASSWORD);
2632 setting_password_main_clear_2line_password(ad);
2638 setting_password_ug_display_mdm_desc(ad, ENTER_ANOTHER_PASSWORD);
2639 setting_password_main_clear_2line_password(ad);
2644 case SETTING_PW_TYPE_SET_PASSWORD:
2646 SETTING_TRACE("case SETTING_PW_TYPE_SET_PASSWORD");
2647 ret = setting_password_main_check_2line_password(ad);
2649 if (SETTING_RETURN_SUCCESS == ret) {
2650 const char *entry_str;
2651 entry_str = ad->ed_pw1->sub_desc;
2653 if (isEmptyStr(entry_str)) {
2654 ad->focus_data = ad->ed_pw1;
2655 SETTING_TRACE_DEBUG("%s*** [ERR] elm_entry_entry_get return NULL ***%s",
2656 SETTING_FONT_RED, SETTING_FONT_BLACK);
2657 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2661 ret = setting_password_set_password(ad->cur_pwd, entry_str,ad);
2663 /* Modify Setting Password */
2664 if (SETTING_RETURN_FAIL != ret) {
2666 service_add_extra_data(svc, "current", entry_str);
2667 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_NEW_PASSWD_SAVED"), TRUE);
2669 ad->focus_data = ad->ed_pw1;
2671 SETTING_TRACE_DEBUG("%s*** [ERR] setting_set_string_slp_key err=%d ***%s",
2672 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
2673 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2677 setting_password_main_clear_2line_password(ad);
2683 case SETTING_PW_TYPE_MDM_CHANGE_PASSWORD:
2685 SETTING_TRACE_DEBUG("case MDM_CHANGE_PASSWORD_STEP1");
2686 ad->step1_str = strdup(ad->ed_pw1->sub_desc);
2687 SETTING_TRACE_DEBUG("step1_str : %s", ad->step1_str);
2689 unsigned int remain_attempt = ATTEMPT_INFINITE;
2690 unsigned int valid_seconds = 0;
2691 char guide_text[DESC_BUF1_SIZE] = {0,};
2693 if(ad->step1_str == NULL)
2695 SETTING_TRACE_DEBUG("step1_str is NULL");
2699 ret = setting_password_check_password(ad->step1_str, &remain_attempt, &valid_seconds);
2700 // check current password
2701 if(ret != SETTING_RETURN_SUCCESS){
2702 setting_password_main_clear_1line_password(ad);
2703 ad->focus_data = ad->ed_pw1;
2704 FREE(ad->step1_str);
2706 if(valid_seconds == 0)
2708 mdm_set_password_status(MDM_PASSWORD_EXPIRED);
2709 setting_password_ug_display_mdm_desc(ad, PASSWORD_EXPIRED);
2713 if((remain_attempt > 0) && (ad->mdm_policy->recoverable == TRUE))
2715 // display guide text. remain_attempt with recovery mode
2716 char temp[DESC_BUF1_SIZE] = {0,};
2717 snprintf(temp, sizeof(temp), ATTEMPTS_DESC, remain_attempt);
2718 snprintf(guide_text, sizeof(guide_text), "%s. %s.", PW_ERR_DESC, temp);
2719 setting_password_ug_display_mdm_desc(ad, guide_text);
2721 else if((remain_attempt > 0) && (ad->mdm_policy->recoverable == FALSE))
2723 // display guide text. remain_attempt with wipe mode
2724 char temp[DESC_BUF1_SIZE] = {0,};
2725 snprintf(temp, sizeof(temp), ATTEMPTS_DESC, remain_attempt);
2726 snprintf(guide_text, sizeof(guide_text), "%s. %s.", PW_ERR_DESC, temp);
2727 setting_password_ug_display_mdm_desc(ad, guide_text);
2729 else if((remain_attempt == 0) && (ad->mdm_policy->recoverable == TRUE))
2731 mdm_set_password_status(MDM_PASSWORD_FAILED);
2732 setting_password_ug_display_mdm_desc(ad, MAX_NUM_REACHED);
2734 else if((remain_attempt == 0) && (ad->mdm_policy->recoverable == FALSE))
2736 mdm_set_password_status(MDM_RECOVERY_PASSWORD_FAILED);
2737 setting_password_ug_display_mdm_desc(ad, MAX_NUM_REACHED);
2741 SETTING_TRACE_DEBUG("Success to check step1_str");
2743 elm_genlist_clear(ad->scroller);
2744 if(((ad->mdm_policy->quality == MDM_PASSWORD_QUALITY_SOMETHING)
2745 || (ad->mdm_policy->quality == MDM_PASSWORD_QUALITY_NUMERIC)))
2747 if(ad->mdm_policy->min_length <= SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH)
2749 ad->view_type = SETTING_PW_TYPE_MDM_TO_SIMPLE;
2750 __create_common_password_frame(ad);
2751 setting_password_main_draw_simple_password(ad, 1);
2755 ad->view_type = SETTING_PW_TYPE_MDM_NEW_POLICY;
2756 setting_password_main_draw_2line_password(ad, NULL);
2759 else if(ad->mdm_policy->quality == MDM_PASSWORD_QUALITY_UNSPECIFIED)
2761 ad->view_type = SETTING_PW_TYPE_MDM_TO_SIMPLE;
2762 __create_common_password_frame(ad);
2763 setting_password_main_draw_simple_password(ad, 1);
2767 ad->view_type = SETTING_PW_TYPE_MDM_NEW_POLICY;
2768 setting_password_main_draw_2line_password(ad, NULL);
2774 case SETTING_PW_TYPE_CHANGE_PASSWORD:
2776 SETTING_TRACE("case SETTING_PW_TYPE_CHANGE_PASSWORD");
2777 ret = setting_password_main_check_3line_password(ad);
2779 if (SETTING_RETURN_SUCCESS == ret) {
2780 const char *entry_str;
2782 entry_str = ad->ed_pw1->sub_desc;
2784 ret = setting_password_check_password(entry_str, NULL, NULL);
2786 if(ret != SETTING_RETURN_SUCCESS){
2787 setting_password_main_clear_3line_password(ad);
2788 ad->focus_data = ad->ed_pw1;
2790 #ifdef SUPPORT_POPUP
2791 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_INCORRECT_PASSWORD"), FALSE);
2793 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
2799 entry_str = ad->ed_pw2->sub_desc;
2801 if (isEmptyStr(entry_str)) {
2802 ad->focus_data = ad->ed_pw2;
2803 SETTING_TRACE_DEBUG("%s*** [ERR] elm_entry_entry_get(pw2) return NULL ***%s",
2804 SETTING_FONT_RED, SETTING_FONT_BLACK);
2805 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2810 if(ad->mdm_data != NULL)
2812 ad->mdm_policy = (mdm_password_policy_t*)(ad->mdm_data->data);
2814 if(ad->mdm_policy->quality != MDM_PASSWORD_QUALITY_UNSPECIFIED)
2816 SETTING_TRACE_DEBUG("checking policy");
2817 ret = setting_password_main_match_with_mdm_policy(entry_str, ad->mdm_policy);
2818 if(ret != SETTING_RETURN_SUCCESS)
2820 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2827 ret = setting_password_set_password(ad->ed_pw1->sub_desc, entry_str, ad);
2829 /* Modify Setting Password */
2830 if (SETTING_RETURN_FAIL != ret) {
2832 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PASSWORD_CHANGED"), TRUE);
2834 ad->focus_data = ad->ed_pw2;
2836 SETTING_TRACE_DEBUG("%s*** [ERR] setting_set_string_slp_key err=%d ***%s",
2837 SETTING_FONT_RED, err, SETTING_FONT_BLACK);
2838 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2843 setting_password_main_clear_3line_password(ad);
2844 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
2850 case SETTING_PW_TYPE_PIN_LOCK_ON:
2852 SETTING_TRACE("case SETTING_PW_TYPE_PIN_LOCK_ON");
2854 ret = setting_password_main_check_1line_password(ad);
2855 if (ret == SETTING_RETURN_SUCCESS) {
2856 TelSimFacilityPw_t sim_sec_data = { 0, };
2857 int tapi_ret = TAPI_API_SUCCESS;
2858 const char *entry_str;
2860 entry_str = ad->ed_pw1->sub_desc;
2861 if (isEmptyStr(entry_str)) {
2862 ad->focus_data = ad->ed_pw1;
2863 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
2864 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2868 sim_sec_data.lock_type = TAPI_SIM_LOCK_SC;//TAPI_SIM_PTYPE_PIN1;
2869 sim_sec_data.pw = (unsigned char *)entry_str;
2870 sim_sec_data.pw_len = safeStrLen(entry_str);
2872 tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
2873 setting_password_main_clear_1line_password(ad);
2875 if (TAPI_API_SUCCESS != tapi_ret) {
2876 ad->focus_data = ad->ed_pw1;
2877 SETTING_TRACE_DEBUG("%s*** [ERR] tel_enable_sim_facility err=%d ***%s",
2878 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
2879 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2881 /* Success. Send Message to Caller for Modify Pin Lock slider status */
2882 SETTING_TRACE_DEBUG("*** [SUCCESS] tel_enable_sim_facility err=%d ***", tapi_ret);
2885 setting_password_main_clear_1line_password(ad);
2889 case SETTING_PW_TYPE_PIN_LOCK_OFF:
2891 SETTING_TRACE("case SETTING_PW_TYPE_PIN_LOCK_OFF");
2893 ret = setting_password_main_check_1line_password(ad);
2895 if (ret == SETTING_RETURN_SUCCESS) {
2896 TelSimFacilityPw_t sim_sec_data = { 0, };
2897 int tapi_ret = TAPI_API_SUCCESS;
2898 const char *entry_str;
2900 entry_str = ad->ed_pw1->sub_desc;
2901 if (isEmptyStr(entry_str)) {
2902 ad->focus_data = ad->ed_pw1;
2903 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
2904 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2908 sim_sec_data.lock_type = TAPI_SIM_LOCK_SC;//TAPI_SIM_PTYPE_PIN1
2909 sim_sec_data.pw = (unsigned char *)entry_str;
2910 sim_sec_data.pw_len = safeStrLen(entry_str);
2912 tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
2913 setting_password_main_clear_1line_password(ad);
2915 if (TAPI_API_SUCCESS != tapi_ret) {
2916 ad->focus_data = ad->ed_pw1;
2917 SETTING_TRACE_DEBUG("%s*** [ERR] tel_disable_sim_facility err=%d ***%s",
2918 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
2919 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2921 /* Success. Send Message to Caller for Modify Pin Lock slider status */
2924 setting_password_main_clear_1line_password(ad);
2928 case SETTING_PW_TYPE_PIN1_BLOCKED:
2930 /* PIN1 Status is "Blocked": User should input puk code and new pin1 code. */
2931 /* If puk code is correct and success to modify pin1 code, display pin1 code change popup */
2932 /* But, if this menu is "Pin Lock", pinlock status will not be changed. */
2933 SETTING_TRACE("case SETTING_PW_TYPE_PIN1_BLOCKED");
2934 ret = setting_password_main_check_3line_password(ad);
2936 if (ret == SETTING_RETURN_SUCCESS) {
2937 TelSimSecPw_t puk1_data = { 0, };
2938 TelSimSecPw_t pin1_data = { 0, };
2939 int tapi_ret = TAPI_API_SUCCESS;
2941 const char *new_pin1;
2943 puk = ad->ed_pw1->sub_desc;
2944 new_pin1 = ad->ed_pw2->sub_desc;
2945 if (isEmptyStr(puk)) {
2946 ad->focus_data = ad->ed_pw1;
2947 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2951 if (isEmptyStr(new_pin1)) {
2952 ad->focus_data = ad->ed_pw2;
2953 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2957 puk1_data.type = TAPI_SIM_PTYPE_PUK1;
2958 puk1_data.pw = (unsigned char *)puk;
2959 puk1_data.pw_len = safeStrLen(puk);
2961 pin1_data.type = TAPI_SIM_PTYPE_PIN1;
2962 pin1_data.pw = (unsigned char *)new_pin1;
2963 pin1_data.pw_len = safeStrLen(new_pin1);
2965 tapi_ret = tel_verify_sim_puks(ad->handle, &puk1_data, &pin1_data, setting_sim_verify_puks_cb, ad);
2966 setting_password_main_clear_3line_password(ad);
2968 if (TAPI_API_SUCCESS != tapi_ret) {
2969 ad->focus_data = ad->ed_pw1;
2970 SETTING_TRACE_DEBUG("%s*** [ERR] tel_verify_sim_puks err=%d ***%s",
2971 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
2972 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
2974 /* Success. Send Message to Caller for Modify Pin Lock slider status */
2978 setting_password_main_clear_3line_password(ad);
2982 case SETTING_PW_TYPE_PIN2_BLOCKED:
2984 SETTING_TRACE("case SETTING_PW_TYPE_PIN2_BLOCKED");
2985 ret = setting_password_main_check_3line_password(ad);
2987 if (ret == SETTING_RETURN_SUCCESS) {
2988 TelSimSecPw_t puk2_data = { 0, };
2989 TelSimSecPw_t pin2_data = { 0, };
2990 int tapi_ret = TAPI_API_SUCCESS;
2992 const char *new_pin2;
2994 puk = ad->ed_pw1->sub_desc;
2995 new_pin2 = ad->ed_pw2->sub_desc;
2996 if (isEmptyStr(puk)) {
2997 ad->focus_data = ad->ed_pw1;
2998 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3002 if (isEmptyStr(new_pin2)) {
3003 ad->focus_data = ad->ed_pw2;
3004 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3008 puk2_data.type = TAPI_SIM_PTYPE_PUK2;
3009 puk2_data.pw = (unsigned char *)puk;
3010 puk2_data.pw_len = safeStrLen(puk);
3012 pin2_data.type = TAPI_SIM_PTYPE_PIN2;
3013 pin2_data.pw = (unsigned char *)new_pin2;
3014 pin2_data.pw_len = safeStrLen(new_pin2);
3016 tapi_ret = tel_verify_sim_puks(ad->handle, &puk2_data, &pin2_data, setting_sim_verify_puks_cb, ad);
3017 setting_password_main_clear_3line_password(ad);
3019 if (TAPI_API_SUCCESS != tapi_ret) {
3020 ad->focus_data = ad->ed_pw1;
3021 SETTING_TRACE_DEBUG("%s*** [ERR] tel_verify_sim_puks err=%d ***%s",
3022 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
3023 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3025 /* Success. Send Message to Caller for Modify Pin Lock slider status */
3029 setting_password_main_clear_3line_password(ad);
3033 case SETTING_PW_TYPE_CHANGE_PIN1:
3035 SETTING_TRACE("case SETTING_PW_TYPE_CHANGE_PIN1");
3037 ret = setting_password_main_check_3line_password(ad);
3038 if (ret == SETTING_RETURN_SUCCESS) {
3041 TelSimSecPw_t sim_old_sec_data = { 0, };
3042 TelSimSecPw_t sim_new_sec_data = { 0, };
3043 int tapi_ret = TAPI_API_SUCCESS;
3045 old_pw = ad->ed_pw1->sub_desc;
3046 new_pw = ad->ed_pw2->sub_desc;
3047 if (isEmptyStr(old_pw)) {
3048 ad->focus_data = ad->ed_pw1;
3049 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3053 if (isEmptyStr(new_pw)) {
3054 ad->focus_data = ad->ed_pw2;
3055 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3059 sim_old_sec_data.type = sim_new_sec_data.type = TAPI_SIM_PTYPE_PIN1;
3060 sim_old_sec_data.pw = (unsigned char *)old_pw;
3061 sim_old_sec_data.pw_len = safeStrLen(old_pw);
3062 sim_new_sec_data.pw = (unsigned char *)new_pw;
3063 sim_new_sec_data.pw_len = safeStrLen(new_pw);
3065 tapi_ret = tel_change_sim_pins(ad->handle, &sim_old_sec_data, &sim_new_sec_data, setting_sim_change_pins_cb, ad);
3066 setting_password_main_clear_3line_password(ad);
3068 if (TAPI_API_SUCCESS != tapi_ret) {
3069 ad->focus_data = ad->ed_pw1;
3070 SETTING_TRACE_DEBUG("%s*** [ERR] TelTapiSimChangePIN err=%d ***%s",
3071 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
3072 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3074 /* Success popup and send message to caller */
3075 /* setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PIN1_CHANGED")); */
3078 setting_password_main_clear_3line_password(ad);
3082 case SETTING_PW_TYPE_CHANGE_PIN2:
3084 SETTING_TRACE("case SETTING_PW_TYPE_CHANGE_PIN2");
3085 ret = setting_password_main_check_3line_password(ad);
3086 if (ret == SETTING_RETURN_SUCCESS) {
3089 TelSimSecPw_t sim_old_sec_data = { 0, };
3090 TelSimSecPw_t sim_new_sec_data = { 0, };
3091 int tapi_ret = TAPI_API_SUCCESS;
3093 old_pw = ad->ed_pw1->sub_desc;
3094 new_pw = ad->ed_pw2->sub_desc;
3095 if (isEmptyStr(old_pw)) {
3096 ad->focus_data = ad->ed_pw1;
3097 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3101 if (isEmptyStr(new_pw)) {
3102 ad->focus_data = ad->ed_pw2;
3103 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3107 sim_old_sec_data.type = sim_new_sec_data.type = TAPI_SIM_PTYPE_PIN2;
3108 sim_old_sec_data.pw = (unsigned char *)old_pw;
3109 sim_old_sec_data.pw_len = safeStrLen(old_pw);
3110 sim_new_sec_data.pw = (unsigned char *)new_pw;
3111 sim_new_sec_data.pw_len = safeStrLen(new_pw);
3113 tapi_ret = tel_change_sim_pins(ad->handle, &sim_old_sec_data, &sim_new_sec_data, setting_sim_change_pins_cb, ad);
3114 setting_password_main_clear_3line_password(ad);
3116 if (TAPI_API_SUCCESS != tapi_ret) {
3117 ad->focus_data = ad->ed_pw1;
3118 SETTING_TRACE_DEBUG("%s*** [ERR] TelTapiSimChangePIN err=%d ***%s",
3119 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
3120 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3122 /* Success popup and send message to caller */
3123 /* setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PIN2_CHANGED")); */
3126 setting_password_main_clear_3line_password(ad);
3130 case SETTING_PW_TYPE_SIM_LOCK_ON:
3132 SETTING_TRACE("case SETTING_PW_TYPE_SIM_LOCK_ON");
3134 ret = setting_password_main_check_2line_password(ad);
3136 if (ret == SETTING_RETURN_SUCCESS) {
3137 TelSimFacilityPw_t sim_sec_data = { 0, };
3138 int tapi_ret = TAPI_API_SUCCESS;
3139 const char *entry_str;
3140 entry_str = ad->ed_pw1->sub_desc;
3141 if (isEmptyStr(entry_str)) {
3142 ad->focus_data = ad->ed_pw1;
3143 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3147 sim_sec_data.lock_type = TAPI_SIM_LOCK_PS;//TAPI_SIM_PTYPE_SIM
3148 sim_sec_data.pw = (unsigned char *)entry_str;
3149 sim_sec_data.pw_len = safeStrLen(entry_str);
3151 tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
3152 setting_password_main_clear_2line_password(ad);
3154 SETTING_TRACE("SIM Lock password : %s\n", (char *)(sim_sec_data.pw));
3155 if (TAPI_API_SUCCESS != tapi_ret) {
3156 ad->focus_data = ad->ed_pw1;
3157 SETTING_TRACE_DEBUG("%s*** [ERR] tel_enable_sim_facility err=%d ***%s",
3158 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
3159 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3161 /* Success. Send Message to Caller for Modify Pin Lock slider status */
3165 setting_password_main_clear_2line_password(ad);
3169 case SETTING_PW_TYPE_SIM_LOCK_OFF:
3171 SETTING_TRACE("case SETTING_PW_TYPE_SIM_LOCK_OFF");
3173 ret = setting_password_main_check_1line_password(ad);
3174 if (ret == SETTING_RETURN_SUCCESS) {
3175 TelSimFacilityPw_t sim_sec_data = { 0, };
3176 int tapi_ret = TAPI_API_SUCCESS;
3177 const char *entry_str;
3179 entry_str = ad->ed_pw1->sub_desc;
3180 if (isEmptyStr(entry_str)) {
3181 ad->focus_data = ad->ed_pw1;
3182 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3186 sim_sec_data.lock_type = TAPI_SIM_LOCK_PS;//TAPI_SIM_PTYPE_SIM
3187 sim_sec_data.pw = (unsigned char *)entry_str;
3188 sim_sec_data.pw_len = safeStrLen(entry_str);
3190 tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
3191 setting_password_main_clear_1line_password(ad);
3193 if (TAPI_API_SUCCESS != tapi_ret) {
3194 ad->focus_data = ad->ed_pw1;
3195 SETTING_TRACE_DEBUG("%s*** [ERR] tel_disable_sim_facility err=%d ***%s",
3196 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
3197 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3199 /* Success. Send Message to Caller for Modify Pin Lock slider status */
3203 setting_password_main_clear_1line_password(ad);
3208 case SETTING_PW_TYPE_FDN_MODE_ON:
3210 SETTING_TRACE("case SETTING_PW_TYPE_FDN_MODE_ON");
3211 ret = setting_password_main_check_1line_password(ad);
3213 if(ret == SETTING_RETURN_SUCCESS)
3215 const char *entry_str;
3216 int tapi_ret = TAPI_API_INVALID_INPUT;
3218 TelSimFacilityPw_t sim_sec_data = {0,};
3221 entry_str = ad->ed_pw1->sub_desc;
3222 if(isEmptyStr(entry_str))
3224 ad->focus_data = ad->ed_pw1;
3225 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
3226 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3229 sim_sec_data.lock_type = TAPI_SIM_LOCK_FD;//TAPI_SIM_PTYPE_PIN2;
3230 sim_sec_data.pw_len = safeStrLen(entry_str);
3231 sim_sec_data.pw = (unsigned char*)entry_str;
3233 tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
3234 setting_password_main_clear_1line_password(ad);
3236 if(tapi_ret != TAPI_API_SUCCESS)
3238 ad->focus_data = ad->ed_pw1;
3239 SETTING_TRACE_ERROR("[ERR] Failed to enable FDN. Tapi return %d", tapi_ret);
3240 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3245 if (service_create(&svc))
3248 service_add_extra_data(svc, "result", ad->view_type_string);
3249 ug_send_result(ad->ug, svc);
3250 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
3251 service_destroy(svc);
3252 //ug_destroy_me(ad->ug);
3257 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), TRUE);
3261 case SETTING_PW_TYPE_FDN_MODE_OFF:
3263 SETTING_TRACE("case SETTING_PW_TYPE_FDN_MODE_OFF");
3264 ret = setting_password_main_check_1line_password(ad);
3266 if(ret == SETTING_RETURN_SUCCESS)
3268 const char *entry_str;
3269 int tapi_ret = TAPI_API_INVALID_INPUT;
3271 TelSimFacilityPw_t sim_sec_data = {0,};
3273 entry_str = ad->ed_pw1->sub_desc;
3274 if(isEmptyStr(entry_str))
3276 ad->focus_data = ad->ed_pw1;
3277 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
3278 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3281 sim_sec_data.lock_type = TAPI_SIM_LOCK_FD;//TAPI_SIM_PTYPE_PIN2
3282 sim_sec_data.pw_len = safeStrLen(entry_str);
3283 sim_sec_data.pw = (unsigned char*)entry_str;
3285 tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
3286 setting_password_main_clear_1line_password(ad);
3288 if(tapi_ret != TAPI_API_SUCCESS)
3290 ad->focus_data = ad->ed_pw1;
3291 SETTING_TRACE_ERROR("[ERR] Failed to disable FDN. Tapi return %d", tapi_ret);
3292 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
3297 if (service_create(&svc))
3300 service_add_extra_data(svc, "result", ad->view_type_string);
3301 ug_send_result(ad->ug, svc);
3302 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
3304 service_destroy(svc);
3305 //ug_destroy_me(ad->ug);
3310 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), TRUE);
3320 service_add_extra_data(svc, "result", ad->view_type_string);
3321 ug_send_result(ad->ug, svc);
3322 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
3324 service_destroy(svc);
3325 /* Send destroy request */
3326 ug_destroy_me(ad->ug);