tizen 2.3.1 release
[apps/home/settings.git] / setting-password / src / setting-password.c
old mode 100755 (executable)
new mode 100644 (file)
index df4d816..f732b59
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.0 (the License);
+ * 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://floralicense.org/license/
+ * 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,
+ * 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 <security-server.h>
+#include <setting-password-main.h>
+#include <security-server.h>
+
+extern void setting_get_pin_lock_info_cb(TapiHandle *handle, int result, void *data, void *user_data);
 
 #ifndef UG_MODULE_API
 #define UG_MODULE_API __attribute__ ((visibility("default")))
 #endif
 
-static struct _pw_item pw_its[] = {
-       { SETTING_PW_TYPE_SIM_LOCK_ON, "SETTING_PW_TYPE_SIM_LOCK_ON" },
-       { SETTING_PW_TYPE_SIM_LOCK_OFF, "SETTING_PW_TYPE_SIM_LOCK_OFF" },
-       { SETTING_PW_TYPE_PIN_LOCK_ON, "SETTING_PW_TYPE_PIN_LOCK_ON" },
-       { SETTING_PW_TYPE_PIN_LOCK_OFF, "SETTING_PW_TYPE_PIN_LOCK_OFF" },
-       { SETTING_PW_TYPE_CHANGE_PIN1, "SETTING_PW_TYPE_CHANGE_PIN1" },
-       { SETTING_PW_TYPE_CHANGE_PIN2, "SETTING_PW_TYPE_CHANGE_PIN2" },
-       { SETTING_PW_TYPE_PIN1_BLOCKED, "SETTING_PW_TYPE_PIN1_BLOCKED" },
-       { SETTING_PW_TYPE_PIN2_BLOCKED, "SETTING_PW_TYPE_PIN2_BLOCKED" },
-       { SETTING_PW_TYPE_RESET, "SETTING_PW_TYPE_RESET" },
+struct _pw_item pw_its[] = {
+       { 0, NULL, 0, 0},
+       { SETTING_PW_TYPE_PASSWORD, "SETTING_PW_TYPE_PASSWORD", SETTING_PW_CATEGORY_LOCK, 1 },
+       { SETTING_PW_TYPE_SET_PASSWORD, "SETTING_PW_TYPE_SET_PASSWORD", SETTING_PW_CATEGORY_LOCK, 2 },
+       { SETTING_PW_TYPE_SIMPLE_PASSWORD, "SETTING_PW_TYPE_SIMPLE_PASSWORD", SETTING_PW_CATEGORY_LOCK + SETTING_PW_SUB_CATEGORY_SIMPLE, 1 },
+       { SETTING_PW_TYPE_SET_SIMPLE_PASSWORD, "SETTING_PW_TYPE_SET_SIMPLE_PASSWORD", SETTING_PW_CATEGORY_LOCK + SETTING_PW_SUB_CATEGORY_SIMPLE, 2 },
+       { SETTING_PW_TYPE_ENTER_LOCK_TYPE, "SETTING_PW_TYPE_ENTER_LOCK_TYPE", SETTING_PW_CATEGORY_LOCK, 1 },
+       { SETTING_PW_TYPE_SIM_LOCK_ON, "SETTING_PW_TYPE_SIM_LOCK_ON", SETTING_PW_CATEGORY_SIM, 2 },
+       { SETTING_PW_TYPE_SIM_LOCK_OFF, "SETTING_PW_TYPE_SIM_LOCK_OFF", SETTING_PW_CATEGORY_SIM, 1 },
+       { SETTING_PW_TYPE_PIN_LOCK_ON, "SETTING_PW_TYPE_PIN_LOCK_ON", SETTING_PW_CATEGORY_SIM, 1 },
+       { SETTING_PW_TYPE_PIN_LOCK_OFF, "SETTING_PW_TYPE_PIN_LOCK_OFF", SETTING_PW_CATEGORY_SIM, 1 },
+       { SETTING_PW_TYPE_CHANGE_PIN, "SETTING_PW_TYPE_CHANGE_PIN", SETTING_PW_CATEGORY_SIM, 3 },
+       { SETTING_PW_TYPE_CHANGE_PIN2, "SETTING_PW_TYPE_CHANGE_PIN2", SETTING_PW_CATEGORY_SIM, 3 },
+       { SETTING_PW_TYPE_PIN_BLOCKED, "SETTING_PW_TYPE_PIN_BLOCKED", SETTING_PW_CATEGORY_SIM, 3 },
+       { SETTING_PW_TYPE_PIN2_BLOCKED, "SETTING_PW_TYPE_PIN2_BLOCKED", SETTING_PW_CATEGORY_SIM, 3 },
        { SETTING_PW_TYPE_MAX, NULL }
 };
 
-static void setting_tapi_init(SettingPasswordUG *ad);
-static void setting_password_ug_display_result_popup(tapi_receive_info *result, SettingPasswordUG *ad);
-
 static void setting_password_ug_cb_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
 {
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
-       setting_view_update(&setting_view_password_main, ad);
+       /*SettingPasswordUG *ad = (SettingPasswordUG *) data; */
+       /*setting_view_update(&setting_view_password_main, ad); */
 }
 
-static void setting_tapi_init(SettingPasswordUG *ad)
+void __chk_cur_pw_status(SettingPasswordUG *ad, app_control_h service)
 {
-       SETTING_TRACE_BEGIN;
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_SIM_LOCK_ON:
-       case SETTING_PW_TYPE_SIM_LOCK_OFF:
-       case SETTING_PW_TYPE_PIN_LOCK_ON:
-       case SETTING_PW_TYPE_PIN_LOCK_OFF:
-       case SETTING_PW_TYPE_CHANGE_PIN1:
-       case SETTING_PW_TYPE_CHANGE_PIN2:
-       case SETTING_PW_TYPE_PIN1_BLOCKED:
-       case SETTING_PW_TYPE_PIN2_BLOCKED:
-               ad->handle =  tel_init(NULL);
-               if (!ad->handle) {
-                       SETTING_TRACE_DEBUG("%s*** [ERR] tel_init. ***%s",
-                            SETTING_FONT_RED, SETTING_FONT_BLACK);
-                       setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                                      _("IDS_COM_POP_ERROR"),
-                                                                      FALSE);
-               }
+       int ret = 0;
+       unsigned int attempt = 0;
+       unsigned int max_attempt = 0;
+       unsigned int expire_sec = 0;
+
+       ad->pw_status = SETTING_PW_STATUS_DEFAULT;
+
+       ret = security_server_is_pwd_valid(&attempt, &max_attempt, &expire_sec);
+       SETTING_TRACE_DEBUG("status of password : %d (cur attempt %d, max %d, expire %d", ret, attempt, max_attempt, expire_sec);
 
-               break;
-       default:
-               break;
+       if (ret == SECURITY_SERVER_API_ERROR_NO_PASSWORD) {
+               SETTING_TRACE("security-server has no password!");
+               ad->pw_status = SETTING_PW_STATUS_EMPTY;
        }
-       SETTING_TRACE_END;
 }
 
-static void setting_tapi_finize(SettingPasswordUG *ad)
+void __get_extra_data(SettingPasswordUG *ad, app_control_h service)
 {
        SETTING_TRACE_BEGIN;
-       switch (ad->view_type) {
-       case SETTING_PW_TYPE_SIM_LOCK_ON:
-       case SETTING_PW_TYPE_SIM_LOCK_OFF:
-       case SETTING_PW_TYPE_PIN_LOCK_ON:
-       case SETTING_PW_TYPE_PIN_LOCK_OFF:
-       case SETTING_PW_TYPE_CHANGE_PIN1:
-       case SETTING_PW_TYPE_CHANGE_PIN2:
-       case SETTING_PW_TYPE_PIN1_BLOCKED:
-       case SETTING_PW_TYPE_PIN2_BLOCKED:
-               if (tel_deinit(ad->handle) != TAPI_API_SUCCESS) {
-                       SETTING_TRACE_DEBUG
-                           ("%s*** [ERR] setting_network_unsubscribe_tapi_events. ***%s",
-                            SETTING_FONT_RED, SETTING_FONT_BLACK);
-                       setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                                      _("IDS_COM_POP_ERROR"),
-                                                                      FALSE);
-               }
-               break;
-       default:
-               break;
-       }
-       SETTING_TRACE_END;
+
+       char *encryption = NULL;
+
+       /* #1. viewtype */
+       app_control_get_extra_data(service, "viewtype", &(ad->view_type_string));
+       SETTING_TRACE("viewtype:%s", ad->view_type_string);
+       /* #2. current pw */
+       app_control_get_extra_data(service, "current", &(ad->cur_pwd));
+       if (ad->cur_pwd)
+               SETTING_TRACE_SECURE_DEBUG("Receive current : %s", ad->cur_pwd);
 }
 
