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>
36 #include <notification.h>
39 void __add_help_of_password_fails(int ret, SettingPasswordUG *ad);
41 static int setting_password_main_create(void *cb);
42 static int setting_password_main_destroy(void *cb);
43 static int setting_password_main_update(void *cb);
44 static int setting_password_main_cleanup(void *cb);
47 setting_view setting_view_password_main = {
48 .create = setting_password_main_create,
49 .destroy = setting_password_main_destroy,
50 .update = setting_password_main_update,
51 .cleanup = setting_password_main_cleanup,
55 static void setting_password_main_done_password(void *data);
56 static int __count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym);
58 extern struct _pw_item pw_its[];
60 /* ***************************************************
64 ***************************************************/
66 static Eina_Bool setting_password_main_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
70 retvm_if(data == NULL, EINA_FALSE, "[Setting > Password] Data parameter is NULL");
72 SettingPasswordUG *ad = (SettingPasswordUG *) data;
74 /* if IME is displayed, hide IME. or Destroy password ug. */
75 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_FALSE);
77 if (ad->focus_timer) {
78 ecore_timer_del(ad->focus_timer);
79 ad->focus_timer = NULL;
82 /* send result : Cancel */
84 if (app_control_create(&svc) == 0) {
85 app_control_add_extra_data(svc, "result", "Cancel");
86 ug_send_result(ad->ug, svc);
87 SETTING_TRACE("Send Result : %s\n", "Cancel");
89 app_control_destroy(svc);
91 /* Send destroy request */
92 ug_destroy_me(ad->ug);
97 Eina_Bool __rotate_cb(void *data)
101 retv_if(data == NULL, FALSE);
103 SettingPasswordUG *ad = (SettingPasswordUG *) data;
105 /*SETTING_TRACE_DEBUG("category : 0x%x", pw_its[ad->view_type].category);*/
107 /* it can manage the cursor self */
108 if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
109 SETTING_TRACE_DEBUG("set focus on first entry");
110 /* no matter how many edifileds, it only need focus on 1st editfiled */
111 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
112 elm_entry_cursor_end_set(ad->ed_pw1->eo_check);
115 ad->focus_timer = NULL;
117 return ECORE_CALLBACK_CANCEL;
120 static int setting_password_main_create(void *cb)
124 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
126 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
128 ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get, "IDS_ST_BODY_PASSWORD",
129 _("IDS_ST_BUTTON_BACK"),
131 (setting_call_back_func)setting_password_main_click_softkey_cancel_cb,
137 ad->navi_it = elm_naviframe_top_item_get(ad->navi_bar);
139 ad->bottom_btn = elm_box_add(ad->navi_bar);
140 elm_box_padding_set(ad->bottom_btn, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10));
141 elm_box_horizontal_set(ad->bottom_btn, EINA_TRUE);
142 evas_object_size_hint_weight_set(ad->bottom_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
143 evas_object_size_hint_align_set(ad->bottom_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
144 evas_object_show(ad->bottom_btn);
145 elm_box_pack_end(ad->navi_bar, ad->bottom_btn);
148 Evas_Object *btn = elm_button_add(ad->bottom_btn);
149 elm_object_style_set(btn, "bottom");
150 elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL"));
151 evas_object_smart_callback_add(btn, "clicked", setting_password_main_click_softkey_cancel_cb, ad);
152 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
153 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.5);
154 evas_object_show(btn);
155 elm_box_pack_end(ad->bottom_btn, btn);
158 ad->bottom_btn1 = elm_button_add(ad->bottom_btn);
159 elm_object_style_set(ad->bottom_btn1, "bottom");
160 if (ad->view_type == SETTING_PW_TYPE_SET_PASSWORD) {
161 elm_object_text_set(ad->bottom_btn1, _("IDS_ST_BUTTON_CONTINUE"));
162 evas_object_smart_callback_add(ad->bottom_btn1, "clicked", setting_password_main_click_softkey_continue_cb, ad);
164 elm_object_text_set(ad->bottom_btn1, _("IDS_SA_BUTTON_DONE_ABB"));
165 evas_object_smart_callback_add(ad->bottom_btn1, "clicked", setting_password_main_click_softkey_done_cb, ad);
167 evas_object_size_hint_weight_set(ad->bottom_btn1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
168 evas_object_size_hint_align_set(ad->bottom_btn1, EVAS_HINT_FILL, 0.5);
169 evas_object_show(ad->bottom_btn1);
170 elm_box_pack_end(ad->bottom_btn, ad->bottom_btn1);
172 elm_object_item_part_content_set(ad->navi_it, "toolbar", ad->bottom_btn);
173 ADD_GL_SEPARATOR(ad->scroller)
176 setting_password_main_draw_1line_password(ad, NULL);
178 /* Disable Done button if exist */
179 elm_object_disabled_set(ad->bottom_btn1, EINA_TRUE);
180 elm_object_focus_allow_set(ad->bottom_btn1, EINA_FALSE);
182 ad->focus_timer = ecore_timer_add(0.5, __rotate_cb, ad);
184 setting_view_password_main.is_create = 1;
187 return SETTING_RETURN_SUCCESS;
190 static int setting_password_main_destroy(void *cb)
194 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
196 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
200 if (ad->remove_timer) {
201 ecore_timer_del(ad->remove_timer);
202 ad->remove_timer = NULL;
205 if (ad->focus_timer) {
206 ecore_timer_del(ad->focus_timer);
207 ad->focus_timer = NULL;
211 evas_object_del(ad->notify);
215 if (ad->ly_main != NULL) {
216 evas_object_del(ad->ly_main);
220 setting_view_password_main.is_create = 0;
222 return SETTING_RETURN_SUCCESS;
225 static int setting_password_main_update(void *cb)
229 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
231 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
233 if (ad->ly_main != NULL) {
234 evas_object_show(ad->ly_main);
236 return SETTING_RETURN_SUCCESS;
239 static int setting_password_main_cleanup(void *cb)
242 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
244 SettingPasswordUG *ad = (SettingPasswordUG *) cb;
246 if (ad->ly_main != NULL) {
247 evas_object_hide(ad->ly_main);
250 return SETTING_RETURN_SUCCESS;
253 /* ***************************************************
257 ***************************************************/
260 setting_password_main_entry_changed_cb(void *data, Evas_Object *obj,
264 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
265 retm_if(obj == NULL, "[Setting > Password] Data parameter is NULL");
266 Setting_GenGroupItem_Data *list_item =
267 (Setting_GenGroupItem_Data *) data;
268 SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
269 const char *entry_str = elm_entry_entry_get(obj);
270 list_item->sub_desc = (char *)g_strdup(entry_str);
271 bool isFoundEmptyEntry = FALSE;
275 entry_str = ad->ed_pw1->sub_desc;
276 if (NULL == entry_str || '\0' == entry_str[0]) {
277 isFoundEmptyEntry = TRUE;
278 elm_object_item_signal_emit(ad->ed_pw1->item, "elm,state,eraser,hide", "");
281 elm_object_item_signal_emit(ad->ed_pw1->item, "elm,state,eraser,show", "");
287 Eina_Bool item_disabled = elm_object_item_disabled_get(list_item->item);
291 /* For disable toolbar (done) item */
292 bool disableFlag = isFoundEmptyEntry;
293 if (ad->ed_pw1 && ad->ed_pw1->eo_check && (safeStrLen(elm_entry_entry_get(ad->ed_pw1->eo_check)) < 4))
296 #if SUPPORT_BOTTOM_BTNS
298 elm_object_disabled_set(ad->bottom_btn1, EINA_TRUE);
299 elm_entry_input_panel_return_key_disabled_set(obj, EINA_TRUE);
301 elm_object_disabled_set(ad->bottom_btn1, EINA_FALSE);
302 elm_entry_input_panel_return_key_disabled_set(obj, EINA_FALSE);
305 elm_object_item_disabled_set(elm_toolbar_last_item_get(ad->controllbar), disableFlag);
310 static void __reached_max_pwlength_cb(void *data, Evas_Object *obj, void *event_info)
313 retm_if(data == NULL, "Data parameter is NULL");
314 retm_if(!elm_object_focus_get(obj), "Entry is not focused");/*notify only when entry is being focused on. */
318 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
319 SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
321 /* Display help text. */
322 char temp[128] = {0,};
323 snprintf(temp, 128, _(PW_ST_PW_MAX_LENGTH_HELP), list_item->limit_filter_data->max_char_count);
324 setting_password_ug_display_desc(ad, temp, FALSE);
327 static void __entry_activated_cb(void *data, Evas_Object *obj, void *event_info)
330 retm_if(data == NULL, "Data parameter is NULL");
332 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
333 SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
335 if (ad->bottom_btn) {
336 if (elm_object_disabled_get(ad->bottom_btn1) == EINA_FALSE) {
338 if (ad->view_type == SETTING_PW_TYPE_SET_PASSWORD && ad->cur_step == 1) {
339 /* Save first input */
340 ad->step1_str = (char *)strdup(ad->ed_pw1->sub_desc);
342 /* Check step1_str : more than 4, not all digits */
346 __count_string(ad->step1_str, &letter, &digit, &symbol);
347 if (safeStrLen(ad->step1_str) == digit) {
348 __add_help_of_password_fails(SETTING_PW_ERROR_INCLUDE_NO_LETTER, ad);
353 setting_password_main_clear_1line_password(ad);
354 if (ad->err_desc && ad->err_desc->item) {
355 elm_object_item_del(ad->err_desc->item);
359 /* Change entry title : PW_SHORT_GUIDE_CONFIRM */
360 FREE(ad->ed_pw1->keyStr);
361 ad->ed_pw1->keyStr = (char *)strdup(PW_SHORT_GUIDE_CONFIRM);
362 elm_genlist_item_fields_update(ad->ed_pw1->item, "elm.text.main", ELM_GENLIST_ITEM_FIELD_TEXT);
366 elm_object_text_set(ad->bottom_btn1, _("IDS_SA_BUTTON_DONE_ABB"));
367 evas_object_smart_callback_add(ad->bottom_btn1, "clicked", setting_password_main_click_softkey_done_cb, ad);
368 elm_object_disabled_set(ad->bottom_btn1, EINA_TRUE);
369 elm_entry_input_panel_return_key_disabled_set(obj, EINA_TRUE);
372 setting_password_main_done_password(ad);
378 static void __entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
381 retm_if(data == NULL, "Data parameter is NULL");
383 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
384 SettingPasswordUG *ad = (SettingPasswordUG *)list_item->userdata;
386 if (!elm_entry_is_empty(obj)) {
387 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,show", "");
389 elm_object_item_signal_emit(list_item->item, "elm,state,rename,hide", "");
392 static void __entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
395 retm_if(data == NULL, "Data parameter is NULL");
396 retm_if(obj == NULL, "Data parameter is NULL");
398 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
400 if (list_item->item) {
401 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,hide", "");
402 elm_object_item_signal_emit(list_item->item, "elm,state,rename,show", "");
406 int setting_password_main_draw_1line_password(void *data, void *cb)
410 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
411 "[Setting > Password] Data parameter is NULL");
413 SettingPasswordUG *ad = (SettingPasswordUG *) data;
415 switch (ad->view_type) {
416 case SETTING_PW_TYPE_PASSWORD:
418 setting_create_Gendial_field_editfield(ad->scroller,
421 SWALLOW_Type_LAYOUT_EDITFIELD,
422 "IDS_ST_BODY_PASSWORD",
424 setting_password_main_entry_changed_cb,
426 __entry_unfocused_cb,
427 __entry_activated_cb,
428 __reached_max_pwlength_cb,
429 ELM_INPUT_PANEL_LAYOUT_PASSWORD,
431 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
433 /* change return key type */
435 ad->ed_pw1->return_key_type = ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE;
436 elm_entry_input_panel_return_key_type_set(ad->ed_pw1->eo_check, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
437 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
441 case SETTING_PW_TYPE_SET_PASSWORD:
443 setting_create_Gendial_field_editfield(ad->scroller,
446 SWALLOW_Type_LAYOUT_EDITFIELD,
449 setting_password_main_entry_changed_cb,
451 __entry_unfocused_cb,
452 __entry_activated_cb,
453 __reached_max_pwlength_cb,
454 ELM_INPUT_PANEL_LAYOUT_PASSWORD,
456 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
459 ad->err_desc = setting_create_Gendial_field_helpitem_without_bottom_separator(
461 &(itc_multiline_text),
462 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
463 PW_NORMAL_AND_CONTAIN_ALPHANUMER_DESC);
465 /* change return key type */
467 ad->ed_pw1->return_key_type = ELM_INPUT_PANEL_RETURN_KEY_TYPE_NEXT;
468 elm_entry_input_panel_return_key_type_set(ad->ed_pw1->eo_check, ELM_INPUT_PANEL_RETURN_KEY_TYPE_NEXT);
469 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
483 int setting_password_main_clear_1line_password(void *data)
486 retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
487 "[Setting > Password] Data parameter is NULL");
489 SettingPasswordUG *ad = (SettingPasswordUG *) data;
490 retv_if(NULL == ad->ed_pw1, -1);
492 ad->ed_pw1->sub_desc = NULL;
493 ad->ed_pw1->isFocusFlag = FALSE;
495 elm_entry_entry_set(ad->ed_pw1->eo_check, "");
496 elm_object_part_text_set(ad->ed_pw1->eo_check, "elm.guide", _("IDS_ST_BODY_ENTER_PASSWORD"));
501 /* This help is shown on entering new/confirm password view */
502 void __add_help_of_password_policy(SettingPasswordUG *ad)
506 ad->err_desc = setting_create_Gendial_field_helpitem_without_bottom_separator(
508 &(itc_multiline_text),
509 SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
510 PW_NORMAL_AND_CONTAIN_ALPHANUMER_DESC);
512 if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
513 SETTING_TRACE_DEBUG("FOCUS IN");
514 ad->ed_pw1->isFocusFlag = TRUE;
515 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
519 /* This help is shown after verifying entered new/confirm password with constraint */
520 void __add_help_of_password_fails(int ret, SettingPasswordUG *ad)
525 case SETTING_PW_ERROR_INVALID_LENGTH:
526 setting_password_ug_display_desc(ad, "Invalid length", FALSE);
528 case SETTING_PW_ERROR_INCLUDE_NO_LETTER:
529 setting_password_ug_display_desc(ad, "IDS_ST_BODY_PASSWORD_MUST_CONTAIN_AT_LEAST_1_LETTER", FALSE);
531 case SETTING_PW_ERROR_NO_MATCH_WITH_POLICY:
532 setting_password_ug_display_desc(ad, "No match with policy", FALSE);
534 case SETTING_PW_ERROR_NO_MATCH_MIN_COMPLEX:
535 setting_password_ug_display_desc(ad, "No match with min complex", FALSE);
537 case SETTING_PW_ERROR_EXIST_FORBIDDEN_STRING:
538 setting_password_ug_display_desc(ad, "Exist forbidden string", FALSE);
540 case SETTING_PW_ERROR_NO_MATCH_MAX_REPEAT_COUNT:
541 setting_password_ug_display_desc(ad, "No match with max repeat count", FALSE);
543 case SETTING_PW_ERROR_SIMPLE_STYLE:
544 setting_password_ug_display_desc(ad, "Exist simple sequence", FALSE);
546 case SETTING_PW_ERROR_INCLUDE_DIGIT:
547 setting_password_ug_display_desc(ad, "Password should not include any digit or symbol", FALSE);
549 case SETTING_PW_ERROR_NO_MATCH_WITH_PATTERN:
550 setting_password_ug_display_desc(ad, "No match with pattern", FALSE);
552 case SETTING_PW_ERROR_NO_DIGIT:
553 setting_password_ug_display_desc(ad, "IDS_ST_BODY_PASSWORD_MUST_CONTAIN_AT_LEAST_1_NUMBER", FALSE);
556 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
561 int setting_password_main_check_1line_password(void *data)
564 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
566 SettingPasswordUG *ad = (SettingPasswordUG *) data;
568 /*const char *entry_str = ad->ed_pw1->sub_desc; */
569 const char *entry_str = elm_entry_markup_to_utf8(ad->ed_pw1->sub_desc);
570 /*char* plain_str = elm_entry_markup_to_utf8(ad->ed_pw1->sub_desc); */
571 ad->focus_data = ad->ed_pw1;
574 if (isEmptyStr(entry_str)) {
575 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
577 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
581 int entry_str_len = safeStrLen(entry_str);
582 if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
583 || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
584 setting_password_main_warning_entry_added_byte_popup(ad,
585 SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH,
586 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
588 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
591 return SETTING_RETURN_SUCCESS;
594 int setting_password_main_check_2line_password(void *data)
598 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
600 SettingPasswordUG *ad = (SettingPasswordUG *) data;
601 if (ad->ed_pw1 == NULL)
602 return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
604 const char *entry_str1 = ad->step1_str;
605 const char *entry_str2 = ad->ed_pw1->sub_desc;
607 /*SETTING_TRACE(" entry_str1 : %s ", entry_str1); */
608 /*SETTING_TRACE(" entry_str2 : %s ", entry_str2); */
610 /*char* plain_str = elm_entry_markup_to_utf8(str); */
611 const char *entry_str1_mk = elm_entry_markup_to_utf8(entry_str1);
612 const char *entry_str2_mk = elm_entry_markup_to_utf8(entry_str2);
614 ad->focus_data = ad->ed_pw1;
617 if (isEmptyStr(entry_str1_mk)) {
618 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
621 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
625 if (0 != safeStrCmp(entry_str1_mk, entry_str2_mk)) {
626 setting_password_main_clear_1line_password(ad);
627 setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
630 return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
634 int entry_str_len = safeStrLen(entry_str1_mk);
635 if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
636 || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
637 setting_password_main_warning_entry_added_byte_popup(ad,
638 SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH,
639 SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
642 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
647 return SETTING_RETURN_SUCCESS;
650 void setting_password_main_warning_entry_added_byte_popup(SettingPasswordUG *ad,
653 char str[MAX_SPECIALIZITION_LEN + 1] = { 0 };
655 snprintf(str, MAX_SPECIALIZITION_LEN, _("IDS_ST_POP_PASSWORD_MUST_BE_MORE_THAN_P1SD_CHARACTERS_AND_LESS_THAN_P2SD"), min, max);
656 setting_password_ug_display_desc(ad, str, FALSE);
659 static void setting_password_main_done_password(void *data)
661 ret_if(data == NULL);
662 SettingPasswordUG *ad = (SettingPasswordUG *) data;
665 if (app_control_create(&svc)) {
666 SETTING_TRACE_ERROR("app_control_create() failed");
670 SETTING_TRACE("ad->view_type:%d", ad->view_type);
673 switch (ad->view_type) {
674 case SETTING_PW_TYPE_PASSWORD:
675 ret = setting_password_main_check_1line_password(ad);
677 if (ret == SETTING_RETURN_SUCCESS) {
678 const char *entry_str;
679 entry_str = ad->ed_pw1->sub_desc;
680 /*SETTING_TRACE(" ----> entry_str : %s ", entry_str); */
681 /*SETTING_TRACE(" ----> ad->view_type_string : %s ", ad->view_type_string); */
682 unsigned int remain_attempt = ATTEMPT_INFINITE;
683 unsigned int valid_seconds = 0;
685 ret = setting_password_check_password(entry_str, &remain_attempt, &valid_seconds);
687 if (ret == SETTING_RETURN_SUCCESS) {
690 if (safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_PASSWORD") == 0) {
693 setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT, PHONE_LOCK_ATTEMPS_MAX, &err);
694 if (err == SETTING_RETURN_FAIL) {
695 SETTING_TRACE_ERROR("[Error] set value of vconf fail.");
696 app_control_destroy(svc);
699 } else if (0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_ENTER_LOCK_TYPE")) {
700 app_control_add_extra_data(svc, "current", entry_str);
703 /* Incorrect Password. Display Popup. */
704 setting_password_main_clear_1line_password(ad);
705 ad->focus_data = ad->ed_pw1;
708 /* setting_password_ug_check_attemps_left(ad); */
711 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
712 app_control_destroy(svc);
716 setting_password_main_clear_1line_password(ad);
717 app_control_destroy(svc);
721 case SETTING_PW_TYPE_SET_PASSWORD: {
722 /*SETTING_TRACE("case SETTING_PW_TYPE_SET_PASSWORD"); */
723 ret = setting_password_main_check_2line_password(ad);
724 /*SETTING_TRACE("setting_password_main_check_2line_password --> ret = %d ", ret); */
726 if (SETTING_RETURN_SUCCESS == ret) {
727 const char *entry_str;
728 entry_str = ad->ed_pw1->sub_desc;
730 if (isEmptyStr(entry_str)) {
731 ad->focus_data = ad->ed_pw1;
732 SETTING_TRACE_DEBUG("%s*** [ERR] elm_entry_entry_get return NULL ***%s",
733 SETTING_FONT_RED, SETTING_FONT_BLACK);
734 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_ERROR"), FALSE);
735 app_control_destroy(svc);
739 ret = setting_password_set_password(ad->cur_pwd, entry_str, ad);
740 SETTING_TRACE(" -----------------> setting_password_set_password : %d \n", ret);
742 /* Modify Setting Password */
745 /*service_add_extra_data(svc, "current", entry_str); */
746 if (ad->set_history_timer) {
747 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_NEW_PASSWD_SAVED"), FALSE);
749 app_control_add_extra_data(svc, "result", ad->view_type_string);
750 ug_send_result(ad->ug, svc);
751 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
753 app_control_destroy(svc);
754 /* Send destroy request */
755 ug_destroy_me(ad->ug);
758 app_control_destroy(svc);
760 } else if (ret == SETTING_PW_ERROR_REUSED) {
761 ad->focus_data = ad->ed_pw1;
762 setting_password_main_clear_1line_password(ad);
763 setting_password_ug_display_desc(ad, _(PW_ERR_REUSED), FALSE);
764 app_control_destroy(svc);
767 ad->focus_data = ad->ed_pw1;
768 setting_password_main_clear_1line_password(ad);
769 setting_password_ug_display_desc(ad, _("IDS_BT_POP_OPERATION_FAILED"), FALSE);
770 app_control_destroy(svc);
773 } else if (SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW == ret) {
775 app_control_destroy(svc);
776 setting_password_main_clear_1line_password(ad);
777 setting_password_ug_display_desc(ad, PW_ST_PW_DO_NOT_MATCH, FALSE);
780 SETTING_TRACE("error : %d", ret);
781 setting_password_main_clear_1line_password(ad);
782 setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
783 app_control_destroy(svc);
789 app_control_destroy(svc);
793 app_control_add_extra_data(svc, "result", ad->view_type_string);
794 ug_send_result(ad->ug, svc);
795 SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
797 app_control_destroy(svc);
798 /* Send destroy request */
799 ug_destroy_me(ad->ug);
802 static int __count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym)
805 retv_if(str == NULL || cnt_letter == NULL || cnt_digit == NULL || cnt_sym == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
807 /*char* plain_str = elm_entry_markup_to_utf8(str); */
808 char *plain_str = str;
810 int length = strlen(plain_str);
818 SETTING_TRACE_DEBUG("[DEBUG] invalid input length");
819 return SETTING_RETURN_FAIL;
822 for (index = 0; index < length; index++) {
823 temp = (char)(plain_str[index]);
824 SETTING_TRACE_SECURE_DEBUG("temp %c", temp);
826 if ((temp >= '0') && (temp <= '9')) { /* digit */
828 } else if ((temp >= 'a') && (temp <= 'z')) { /* lower letter */
830 } else if ((temp >= 'A') && (temp <= 'Z')) { /* upper letter */
832 } else if ((temp >= ' ') && (temp <= '~')) { /* symbol means special char that enables to input from IME. */
836 SETTING_TRACE_SECURE_DEBUG("%s includes %d letters, %d digits, and %d symbols", plain_str, letter, digit, symbol);
837 *cnt_letter = letter;
840 return SETTING_RETURN_SUCCESS;
843 void setting_password_main_click_softkey_continue_cb(void *data, Evas_Object *obj,
847 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
849 SettingPasswordUG *ad = (SettingPasswordUG *) data;
851 /* Save first input */
852 ad->step1_str = (char *)strdup(ad->ed_pw1->sub_desc);
854 /* Check step1_str : more than 4, not all digits */
858 char *plain_str = elm_entry_markup_to_utf8(ad->step1_str);
859 __count_string(plain_str, &letter, &digit, &symbol);
861 if (safeStrLen(plain_str) == digit) {
862 setting_password_main_clear_1line_password(ad);
863 __add_help_of_password_fails(SETTING_PW_ERROR_INCLUDE_NO_LETTER, ad);
869 setting_password_main_clear_1line_password(ad);
870 if (ad->err_desc && ad->err_desc->item) {
871 elm_object_item_del(ad->err_desc->item);
875 /* Change entry title : PW_SHORT_GUIDE_CONFIRM */
876 FREE(ad->ed_pw1->keyStr);
877 ad->ed_pw1->keyStr = (char *)strdup(PW_SHORT_GUIDE_CONFIRM);
878 elm_genlist_item_fields_update(ad->ed_pw1->item, "elm.text.main", ELM_GENLIST_ITEM_FIELD_TEXT);
880 /* change return key type */
881 ad->ed_pw1->return_key_type = ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE;
882 elm_entry_input_panel_return_key_type_set(ad->ed_pw1->eo_check, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
883 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
886 if (ad->bottom_btn) {
887 ad->bottom_btn = elm_box_add(ad->navi_bar);
888 elm_box_padding_set(ad->bottom_btn, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10));
889 elm_box_horizontal_set(ad->bottom_btn, EINA_TRUE);
890 evas_object_size_hint_weight_set(ad->bottom_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
891 evas_object_size_hint_align_set(ad->bottom_btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
892 evas_object_show(ad->bottom_btn);
893 elm_box_pack_end(ad->navi_bar, ad->bottom_btn);
896 Evas_Object *btn = elm_button_add(ad->bottom_btn);
897 elm_object_style_set(btn, "bottom");
898 elm_object_text_set(btn, _("IDS_ST_BUTTON_CANCEL"));
899 evas_object_smart_callback_add(btn, "clicked", setting_password_main_click_softkey_cancel_cb, ad);
900 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
901 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.5);
902 evas_object_show(btn);
903 elm_box_pack_end(ad->bottom_btn, btn);
904 elm_object_disabled_set(btn, EINA_FALSE);
907 ad->bottom_btn1 = elm_button_add(ad->bottom_btn);
908 elm_object_style_set(ad->bottom_btn1, "bottom");
909 elm_object_text_set(ad->bottom_btn1, _("IDS_SA_BUTTON_DONE_ABB"));
910 evas_object_smart_callback_del(ad->bottom_btn1, "clicked", setting_password_main_click_softkey_continue_cb);
911 evas_object_smart_callback_add(ad->bottom_btn1, "clicked", setting_password_main_click_softkey_done_cb, ad);
912 elm_object_disabled_set(ad->bottom_btn1, EINA_TRUE);
913 evas_object_size_hint_weight_set(ad->bottom_btn1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
914 evas_object_size_hint_align_set(ad->bottom_btn1, EVAS_HINT_FILL, 0.5);
915 evas_object_show(ad->bottom_btn1);
916 elm_box_pack_end(ad->bottom_btn, ad->bottom_btn1);
917 elm_object_item_part_content_set(ad->navi_it, "toolbar", ad->bottom_btn);
924 void setting_password_main_click_softkey_done_cb(void *data, Evas_Object *obj,
928 retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
930 SettingPasswordUG *ad = (SettingPasswordUG *) data;
932 if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
933 elm_object_focus_set(ad->ed_pw1->eo_check, EINA_FALSE);
936 if (ad->err_desc && ad->err_desc->item) {
937 elm_object_item_del(ad->err_desc->item);
941 setting_password_main_done_password(ad);