tizen 2.3.1 release
[apps/home/settings.git] / setting-password / src / setting-password-main.c
old mode 100755 (executable)
new mode 100644 (file)
index d94ce0b..bdabb4b
@@ -1,26 +1,42 @@
 /*
- * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Flora License, Version 1.0 (the License);
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+* setting
+*
+* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+*
+* Contact: MyoungJune Park <mj2004.park@samsung.com>
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
 #include <setting-password.h>
 #include <setting-password-main.h>
 #include <setting-common-data-slp-setting.h>
-#include <openssl/sha.h>
 #include <setting-debug.h>
-#include <haptic.h>
-
+#include <dd-haptic.h>
+#if SUPPORT_ENCRYPTION
+#include <ode.h>
+#endif
+#include <Ecore_IMF.h>
+#include <Ecore_IMF_Evas.h>
+#include <Ecore_X.h>
+#include <Ecore.h>
+#include <utilX.h>
+#if SUPPORT_LIBEAS
+#include <eas-svc.h>
+#endif
+#include <time.h>
+#include <notification.h>
 
 static int setting_password_main_create(void *cb);
 static int setting_password_main_destroy(void *cb);
@@ -34,208 +50,115 @@ setting_view setting_view_password_main = {
        .cleanup = setting_password_main_cleanup,
 };
 
-#define ENTRY_CALLBACK_REPEAT_MAX 3
-#define SETTING_COMPARE_PW_FAIL -2
+
+static void setting_password_main_done_password(void *data);
+static int __count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym);
+
+extern struct _pw_item pw_its[];
 
 /* ***************************************************
  *
  *basic func
  *
  ***************************************************/
-static void
-__password_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj,
-                           void *event)
-{
-       ret_if(!data);
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-
-       if (ad->ed_pw1) {
-               setting_hide_input_pannel_cb(ad->ed_pw1->eo_check);
-       }
-       if (ad->ed_pw2) {
-               setting_hide_input_pannel_cb(ad->ed_pw2->eo_check);
-       }
-       if (ad->ed_pw3) {
-               setting_hide_input_pannel_cb(ad->ed_pw3->eo_check);
-       }
-
-}
 
-static char *setting_password_main_get_title_str(void *data)
+static Eina_Bool setting_password_main_click_softkey_cancel_cb(void *data, Elm_Object_Item *it)
 {
-       retvm_if(data == NULL, NULL,
-                "[Setting > Password] Data parameter is NULL");
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       retvm_if(data == NULL, EINA_FALSE, "[Setting > Password] Data parameter is NULL");
+
        SettingPasswordUG *ad = (SettingPasswordUG *) data;
 
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_SIM_LOCK_ON:
-       case SETTING_PW_TYPE_SIM_LOCK_OFF:
-               return _("IDS_COM_BODY_AUTH_PASSWORD");
-               break;
-       case SETTING_PW_TYPE_PIN_LOCK_ON:
-       case SETTING_PW_TYPE_PIN_LOCK_OFF:
-               return _("IDS_ST_BODY_PIN1");
-               break;
-       case SETTING_PW_TYPE_CHANGE_PIN1:
-               return _("IDS_ST_BODY_CHANGE_PIN1");
-               break;
-
-       case SETTING_PW_TYPE_CHANGE_PIN2:
-               return _("IDS_ST_BODY_CHANGE_PIN2");
-               break;
-
-       case SETTING_PW_TYPE_PIN1_BLOCKED:
-               return _("IDS_ST_BODY_PUK1_CODE");
-               break;
-       case SETTING_PW_TYPE_PIN2_BLOCKED:
-
-               return _("IDS_ST_BODY_PUK2");
-               break;
-       default:
-               SETTING_TRACE_DEBUG("%s*** Unknown Password Type. ***%s",
-                                   SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
-               break;
+       /* if IME is displayed, hide IME. or Destroy password ug. */
+       elm_object_focus_set(ad->ed_pw1->eo_check, EINA_FALSE);
+
+       if (ad->focus_timer) {
+               ecore_timer_del(ad->focus_timer);
+               ad->focus_timer = NULL;
        }
-       return NULL;
 
-}
+       /* send result : Cancel */
+       app_control_h svc;
+       if (app_control_create(&svc) == 0) {
+               app_control_add_extra_data(svc, "result", "Cancel");
+               ug_send_result(ad->ug, svc);
+               SETTING_TRACE("Send Result : %s\n", "Cancel");
 
-Elm_Object_Item* __create_navibar(void *data, Evas_Object *content, Evas_Object *navibar, setting_pw_navibar_style_t style)
-{
-       SETTING_TRACE_BEGIN;
-       retv_if(data == NULL || content == NULL || navibar == NULL, NULL);
-
-       SettingPasswordUG *ad = (SettingPasswordUG *)data;
-
-       Elm_Object_Item *navi_item = NULL;
-       Evas_Object *done_btn = NULL;
-
-       switch(style)
-       {
-               case SETTING_PW_NAVIBAR_WITH_LEFT_BTN :
-                       SETTING_TRACE_DEBUG("with left btn");
-                       navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
-                                                                       NULL, _("IDS_COM_SK_CANCEL"), NULL,
-                                                                       NULL,
-                                                                       setting_password_main_click_softkey_cancel_cb,
-                                                                       NULL, ad, content, navibar);
-                       break;
-               case SETTING_PW_NAVIBAR_WITH_RIGHT_BTN :
-                       SETTING_TRACE_DEBUG("with right btn");
-                       navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
-                                                                       _("IDS_COM_SK_DONE"), NULL, NULL,
-                                                                       setting_password_main_click_softkey_done_cb, NULL,
-                                                                       NULL, ad, content, navibar);
-                       break;
-               case SETTING_PW_NAVIBAR_WITH_BOTH_BTN:
-                       SETTING_TRACE_DEBUG("with both btn");
-                       navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
-                                                                       _("IDS_COM_SK_DONE"), _("IDS_COM_SK_CANCEL"), NULL,
-                                                                       setting_password_main_click_softkey_done_cb,
-                                                                       setting_password_main_click_softkey_cancel_cb,
-                                                                       NULL, ad, content, navibar);
-                       break;
-               case SETTING_PW_NAVIBAR_WITH_NO_BTN:
-                       SETTING_TRACE_DEBUG("with no btn");
-                       navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
-                                                                       NULL, NULL, NULL,
-                                                                       NULL,
-                                                                       NULL,
-                                                                       NULL, ad, content, navibar);
-               default:
-                       break;
+               app_control_destroy(svc);
        }
-       retv_if(!navi_item, NULL);
+       /* Send destroy request */
+       ug_destroy_me(ad->ug);
 
-       done_btn = elm_object_item_part_content_get(navi_item, NAVI_BTN_STYLE_LEFT);
-       if(done_btn != NULL)
-       {
-               setting_disable_evas_object(done_btn);
-               setting_dim_evas_object(done_btn, TRUE);
-       }
-       return navi_item;
+       return EINA_TRUE;
 }
 
-static int __create_common_password_frame(void *data)
+Eina_Bool __rotate_cb(void *data)
 {
+       /* error check */
        SETTING_TRACE_BEGIN;
-       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-
-       SettingPasswordUG *ad = (SettingPasswordUG *)data;
-       Evas_Object *navi_bar = NULL;
-       static int count = 0;
-
-       count++;
-       /* CONTENT */
-       if(ad->scroller != NULL)
-       {
-               evas_object_del(ad->scroller);
-       }
-
-       Evas_Object *pw_list = elm_genlist_add(ad->win_main_layout);
-       elm_object_style_set(pw_list, "dialogue");
-       if(pw_list == NULL)
-               return SETTING_RETURN_FAIL;
-
-       elm_genlist_clear(pw_list);     /* first to clear list */
-       elm_genlist_mode_set(pw_list, ELM_LIST_COMPRESS);
-
-
-#if SUPPORT_BOTTOM_BTNS
-       ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
-       retv_if(!ad->ly_main, SETTING_RETURN_FAIL);
-
-       navi_bar = setting_create_navi_bar(ad->ly_main);
-       retv_if(!navi_bar, SETTING_RETURN_FAIL);
-
-       ad->navi_it = __create_navibar(ad, pw_list, navi_bar, SETTING_PW_NAVIBAR_WITH_BOTH_BTN);
+       retv_if(data == NULL, FALSE);
 
-       retv_if(!ad->navi_it, SETTING_RETURN_FAIL);
-#else
-       ad->ly_main =
-           setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
-                                          setting_password_main_get_title_str
-                                          (ad), _("IDS_COM_SK_CANCEL"),
-                                          _("IDS_COM_SK_DONE"), NULL,
-                                          setting_password_main_click_softkey_cancel_cb,
-                                          setting_password_main_click_softkey_done_cb,
-                                          NULL, ad, pw_list /* contents */ ,
-                                          &navi_bar, &(ad->controllbar));
-       elm_object_item_disabled_set(elm_toolbar_last_item_get(ad->controllbar), EINA_TRUE);
-
-       if(ad->ly_main == NULL)
-               return SETTING_RETURN_FAIL;
-#endif
+       SettingPasswordUG *ad = (SettingPasswordUG *) data;
 