-setting_pw_type __get_password_view_type(SettingPasswordUG *ad, service_h service)
+setting_pw_type __get_password_view_type(SettingPasswordUG *ad, app_control_h service)
 {
        SETTING_TRACE_BEGIN;
 
-       service_get_extra_data(service, "viewtype", &(ad->view_type_string));
-
-       SETTING_TRACE("viewtype:%s", ad->view_type_string);
        setting_pw_type ret_pw_type = 0;
        int i;
 
-       for(i = 0; i < SETTING_PW_TYPE_MAX; i++)
-       {
-               if (0 == safeStrCmp(ad->view_type_string, pw_its[i].pw_type_string))
-               {
+       for (i = 1; i < SETTING_PW_TYPE_MAX; i++) {
+               if (0 == safeStrCmp(ad->view_type_string, pw_its[i].pw_type_string)) {
+                       SETTING_TRACE_DEBUG("%s %d", ad->view_type_string, pw_its[i].pw_type_num);
                        ret_pw_type = pw_its[i].pw_type_num;
                        break;
                }
        }
 
+       if (pw_its[ret_pw_type].category == SETTING_PW_CATEGORY_SIM) {
+               SETTING_TRACE_DEBUG("SIM or Fingerprint do not need to check pw status. %d", pw_its[ret_pw_type].category);
+               ad->view_type = ret_pw_type;
+               return ad->view_type;
+       }
+
+       __chk_cur_pw_status(ad, service);
+
+       /* Some pw types should be changed, according to pw status and current lock type */
+       if (ret_pw_type == SETTING_PW_TYPE_ENTER_LOCK_TYPE) {
+               if (ad->pw_status == SETTING_PW_STATUS_EMPTY) {
+                       if (ad->screen_lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD)
+                               ret_pw_type = SETTING_PW_TYPE_SET_PASSWORD;
+                       else if (ad->screen_lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD)
+                               ret_pw_type = SETTING_PW_TYPE_SET_SIMPLE_PASSWORD;
+               } else {
+                       if (ad->screen_lock_type == SETTING_SCREEN_LOCK_TYPE_PASSWORD)
+                               ret_pw_type = SETTING_PW_TYPE_PASSWORD;
+                       else if (ad->screen_lock_type == SETTING_SCREEN_LOCK_TYPE_SIMPLE_PASSWORD)
+                               ret_pw_type = SETTING_PW_TYPE_SIMPLE_PASSWORD;
+               }
+       }
        /* end */
 
-       return ret_pw_type;
+       ad->view_type = ret_pw_type;
+
+       return ad->view_type;
+}
+
+static setting_view *__initialize_view_node_table(int category)
+{
+       setting_view_node_table_intialize();
+
+       if (category == SETTING_PW_CATEGORY_SIM) {
+               setting_view_node_table_register(&setting_view_password_sim, NULL);
+               return &setting_view_password_sim;
+       } else if (category & SETTING_PW_SUB_CATEGORY_SIMPLE) {
+               setting_view_node_table_register(&setting_view_password_simple, NULL);
+               return &setting_view_password_simple;
+       } else {
+               setting_view_node_table_register(&setting_view_password_main, NULL);
+               return &setting_view_password_main;
+       }
+}
+
+static void __destroy_view(SettingPasswordUG *ad)
+{
+       ret_if(!ad);
+
+       if (pw_its[ad->view_type].category == SETTING_PW_CATEGORY_SIM) {
+               setting_view_destroy(&setting_view_password_sim, ad);
+       }
+
+       if (pw_its[ad->view_type].category & SETTING_PW_SUB_CATEGORY_SIMPLE) {
+               setting_view_destroy(&setting_view_password_simple, ad);
+       } else {
+               /*  delete the allocated objects. */
+               setting_view_destroy(&setting_view_password_main, ad);
+       }
+}
+
+static void setting_password_rotated_cb(void *data, Evas_Object *obj, void *event)
+{
+       SETTING_TRACE_BEGIN;
+       SettingPasswordUG *ad = (SettingPasswordUG *)data;
+
+       if (ad == NULL || ad->win_get == NULL || obj == NULL)
+               return;
+
+       if (ad->view_type == SETTING_PW_TYPE_PIN_LOCK_OFF
+           || ad->view_type == SETTING_PW_TYPE_PIN_LOCK_ON
+           || ad->view_type == SETTING_PW_TYPE_CHANGE_PIN
+           || ad->view_type == SETTING_PW_TYPE_PIN_BLOCKED) {
+               if (ad->handle) {
+                       if (tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_SC, setting_get_pin_lock_info_cb, ad) != 0)
+                               SETTING_TRACE_DEBUG("failed to call tel_get_sim_lock_info()");
+               }
+       } else if (ad->view_type == SETTING_PW_TYPE_CHANGE_PIN2
+                  || ad->view_type == SETTING_PW_TYPE_PIN2_BLOCKED) {
+               if (ad->handle) {
+                       if (tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_FD, setting_get_pin_lock_info_cb, ad) != 0)
+                               SETTING_TRACE_DEBUG("failed to call tel_get_sim_lock_info()");
+               }
+       }
+       /* it can manage the cursor self */
+       if (ad->ed_pw1 && (ad->ed_pw1->isFocusFlag == TRUE)) {
+               if (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);
+               }
+       } else if (ad->ed_pw2 && (ad->ed_pw2->isFocusFlag == TRUE)) {
+               if (ad->ed_pw2->eo_check) {
+                       SETTING_TRACE_DEBUG("set focus on second entry");
+                       /*no matter how many edifileds, it only need focus on 1st editfiled */
+                       elm_object_focus_set(ad->ed_pw2->eo_check, EINA_TRUE);
+                       elm_entry_cursor_end_set(ad->ed_pw2->eo_check);
+               }
+       } else if (ad->ed_pw3 && (ad->ed_pw3->isFocusFlag == TRUE)) {
+               if (ad->ed_pw3->eo_check) {
+                       SETTING_TRACE_DEBUG("set focus on third entry");
+                       /*no matter how many edifileds, it only need focus on 1st editfiled */
+                       elm_object_focus_set(ad->ed_pw3->eo_check, EINA_TRUE);
+                       elm_entry_cursor_end_set(ad->ed_pw3->eo_check);
+               }
+       } else {
+               SETTING_TRACE_DEBUG("no entry to set focus");
+       }
 }
 
 static char *__gl_err_desc_text_get(void *data, Evas_Object *obj, const char *part)
 {
+       SETTING_TRACE_BEGIN;
        retv_if(data == NULL, NULL);
        char buf[256] = {0,};
 
-       snprintf(buf, sizeof(buf)-1, "<font color=#ff0000>%s</font>", (char*)data);
+       snprintf(buf, 256, "<font color=#ff0000>%s</font>", (char *)data);
+
+       SETTING_TRACE_DEBUG("buf is %s", buf);
 
-       return strdup(buf);
+       return (char *)g_strdup(buf);
+}
+
+static void __gl_err_desc_del(void *data, Evas_Object *obj)
+{
+       SETTING_TRACE_BEGIN;
+       char *desc = data;
+       if (desc) {
+               G_FREE(desc);
+               SETTING_TRACE_DEBUG("free err_desc");
+       }
 }
 
 static void *setting_password_ug_on_create(ui_gadget_h ug,
-                                          enum ug_mode mode, service_h service,
-                                          void *priv)
+                                           enum ug_mode mode, app_control_h service,
+                                           void *priv)
 {
+       SETTING_TRACE_BEGIN;
        setting_retvm_if((!priv), NULL, "!priv");
 
        SettingPasswordUG *passwordUG = (SettingPasswordUG *)priv;
@@ -146,153 +249,177 @@ static void *setting_password_ug_on_create(ui_gadget_h ug,
        passwordUG->evas = evas_object_evas_get(passwordUG->win_main_layout);
 
        setting_retvm_if(passwordUG->win_main_layout == NULL, NULL,
-                        "cannot get main window ");
-
-       /* --------------------------------------------------------- */
-       char *pa_path = NULL;;
+                        "cannot get main window ");
 
-       pa_path = vconf_get_str(VCONFKEY_LANGSET);
-       if (!pa_path) {
-               SETTING_TRACE
-                   ("%s*** language setting has no proper value (nil) ***%s",
-                    SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
-               return NULL;
-       }
        /* set launguage */
-       setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
-       FREE(pa_path);
-
-       setting_create_Gendial_itc("dialogue/title", &(passwordUG->itc_title));
-       setting_create_Gendial_itc("dialogue/1icon",&(passwordUG->itc_variable_height));
-       passwordUG->itc_seperator.item_style = "dialogue/separator";
-       passwordUG->itc_seperator.func.text_get = NULL;
-       passwordUG->itc_seperator.func.content_get = NULL;
-       passwordUG->itc_seperator.func.state_get = NULL;
-       passwordUG->itc_seperator.func.del = NULL;
-
-       passwordUG->itc_err_desc.item_style = "multiline/1text";
+       bindtextdomain(SETTING_PACKAGE, SETTING_LOCALEDIR);
+       evas_object_smart_callback_add(passwordUG->win_get, "wm,rotation,changed", setting_password_rotated_cb, passwordUG);
+
+       setting_create_Gendial_itc("groupindex", &(passwordUG->itc_title));
+       setting_create_Gendial_itc("1icon", &(passwordUG->itc_variable_height));
+
+       passwordUG->itc_err_desc.item_style = "multiline_sub";
        passwordUG->itc_err_desc.func.text_get = __gl_err_desc_text_get;
        passwordUG->itc_err_desc.func.content_get = NULL;
        passwordUG->itc_err_desc.func.state_get = NULL;
-       passwordUG->itc_err_desc.func.del = NULL;
+       passwordUG->itc_err_desc.func.del = __gl_err_desc_del;
+
+       /* get screen lock type */
+       vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &(passwordUG->screen_lock_type));
+       SETTING_TRACE_DEBUG("screen lock type : %d", passwordUG->screen_lock_type);
 
        /* init */
-       passwordUG->view_type = __get_password_view_type(passwordUG, service);
-       setting_tapi_init(passwordUG);
+       __get_extra_data(passwordUG, service);
+       setting_pw_type ret = __get_password_view_type(passwordUG, service);
+       SETTING_TRACE_DEBUG("initial view type is : %d", ret);
+       passwordUG->step1_str = NULL;
+
+       setting_view *main_view = __initialize_view_node_table(pw_its[passwordUG->view_type].category);
 
        /*  creating a view. */
-       setting_view_create(&setting_view_password_main,(void *)passwordUG);
+       setting_view_create(main_view, (void *)passwordUG);
        evas_object_event_callback_add(passwordUG->win_main_layout,
-                                              EVAS_CALLBACK_RESIZE,
-                                              setting_password_ug_cb_resize,
-                                              passwordUG);
+                                      EVAS_CALLBACK_RESIZE,
+                                      setting_password_ug_cb_resize,
+                                      passwordUG);
+
        return passwordUG->ly_main;
 }
 
