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 <setting-debug.h>
26 #include <dd-haptic.h>
27 #if SUPPORT_ENCRYPTION
30 #include <Ecore_IMF.h>
31 #include <Ecore_IMF_Evas.h>
37 #include <notification.h>
40 void __add_help_of_password_fails(int ret, SettingPasswordUG *ad);
42 static int setting_password_main_create(void *cb);
43 static int setting_password_main_destroy(void *cb);
44 static int setting_password_main_update(void *cb);
45 static int setting_password_main_cleanup(void *cb);
48 setting_view setting_view_password_main = {
49 .create = setting_password_main_create,
50 .destroy = setting_password_main_destroy,
51 .update = setting_password_main_update,
52 .cleanup = setting_password_main_cleanup,
56 static void setting_password_main_done_password(void *data);
57 static int __count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym);
59 extern struct _pw_item pw_its[];
61 /* ***************************************************
65 ***************************************************/
67 static Eina_Bool setting_password_main_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
71 retvm_if(data == NULL, EINA_FALSE, "[Setting > Password] Data parameter is NULL");
73 SettingPasswordUG *ad = (SettingPasswordUG *) data;
75 /* if IME is displayed, hide IME. or Destroy password ug. */
76 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_FALSE);
78 if (ad->focus_timer) {
79 ecore_timer_del(ad->focus_timer);
80 ad->focus_timer = NULL;
83 /* send result : Cancel */
85 if (app_control_create(&svc) == 0) {
86 app_control_add_extra_data(svc, "result", "Cancel");
87 ug_send_result(ad->ug, svc);
88 SETTING_TRACE("Send Result : %s\n", "Cancel");
90 app_control_destroy(svc);
92 /* Send destroy request */
93 ug_destroy_me(ad->ug);
98 Eina_Bool __rotate_cb(void *data)
102 retv_if(data == NULL, FALSE);
104 SettingPasswordUG *ad = (SettingPasswordUG *) data;
106 //SETTING_TRACE_DEBUG("category : 0x%x", pw_its[ad->view_type].category);
108 /* it can manage the cursor self */
109 if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
110 SETTING_TRACE_DEBUG("set focus on first entry");
111 /* no matter how many edifileds, it only need focus on 1st editfiled */
112 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
113 elm_entry_cursor_end_set(ad->ed_pw1->eo_check);
116 ad->focus_timer = NULL;
118 return ECORE_CALLBACK_CANCEL;
121 static int setting_password_main_create(void *cb)
125 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
127 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
129 ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get, "IDS_ST_BODY_PASSWORD",
130 _("IDS_ST_BUTTON_BACK"),
132 (setting_call_back_func)setting_password_main_click_softkey_cancel_cb,
138 ad->navi_it = elm_naviframe_top_item_get(ad->navi_bar);
140 ad->bottom_btn = elm_button_add(ad->navi_bar);
141 elm_object_style_set(ad->bottom_btn, "bottom");
142 elm_object_item_part_content_set(ad->navi_it, "toolbar", ad->bottom_btn);
144 if (ad->view_type == SETTING_PW_TYPE_SET_PASSWORD) {
145 elm_object_text_set(ad->bottom_btn, _("IDS_ST_BUTTON_CONTINUE"));
146 evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_continue_cb, ad);
148 elm_object_text_set(ad->bottom_btn, _("IDS_SA_BUTTON_DONE_ABB"));
149 evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_done_cb, ad);
152 /*elm_genlist_realization_mode_set(ad->scroller, EINA_FALSE); */
153 /*elm_genlist_mode_set(ad->scroller, ELM_LIST_COMPRESS); */
154 ADD_GL_SEPARATOR(ad->scroller)
157 setting_password_main_draw_1line_password(ad, NULL);
159 /* Disable Done button if exist */
160 elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
161 elm_object_focus_allow_set(ad->bottom_btn, EINA_FALSE);
163 ad->focus_timer = ecore_timer_add(0.5, __rotate_cb, ad);
165 setting_view_password_main.is_create = 1;
168 return SETTING_RETURN_SUCCESS;
171 static int setting_password_main_destroy(void *cb)
175 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
177 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
181 if (ad->remove_timer) {
182 ecore_timer_del(ad->remove_timer);
183 ad->remove_timer = NULL;
186 if (ad->focus_timer) {
187 ecore_timer_del(ad->focus_timer);
188 ad->focus_timer = NULL;
192 evas_object_del(ad->notify);
196 if (ad->ly_main != NULL) {
197 evas_object_del(ad->ly_main);
201 setting_view_password_main.is_create = 0;
203 return SETTING_RETURN_SUCCESS;
206 static int setting_password_main_update(void *cb)
210 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
212 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
214 if (ad->ly_main != NULL) {
215 evas_object_show(ad->ly_main);
217 return SETTING_RETURN_SUCCESS;
220 static int setting_password_main_cleanup(void *cb)
223 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
225 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
227 if (ad->ly_main != NULL) {
228 evas_object_hide(ad->ly_main);
231 return SETTING_RETURN_SUCCESS;
234 /* ***************************************************
238 ***************************************************/
241 setting_password_main_entry_changed_cb(void *data, Evas_Object *obj,
245 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
246 retm_if(obj == NULL, "[Setting > Password] Data parameter is NULL");
247 Setting_GenGroupItem_Data *list_item =
248 (Setting_GenGroupItem_Data *) data;
249 SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
250 const char *entry_str = elm_entry_entry_get(obj);
251 list_item->sub_desc = (char *)g_strdup(entry_str);
252 bool isFoundEmptyEntry = FALSE;
256 entry_str = ad->ed_pw1->sub_desc;
257 if (NULL == entry_str || '\0' == entry_str[0]) {
258 isFoundEmptyEntry = TRUE;
259 /*char *guide_text = elm_object_part_text_get(obj, "elm.guide"); */
260 /*if(isEmptyStr(guide_text)) */
262 /* SETTING_TRACE("guide is empty"); */
263 /* elm_object_part_text_set(obj, "elm.guide", _("IDS_ST_BODY_ENTER_PASSWORD")); */
265 elm_object_item_signal_emit(ad->ed_pw1->item, "elm,state,eraser,hide", "");
268 /*elm_object_part_text_set(obj, "elm.guide", ""); */
269 elm_object_item_signal_emit(ad->ed_pw1->item, "elm,state,eraser,show", "");
275 Eina_Bool item_disabled = elm_object_item_disabled_get(list_item->item);
279 /* For disable toolbar (done) item */
280 bool disableFlag = isFoundEmptyEntry;
281 if (ad->ed_pw1 && ad->ed_pw1->eo_check && (safeStrLen(elm_entry_entry_get(ad->ed_pw1->eo_check)) < 4))
284 #if SUPPORT_BOTTOM_BTNS
286 elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
287 elm_entry_input_panel_return_key_disabled_set(obj, EINA_TRUE);
289 elm_object_disabled_set(ad->bottom_btn, EINA_FALSE);
290 elm_entry_input_panel_return_key_disabled_set(obj, EINA_FALSE);
293 elm_object_item_disabled_set(elm_toolbar_last_item_get(ad->controllbar), disableFlag);
298 static void __reached_max_pwlength_cb(void *data, Evas_Object *obj, void *event_info)
301 retm_if(data == NULL, "Data parameter is NULL");
302 retm_if(!elm_object_focus_get(obj), "Entry is not focused");/*notify only when entry is being focused on. */
306 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
307 SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
309 /* Display help text. */
310 char temp[128] = {0,};
311 snprintf(temp, 128, _(PW_ST_PW_MAX_LENGTH_HELP), list_item->limit_filter_data->max_char_count);
312 setting_password_ug_display_desc(ad, temp, FALSE);
315 static void __entry_activated_cb(void *data, Evas_Object *obj, void *event_info)
318 retm_if(data == NULL, "Data parameter is NULL");
320 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
321 SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
323 if (ad->bottom_btn) {
324 if (elm_object_disabled_get(ad->bottom_btn) == EINA_FALSE) {
326 if (ad->view_type == SETTING_PW_TYPE_SET_PASSWORD && ad->cur_step == 1) {
327 /* Save first input */
328 ad->step1_str = (char *)strdup(ad->ed_pw1->sub_desc);
330 /* Check step1_str : more than 4, not all digits */
334 __count_string(ad->step1_str, &letter, &digit, &symbol);
335 if (safeStrLen(ad->step1_str) == digit) {
336 __add_help_of_password_fails(SETTING_PW_ERROR_INCLUDE_NO_LETTER, ad);
341 setting_password_main_clear_1line_password(ad);
342 if (ad->err_desc && ad->err_desc->item) {
343 elm_object_item_del(ad->err_desc->item);
347 /* Change entry title : PW_SHORT_GUIDE_CONFIRM */
348 FREE(ad->ed_pw1->keyStr);
349 ad->ed_pw1->keyStr = (char *)strdup(PW_SHORT_GUIDE_CONFIRM);
350 elm_genlist_item_fields_update(ad->ed_pw1->item, "elm.text.main", ELM_GENLIST_ITEM_FIELD_TEXT);
354 elm_object_text_set(ad->bottom_btn, _("IDS_SA_BUTTON_DONE_ABB"));
355 evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_done_cb, ad);
356 elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
357 elm_entry_input_panel_return_key_disabled_set(obj, EINA_TRUE);
360 setting_password_main_done_password(ad);
366 static void __entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
369 retm_if(data == NULL, "Data parameter is NULL");
371 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
372 SettingPasswordUG *ad = (SettingPasswordUG *)list_item->userdata;
374 if (!elm_entry_is_empty(obj)) {
375 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,show", "");
377 elm_object_item_signal_emit(list_item->item, "elm,state,rename,hide", "");
380 static void __entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
383 retm_if(data == NULL, "Data parameter is NULL");
384 retm_if(obj == NULL, "Data parameter is NULL");
386 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
388 if (list_item->item) {
389 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,hide", "");
390 elm_object_item_signal_emit(list_item->item, "elm,state,rename,show", "");
394 int setting_password_main_draw_1line_password(void *data, void *cb)
398 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
399 "[Setting > Password] Data parameter is NULL");
401 SettingPasswordUG *ad = (SettingPasswordUG *) data;
403 switch (ad->view_type) {
404 case SETTING_PW_TYPE_PASSWORD:
406 setting_create_Gendial_field_editfield(ad->scroller,
409 SWALLOW_Type_LAYOUT_EDITFIELD,
410 "IDS_ST_BODY_PASSWORD",
412 setting_password_main_entry_changed_cb,
414 __entry_unfocused_cb,
415 __entry_activated_cb,
416 __reached_max_pwlength_cb,
417 ELM_INPUT_PANEL_LAYOUT_PASSWORD,
419 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
422 case SETTING_PW_TYPE_SET_PASSWORD:
424 setting_create_Gendial_field_editfield(ad->scroller,
427 SWALLOW_Type_LAYOUT_EDITFIELD,
430 setting_password_main_entry_changed_cb,
432 __entry_unfocused_cb,
433 __entry_activated_cb,
434 __reached_max_pwlength_cb,
435 ELM_INPUT_PANEL_LAYOUT_PASSWORD,
437 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
440 ad->err_desc = setting_create_Gendial_field_helpitem_without_bottom_separator(
442 &(itc_multiline_text),
443 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
444 PW_NORMAL_AND_CONTAIN_ALPHANUMER_DESC);
456 int setting_password_main_clear_1line_password(void *data)
459 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
460 "[Setting > Password] Data parameter is NULL");
462 SettingPasswordUG *ad = (SettingPasswordUG *) data;
463 retv_if(NULL == ad->ed_pw1, -1);
465 ad->ed_pw1->sub_desc = NULL;
466 ad->ed_pw1->isFocusFlag = FALSE;
468 elm_entry_entry_set(ad->ed_pw1->eo_check, "");
469 elm_object_part_text_set(ad->ed_pw1->eo_check, "elm.guide", _("IDS_ST_BODY_ENTER_PASSWORD"));
474 /* This help is shown on entering new/confirm password view */
475 void __add_help_of_password_policy(SettingPasswordUG *ad)
479 ad->err_desc = setting_create_Gendial_field_helpitem_without_bottom_separator(
481 &(itc_multiline_text),
482 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
483 PW_NORMAL_AND_CONTAIN_ALPHANUMER_DESC);
485 if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
486 SETTING_TRACE_DEBUG("FOCUS IN");
487 ad->ed_pw1->isFocusFlag = TRUE;
488 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
492 /* This help is shown after verifying entered new/confirm password with constraint */
493 void __add_help_of_password_fails(int ret, SettingPasswordUG *ad)
498 case SETTING_PW_ERROR_INVALID_LENGTH:
499 setting_password_ug_display_desc(ad, "Invalid length", FALSE);
501 case SETTING_PW_ERROR_INCLUDE_NO_LETTER:
502 setting_password_ug_display_desc(ad, "IDS_ST_BODY_PASSWORD_MUST_CONTAIN_AT_LEAST_1_LETTER", FALSE);
504 case SETTING_PW_ERROR_NO_MATCH_WITH_POLICY:
505 setting_password_ug_display_desc(ad, "No match with policy", FALSE);
507 case SETTING_PW_ERROR_NO_MATCH_MIN_COMPLEX:
508 setting_password_ug_display_desc(ad, "No match with min complex", FALSE);
510 case SETTING_PW_ERROR_EXIST_FORBIDDEN_STRING:
511 setting_password_ug_display_desc(ad, "Exist forbidden string", FALSE);
513 case SETTING_PW_ERROR_NO_MATCH_MAX_REPEAT_COUNT:
514 setting_password_ug_display_desc(ad, "No match with max repeat count", FALSE);
516 case SETTING_PW_ERROR_SIMPLE_STYLE:
517 setting_password_ug_display_desc(ad, "Exist simple sequence", FALSE);
519 case SETTING_PW_ERROR_INCLUDE_DIGIT:
520 setting_password_ug_display_desc(ad, "Password should not include any digit or symbol", FALSE);
522 case SETTING_PW_ERROR_NO_MATCH_WITH_PATTERN:
523 setting_password_ug_display_desc(ad, "No match with pattern", FALSE);
525 case SETTING_PW_ERROR_NO_DIGIT:
526 setting_password_ug_display_desc(ad, "IDS_ST_BODY_PASSWORD_MUST_CONTAIN_AT_LEAST_1_NUMBER", FALSE);
529 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
534 int setting_password_main_check_1line_password(void *data)
537 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
539 SettingPasswordUG *ad = (SettingPasswordUG *) data;
541 /*const char *entry_str = ad->ed_pw1->sub_desc; */
542 const char *entry_str = elm_entry_markup_to_utf8(ad->ed_pw1->sub_desc);
543 /*char* plain_str = elm_entry_markup_to_utf8(ad->ed_pw1->sub_desc); */
544 ad->focus_data = ad->ed_pw1;
547 if (isEmptyStr(entry_str)) {
548 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
550 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
554 int entry_str_len = safeStrLen(entry_str);
555 if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
556 || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
557 setting_password_main_warning_entry_added_byte_popup(ad,
558 SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH,
559 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
560 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
562 return SETTING_RETURN_SUCCESS;
565 int setting_password_main_check_2line_password(void *data)
569 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
571 SettingPasswordUG *ad = (SettingPasswordUG *) data;
572 if (ad->ed_pw1 == NULL)
573 return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
575 const char *entry_str1 = ad->step1_str;
576 const char *entry_str2 = ad->ed_pw1->sub_desc;
578 /*SETTING_TRACE(" entry_str1 : %s ", entry_str1); */
579 /*SETTING_TRACE(" entry_str2 : %s ", entry_str2); */
581 /*char* plain_str = elm_entry_markup_to_utf8(str); */
582 const char *entry_str1_mk = elm_entry_markup_to_utf8(entry_str1);
583 const char *entry_str2_mk = elm_entry_markup_to_utf8(entry_str2);
585 ad->focus_data = ad->ed_pw1;
588 if (isEmptyStr(entry_str1_mk)) {
589 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
592 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
596 if (0 != safeStrCmp(entry_str1_mk, entry_str2_mk)) {
597 setting_password_main_clear_1line_password(ad);
598 setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
599 return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
603 int entry_str_len = safeStrLen(entry_str1_mk);
604 if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
605 || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
606 setting_password_main_warning_entry_added_byte_popup(ad,
607 SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH,
608 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
609 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
612 return SETTING_RETURN_SUCCESS;
615 void setting_password_main_warning_entry_added_byte_popup(SettingPasswordUG *ad,
618 char str[MAX_SPECIALIZITION_LEN + 1] = { 0 };
620 snprintf(str, MAX_SPECIALIZITION_LEN, _("IDS_ST_POP_PASSWORD_MUST_BE_MORE_THAN_P1SD_CHARACTERS_AND_LESS_THAN_P2SD"), min, max);
621 setting_password_ug_display_desc(ad, str, FALSE);
624 static void setting_password_main_done_password(void *data)
626 ret_if(data == NULL);
627 SettingPasswordUG *ad = (SettingPasswordUG *) data;
630 if (app_control_create(&svc)) {
631 SETTING_TRACE_ERROR("app_control_create() failed");
635 SETTING_TRACE("ad->view_type:%d", ad->view_type);
638 switch (ad->view_type) {
639 case SETTING_PW_TYPE_PASSWORD:
640 ret = setting_password_main_check_1line_password(ad);
642 if (ret == SETTING_RETURN_SUCCESS) {
643 const char *entry_str;
644 entry_str = ad->ed_pw1->sub_desc;
645 /*SETTING_TRACE(" ----> entry_str : %s ", entry_str); */
646 /*SETTING_TRACE(" ----> ad->view_type_string : %s ", ad->view_type_string); */
647 unsigned int remain_attempt = ATTEMPT_INFINITE;
648 unsigned int valid_seconds = 0;
650 ret = setting_password_check_password(entry_str, &remain_attempt, &valid_seconds);
652 if (ret == SETTING_RETURN_SUCCESS) {
655 if (safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_PASSWORD") == 0) {
658 setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT, PHONE_LOCK_ATTEMPS_MAX, &err);
659 if (err == SETTING_RETURN_FAIL) {
660 SETTING_TRACE_ERROR("[Error] set value of vconf fail.");
661 app_control_destroy(svc);
664 } else if (0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_ENTER_LOCK_TYPE")) {
665 app_control_add_extra_data(svc, "current", entry_str);
668 /* Incorrect Password. Display Popup. */
669 setting_password_main_clear_1line_password(ad);
670 ad->focus_data = ad->ed_pw1;
673 /* setting_password_ug_check_attemps_left(ad); */
676 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
677 app_control_destroy(svc);
681 setting_password_main_clear_1line_password(ad);
682 app_control_destroy(svc);
686 case SETTING_PW_TYPE_SET_PASSWORD: {
687 /*SETTING_TRACE("case SETTING_PW_TYPE_SET_PASSWORD"); */
688 ret = setting_password_main_check_2line_password(ad);
689 /*SETTING_TRACE("setting_password_main_check_2line_password --> ret = %d ", ret); */
691 if (SETTING_RETURN_SUCCESS == ret) {
692 const char *entry_str;
693 entry_str = ad->ed_pw1->sub_desc;
695 if (isEmptyStr(entry_str)) {
696 ad->focus_data = ad->ed_pw1;
697 SETTING_TRACE_DEBUG("%s*** [ERR] elm_entry_entry_get return NULL ***%s",
698 SETTING_FONT_RED, SETTING_FONT_BLACK);
699 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_ERROR"), FALSE);
700 app_control_destroy(svc);
704 ret = setting_password_set_password(ad->cur_pwd, entry_str, ad);
705 SETTING_TRACE(" -----------------> setting_password_set_password : %d \n", ret);
707 /* Modify Setting Password */
710 /*service_add_extra_data(svc, "current", entry_str); */
711 if (ad->set_history_timer) {
712 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_NEW_PASSWD_SAVED"), FALSE);
714 app_control_add_extra_data(svc, "result", ad->view_type_string);
715 ug_send_result(ad->ug, svc);
716 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
718 app_control_destroy(svc);
719 /* Send destroy request */
720 ug_destroy_me(ad->ug);
723 app_control_destroy(svc);
725 } else if (ret == SETTING_PW_ERROR_REUSED) {
726 ad->focus_data = ad->ed_pw1;
727 setting_password_main_clear_1line_password(ad);
728 setting_password_ug_display_desc(ad, _(PW_ERR_REUSED), FALSE);
729 app_control_destroy(svc);
732 ad->focus_data = ad->ed_pw1;
733 setting_password_main_clear_1line_password(ad);
734 setting_password_ug_display_desc(ad, _("IDS_BT_POP_OPERATION_FAILED"), FALSE);
735 app_control_destroy(svc);
738 } else if (SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW == ret) {
740 app_control_destroy(svc);
741 setting_password_main_clear_1line_password(ad);
742 setting_password_ug_display_desc(ad, PW_ST_PW_DO_NOT_MATCH, FALSE);
745 SETTING_TRACE("error : %d", ret);
746 setting_password_main_clear_1line_password(ad);
747 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
748 app_control_destroy(svc);
754 app_control_destroy(svc);
758 app_control_add_extra_data(svc, "result", ad->view_type_string);
759 ug_send_result(ad->ug, svc);
760 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
762 app_control_destroy(svc);
763 /* Send destroy request */
764 ug_destroy_me(ad->ug);
767 static int __count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym)
770 retv_if(str == NULL || cnt_letter == NULL || cnt_digit == NULL || cnt_sym == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
772 /*char* plain_str = elm_entry_markup_to_utf8(str); */
773 char *plain_str = str;
775 int length = strlen(plain_str);
783 SETTING_TRACE_DEBUG("[DEBUG] invalid input length");
784 return SETTING_RETURN_FAIL;
787 for (index = 0; index < length; index++) {
788 temp = (char)(plain_str[index]);
789 SETTING_TRACE_SECURE_DEBUG("temp %c", temp);
791 if ((temp >= '0') && (temp <= '9')) { /* digit */
793 } else if ((temp >= 'a') && (temp <= 'z')) { /* lower letter */
795 } else if ((temp >= 'A') && (temp <= 'Z')) { /* upper letter */
797 } else if ((temp >= ' ') && (temp <= '~')) { /* symbol means special char that enables to input from IME. */
801 SETTING_TRACE_SECURE_DEBUG("%s includes %d letters, %d digits, and %d symbols", plain_str, letter, digit, symbol);
802 *cnt_letter = letter;
805 return SETTING_RETURN_SUCCESS;
808 void setting_password_main_click_softkey_continue_cb(void *data, Evas_Object *obj,
812 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
814 SettingPasswordUG *ad = (SettingPasswordUG *) data;
816 /* Save first input */
817 ad->step1_str = (char *)strdup(ad->ed_pw1->sub_desc);
820 /* Check step1_str : more than 4, not all digits */
824 char *plain_str = elm_entry_markup_to_utf8(ad->step1_str);
825 __count_string(plain_str, &letter, &digit, &symbol);
826 if (safeStrLen(plain_str) != digit) {
827 __add_help_of_password_fails(SETTING_PW_ERROR_INCLUDE_NO_LETTER, ad);
833 setting_password_main_clear_1line_password(ad);
834 if (ad->err_desc && ad->err_desc->item) {
835 elm_object_item_del(ad->err_desc->item);
839 /* Change entry title : PW_SHORT_GUIDE_CONFIRM */
840 FREE(ad->ed_pw1->keyStr);
841 ad->ed_pw1->keyStr = (char *)strdup(PW_SHORT_GUIDE_CONFIRM);
842 elm_genlist_item_fields_update(ad->ed_pw1->item, "elm.text.main", ELM_GENLIST_ITEM_FIELD_TEXT);
846 if (ad->bottom_btn) {
847 elm_object_text_set(ad->bottom_btn, _("IDS_SA_BUTTON_DONE_ABB"));
848 evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_done_cb, ad);
849 elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
856 void setting_password_main_click_softkey_done_cb(void *data, Evas_Object *obj,
860 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
862 SettingPasswordUG *ad = (SettingPasswordUG *) data;
864 if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
865 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_FALSE);
868 if (ad->err_desc && ad->err_desc->item) {
869 elm_object_item_del(ad->err_desc->item);
873 setting_password_main_done_password(ad);