-       evas_object_event_callback_add(pw_list, EVAS_CALLBACK_MOUSE_UP,
-                                      __password_main_gl_mouse_up, ad);
+       SETTING_TRACE_DEBUG("category : 0x%x", pw_its[ad->view_type].category);
 
-       Elm_Object_Item *item = elm_genlist_item_append(pw_list,
-                                                               &(ad->itc_seperator), NULL, NULL,
-                                                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
-       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       /* it can manage the cursor self */
+       if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
+               SETTING_TRACE_DEBUG("set focus on first entry");
+               /* no matter how many edifileds, it only need focus on 1st editfiled */
+               elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
+               elm_entry_cursor_end_set(ad->ed_pw1->eo_check);
+       }
 
-       ad->scroller = pw_list;
+       ad->focus_timer = NULL;
 
-       return SETTING_RETURN_SUCCESS;
+       return ECORE_CALLBACK_CANCEL;
 }
 
-static int
-setting_password_main_create(void *cb)
+static int setting_password_main_create(void *cb)
 {
        SETTING_TRACE_BEGIN;
        /* error check */
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingPasswordUG *ad = (SettingPasswordUG *) cb;
-       int ret = 0;
 
-       ret = __create_common_password_frame(ad);
+       ad->ly_main = setting_create_layout_navi_bar_genlist(ad->win_main_layout, ad->win_get, "IDS_COM_BODY_AUTH_PASSWORD",
+                                                            _("IDS_COM_BODY_BACK"),
+                                                            NULL,
+                                                            (setting_call_back_func)setting_password_main_click_softkey_cancel_cb,
+                                                            NULL,
+                                                            ad,
+                                                            &(ad->scroller),
+                                                            &(ad->navi_bar));
 
-       if(ret < 0)
-               return SETTING_RETURN_FAIL;
+       ad->navi_it = elm_naviframe_top_item_get(ad->navi_bar);
+
+       ad->bottom_btn = elm_button_add(ad->navi_bar);
+       elm_object_style_set(ad->bottom_btn, "bottom");
+       elm_object_item_part_content_set(ad->navi_it, "toolbar", ad->bottom_btn);
+
+       if (ad->view_type == SETTING_PW_TYPE_SET_PASSWORD) {
+               elm_object_text_set(ad->bottom_btn, _("IDS_ST_BUTTON_CONTINUE"));
+               evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_continue_cb, ad);
+       } else {
+               elm_object_text_set(ad->bottom_btn, _("IDS_COM_SK_DONE"));
+               evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_done_cb, ad);
+       }
+
+       /*elm_genlist_realization_mode_set(ad->scroller, EINA_FALSE); */
+       /*elm_genlist_mode_set(ad->scroller, ELM_LIST_COMPRESS); */
+       ADD_GL_SEPARATOR(ad->scroller)
+
+       ad->cur_step = 1;
+       setting_password_main_draw_1line_password(ad, NULL);
 
-       setting_password_main_create_ui(ad);
+       /* Disable Done button if exist */
+       elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
+       elm_object_focus_allow_set(ad->bottom_btn, EINA_FALSE);
+
+       ad->focus_timer = ecore_timer_add(0.5, __rotate_cb, ad);
 
        setting_view_password_main.is_create = 1;
 
@@ -250,21 +173,30 @@ static int setting_password_main_destroy(void *cb)
        retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingPasswordUG *ad = (SettingPasswordUG *) cb;
-       
+
+       FREE(ad->step1_str);
+
+       if (ad->remove_timer) {
+               ecore_timer_del(ad->remove_timer);
+               ad->remove_timer = NULL;
+       }
+
        if (ad->focus_timer) {
                ecore_timer_del(ad->focus_timer);
                ad->focus_timer = NULL;
        }
-       if (ad->remove_timer) {
-               ecore_timer_del(ad->remove_timer);
-               ad->remove_timer = NULL;
+
+       if (ad->notify) {
+               evas_object_del(ad->notify);
+               ad->notify = NULL;
        }
 
        if (ad->ly_main != NULL) {
                evas_object_del(ad->ly_main);
                ad->ly_main = NULL;
-               setting_view_password_main.is_create = 0;
        }
+
+       setting_view_password_main.is_create = 0;
        SETTING_TRACE_END;
        return SETTING_RETURN_SUCCESS;
 }
@@ -280,7 +212,6 @@ static int setting_password_main_update(void *cb)
        if (ad->ly_main != NULL) {
                evas_object_show(ad->ly_main);
        }
-
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -304,48 +235,13 @@ static int setting_password_main_cleanup(void *cb)
  *
  ***************************************************/
 
-static int setting_password_main_create_ui(void *data)
-{
-       /* error check */
-       retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
-                "[Setting > Password] Data parameter is NULL");
-
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-
-       SETTING_TRACE_DEBUG("ad->view_type=%d ***", ad->view_type);
-
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_SIM_LOCK_OFF:
-       case SETTING_PW_TYPE_PIN_LOCK_ON:
-       case SETTING_PW_TYPE_PIN_LOCK_OFF:
-               setting_password_main_draw_1line_password(ad, NULL);
-               break;
-       case SETTING_PW_TYPE_SIM_LOCK_ON:
-               setting_password_main_draw_2line_password(ad, NULL);
-               break;
-
-       case SETTING_PW_TYPE_CHANGE_PIN1:
-       case SETTING_PW_TYPE_CHANGE_PIN2:
-       case SETTING_PW_TYPE_PIN1_BLOCKED:
-       case SETTING_PW_TYPE_PIN2_BLOCKED:
-               setting_password_main_draw_3line_password(ad, NULL);
-               break;
-
-       default:
-               SETTING_TRACE_DEBUG("%s*** Unknown Password Type. ***%s",
-                                   SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
-               break;
-       }
-
-       /** @todo this function always return 0, not verifying the function flow with the value */
-       return 0;
-}
-
 static void
 setting_password_main_entry_changed_cb(void *data, Evas_Object *obj,
-                                      void *event_info)
+                                       void *event_info)
 {
+       SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
+       retm_if(obj == NULL, "[Setting > Password] Data parameter is NULL");
        Setting_GenGroupItem_Data *list_item =
            (Setting_GenGroupItem_Data *) data;
        SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
@@ -353,443 +249,290 @@ setting_password_main_entry_changed_cb(void *data, Evas_Object *obj,
        list_item->sub_desc = (char *)g_strdup(entry_str);
        bool isFoundEmptyEntry = FALSE;
 
-       Evas_Object *layout = elm_object_parent_widget_get(obj);
-       elm_object_part_text_set(layout, "elm.guidetext", "");
-
        do {
                if (ad->ed_pw1) {
                        entry_str = ad->ed_pw1->sub_desc;
                        if (NULL == entry_str || '\0' == entry_str[0]) {
                                isFoundEmptyEntry = TRUE;
-                               layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
-                               elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
-                               break;
-                       }
-               }
-               if (ad->ed_pw2) {
-                       entry_str = ad->ed_pw2->sub_desc;
-                       if (NULL == entry_str || '\0' == entry_str[0]) {
-                               isFoundEmptyEntry = TRUE;
-                               layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
-                               elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
+                               /*char *guide_text = elm_object_part_text_get(obj, "elm.guide"); */
+                               /*if(isEmptyStr(guide_text)) */
+                               /*{ */
+                               /*      SETTING_TRACE("guide is empty"); */
+                               /*      elm_object_part_text_set(obj, "elm.guide", _("IDS_ST_BODY_ENTER_PASSWORD")); */
+                               /*} */
+                               elm_object_item_signal_emit(ad->ed_pw1->item, "elm,state,eraser,hide", "");
                                break;
-                       }
-               }
-               if (ad->ed_pw3) {
-                       entry_str = ad->ed_pw3->sub_desc;
-                       if (NULL == entry_str || '\0' == entry_str[0]) {
-                               isFoundEmptyEntry = TRUE;
-                               layout = elm_object_parent_widget_get(ad->ed_pw3->eo_check);
-                               elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
+                       } else {
+                               /*elm_object_part_text_set(obj, "elm.guide", ""); */
+                               elm_object_item_signal_emit(ad->ed_pw1->item, "elm,state,eraser,show", "");
                                break;
                        }
                }
-
        } while (0);
 
+       Eina_Bool item_disabled = elm_object_item_disabled_get(list_item->item);
+       if (item_disabled)
+               return;
+
+       /* For disable toolbar (done) item */
        bool disableFlag = isFoundEmptyEntry;
+       if (ad->ed_pw1 && ad->ed_pw1->eo_check && (safeStrLen(elm_entry_entry_get(ad->ed_pw1->eo_check)) < 4))
+               disableFlag = TRUE;
 
-       #if SUPPORT_BOTTOM_BTNS
-       Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, NAVI_BTN_STYLE_LEFT);
+#if SUPPORT_BOTTOM_BTNS
        if (disableFlag) {
-               if (!evas_object_pass_events_get(done_btn)) { /* it had not yet been disabled */
-                       setting_disable_evas_object(done_btn);
-                       setting_dim_evas_object(done_btn, TRUE);
-               }/* else already disabled */
+               elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
+               elm_entry_input_panel_return_key_disabled_set(obj, EINA_TRUE);
        } else {
-               setting_enable_evas_object(done_btn);
-               setting_undo_dim_evas_object(done_btn, TRUE);
+               elm_object_disabled_set(ad->bottom_btn, EINA_FALSE);
+               elm_entry_input_panel_return_key_disabled_set(obj, EINA_FALSE);
        }
-       #else
-       elm_object_item_disabled_set(elm_toolbar_last_item_get
-                                        (ad->controllbar), disableFlag);
-       #endif
+#else
+       elm_object_item_disabled_set(elm_toolbar_last_item_get(ad->controllbar), disableFlag);
+#endif
 
 }
 