-static void setting_password_ug_on_start(ui_gadget_h ug, service_h service, void *priv)
+static void setting_password_ug_on_start(ui_gadget_h ug, app_control_h service, void *priv)
 {
 }
 
-static void setting_password_ug_on_pause(ui_gadget_h ug, service_h service, void *priv)
+static void setting_password_ug_on_pause(ui_gadget_h ug, app_control_h service, void *priv)
 {
+       SETTING_TRACE_BEGIN;
+       SettingPasswordUG *passwordUG = (SettingPasswordUG *)priv;
+
+       if (pw_its[passwordUG->view_type].category & SETTING_PW_SUB_CATEGORY_SIMPLE) {
+               /* If pause, simple password's SIP should be focused out.
+                       If not, Our SIP will not be shown after using Other apps with independent SIP. */
+               if (passwordUG->imf_context) {
+                       ecore_imf_context_reset(passwordUG->imf_context);
+                       ecore_imf_context_focus_out(passwordUG->imf_context);
+               }
+       }
 }
 
-static void setting_password_ug_on_resume(ui_gadget_h ug, service_h service, void *priv)
+static void setting_password_ug_on_resume(ui_gadget_h ug, app_control_h service, void *priv)
 {
+       SETTING_TRACE_BEGIN;
+       SettingPasswordUG *passwordUG = (SettingPasswordUG *)priv;
+
+       if (pw_its[passwordUG->view_type].category & SETTING_PW_SUB_CATEGORY_SIMPLE) {
+               /* If resume, simple password's SIP should be focused in.
+               If not, Our SIP will not be shown after using Other apps with independent SIP. */
+               if (passwordUG->imf_context) {
+                       /*ecore_imf_context_input_panel_show(passwordUG->imf_context); */
+                       ecore_imf_context_focus_in(passwordUG->imf_context);
+               }
+       }
 }
 