-static Eina_Bool __focus_on_idler(void *data)
+static void __reached_max_pwlength_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       /* error check */
-       retv_if(data == NULL, FALSE);
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+       retm_if(!elm_object_focus_get(obj), "Entry is not focused");/*notify only when entry is being focused on. */
 
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
+       int err = 0;
 
-       if(ad->ed_pw1)
-       {
-               if (ad->ed_pw1->isFocusFlag || (ad->ed_pw1->eo_check != NULL))
-               {
-                       /* no matter how many edifileds, it only need focus on 1st editfiled */
-                       elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
-               }
-       }
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
+       SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
 
-       return ECORE_CALLBACK_CANCEL;
+       /* Display help text. */
+       char temp[128] = {0,};
+       snprintf(temp, 128, _(PW_ST_PW_MAX_LENGTH_HELP), list_item->limit_filter_data->max_char_count);
+       setting_password_ug_display_desc(ad, temp, FALSE);
 }
 
-static int setting_password_main_draw_1line_password(void *data, void *cb)
+static void __entry_activated_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       /* error check */
-       retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
-                "[Setting > Password] Data parameter is NULL");
-
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_PIN_LOCK_ON:
-       case SETTING_PW_TYPE_PIN_LOCK_OFF:
-               ad->ed_pw1 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      "IDS_ST_BODY_PIN1", NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, TRUE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-               break;
-
-       default:
-               break;
-       }
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
 
-       ad->focus_timer = ecore_timer_add(0.4, __focus_on_idler, ad);
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
+       SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
 
-       return 0;
-}
+       if (ad->bottom_btn) {
+               if (elm_object_disabled_get(ad->bottom_btn) == EINA_FALSE) {
+                       /* call done cb. */
+                       if (ad->view_type == SETTING_PW_TYPE_SET_PASSWORD && ad->cur_step == 1) {
+                               /* Save first input */
+                               ad->step1_str = (char *)strdup(ad->ed_pw1->sub_desc);
+
+                               /* Check step1_str : more than 4, not all digits */
+                               int letter = 0;
+                               int digit = 0;
+                               int symbol = 0;
+                               __count_string(ad->step1_str, &letter, &digit, &symbol);
+                               if (safeStrLen(ad->step1_str) == digit) {
+                                       __add_help_of_password_fails(SETTING_PW_ERROR_INCLUDE_NO_LETTER, ad);
+                                       FREE(ad->step1_str);
+                                       return;
+                               }
 
-static int setting_password_main_clear_1line_password(void *data)
-{
-       /* error check */
-       retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
-                "[Setting > Password] Data parameter is NULL");
+                               setting_password_main_clear_1line_password(ad);
+                               if (ad->err_desc && ad->err_desc->item) {
+                                       elm_object_item_del(ad->err_desc->item);
+                                       ad->err_desc = NULL;
+                               }
 
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-       retv_if(NULL == ad->ed_pw1, -1);
+                               /* Change entry title : PW_SHORT_GUIDE_CONFIRM */
+                               FREE(ad->ed_pw1->keyStr);
+                               ad->ed_pw1->keyStr = (char *)strdup(PW_SHORT_GUIDE_CONFIRM);
+                               elm_genlist_item_fields_update(ad->ed_pw1->item, "elm.text.main", ELM_GENLIST_ITEM_FIELD_TEXT);
 
-       ad->ed_pw1->sub_desc = NULL;
-       ad->ed_pw1->isFocusFlag = FALSE;
 
-       elm_entry_entry_set(ad->ed_pw1->eo_check, "");
-       Evas_Object *layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
-       elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
-       return 0;
+                               /* Change button */
+                               elm_object_text_set(ad->bottom_btn, _("IDS_COM_SK_DONE"));
+                               evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_done_cb, ad);
+                               elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
+                               elm_entry_input_panel_return_key_disabled_set(obj, EINA_TRUE);
+                               ad->cur_step++;
+                       } else {
+                               setting_password_main_done_password(ad);
+                       }
+               }
+       }
 }
 
-static int setting_password_main_draw_2line_password(void *data, void *cb)
+static void __entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       /* error check */
-       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
 
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
+       SettingPasswordUG *ad = (SettingPasswordUG *)list_item->userdata;
 
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_SIM_LOCK_ON:
-               ad->ed_pw1 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_NEW,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, TRUE,
-                                                      SETTING_PW_UG_SIM_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw2 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_CONFIRM,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_SIM_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-               break;
-
-       default:
-               break;
+       if (!elm_entry_is_empty(obj)) {
+               elm_object_item_signal_emit(list_item->item, "elm,state,eraser,show", "");
        }
-
-       ad->focus_timer = ecore_timer_add(1, __focus_on_idler, ad);
-       return 0;
+       elm_object_item_signal_emit(list_item->item, "elm,state,rename,hide", "");
 }
 
-static int setting_password_main_clear_2line_password(void *data)
+static void __entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       /* error check */
-       retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
-                "[Setting > Password] Data parameter is NULL");
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+       retm_if(obj == NULL, "Data parameter is NULL");
 
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-       Evas_Object *layout = NULL;
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
 
-       retv_if(NULL == ad->ed_pw1, -1);
-       ad->ed_pw1->sub_desc = NULL;
-       ad->ed_pw1->isFocusFlag = FALSE;
-       elm_entry_entry_set(ad->ed_pw1->eo_check, "");
-       layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
-       elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
-
-       retv_if(NULL == ad->ed_pw2, -1);
-       ad->ed_pw2->sub_desc = NULL;
-       ad->ed_pw2->isFocusFlag = FALSE;
-       elm_entry_entry_set(ad->ed_pw2->eo_check, "");
-       layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
-       elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
-       return 0;
+       if (list_item->item) {
+               elm_object_item_signal_emit(list_item->item, "elm,state,eraser,hide", "");
+               elm_object_item_signal_emit(list_item->item, "elm,state,rename,show", "");
+       }
 }
 
-static int setting_password_main_draw_3line_password(void *data, void *cb)
+int setting_password_main_draw_1line_password(void *data, void *cb)
 {
+       SETTING_TRACE_BEGIN;
        /* error check */
        retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
-                "[Setting > Password] Data parameter is NULL");
+                "[Setting > Password] Data parameter is NULL");
 
        SettingPasswordUG *ad = (SettingPasswordUG *) data;
-       Elm_Input_Panel_Layout ime_style = ELM_INPUT_PANEL_LAYOUT_NORMAL;
 
        switch (ad->view_type) {
-       case SETTING_PW_TYPE_CHANGE_PIN1:
-               ad->ed_pw1 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_CURRENT,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, TRUE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw2 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_NEW,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw3 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_CONFIRM,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-               break;
-
-       case SETTING_PW_TYPE_CHANGE_PIN2:
-               ad->ed_pw1 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_CURRENT,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, TRUE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw2 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_NEW,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw3 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      PW_SHORT_GUIDE_CONFIRM,
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-               break;
-
-       case SETTING_PW_TYPE_PIN1_BLOCKED:
-               ad->ed_pw1 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      "IDS_ST_BODY_PUK1_CODE",
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, TRUE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw2 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      "IDS_ST_BODY_NEW_PIN1",
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw3 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      "IDS_ST_BODY_CONFIRM_NEW_PIN1",
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-               break;
-
-       case SETTING_PW_TYPE_PIN2_BLOCKED:
-               ad->ed_pw1 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      "IDS_ST_BODY_PUK2", NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, TRUE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw2 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      "IDS_ST_BODY_NEW_PIN2",
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-
-               ad->ed_pw3 =
-                   setting_create_Gendial_field_entry(ad->scroller,
-                                                      &
-                                                      (ad->itc_variable_height),
-                                                      NULL, ad,
-                                                      SWALLOW_Type_LAYOUT_ENTRY,
-                                                      NULL, NULL, 0,
-                                                      "IDS_ST_BODY_CONFIRM_NEW_PIN2",
-                                                      NULL,
-                                                      setting_password_main_entry_changed_cb,
-                                                      ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
-                                                      TRUE, FALSE,
-                                                      SETTING_PW_UG_PIN_MAX_LENGTH,
-                                                      0, "0123456789", NULL);
-               break;
-
-       default:
-               break;
+               case SETTING_PW_TYPE_PASSWORD:
+                       ad->ed_pw1 =
+                           setting_create_Gendial_field_editfield(ad->scroller,
+                                                                  &(itc_editfield),
+                                                                  NULL, ad,
+                                                                  SWALLOW_Type_LAYOUT_EDITFIELD,
+                                                                  "IDS_COM_BODY_PASSWORD",
+                                                                  NULL,
+                                                                  setting_password_main_entry_changed_cb,
+                                                                  __entry_focused_cb,
+                                                                  __entry_unfocused_cb,
+                                                                  __entry_activated_cb,
+                                                                  __reached_max_pwlength_cb,
+                                                                  ELM_INPUT_PANEL_LAYOUT_PASSWORD,
+                                                                  TRUE, TRUE,
+                                                                  SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
+                                                                  0, NULL, NULL);
+                       break;
+               case SETTING_PW_TYPE_SET_PASSWORD:
+                       ad->ed_pw1 =
+                           setting_create_Gendial_field_editfield(ad->scroller,
+                                                                  &(itc_editfield),
+                                                                  NULL, ad,
+                                                                  SWALLOW_Type_LAYOUT_EDITFIELD,
+                                                                  PW_SHORT_GUIDE_NEW,
+                                                                  NULL,
+                                                                  setting_password_main_entry_changed_cb,
+                                                                  __entry_focused_cb,
+                                                                  __entry_unfocused_cb,
+                                                                  __entry_activated_cb,
+                                                                  __reached_max_pwlength_cb,
+                                                                  ELM_INPUT_PANEL_LAYOUT_PASSWORD,
+                                                                  TRUE, TRUE,
+                                                                  SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH,
+                                                                  0, NULL, NULL);
+
+                       ad->err_desc = setting_create_Gendial_field_helpitem_without_bottom_separator(
+                                          ad->scroller,
+                                          &(itc_multiline_text),
+                                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
+                                          PW_NORMAL_AND_CONTAIN_ALPHANUMER_DESC);
+                       break;
+               default:
+                       break;
        }
 
-       ad->focus_timer = ecore_timer_add(1, __focus_on_idler, ad);
+       ad->ed_pw2 = NULL;
+       ad->ed_pw3 = NULL;
+
        return 0;
 }
 
-static int setting_password_main_clear_3line_password(void *data)
+int setting_password_main_clear_1line_password(void *data)
 {
        /* error check */
        retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
-                "[Setting > Password] Data parameter is NULL");
+                "[Setting > Password] Data parameter is NULL");
 
        SettingPasswordUG *ad = (SettingPasswordUG *) data;
-       Evas_Object *layout = NULL;
-
        retv_if(NULL == ad->ed_pw1, -1);
+
        ad->ed_pw1->sub_desc = NULL;
        ad->ed_pw1->isFocusFlag = FALSE;
+
        elm_entry_entry_set(ad->ed_pw1->eo_check, "");
-       layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
-       elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
-
-       retv_if(NULL == ad->ed_pw2, -1);
-       ad->ed_pw2->sub_desc = NULL;
-       ad->ed_pw2->isFocusFlag = FALSE;
-       elm_entry_entry_set(ad->ed_pw2->eo_check, "");
-       layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
-       elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
-
-       retv_if(NULL == ad->ed_pw3, -1);
-       ad->ed_pw3->sub_desc = NULL;
-       ad->ed_pw3->isFocusFlag = FALSE;
-       elm_entry_entry_set(ad->ed_pw3->eo_check, "");
-       layout = elm_object_parent_widget_get(ad->ed_pw3->eo_check);
-       elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
+       elm_object_part_text_set(ad->ed_pw1->eo_check, "elm.guide", _("IDS_ST_BODY_ENTER_PASSWORD"));
+
        return 0;
 }
 