-static void setting_password_ug_on_destroy(ui_gadget_h ug, service_h service, void *priv)
+static void setting_password_ug_on_destroy(ui_gadget_h ug, app_control_h service, void *priv)
 {
+       SETTING_TRACE_BEGIN;
        SettingPasswordUG *passwordUG = (SettingPasswordUG *)priv;
 
        evas_object_event_callback_del(passwordUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_password_ug_cb_resize);       /* fix flash issue for gallery */
+       evas_object_smart_callback_del(passwordUG->win_get, "wm,rotation,changed", setting_password_rotated_cb);
        passwordUG->ug = ug;
-       setting_tapi_finize(passwordUG);
+
+       if (passwordUG->view_type_string)
+               FREE(passwordUG->view_type_string);
+
+       if (passwordUG->cur_pwd)
+               FREE(passwordUG->cur_pwd);
 
        if (passwordUG->t_info) {
                FREE(passwordUG->t_info);
+               passwordUG->t_info = NULL;
        }
-       if(passwordUG->remove_timer)
-       {
-               ecore_timer_del(passwordUG->remove_timer);
-               passwordUG->remove_timer = NULL;
+
+       if (pw_its[passwordUG->view_type].category & SETTING_PW_SUB_CATEGORY_SIMPLE) {
+               if (passwordUG->imf_context) {
+                       ecore_imf_context_del(passwordUG->imf_context);
+                       passwordUG->imf_context = NULL;
+               }
        }
 
-       /*  delete the allocated objects. */
-       setting_view_destroy(&setting_view_password_main, passwordUG);
+       __destroy_view(passwordUG);
+
        if (NULL != ug_get_layout(passwordUG->ug)) {
                evas_object_hide((Evas_Object *) ug_get_layout(passwordUG->ug));
                evas_object_del((Evas_Object *) ug_get_layout(passwordUG->ug));
        }
+       SETTING_TRACE_END;
 }
 
-static void setting_password_ug_on_message(ui_gadget_h ug, service_h msg,
-                                          service_h service, void *priv)
+static void setting_password_ug_on_message(ui_gadget_h ug, app_control_h msg,
+                                           app_control_h service, void *priv)
 {
 
 }
 
 static void setting_password_ug_on_event(ui_gadget_h ug,
-                                        enum ug_event event, service_h service,
-                                        void *priv)
+                                         enum ug_event event, app_control_h service,
+                                         void *priv)
 {
+       SETTING_TRACE_BEGIN;
        if (!priv)
                return;
 
-       SettingPasswordUG *ad = (SettingPasswordUG*)priv;
-
+       SettingPasswordUG *ad = (SettingPasswordUG *)priv;
+       /*static int old_event = -1; */
        switch (event) {
-       case UG_EVENT_LOW_MEMORY:
-               break;
-       case UG_EVENT_LOW_BATTERY:
-               break;
-       case UG_EVENT_LANG_CHANGE:
-               break;
-       case UG_EVENT_ROTATE_PORTRAIT:
-       case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
-       case UG_EVENT_ROTATE_LANDSCAPE:
-       case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
-               /* Focus entry */
-               SETTING_TRACE_DEBUG("get rotation event");
-               if(ad->ed_pw1)
-               {
-                       if (ad->ed_pw1->isFocusFlag || (ad->ed_pw1->eo_check != NULL))
-                       {
-                               SETTING_TRACE_DEBUG("set focus");
-                               /* 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);
+               case UG_EVENT_LOW_MEMORY:
+                       break;
+               case UG_EVENT_LOW_BATTERY:
+                       break;
+               case UG_EVENT_LANG_CHANGE: {
+#if 0
+                               /* update toolbar items */
+                               Evas_Object *toolbar = elm_object_item_part_content_get(ad->navi_it, "toolbar");
+                               if (toolbar != NULL) {
+                                       Elm_Object_Item *last_item = elm_toolbar_last_item_get(toolbar);
+                                       Elm_Object_Item *first_item = elm_toolbar_last_item_get(toolbar);
+
+                                       if (last_item)
+                                               elm_object_item_text_set(last_item, _("IDS_COM_SK_DONE"));
+                                       if (first_item && (first_item != last_item))
+                                               elm_object_item_text_set(last_item, _("IDS_COM_SK_CANCEL"));
+                               }
+#endif
                        }
-               }
-
-               break;
-       case UG_EVENT_REGION_CHANGE:
-               break;
-       default:
-               break;
+                       break;
+               case UG_EVENT_ROTATE_PORTRAIT:
+               case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+               case UG_EVENT_ROTATE_LANDSCAPE:
+               case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+                       break;
+               case UG_EVENT_REGION_CHANGE:
+                       break;
+               default:
+                       break;
        }
 }
 
 static void setting_password_ug_on_key_event(ui_gadget_h ug,
-                                            enum ug_key_event event,
-                                            service_h service, void *priv)
+                                             enum ug_key_event event,
+                                             app_control_h service, void *priv)
 {
        if (!priv)
                return;
 
-       SettingPasswordUG *ad = (SettingPasswordUG*)priv;
+       SettingPasswordUG *ad = (SettingPasswordUG *)priv;
 
        switch (event) {
-       case UG_KEY_EVENT_END:
-               if(ad->remove_timer)
-               {
-                       ecore_timer_del(ad->remove_timer);
-                       ad->remove_timer = NULL;
-               }
-               ug_destroy_me(ug);
-               break;
-       default:
-               break;
+               case UG_KEY_EVENT_END:
+                       ug_destroy_me(ug);
+                       break;
+               default:
+                       break;
        }
 }
 
@@ -328,500 +455,36 @@ UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
                FREE(passwordUG);
 }
 