-static int setting_password_main_check_1line_password(void *data)
+/* This help is shown on entering new/confirm password view */
+void __add_help_of_password_policy(SettingPasswordUG *ad)
+{
+       ret_if(ad == NULL);
+
+       ad->err_desc = setting_create_Gendial_field_helpitem_without_bottom_separator(
+                          ad->scroller,
+                          &(itc_multiline_text),
+                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
+                          PW_NORMAL_AND_CONTAIN_ALPHANUMER_DESC);
+
+       if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
+               SETTING_TRACE_DEBUG("FOCUS IN");
+               ad->ed_pw1->isFocusFlag = TRUE;
+               elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
+       }
+}
+
+
+/**
+ * This help is shown after verifying entered new/confirm password with constraint
+ */
+void __add_help_of_password_fails(int ret, SettingPasswordUG *ad)
+{
+       ret_if(ad == NULL);
+
+       switch (ret) {
+               case SETTING_PW_ERROR_INVALID_LENGTH :
+                       setting_password_ug_display_desc(ad, "Invalid length", FALSE);
+                       break;
+               case SETTING_PW_ERROR_INCLUDE_NO_LETTER :
+                       setting_password_ug_display_desc(ad, "IDS_ST_BODY_PASSWORD_MUST_CONTAIN_AT_LEAST_1_LETTER", FALSE);
+                       break;
+               case SETTING_PW_ERROR_NO_MATCH_WITH_POLICY :
+                       setting_password_ug_display_desc(ad, "No match with policy", FALSE);
+                       break;
+               case SETTING_PW_ERROR_NO_MATCH_MIN_COMPLEX :
+                       setting_password_ug_display_desc(ad, "No match with min complex", FALSE);
+                       break;
+               case SETTING_PW_ERROR_EXIST_FORBIDDEN_STRING :
+                       setting_password_ug_display_desc(ad, "Exist forbidden string", FALSE);
+                       break;
+               case SETTING_PW_ERROR_NO_MATCH_MAX_REPEAT_COUNT :
+                       setting_password_ug_display_desc(ad, "No match with max repeat count", FALSE);
+                       break;
+               case SETTING_PW_ERROR_SIMPLE_STYLE :
+                       setting_password_ug_display_desc(ad, "Exist simple sequence", FALSE);
+                       break;
+               case SETTING_PW_ERROR_INCLUDE_DIGIT:
+                       setting_password_ug_display_desc(ad, "Password should not include any digit or symbol", FALSE);
+                       break;
+               case SETTING_PW_ERROR_NO_MATCH_WITH_PATTERN:
+                       setting_password_ug_display_desc(ad, "No match with pattern", FALSE);
+                       break;
+               case SETTING_PW_ERROR_NO_DIGIT:
+                       setting_password_ug_display_desc(ad, "IDS_ST_BODY_PASSWORD_MUST_CONTAIN_AT_LEAST_1_NUMBER", FALSE);
+                       break;
+               default:
+                       setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
+                       break;
+       }
+}
+
+int setting_password_main_check_1line_password(void *data)
 {
        /* error check */
        retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
@@ -802,695 +545,303 @@ static int setting_password_main_check_1line_password(void *data)
        /*  Empty Check */
        if (isEmptyStr(entry_str)) {
                setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
-
                return SETTING_ENTRY_RETURN_NULL_STR_ERR;
        }
 
        /*  Length Check */
        int entry_str_len = safeStrLen(entry_str);
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_PIN_LOCK_ON:
-       case SETTING_PW_TYPE_PIN_LOCK_OFF:
-               {
-                       if (entry_str_len < SETTING_PW_UG_PIN_MIN_LENGTH
-                           || entry_str_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
-                               setting_password_main_warning_entry_added_byte_popup
-                                       (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
-                               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
-                       }
-               }
-               break;
-       case SETTING_PW_TYPE_SIM_LOCK_OFF:
-               {
-                       if (entry_str_len < SETTING_PW_UG_SIM_MIN_LENGTH
-                           || entry_str_len > SETTING_PW_UG_SIM_MAX_LENGTH) {
-                               setting_password_main_warning_entry_added_byte_popup
-                                       (ad, SETTING_PW_UG_SIM_MIN_LENGTH, SETTING_PW_UG_SIM_MAX_LENGTH);
-                               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
-                       }
-               }
-       default:
-               break;
+       if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
+           || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
+               setting_password_main_warning_entry_added_byte_popup(ad,
+                                                                    SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH,
+                                                                    SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
+               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
        }
        return SETTING_RETURN_SUCCESS;
 }
 
-static int setting_password_main_check_2line_password(void *data)
+int setting_password_main_check_2line_password(void *data)
 {
+       SETTING_TRACE_BEGIN;
        /* error check */
        retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
        SettingPasswordUG *ad = (SettingPasswordUG *) data;
+       if (ad->ed_pw1 == NULL)
+               return SETTING_GENERAL_ERR_NULL_DATA_PARAMETER;
 
-       const char *entry_str1 = ad->ed_pw1->sub_desc;
-       const char *entry_str2 = ad->ed_pw2->sub_desc;
+       const char *entry_str1 = ad->step1_str;
+       const char *entry_str2 = ad->ed_pw1->sub_desc;
        ad->focus_data = ad->ed_pw1;
 
        /*  Empty Check */
        if (isEmptyStr(entry_str1)) {
                setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
-
-               return SETTING_ENTRY_RETURN_NULL_STR_ERR;
-       }
-
-       if (isEmptyStr(entry_str2)) {
-               ad->focus_data = ad->ed_pw2;
-               setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
-
                return SETTING_ENTRY_RETURN_NULL_STR_ERR;
        }
 
-       /*  Length Check */
-       int entry_str_len = safeStrLen(entry_str1);
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_SIM_LOCK_ON:
-               {
-                       if (entry_str_len < SETTING_PW_UG_SIM_MIN_LENGTH
-                           || entry_str_len > SETTING_PW_UG_SIM_MAX_LENGTH) {
-                               setting_password_main_warning_entry_added_byte_popup
-                                       (ad, SETTING_PW_UG_SIM_MIN_LENGTH, SETTING_PW_UG_SIM_MAX_LENGTH);
-                               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
-                       }
-               }
-               break;
-       default:
-               break;
-       }
-
        /*  Match Check */
        if (0 != safeStrCmp(entry_str1, entry_str2)) {
+               setting_password_main_clear_1line_password(ad);
                setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
-
                return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
        }
 
+       /*  Length Check */
+       int entry_str_len = safeStrLen(entry_str1);
+       if (entry_str_len < SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH
+           || entry_str_len > SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH) {
+               setting_password_main_warning_entry_added_byte_popup(ad,
+                                                                    SETTING_PW_UG_NORMAL_PASSWORD_MIN_LENGTH,
+                                                                    SETTING_PW_UG_NORMAL_PASSWORD_MAX_LENGTH);
+               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
+       }
+
        return SETTING_RETURN_SUCCESS;
 }
 
-static void
-setting_password_main_warning_entry_added_byte_popup(SettingPasswordUG *ad,
-                                                    int min, int max)
+void setting_password_main_warning_entry_added_byte_popup(SettingPasswordUG *ad,
+                                                          int min, int max)
 {
        char str[MAX_SPECIALIZITION_LEN + 1] = { 0 };
 
-       snprintf(str, MAX_SPECIALIZITION_LEN, "%d~%d %s", min, max, _("characters required"));
-
+       snprintf(str, MAX_SPECIALIZITION_LEN, _("IDS_ST_POP_PASSWORD_MUST_BE_MORE_THAN_P1SD_CHARACTERS_AND_LESS_THAN_P2SD"), min, max);
        setting_password_ug_display_desc(ad, str, FALSE);
-
 }
 