-void setting_get_sim_lock_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
-{
-       SETTING_TRACE_BEGIN;
-       ret_if(data == NULL || user_data == NULL);
-
-       TelSimPinOperationResult_t sec_rt = result;
-       TelSimLockInfo_t *lock = data;
-
-       SettingPasswordUG *ad = (SettingPasswordUG *)user_data;
-
-       SETTING_TRACE_DEBUG("sec_ret[%d], lock_type[%d], lock_status[%d], retry_count[%d]", sec_rt, lock->lock_type, lock->lock_status, lock->retry_count);
-
-       char temp[256] ={0,};
-       if(lock->retry_count > 1)
-               snprintf(temp, 256, _(ATTEMPTS_DESC), lock->retry_count);
-       else if(lock->retry_count > 0)
-               snprintf(temp, 256, _(ATTEMPT_DESC), lock->retry_count);
-
-       if(ad->err_desc)
-       {
-               elm_object_item_del(ad->err_desc);
-               ad->err_desc = NULL;
-       }
-
-       ad->err_desc = elm_genlist_item_append(ad->scroller, &(ad->itc_err_desc), temp, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-}
-
-void setting_get_pin_lock_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
-{
-       SETTING_TRACE_BEGIN;
-
-       TelSimPinOperationResult_t sec_rt = result;
-       TelSimLockInfo_t *lock = data;
-
-       SettingPasswordUG *ad = (SettingPasswordUG *)user_data;
-
-       SETTING_TRACE_DEBUG("sec_ret[%d], lock_type[%d], lock_status[%d], retry_count[%d]", sec_rt, lock->lock_type, lock->lock_status, lock->retry_count);
-
-       char temp[256] ={0,};
-       if(lock->retry_count > 1)
-               snprintf(temp, 256, _(ATTEMPTS_DESC), lock->retry_count);
-       else if(lock->retry_count > 0)
-               snprintf(temp, 256, _(ATTEMPT_DESC), lock->retry_count);
-
-       if(ad->err_desc)
-       {
-               elm_object_item_del(ad->err_desc);
-               ad->err_desc = NULL;
-       }
-
-       ad->err_desc = elm_genlist_item_append(ad->scroller, &(ad->itc_err_desc), temp, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-}
-
-void setting_sim_change_pins_cb(TapiHandle *handle, int result, void *data, void *user_data)
-{
-       SETTING_TRACE_BEGIN;
-       ret_if(!user_data || !data);
-       TelSimPinOperationResult_t sec_rt = result;
-       tapi_receive_info result_info = { 0, };
-       TelSimSecResult_t *sim_event_data = (TelSimSecResult_t *) data;
-       SETTING_TRACE("sec_rt[%d]", sec_rt);
-       SETTING_TRACE("sim_event_data->type:%d", sim_event_data->type);
-       SETTING_TRACE("sim_event_data->retry_count[%d]", sim_event_data->retry_count);
-
-       if (TAPI_SIM_PIN_OPERATION_SUCCESS == sec_rt) {
-               if (TAPI_SIM_PTYPE_PIN1 == sim_event_data->type)
-                       result_info.stat = SIM_PIN1_CHANGE_SUCCESS;
-               else if (TAPI_SIM_PTYPE_PIN2 == sim_event_data->type)
-                       result_info.stat = SIM_PIN2_CHANGE_SUCCESS;
-       } else if (TAPI_SIM_PIN_INCORRECT_PASSWORD == sec_rt) {
-               if (TAPI_SIM_PTYPE_PIN1 == sim_event_data->type) {
-                       result_info.stat = SIM_INCORRECT_PIN1_CODE;
-                       result_info.retry_cnt = sim_event_data->retry_count;
-               } else if (TAPI_SIM_PTYPE_PIN2 == sim_event_data->type) {
-                       result_info.stat = SIM_INCORRECT_PIN2_CODE;
-                       result_info.retry_cnt = sim_event_data->retry_count;
-               }
-       } else if (TAPI_SIM_PUK_REQUIRED == sec_rt) {
-               if (TAPI_SIM_PTYPE_PIN1 == sim_event_data->type)
-                       result_info.stat = SIM_PIN1_BLOCKED;
-               else if (TAPI_SIM_PTYPE_PIN2 == sim_event_data->type)
-                       result_info.stat = SIM_PIN2_BLOCKED;
-       } else {
-               SETTING_TRACE_DEBUG
-                   ("%s*** [ERR] INCORRECTED ***%s",
-                    SETTING_FONT_RED, SETTING_FONT_BLACK);
-               return;
-       }
-       setting_password_ug_display_result_popup(&result_info, user_data);
-}
-
-void setting_sim_verify_puks_cb(TapiHandle *handle, int result, void *data, void *user_data)
-{
-       SETTING_TRACE_BEGIN;
-
-       ret_if(!user_data || !data);
-       SettingPasswordUG *ad = user_data;
-       TelSimPinOperationResult_t sec_rt = result;
-       tapi_receive_info result_info = { 0, };
-       TelSimSecResult_t *sim_event_data = (TelSimSecResult_t *) data;
-       ad->verify_puks_result = sim_event_data;
-       SETTING_TRACE("sec_rt[%d]", sec_rt);
-       SETTING_TRACE("sim_event_data->type:%d", sim_event_data->type);
-       SETTING_TRACE("sim_event_data->retry_count[%d]", sim_event_data->retry_count);
-
-       if (TAPI_SIM_PTYPE_PUK1 == sim_event_data->type)
-       {
-               //if (TAPI_SIM_PIN_REQUIRED == sec_rt){
-               if (TAPI_SIM_PIN_OPERATION_SUCCESS == sec_rt){
-                       SETTING_TRACE_DEBUG("SIM_PIN1_UNBLOCKED");
-                       safeCopyStr(ad->view_type_string, "SETTING_PW_TYPE_PIN1_UNBLOCKED", sizeof("SETTING_PW_TYPE_PIN1_UNBLOCKED")+1);
-                       setting_password_ug_create_popup_notitle_nobtn(ad, _("Verfy PUK1 Sucessfully"), TRUE);
-                       return;
-               } else if (TAPI_SIM_PIN_INCORRECT_PASSWORD == sec_rt) {
-                       result_info.stat = SIM_INCORRECT_PUK1_CODE;
-                       result_info.retry_cnt = sim_event_data->retry_count;
-               } else {
-                       result_info.stat = SIM_UNKNOWN_ERROR;
-               }
-       }
-
-       else if (TAPI_SIM_PTYPE_PUK2 == sim_event_data->type)
-       {
-               //if (TAPI_SIM_PUK_REQUIRED == sec_rt)
-               if (TAPI_SIM_PIN_OPERATION_SUCCESS == sec_rt){
-                       SETTING_TRACE_DEBUG("SIM_PIN2_UNBLOCKED");
-                       safeCopyStr(ad->view_type_string, "SETTING_PW_TYPE_PIN2_UNBLOCKED", sizeof("SETTING_PW_TYPE_PIN2_UNBLOCKED")+1);
-                       setting_password_ug_create_popup_notitle_nobtn(ad, _("Verfy PUK2 Sucessfully"), TRUE);
-                       return;
-               } else if (TAPI_SIM_PUK_INCORRECT_PASSWORD == sec_rt) {
-                       result_info.stat = SIM_INCORRECT_PUK2_CODE;
-                       result_info.retry_cnt = sim_event_data->retry_count;
-               } else {
-                       result_info.stat = SIM_UNKNOWN_ERROR;
-               }
-       }
-       else
-       {
-               result_info.stat = SIM_UNKNOWN_ERROR;
-       }
-       setting_password_ug_display_result_popup(&result_info, user_data);
-}
-
-void setting_sim_facility_enable_cb(TapiHandle *handle, int result, void *data, void *user_data)
-{
-       SETTING_TRACE_BEGIN;
-       ret_if(!user_data || !data);
-       TelSimPinOperationResult_t sec_rt = result;
-       tapi_receive_info result_info = { 0, };
-       TelSimFacilityResult_t *sim_event_data = (TelSimFacilityResult_t *) data;
-
-       SETTING_TRACE("sec_rt[%d]", sec_rt);
-       SETTING_TRACE("sim_event_data->type:%d", sim_event_data->type);
-       SETTING_TRACE("sim_event_data->retry_count[%d]", sim_event_data->retry_count);
-
-       /*  Sim Lock  */
-       if (TAPI_SIM_LOCK_PS == sim_event_data->type) {
-               SETTING_TRACE("CASE TAPI_SIM_PTYPE_SIM == sim_event_data->type");
-               if (TAPI_SIM_PIN_OPERATION_SUCCESS == sec_rt)
-                       result_info.stat = SIM_LOCK_ON_SUCCESS;
-               else if (TAPI_SIM_PIN_INCORRECT_PASSWORD == sec_rt)
-                       result_info.stat = SIM_LOCK_INCORRECT_PASSWORD;
-               else {
-                       SETTING_TRACE_DEBUG("%s*** [ERR] INCORRECTED ***%s",
-                            SETTING_FONT_RED,
-                            SETTING_FONT_BLACK);
-                       return;
-               }
-       }
-       /*  Pin Lock */
-       else if (TAPI_SIM_LOCK_SC == sim_event_data->type) {
-               SETTING_TRACE("CASE TAPI_SIM_PTYPE_PIN1 == sim_event_data->type");
-               if (TAPI_SIM_PIN_OPERATION_SUCCESS == sec_rt)
-                       result_info.stat = SIM_PIN_LOCK_ON_SUCCESS;
-               else if (TAPI_SIM_PIN_INCORRECT_PASSWORD == sec_rt) {
-                       result_info.stat = SIM_INCORRECT_PIN1_CODE;
-                       result_info.retry_cnt = sim_event_data->retry_count;
-               } else if (TAPI_SIM_PUK_REQUIRED == sec_rt)
-                       result_info.stat = SIM_PIN1_BLOCKED;
-
-               /*  Pre CCF */
-               else if (TAPI_SIM_INCOMPATIBLE_PIN_OPERATION == sec_rt
-                        || TAPI_SIM_CARD_ERROR == sec_rt) {
-                       /*  popup */
-                       result_info.stat = SIM_OPERATION_UNAVAILABLE;
-               }
-               else {
-                       SETTING_TRACE_DEBUG
-                           ("%s*** [ERR] INCORRECTED ***%s",
-                            SETTING_FONT_RED,
-                            SETTING_FONT_BLACK);
-                       return;
-               }
-       }
-       setting_password_ug_display_result_popup(&result_info, user_data);
-}
-void setting_sim_facility_disable_cb(TapiHandle *handle, int result, void *data, void *user_data)
-{
-       SETTING_TRACE_BEGIN;
-       ret_if(!user_data || !data);
-       TelSimPinOperationResult_t sec_rt = result;
-       tapi_receive_info result_info = { 0, };
-       TelSimFacilityResult_t *sim_event_data = (TelSimFacilityResult_t *) data;
-       SETTING_TRACE("sec_rt[%d]", sec_rt);
-       SETTING_TRACE("sim_event_data->type:%d", sim_event_data->type);
-       SETTING_TRACE("sim_event_data->retry_count[%d]", sim_event_data->retry_count);
-
-       /*  Sim Lock  */
-       if (TAPI_SIM_LOCK_PS == sim_event_data->type) {
-               SETTING_TRACE_DEBUG("SIM lOCK");
-               if (TAPI_SIM_PIN_OPERATION_SUCCESS == sec_rt)
-                       result_info.stat = SIM_LOCK_OFF_SUCCESS;
-               else if (TAPI_SIM_PIN_INCORRECT_PASSWORD == sec_rt)
-                       result_info.stat = SIM_LOCK_INCORRECT_PASSWORD;
-               else {
-                       SETTING_TRACE_DEBUG
-                           ("%s*** [ERR] INCORRECTED ***%s",
-                            SETTING_FONT_RED,
-                            SETTING_FONT_BLACK);
-                       return;
-               }
-       }
-       /*  Pin Lock */
-       else if (TAPI_SIM_LOCK_SC == sim_event_data->type) {
-               SETTING_TRACE_DEBUG("PIN LOCK");
-               if (TAPI_SIM_PIN_OPERATION_SUCCESS == sec_rt)
-                       result_info.stat = SIM_PIN_LOCK_OFF_SUCCESS;
-               else if (TAPI_SIM_PIN_INCORRECT_PASSWORD == sec_rt) {
-                       result_info.stat = SIM_INCORRECT_PIN1_CODE;
-                       result_info.retry_cnt = sim_event_data->retry_count;
-               } else if (TAPI_SIM_PUK_REQUIRED == sec_rt)
-                       result_info.stat = SIM_PIN1_BLOCKED;
-
-               /*  Pre CCF */
-               else if (TAPI_SIM_INCOMPATIBLE_PIN_OPERATION == sec_rt
-                        || TAPI_SIM_CARD_ERROR == sec_rt) {
-                       /*  popup */
-                       result_info.stat = SIM_OPERATION_UNAVAILABLE;
-               }
-               else {
-                       SETTING_TRACE_DEBUG
-                           ("%s*** [ERR] INCORRECTED ***%s",
-                            SETTING_FONT_RED,
-                            SETTING_FONT_BLACK);
-                       return;
-               }
-       }
-       setting_password_ug_display_result_popup(&result_info, user_data);
-}
-
-static void setting_password_ug_display_result_popup(tapi_receive_info *result,
-                                                    SettingPasswordUG *ad)
-{
-       SETTING_TRACE_BEGIN;
-       switch (result->stat) {
-       case SIM_OPERATION_OK:
-       case SIM_LOCK_ON_SUCCESS:
-       case SIM_LOCK_OFF_SUCCESS:
-       case SIM_PIN_LOCK_ON_SUCCESS:
-       case SIM_PIN_LOCK_OFF_SUCCESS:
-               {
-                       if (ad->view_type ==
-                           SETTING_PW_TYPE_SIM_LOCK_OFF) {
-                               int err = SETTING_RETURN_SUCCESS;
-                               /*  reset VCONF */
-                               setting_set_int_slp_key
-                                   (INT_SLP_SETTING_SIM_LOCK_ATTEMPTS_LEFT,
-                                    SIM_LOCK_ATTEMPS_MAX, &err);
-                               setting_retm_if(err == SETTING_RETURN_FAIL,
-                                               "[Error] set value of vconf fail.");
-                       }
-                       /*  Success to Operate */
-                       service_h svc;
-                       if (service_create(&svc))
-                               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);
-                       /* Send destroy request */
-                       ug_destroy_me(ad->ug);
-               }
-               break;
-       case SIM_LOCK_INCORRECT_PASSWORD:
-               {
-                       SETTING_TRACE_DEBUG("SIM LOCK INCORRECT PASSWORD");
-                       ad->focus_data = ad->ed_pw1;
-                       setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
-               }
-               break;
-       case SIM_INCORRECT_PIN1_CODE:
-               {
-                       const char *ret_str = NULL;
-                       char tmp_str[SETTING_STR_SLP_LEN] = {0,};
-
-                       if (result->retry_cnt > 1) {
-                               /* there has '%d' in 'IDS_ST_POP_INCORRECT_PIN_PD_ATTEMPTS_LEFT', must transform */
-                               int ret = snprintf(tmp_str, SETTING_STR_SLP_LEN, PIN_ERR_DESC, result->retry_cnt);
-                               setting_retm_if(ret < 0, "snprintf fail");
-                               ret_str = tmp_str;
-                       } else {
-                               int ret = snprintf(tmp_str, SETTING_STR_SLP_LEN, PIN_ERR_DESC, result->retry_cnt);
-                               setting_retm_if(ret < 0, "snprintf fail");
-                               ret_str = tmp_str;
-                               ret_str = _("IDS_ST_POP_INCORRECT_PIN1_ATTEMPT_LEFT");
-                       }
-                       ad->focus_data = ad->ed_pw1;
-
-                       setting_password_ug_display_desc(ad, (char *)ret_str, FALSE);
-
-               }
-               break;
-       case SIM_INCORRECT_PIN2_CODE:
-               {
-                       char *ret_str = NULL;
-                       char tmp_str[SETTING_STR_SLP_LEN] = {0,};
-
-                       if (result->retry_cnt > 1) {
-                               /* there has '%d' in 'IDS_ST_POP_INCORRECT_PIN_PD_ATTEMPTS_LEFT', must transform */
-                               int ret = snprintf(tmp_str, SETTING_STR_SLP_LEN, PIN_ERR_DESC, result->retry_cnt);
-                               setting_retm_if(ret < 0, "snprintf fail");
-                               ret_str = tmp_str;
-                       } else {
-                               ret_str = _("IDS_ST_POP_INCORRECT_PIN1_ATTEMPT_LEFT");
-                       }
-                       ad->focus_data = ad->ed_pw1;
-
-                       setting_password_ug_display_desc(ad, ret_str, FALSE);
-
-               }
-               break;
-       case SIM_INCORRECT_PUK1_CODE:
-               {
-                       char *ret_str = NULL;
-                       char tmp_str[SETTING_STR_SLP_LEN] = {0,};
-
-                       if (result->retry_cnt > 1) {
-                               /* there has '%d' in 'IDS_ST_POP_INCORRECT_PUK1_PD_ATTEMPTS_LEFT', must transform */
-                               int ret = snprintf(tmp_str, SETTING_STR_SLP_LEN, PUK1_ERR_DESC, result->retry_cnt);
-                               setting_retm_if(ret < 0, "snprintf fail");
-                               ret_str = tmp_str;
-                       } else {
-                               ret_str = _("IDS_ST_POP_INCORRECT_PUK1_CODE");
-                       }
-                       ad->focus_data = ad->ed_pw1;
-
-                       setting_password_ug_display_desc(ad, ret_str, FALSE);
-
-               }
-               break;
-       case SIM_INCORRECT_PUK2_CODE:
-               {
-                       char *ret_str = NULL;
-                       char tmp_str[SETTING_STR_SLP_LEN] = {0,};
-                       if (result->retry_cnt > 1) {
-                               /* there has '%d' in 'IDS_ST_POP_INCORRECT_PUK2_PD_ATTEMPTS_LEFT', must transform*/
-                               int ret = snprintf(tmp_str, SETTING_STR_SLP_LEN, PUK2_ERR_DESC, result->retry_cnt);
-                               setting_retm_if(ret < 0, "snprintf fail");
-                               ret_str = tmp_str;
-                       } else {
-                               ret_str = _("IDS_ST_POP_INCORRECT_PUK2");
-                       }
-                       ad->focus_data = ad->ed_pw1;
-
-                       setting_password_ug_display_desc(ad, ret_str, FALSE);
-
-               }
-               break;
-       case SIM_PIN1_CHANGE_SUCCESS:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                              _("IDS_ST_POP_PIN1_CHANGED"), TRUE);
-               break;
-       case SIM_PIN2_CHANGE_SUCCESS:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                              _("IDS_ST_POP_PIN2_CHANGED"), TRUE);
-               break;
-       case SIM_PIN1_BLOCKED:
-               SETTING_TRACE_DEBUG("SIM_PIN1_BLOCKED");
-               ad->view_type = SETTING_PW_TYPE_PIN1_BLOCKED;
-               safeCopyStr(ad->view_type_string, "SETTING_PW_TYPE_PIN1_BLOCKED", safeStrLen("SETTING_PW_TYPE_PIN1_BLOCKED")+1);
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                              _("IDS_ST_POP_PIN1_BLOCKED"), FALSE);
-               break;
-       case SIM_PIN2_BLOCKED:
-               SETTING_TRACE_DEBUG("SIM_PIN2_BLOCKED");
-               ad->view_type = SETTING_PW_TYPE_PIN2_BLOCKED;
-               safeCopyStr(ad->view_type_string, "SETTING_PW_TYPE_PIN2_BLOCKED", safeStrLen("SETTING_PW_TYPE_PIN2_BLOCKED")+1);
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                              _("IDS_ST_POP_PIN2_BLOCKED"), FALSE);
-               break;
-       case SIM_PIN1_UNBLOCKED:
-               SETTING_TRACE_DEBUG("SIM_PIN1_UNBLOCKED");
-               safeCopyStr(ad->view_type_string, "SETTING_PW_TYPE_PIN_LOCK_ON", sizeof("SETTING_PW_TYPE_PIN_LOCK_ON")+1);
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                              _("IDS_ST_POP_PIN_UNBLOCKED"), TRUE);
-               break;
-       case SIM_PIN2_UNBLOCKED:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                                              _("IDS_ST_POP_PIN2_UNBLOCKED"), TRUE);
-               break;
-       case SIM_PUK1_BLOCKED:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                      _("IDS_ST_BODY_PUK1_BLOCKED"), TRUE);
-               /*  Phone blocked. Call Permernent UG */
-               break;
-       case SIM_PUK2_BLOCKED:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                      _("IDS_ST_BODY_PUK2_BLOCKED"), TRUE);
-               /*  Call Permernent UG */
-               break;
-       case SIM_REQUIRED_PUK_CODE:
-               SETTING_TRACE_DEBUG("SIM_REQUIRED_PUK_CODE");
-               safeCopyStr(ad->view_type_string, "SETTING_PW_TYPE_PIN1_BLOCKED", sizeof("SETTING_PW_TYPE_PIN1_BLOCKED")+1);
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                      _("IDS_ST_POP_PIN1_BLOCKED"), TRUE);
-               break;
-       case SIM_OPERATION_UNAVAILABLE:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                      _("IDS_ST_HEADER_UNAVAILABLE"), TRUE);
-               break;
-       case SIM_UNKNOWN_ERROR:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                      _("IDS_ST_POP_UNKNOWN_OPERATION"), FALSE);
-               break;
-       case SIM_ERROR:
-       case SIM_REQ_PIN:
-       case SIM_OPERATION_OFF:
-       case SIM_LOCK_ON_FAIL:
-               SETTING_TRACE_DEBUG("SIM_LOCK_ON_FAIL");
-               {
-                       int err = SETTING_RETURN_SUCCESS;
-
-                       if(result->retry_cnt > 0)
-                       {
-                               setting_password_ug_display_desc(ad, PW_ERR_DESC, FALSE);
-                       }
-                       else
-                       {
-                               char tmp_str[SETTING_STR_SLP_LEN] = {0,};
-                               int ret = snprintf(tmp_str, SETTING_STR_SLP_LEN, PW_ERR_DELAY_DESC, PW_ERR_DELAY_TIME);
-                               safeCopyStr(ad->view_type_string, "SETTING_PW_TYPE_SIM_LOCK_DISABLE", sizeof("SETTING_PW_TYPE_SIM_LOCK_DISABLE")+1);
-                               setting_password_ug_create_popup_notitle_nobtn(ad, tmp_str, TRUE);
-                       }
-               }
-               break;
-       case SIM_PIN1_CHANGE_FAIL:
-       case SIM_PIN2_CHANGE_FAIL:
-               setting_password_ug_create_popup_notitle_nobtn(ad,
-                                      _("Change Failed"), TRUE);
-               break;
-       default:
-               break;
-       }
-
-       SETTING_TRACE_END;
-}
-
 void setting_password_ug_popup_resp_cb(void *data, Evas_Object *obj,
-                                      void *event_info)
+                                       void *event_info)
 {
        retm_if(data == NULL, "Data parameter is NULL");
 
-       service_h svc;
+       app_control_h svc;
        SettingPasswordUG *ad = (SettingPasswordUG *) data;
        if (ad->destroy) {
                /*  Success to Operate */
 
-               if (service_create(&svc))
+               if (app_control_create(&svc))
                        return;
 
-               service_add_extra_data(svc, "result", ad->view_type_string);
+               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);
 
-               service_destroy(svc);
+               app_control_destroy(svc);
                /* Send destroy request */
                ug_destroy_me(ad->ug);
        } else {
-               char *diable_view_type = NULL;
-               if (ad->view_type == SETTING_PW_TYPE_PIN1_BLOCKED)
-               {
-                       setting_view_destroy(&setting_view_password_main, ad);
-                       setting_view_create(&setting_view_password_main, ad);
+               if (ad->view_type == SETTING_PW_TYPE_PIN_BLOCKED) {
+                       ug_destroy_me(ad->ug);
                        return;
-               }
-               else if (ad->view_type == SETTING_PW_TYPE_PIN2_BLOCKED)
-               {
-                       setting_view_destroy(&setting_view_password_main, ad);
-                       setting_view_create(&setting_view_password_main, ad);
+               } else if (ad->view_type == SETTING_PW_TYPE_PIN2_BLOCKED) {
+                       ug_destroy_me(ad->ug);
                        return;
                }
-
+#if SUPPORT_SIMLOCK
+               char *diable_view_type = NULL;
                if (ad->disable_item_type == SETTING_PW_TYPE_SIM_LOCK_OFF) {
                        diable_view_type = "SETTING_PW_TYPE_SIM_LOCK_DISABLE";
                }
@@ -829,16 +492,17 @@ void setting_password_ug_popup_resp_cb(void *data, Evas_Object *obj,
                if (diable_view_type) {
                        /*  Success to Operate */
 
-                       if (service_create(&svc))
+                       if (app_control_create(&svc))
                                return;
 
-                       service_add_extra_data(svc, "result", diable_view_type);
+                       app_control_add_extra_data(svc, "result", diable_view_type);
                        ug_send_result(ad->ug, svc);
 
-                       service_destroy(svc);
+                       app_control_destroy(svc);
                        /* Send destroy request */
                        ug_destroy_me(ad->ug);
                }
+#endif
                if (ad->focus_data) {
                        ad->focus_data->isFocusFlag = TRUE;
                        elm_object_item_data_set(ad->focus_data->item, ad->focus_data);
@@ -846,115 +510,202 @@ void setting_password_ug_popup_resp_cb(void *data, Evas_Object *obj,
                }
        }
 }
-static Eina_Bool __remove_desc(void *data)
+
+void setting_password_ug_display_desc(void *data, char *desc, int destroy)
 {
        SETTING_TRACE_BEGIN;
-       retv_if(data == NULL, EINA_FALSE);
+       ret_if(data == NULL || desc == NULL);
 
        SettingPasswordUG *ad = (SettingPasswordUG *)data;
 
-       if(ad->err_desc)
-       {
-               elm_object_item_del(ad->err_desc);
+       ad->destroy = destroy;
+
+       if (ad->scroller == NULL)
+               return;
+
+       if (ad->err_desc && ad->err_desc->item) {
+               elm_object_item_del(ad->err_desc->item);
                ad->err_desc = NULL;
        }
 
-       if(ad->remove_timer)
-       {
-               ecore_timer_del(ad->remove_timer);
-               ad->remove_timer = NULL;
-       }
+       ad->err_desc = setting_create_Gendial_field_helpitem_without_bottom_separator(
+                          ad->scroller,
+                          &(itc_multiline_text),
+                          SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
+                          desc);
+}
 
-       if (ad->destroy) {
-               /*  Success to Operate */
+void
+setting_password_ug_create_popup_notitle_nobtn(void *data, char *str,
+                                               int destroy)
+{
+       /* error check */
+       retm_if(data == NULL, "Data parameter is NULL");
 
-               service_h svc;
-               if (service_create(&svc))
-                       return EINA_FALSE;
+       SettingPasswordUG *ad = (SettingPasswordUG *) data;
+       ad->destroy = destroy;
+#if 0
+       /* TMWC-587 */
+       if (ad->notify) {
+               evas_object_del(ad->notify);
+               ad->notify = NULL;
+       }
+       ad->notify = setting_create_popup_without_btn(ad, ad->ly_main, NULL, str,
+                                                     setting_password_ug_popup_resp_cb,
+                                                     POPUP_INTERVAL, FALSE, FALSE);
+#endif
+       setting_create_popup_without_btn(ad, ad->ly_main, NULL, str,
+                                        setting_password_ug_popup_resp_cb,
+                                        POPUP_INTERVAL, FALSE, FALSE);
+}
 
-               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);
+void setting_password_ug_check_attemps_left(void *data)
+{
+       ret_if(!data);
+       SettingPasswordUG *ad = (SettingPasswordUG *) data;
 
-               service_destroy(svc);
-               /* Send destroy request */
-               ug_destroy_me(ad->ug);
+       setting_int_slp_list item_attempts_left;
+       setting_str_slp_list item_lock_timestamp;
+       int attemps_left_max = 5;
+
+       if (ad->view_type == SETTING_PW_TYPE_PASSWORD) {
+               item_attempts_left = INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT;
+               item_lock_timestamp = STR_SLP_SETTING_PHONE_LOCK_TIMESTAMP;
+               attemps_left_max = PHONE_LOCK_ATTEMPS_MAX;
+       } else if (ad->view_type == SETTING_PW_TYPE_SIM_LOCK_OFF) {
+               item_attempts_left = INT_SLP_SETTING_SIM_LOCK_ATTEMPTS_LEFT;
+               item_lock_timestamp = STR_SLP_SETTING_SIM_LOCK_TIMESTAMP;
+               attemps_left_max = SIM_LOCK_ATTEMPS_MAX;
        } else {
-               char *diable_view_type = NULL;
-               if (ad->disable_item_type == SETTING_PW_TYPE_SIM_LOCK_OFF) {
-                       diable_view_type = "SETTING_PW_TYPE_SIM_LOCK_DISABLE";
-               }
+               return;
+       }
 
-               if (diable_view_type) {
-                       /*  Success to Operate */
+       int value = -1;
+       int err = SETTING_RETURN_SUCCESS;
+       setting_get_int_slp_key(item_attempts_left, &value, &err);
+       setting_retm_if(err == SETTING_RETURN_FAIL,
+                       "[Error] get value of vconf fail.");
 
-                       service_h svc;
-                       if (service_create(&svc))
-                               return EINA_FALSE;
+       value--;
 
-                       service_add_extra_data(svc, "result", diable_view_type);
-                       ug_send_result(ad->ug, svc);
+       if (value > 0 && value <= attemps_left_max) {
+               setting_set_int_slp_key(item_attempts_left, value, &err);
+               setting_retm_if(err == SETTING_RETURN_FAIL, "[Error] set value of vconf fail.");
+               char temp_str[MAX_SPECIALIZITION_LEN] = {0,};
+               char temp[MAX_SPECIALIZITION_LEN] = {0,};
 
-                       service_destroy(svc);
-                       /* Send destroy request */
-                       ug_destroy_me(ad->ug);
-               }
+               if (value > 1)
+                       snprintf(temp, sizeof(temp), "%s. %s.", PW_ERR_DESC, ATTEMPTS_DESC);
+               else
+                       snprintf(temp, sizeof(temp), "%s. %s.", PW_ERR_DESC, ATTEMPT_DESC);
+
+               int ret = snprintf(temp_str, MAX_SPECIALIZITION_LEN, temp, value);
+
+               ret_if(ret < 0);
+
+               setting_password_ug_display_desc(ad, temp_str, FALSE);
+       } else if (value == 0) {
+               /*  store the lock timestamp */
+               time_t cur_time = time(NULL);
+               char cur_timestamp[LOCK_TIMESTAMP_LEN] = { 0, };
+               int ret = snprintf(cur_timestamp, sizeof(cur_timestamp), "%ld", cur_time);
+               ret_if(ret < 0);
+
+               setting_set_string_slp_key(item_lock_timestamp, cur_timestamp, &err);
+               setting_retm_if(err == SETTING_RETURN_FAIL,
+                               "[Error] set value of vconf fail.");
+
+               setting_set_int_slp_key(item_attempts_left, value, &err);
+               setting_retm_if(err == SETTING_RETURN_FAIL,
+                               "[Error] set value of vconf fail.");
+
+               ad->disable_item_type = ad->view_type;
+
+               char temp[MAX_SPECIALIZITION_LEN] = {0,};
+               snprintf(temp, sizeof(temp), PW_ERR_DELAY_DESC, PW_ERR_DELAY_TIME);
+
+               setting_password_ug_create_popup_notitle_nobtn(ad, temp, FALSE);
+       } else {
+               setting_password_ug_create_popup_notitle_nobtn(ad,
+                                                              _("IDS_COM_POP_ERROR"), FALSE);
        }
-       return ECORE_CALLBACK_CANCEL;
+
 }
 
-void setting_password_ug_display_desc(void *data, char *desc, int destroy)
+int setting_password_check_password(const char *challenge, unsigned int *remain_attempt, unsigned int *valid_sec)
 {
        SETTING_TRACE_BEGIN;
-       ret_if(data == NULL || desc == NULL);
+       retv_if(challenge == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
-       SettingPasswordUG *ad = (SettingPasswordUG *)data;
+       int inner_ret = 0;
+       int ret = 0;
+       unsigned int current_attempt = 0;
+       unsigned int max_attempt = 0;
+       unsigned int valid_secs = 0;
 
-#ifdef SUPPORT_MDM
-       if(ad->view_type == SETTING_PW_TYPE_MDM_NEW_POLICY)
-               return;
-#endif
+       inner_ret = security_server_chk_pwd(challenge, &current_attempt, &max_attempt, &valid_secs);
 
-       ad->destroy = destroy;
+       SETTING_TRACE_DEBUG("chk password : %d", inner_ret);
+       SETTING_TRACE_SECURE_DEBUG("current_attempt : %d, max_attempt : %d, valid_secs : %d secs", current_attempt, max_attempt, valid_secs);
 
-       if(ad->scroller == NULL)
-               return;
+       if (valid_sec != NULL)
+               *valid_sec = valid_secs;
 
-       if(ad->err_desc)
-       {
-               elm_object_item_del(ad->err_desc);
-               ad->err_desc = NULL;
+       if (inner_ret == SECURITY_SERVER_API_SUCCESS) {
+               ret = SETTING_RETURN_SUCCESS;
+       } else {
+               if (remain_attempt != NULL) {
+                       if ((max_attempt > 0) && (max_attempt >= current_attempt))
+                               *remain_attempt = max_attempt - current_attempt;
+                       else
+                               *remain_attempt = ATTEMPT_INFINITE;     /* infinite */
+               }
+               ret = SETTING_RETURN_FAIL;
        }
 
-       ad->err_desc = elm_genlist_item_append(ad->scroller, &(ad->itc_err_desc), desc, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-       ad->remove_timer = ecore_timer_add(2.0, __remove_desc, ad);
-
-       /* if pw incorrect, show keyboard again. */
-       if(ad->ed_pw1)
-       {
-               SETTING_TRACE_DEBUG("FOCUS IN");
-               ad->ed_pw1->isFocusFlag = TRUE;
-               elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
-       }
+       return ret;
 }
 
-void
-setting_password_ug_create_popup_notitle_nobtn(void *data, char *str,
-                                              int destroy)
+int setting_password_set_password(const char *cur_pwd, const char *new_pwd, void *data)
 {
-       /* error check */
-       retm_if(data == NULL, "Data parameter is NULL");
-
-       SettingPasswordUG *ad = (SettingPasswordUG *) data;
+       SETTING_TRACE_BEGIN;
+       retv_if(new_pwd == NULL || data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
-       ad->destroy = destroy;
-       if(ad->notify)
-       {
-               evas_object_del(ad->notify);
-               ad->notify = NULL;
+       SettingPasswordUG *ad = (SettingPasswordUG *)data;
+       int ret = 0;
+       int err;
+
+       /* To support key manager */
+       uid_t user = 5000;
+
+       /* max attempt count will be handled in passwordug for a while. */
+       if (ad->pw_status == SETTING_PW_STATUS_EMPTY) {
+               ret = security_server_set_pwd(NULL, new_pwd, 0, 0);
+               SETTING_TRACE_DEBUG("[security_server_set_pwd() + empty current] returns %d, INFINITE", ret);
+               if (ret == SECURITY_SERVER_API_SUCCESS) {
+#if 0
+                       ckmc_ret = ckmc_reset_user_password(user, new_pwd);
+                       SETTING_TRACE("ckmc_reset_user_password() returns %d", ckmc_ret);
+                       setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT, PHONE_LOCK_ATTEMPS_MAX, &err);
+#endif
+                       return SETTING_RETURN_SUCCESS;
+               } else {
+                       return SETTING_PW_ERROR_UNKNOWN;
+               }
+       } else {
+               ret = security_server_set_pwd(cur_pwd, new_pwd, 0, 0);
+               SETTING_TRACE_DEBUG("[security_server_set_pwd()] returns %d, INFINITE", ret);
+               if (ret == SECURITY_SERVER_API_SUCCESS) {
+#if 0
+                       ckmc_ret = ckmc_change_user_password(user, cur_pwd, new_pwd);
+                       SETTING_TRACE("ckmc_change_user_password() returns %d", ckmc_ret);
+                       setting_set_int_slp_key(INT_SLP_SETTING_PHONE_LOCK_ATTEMPTS_LEFT, PHONE_LOCK_ATTEMPS_MAX, &err);
+#endif
+                       return SETTING_RETURN_SUCCESS;
+               } else {
+                       return SETTING_PW_ERROR_UNKNOWN;
+               }
        }
-       ad->notify = setting_create_popup_without_btn(ad, ad->ly_main, NULL, str,
-                                         setting_password_ug_popup_resp_cb,
-                                         POPUP_INTERVAL, FALSE, FALSE);
 }
 
+