-static int setting_password_main_check_3line_password(void *data)
+static void setting_password_main_done_password(void *data)
 {
-       /* error check */
-       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-
+       ret_if(data == NULL);
        SettingPasswordUG *ad = (SettingPasswordUG *) data;
 
-       const char *entry_str1 = ad->ed_pw1->sub_desc;
-       const char *entry_str2 = ad->ed_pw2->sub_desc;
-       const char *entry_str3 = ad->ed_pw3->sub_desc;
-       ad->focus_data = ad->ed_pw1;
-
-       /*  Empty Check */
-       if (isEmptyStr(entry_str1)) {
-               setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
-
-               return SETTING_ENTRY_RETURN_NULL_STR_ERR;
-       }
-
-       if (isEmptyStr(entry_str2)) {
-               ad->focus_data = ad->ed_pw2;
-               setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
-
-               return SETTING_ENTRY_RETURN_NULL_STR_ERR;
-       }
-
-       if (isEmptyStr(entry_str3)) {
-               ad->focus_data = ad->ed_pw3;
-               setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
-
-               return SETTING_ENTRY_RETURN_NULL_STR_ERR;
-       }
-
-       /*  Length Check */
-       int entry_str1_len = safeStrLen(entry_str1);
-       int entry_str2_len = safeStrLen(entry_str2);
-       int entry_str3_len = safeStrLen(entry_str3);
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_PIN1_BLOCKED:
-       case SETTING_PW_TYPE_PIN2_BLOCKED:
-       case SETTING_PW_TYPE_CHANGE_PIN1:
-       case SETTING_PW_TYPE_CHANGE_PIN2:
-               {
-                       if (entry_str1_len < SETTING_PW_UG_PIN_MIN_LENGTH
-                           || entry_str1_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
-                               setting_password_main_warning_entry_added_byte_popup
-                                       (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
-                               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
-                       }
-                       if (entry_str2_len < SETTING_PW_UG_PIN_MIN_LENGTH
-                           || entry_str2_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
-                               ad->focus_data = ad->ed_pw2;
-                               setting_password_main_warning_entry_added_byte_popup
-                                       (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
-                               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
-                       }
-                       if (entry_str3_len < SETTING_PW_UG_PIN_MIN_LENGTH
-                           || entry_str3_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
-                               ad->focus_data = ad->ed_pw3;
-                               setting_password_main_warning_entry_added_byte_popup
-                                       (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
-                               return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
-                       }
-               }
-               break;
-       default:
-               break;
-       }
-
-       /*  Match Check */
-       if (0 != safeStrCmp(entry_str2, entry_str3)) {
-               ad->focus_data = ad->ed_pw2;
-               setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
-
-               return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
-       }
-
-       return SETTING_RETURN_SUCCESS;
-}
-
-static void
-setting_password_main_click_softkey_cancel_cb(void *data, Evas_Object *obj,
-                                             void *event_info)
-{
-       /* error check */
-       retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
-
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-
-       /* send result : Cancel */
-       service_h svc;
-       if(service_create(&svc))
+       app_control_h svc;
+       if (app_control_create(&svc)) {
+               SETTING_TRACE_ERROR("app_control_create() failed");
                return;
-
-       service_add_extra_data(svc, "result", "Cancel");
-       ug_send_result(ad->ug, svc);
-       SETTING_TRACE("Send Result : %s\n", "Cancel");
-
-       service_destroy(svc);
-
-       /* Send destroy request */
-       ug_destroy_me(ad->ug);
-
-}
-
-static void
-setting_password_main_click_softkey_done_cb(void *data, Evas_Object *obj,
-                                           void *event_info)
-{
-       /* error check */
-       retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
-
-       int err = 0;
-       int ret = 0;
-       char svalue[SHA256_DIGEST_LENGTH] = { 0, };
-
-       memset(svalue, 0x0, SHA256_DIGEST_LENGTH);
-
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-       service_h svc;
+       }
 
        SETTING_TRACE("ad->view_type:%d", ad->view_type);
+       int ret = 0;
 
        switch (ad->view_type) {
-               case SETTING_PW_TYPE_PIN_LOCK_ON:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_PIN_LOCK_ON");
-
-                               ret = setting_password_main_check_1line_password(ad);
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       TelSimFacilityPw_t sim_sec_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
-                                       const char *entry_str;
-
-                                       entry_str = ad->ed_pw1->sub_desc;
-                                       if (isEmptyStr(entry_str)) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
+               case SETTING_PW_TYPE_PASSWORD:
+                       ret = setting_password_main_check_1line_password(ad);
 
-                                       sim_sec_data.lock_type = TAPI_SIM_LOCK_SC;//TAPI_SIM_PTYPE_PIN1;
-                                       sim_sec_data.pw = (unsigned char *)entry_str;
-                                       sim_sec_data.pw_len = safeStrLen(entry_str);
+                       if (ret == SETTING_RETURN_SUCCESS) {
+                               const char *entry_str;
+                               entry_str = ad->ed_pw1->sub_desc;
 
-                                       tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
-                                       setting_password_main_clear_1line_password(ad);
+                               unsigned int remain_attempt = ATTEMPT_INFINITE;
+                               unsigned int valid_seconds = 0;
+                               ret = setting_password_check_password(entry_str, &remain_attempt, &valid_seconds);
 
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] tel_enable_sim_facility err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                       } else {
-                                               /*  Success. Send Message to Caller for Modify Pin Lock slider status */
-                                               SETTING_TRACE_DEBUG("*** [SUCCESS] tel_enable_sim_facility err=%d ***", tapi_ret);
+                               if (ret == SETTING_RETURN_SUCCESS) {
+                                       int err;
+
+                                       if (safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_PASSWORD") == 0) {
+
+                                               /*  reset VCONF */
+                                               setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT,
+                                                                       PHONE_LOCK_ATTEMPS_MAX, &err);
+                                               if (err == SETTING_RETURN_FAIL) {
+                                                       SETTING_TRACE_ERROR("[Error] set value of vconf fail.");
+                                                       app_control_destroy(svc);
+                                                       return;
+                                               }
+                                       } else if (0 == safeStrCmp(ad->view_type_string, "SETTING_PW_TYPE_ENTER_LOCK_TYPE")) {
+                                               app_control_add_extra_data(svc, "current", entry_str);
                                        }
                                } else {
+                                       /*  Incorrect Password. Display Popup.   */
                                        setting_password_main_clear_1line_password(ad);
+                                       ad->focus_data = ad->ed_pw1;
+                                       setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
+                                       app_control_destroy(svc);
+                                       return;
                                }
+                       } else {
+                               setting_password_main_clear_1line_password(ad);
+                               app_control_destroy(svc);
+                               return;
                        }
-                       return;
-               case SETTING_PW_TYPE_PIN_LOCK_OFF:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_PIN_LOCK_OFF");
-
-                               ret = setting_password_main_check_1line_password(ad);
+                       break;
+               case SETTING_PW_TYPE_SET_PASSWORD: {
+                               SETTING_TRACE("case SETTING_PW_TYPE_SET_PASSWORD");
+                               ret = setting_password_main_check_2line_password(ad);
 
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       TelSimFacilityPw_t sim_sec_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
+                               if (SETTING_RETURN_SUCCESS == ret) {
                                        const char *entry_str;
-
                                        entry_str = ad->ed_pw1->sub_desc;
-                                       if (isEmptyStr(entry_str)) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-
-                                       sim_sec_data.lock_type = TAPI_SIM_LOCK_SC;//TAPI_SIM_PTYPE_PIN1
-                                       sim_sec_data.pw = (unsigned char *)entry_str;
-                                       sim_sec_data.pw_len = safeStrLen(entry_str);
-
-                                       tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
-                                       setting_password_main_clear_1line_password(ad);
 
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] tel_disable_sim_facility err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                       } else {
-                                               /*  Success. Send Message to Caller for Modify Pin Lock slider status                                           */
-                                       }
-                               } else {
-                                       setting_password_main_clear_1line_password(ad);
-                               }
-                       }
-                       return;
-               case SETTING_PW_TYPE_PIN1_BLOCKED:
-                       {
-                               /*  PIN1 Status is "Blocked": User should input puk code and new pin1 code. */
-                               /*  If puk code is correct and success to modify pin1 code, display pin1 code change popup */
-                               /*  But, if this menu is "Pin Lock", pinlock status will not be changed. */
-                               SETTING_TRACE("case SETTING_PW_TYPE_PIN1_BLOCKED");
-                               ret = setting_password_main_check_3line_password(ad);
-
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       TelSimSecPw_t puk1_data = { 0, };
-                                       TelSimSecPw_t pin1_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
-                                       const char *puk;
-                                       const char *new_pin1;
-
-                                       puk = ad->ed_pw1->sub_desc;
-                                       new_pin1 = ad->ed_pw2->sub_desc;
-                                       if (isEmptyStr(puk)) {
+                                       if (isEmptyStr(entry_str)) {
                                                ad->focus_data = ad->ed_pw1;
+                                               SETTING_TRACE_DEBUG("%s*** [ERR] elm_entry_entry_get return NULL ***%s",
+                                                                   SETTING_FONT_RED, SETTING_FONT_BLACK);
                                                setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
+                                               app_control_destroy(svc);
                                                return;
                                        }
 
-                                       if (isEmptyStr(new_pin1)) {
-                                               ad->focus_data = ad->ed_pw2;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
+                                       ret = setting_password_set_password(ad->cur_pwd, entry_str, ad);
+
+                                       /*  Modify Setting Password */
+                                       if (ret > 0) {
+                                               /*  Display popup */
+                                               /*service_add_extra_data(svc, "current", entry_str); */
+                                               if (ad->set_history_timer) {
+                                                       setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_NEW_PASSWD_SAVED"), FALSE);
+                                               } else {
+                                                       app_control_add_extra_data(svc, "result", ad->view_type_string);
+                                                       ug_send_result(ad->ug, svc);
+                                                       SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
+
+                                                       app_control_destroy(svc);
+                                                       /* Send destroy request */
+                                                       ug_destroy_me(ad->ug);
+                                                       return;
+                                               }
+                                               app_control_destroy(svc);
                                                return;
-                                       }
-
-                                       puk1_data.type = TAPI_SIM_PTYPE_PUK1;
-                                       puk1_data.pw = (unsigned char *)puk;
-                                       puk1_data.pw_len = safeStrLen(puk);
-
-                                       pin1_data.type = TAPI_SIM_PTYPE_PIN1;
-                                       pin1_data.pw = (unsigned char *)new_pin1;
-                                       pin1_data.pw_len = safeStrLen(new_pin1);
-
-                                       tapi_ret = tel_verify_sim_puks(ad->handle, &puk1_data, &pin1_data, setting_sim_verify_puks_cb, ad);
-                                       setting_password_main_clear_3line_password(ad);
-
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] tel_verify_sim_puks err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                       } else {
-                                               /*  Success. Send Message to Caller for Modify Pin Lock slider status */
-
-                                       }
-                               } else {
-                                       setting_password_main_clear_3line_password(ad);
-                               }
-                       }
-                       return;
-               case SETTING_PW_TYPE_PIN2_BLOCKED:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_PIN2_BLOCKED");
-                               ret = setting_password_main_check_3line_password(ad);
-
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       TelSimSecPw_t puk2_data = { 0, };
-                                       TelSimSecPw_t pin2_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
-                                       const char *puk;
-                                       const char *new_pin2;
-
-                                       puk = ad->ed_pw1->sub_desc;
-                                       new_pin2 = ad->ed_pw2->sub_desc;
-                                       if (isEmptyStr(puk)) {
+                                       } else if (ret == SETTING_PW_ERROR_REUSED) {
                                                ad->focus_data = ad->ed_pw1;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-
-                                       if (isEmptyStr(new_pin2)) {
-                                               ad->focus_data = ad->ed_pw2;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
+                                               setting_password_main_clear_1line_password(ad);
+                                               setting_password_ug_display_desc(ad, _(PW_ERR_REUSED), FALSE);
+                                               app_control_destroy(svc);
                                                return;
-                                       }
-
-                                       puk2_data.type = TAPI_SIM_PTYPE_PUK2;
-                                       puk2_data.pw = (unsigned char *)puk;
-                                       puk2_data.pw_len = safeStrLen(puk);
-
-                                       pin2_data.type = TAPI_SIM_PTYPE_PIN2;
-                                       pin2_data.pw = (unsigned char *)new_pin2;
-                                       pin2_data.pw_len = safeStrLen(new_pin2);
-
-                                       tapi_ret = tel_verify_sim_puks(ad->handle, &puk2_data, &pin2_data, setting_sim_verify_puks_cb, ad);
-                                       setting_password_main_clear_3line_password(ad);
-
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] tel_verify_sim_puks err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
                                        } else {
-                                               /*  Success. Send Message to Caller for Modify Pin Lock slider status */
-
-                                       }
-                               } else {
-                                       setting_password_main_clear_3line_password(ad);
-                               }
-                       }
-                       return;
-               case SETTING_PW_TYPE_CHANGE_PIN1:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_CHANGE_PIN1");
-
-                               ret = setting_password_main_check_3line_password(ad);
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       const char *old_pw;
-                                       const char *new_pw;
-                                       TelSimSecPw_t sim_old_sec_data = { 0, };
-                                       TelSimSecPw_t sim_new_sec_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
-
-                                       old_pw = ad->ed_pw1->sub_desc;
-                                       new_pw = ad->ed_pw2->sub_desc;
-                                       if (isEmptyStr(old_pw)) {
                                                ad->focus_data = ad->ed_pw1;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-
-                                       if (isEmptyStr(new_pw)) {
-                                               ad->focus_data = ad->ed_pw2;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
+                                               setting_password_main_clear_1line_password(ad);
+                                               setting_password_ug_display_desc(ad, _("IDS_COM_BODY_OPERATION_FAILED"), FALSE);
+                                               app_control_destroy(svc);
                                                return;
                                        }
-
-                                       sim_old_sec_data.type = TAPI_SIM_PTYPE_PIN1;
-                                       sim_new_sec_data.type = TAPI_SIM_PTYPE_PIN1;
-                                       sim_old_sec_data.pw = (unsigned char *)old_pw;
-                                       sim_old_sec_data.pw_len = safeStrLen(old_pw);
-                                       sim_new_sec_data.pw = (unsigned char *)new_pw;
-                                       sim_new_sec_data.pw_len = safeStrLen(new_pw);
-
-                                       tapi_ret = tel_change_sim_pins(ad->handle, &sim_old_sec_data, &sim_new_sec_data, setting_sim_change_pins_cb, ad);
-                                       setting_password_main_clear_3line_password(ad);
-
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] TelTapiSimChangePIN err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                       } else {
-                                               /*  Success popup and send message to caller */
-                                               /* setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PIN1_CHANGED")); */
-                                       }
-                               } else {
-                                       setting_password_main_clear_3line_password(ad);
-                               }
-                       }
-                       return;
-               case SETTING_PW_TYPE_CHANGE_PIN2:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_CHANGE_PIN2");
-                               ret = setting_password_main_check_3line_password(ad);
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       const char *old_pw;
-                                       const char *new_pw;
-                                       TelSimSecPw_t sim_old_sec_data = { 0, };
-                                       TelSimSecPw_t sim_new_sec_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
-
-                                       old_pw = ad->ed_pw1->sub_desc;
-                                       new_pw = ad->ed_pw2->sub_desc;
-                                       if (isEmptyStr(old_pw)) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-
-                                       if (isEmptyStr(new_pw)) {
-                                               ad->focus_data = ad->ed_pw2;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-
-                                       sim_old_sec_data.type = TAPI_SIM_PTYPE_PIN2;
-                                       sim_new_sec_data.type = TAPI_SIM_PTYPE_PIN2;
-                                       sim_old_sec_data.pw = (unsigned char *)old_pw;
-                                       sim_old_sec_data.pw_len = safeStrLen(old_pw);
-                                       sim_new_sec_data.pw = (unsigned char *)new_pw;
-                                       sim_new_sec_data.pw_len = safeStrLen(new_pw);
-
-                                       tapi_ret = tel_change_sim_pins(ad->handle, &sim_old_sec_data, &sim_new_sec_data, setting_sim_change_pins_cb, ad);
-                                       setting_password_main_clear_3line_password(ad);
-
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] TelTapiSimChangePIN err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                       } else {
-                                               /*  Success popup and send message to caller */
-                                               /* setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PIN2_CHANGED")); */
-                                       }
-                               } else {
-                                       setting_password_main_clear_3line_password(ad);
-                               }
-                       }
-                       return;
-               case SETTING_PW_TYPE_SIM_LOCK_ON:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_SIM_LOCK_ON");
-
-                               ret = setting_password_main_check_2line_password(ad);
-
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       TelSimFacilityPw_t sim_sec_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
-                                       const char *entry_str;
-                                       entry_str = ad->ed_pw1->sub_desc;
-                                       if (isEmptyStr(entry_str)) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-
-                                       sim_sec_data.lock_type = TAPI_SIM_LOCK_PS;//TAPI_SIM_PTYPE_SIM
-                                       sim_sec_data.pw = (unsigned char *)entry_str;
-                                       sim_sec_data.pw_len = safeStrLen(entry_str);
-
-                                       tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
-                                       setting_password_main_clear_2line_password(ad);
-
-                                       SETTING_TRACE("SIM Lock password : %s\n", (char *)(sim_sec_data.pw));
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] tel_enable_sim_facility err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                       } else {
-                                               /*  Success. Send Message to Caller for Modify Pin Lock slider status */
-
-                                       }
+                               } else if (SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW == ret) {
+                                       /* Nothing */
+                                       app_control_destroy(svc);
+                                       setting_password_main_clear_1line_password(ad);
+                                       setting_password_ug_display_desc(ad, PW_ST_PW_DO_NOT_MATCH, FALSE);
+                                       return;
                                } else {
-                                       setting_password_main_clear_2line_password(ad);
+                                       SETTING_TRACE("error : %d", ret);
+                                       setting_password_main_clear_1line_password(ad);
+                                       setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
+                                       app_control_destroy(svc);
+                                       return;
                                }
                        }
+                       break;
+               default:
+                       app_control_destroy(svc);
                        return;
-               case SETTING_PW_TYPE_SIM_LOCK_OFF:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_SIM_LOCK_OFF");
-
-                               ret = setting_password_main_check_1line_password(ad);
-                               if (ret == SETTING_RETURN_SUCCESS) {
-                                       TelSimFacilityPw_t sim_sec_data = { 0, };
-                                       int tapi_ret = TAPI_API_SUCCESS;
-                                       const char *entry_str;
-
-                                       entry_str = ad->ed_pw1->sub_desc;
-                                       if (isEmptyStr(entry_str)) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
+       }
 
-                                       sim_sec_data.lock_type = TAPI_SIM_LOCK_PS;//TAPI_SIM_PTYPE_SIM
-                                       sim_sec_data.pw = (unsigned char *)entry_str;
-                                       sim_sec_data.pw_len = safeStrLen(entry_str);
+       app_control_add_extra_data(svc, "result", ad->view_type_string);
+       ug_send_result(ad->ug, svc);
+       SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
 
-                                       tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
-                                       setting_password_main_clear_1line_password(ad);
+       app_control_destroy(svc);
+       /* Send destroy request */
+       ug_destroy_me(ad->ug);
+}
 
-                                       if (TAPI_API_SUCCESS != tapi_ret) {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_DEBUG("%s*** [ERR] tel_disable_sim_facility err=%d ***%s",
-                                                                               SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                       } else {
-                                               /*  Success. Send Message to Caller for Modify Pin Lock slider status */
+static int __count_string(const char *str, int *cnt_letter, int *cnt_digit, int *cnt_sym)
+{
+       SETTING_TRACE_BEGIN;
+       retv_if(str == NULL || cnt_letter == NULL || cnt_digit == NULL || cnt_sym == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
-                                       }
-                               } else {
-                                       setting_password_main_clear_1line_password(ad);
-                               }
-                       }
-                       return;
-#if SUPPORT_FDN
-               case SETTING_PW_TYPE_FDN_MODE_ON:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_FDN_MODE_ON");
-                               ret = setting_password_main_check_1line_password(ad);
-
-                               if(ret == SETTING_RETURN_SUCCESS)
-                               {
-                                       const char *entry_str;
-                                       int tapi_ret = TAPI_API_INVALID_INPUT;
+       int length = strlen(str);
+       int index = 0;
+       char temp = 0;
+       int letter = 0;
+       int digit = 0;
+       int symbol = 0;
 
-                                       TelSimFacilityPw_t sim_sec_data = {0,};
-                                       int ReqId;
+       if (length <= 0) {
+               SETTING_TRACE_DEBUG("[DEBUG] invalid input length");
+               return SETTING_RETURN_FAIL;
+       }
 
-                                       entry_str = ad->ed_pw1->sub_desc;
-                                       if(isEmptyStr(entry_str))
-                                       {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-                                       sim_sec_data.lock_type = TAPI_SIM_LOCK_FD;//TAPI_SIM_PTYPE_PIN2;
-                                       sim_sec_data.pw_len = safeStrLen(entry_str);
-                                       sim_sec_data.pw = (unsigned char*)entry_str;
+       for (index = 0; index < length; index++) {
+               temp = (char)(str[index]);
+               SETTING_TRACE_SECURE_DEBUG("temp %c", temp);
+
+               if ((temp >= '0') && (temp <= '9')) {   /* digit */
+                       digit++;
+               } else if ((temp >= 'a') && (temp <= 'z')) {    /* lower letter */
+                       letter++;
+               } else if ((temp >= 'A') && (temp <= 'Z')) {    /* upper letter */
+                       letter++;
+               } else if ((temp >= ' ') && (temp <= '~')) { /* symbol means special char that enables to input from IME. */
+                       symbol++;
+               }
+       }
+       SETTING_TRACE_SECURE_DEBUG("%s includes %d letters, %d digits, and %d symbols", str, letter, digit, symbol);
+       *cnt_letter = letter;
+       *cnt_digit = digit;
+       *cnt_sym = symbol;
+       return SETTING_RETURN_SUCCESS;
+}
 
-                                       tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
-                                       setting_password_main_clear_1line_password(ad);
+void setting_password_main_click_softkey_continue_cb(void *data, Evas_Object *obj,
+                                                     void *event_info)
+{
+       /* error check */
+       retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
 
-                                       if(tapi_ret != TAPI_API_SUCCESS)
-                                       {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_ERROR("[ERR] Failed to enable FDN. Tapi return %d", tapi_ret);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
+       SettingPasswordUG *ad = (SettingPasswordUG *) data;
 
-                                       /* Success */
-                                       if (service_create(&svc))
-                                               return;
+       /* Save first input */
+       ad->step1_str = (char *)strdup(ad->ed_pw1->sub_desc);
+
+       /* Check step1_str : more than 4, not all digits */
+       int letter = 0;
+       int digit = 0;
+       int symbol = 0;
+       __count_string(ad->step1_str, &letter, &digit, &symbol);
+       if (safeStrLen(ad->step1_str) == digit) {
+               __add_help_of_password_fails(SETTING_PW_ERROR_INCLUDE_NO_LETTER, ad);
+               FREE(ad->step1_str);
+               return;
+       }
 
-                                       service_add_extra_data(svc, "result", ad->view_type_string);
-                                       ug_send_result(ad->ug, svc);
-                                       SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
-                                       service_destroy(svc);
-                                       //ug_destroy_me(ad->ug);
-                               }
-                               else
-                               {
-                                       /* check failed */
-                                       setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), TRUE);
-                               }
-                       }
-                       break;
-               case SETTING_PW_TYPE_FDN_MODE_OFF:
-                       {
-                               SETTING_TRACE("case SETTING_PW_TYPE_FDN_MODE_OFF");
-                               ret = setting_password_main_check_1line_password(ad);
+       setting_password_main_clear_1line_password(ad);
+       if (ad->err_desc && ad->err_desc->item) {
+               elm_object_item_del(ad->err_desc->item);
+               ad->err_desc = NULL;
+       }
 
-                               if(ret == SETTING_RETURN_SUCCESS)
-                               {
-                                       const char *entry_str;
-                                       int tapi_ret = TAPI_API_INVALID_INPUT;
+       /* Change entry title : PW_SHORT_GUIDE_CONFIRM */
+       FREE(ad->ed_pw1->keyStr);
+       ad->ed_pw1->keyStr = (char *)strdup(PW_SHORT_GUIDE_CONFIRM);
+       elm_genlist_item_fields_update(ad->ed_pw1->item, "elm.text.main", ELM_GENLIST_ITEM_FIELD_TEXT);
 
-                                       TelSimFacilityPw_t sim_sec_data = {0,};
 
-                                       entry_str = ad->ed_pw1->sub_desc;
-                                       if(isEmptyStr(entry_str))
-                                       {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
-                                       sim_sec_data.lock_type = TAPI_SIM_LOCK_FD;//TAPI_SIM_PTYPE_PIN2
-                                       sim_sec_data.pw_len = safeStrLen(entry_str);
-                                       sim_sec_data.pw = (unsigned char*)entry_str;
+       /* Change button */
+       if (ad->bottom_btn) {
+               elm_object_text_set(ad->bottom_btn, _("IDS_COM_SK_DONE"));
+               evas_object_smart_callback_add(ad->bottom_btn, "clicked", setting_password_main_click_softkey_done_cb, ad);
+               elm_object_disabled_set(ad->bottom_btn, EINA_TRUE);
+       }
 
-                                       tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
-                                       setting_password_main_clear_1line_password(ad);
+       ad->cur_step++;
+}
 
-                                       if(tapi_ret != TAPI_API_SUCCESS)
-                                       {
-                                               ad->focus_data = ad->ed_pw1;
-                                               SETTING_TRACE_ERROR("[ERR] Failed to disable FDN. Tapi return %d", tapi_ret);
-                                               setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
-                                               return;
-                                       }
+void setting_password_main_click_softkey_done_cb(void *data, Evas_Object *obj,
+                                                 void *event_info)
+{
+       /* error check */
+       retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
 
-                                       /* Success */
-                                       if (service_create(&svc))
-                                               return;
+       SettingPasswordUG *ad = (SettingPasswordUG *) data;
 
-                                       service_add_extra_data(svc, "result", ad->view_type_string);
-                                       ug_send_result(ad->ug, svc);
-                                       SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
+       if (ad->ed_pw1 && ad->ed_pw1->eo_check) {
+               elm_object_focus_set(ad->ed_pw1->eo_check, EINA_FALSE);
+       }
 
-                                       service_destroy(svc);
-                                       //ug_destroy_me(ad->ug);
-                               }
-                               else
-                               {
-                                       /* check failed */
-                                       setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), TRUE);
-                               }
-                       }
-                       break;
-#endif
-               default:
-                       return;
+       if (ad->err_desc && ad->err_desc->item) {
+               elm_object_item_del(ad->err_desc->item);
+               ad->err_desc = NULL;
        }
+
+       setting_password_main_done_password(ad);
 }