Tizen 2.0 Release
[apps/home/settings.git] / setting-password / src / setting-password-main.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <setting-password.h>
18 #include <setting-password-main.h>
19 #include <setting-common-data-slp-setting.h>
20 #include <openssl/sha.h>
21 #include <setting-debug.h>
22 #include <haptic.h>
23
24
25 static int setting_password_main_create(void *cb);
26 static int setting_password_main_destroy(void *cb);
27 static int setting_password_main_update(void *cb);
28 static int setting_password_main_cleanup(void *cb);
29
30 setting_view setting_view_password_main = {
31         .create = setting_password_main_create,
32         .destroy = setting_password_main_destroy,
33         .update = setting_password_main_update,
34         .cleanup = setting_password_main_cleanup,
35 };
36
37 #define ENTRY_CALLBACK_REPEAT_MAX 3
38 #define SETTING_COMPARE_PW_FAIL -2
39
40 /* ***************************************************
41  *
42  *basic func
43  *
44  ***************************************************/
45 static void
46 __password_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj,
47                             void *event)
48 {
49         ret_if(!data);
50         SettingPasswordUG *ad = (SettingPasswordUG *) data;
51
52         if (ad->ed_pw1) {
53                 setting_hide_input_pannel_cb(ad->ed_pw1->eo_check);
54         }
55         if (ad->ed_pw2) {
56                 setting_hide_input_pannel_cb(ad->ed_pw2->eo_check);
57         }
58         if (ad->ed_pw3) {
59                 setting_hide_input_pannel_cb(ad->ed_pw3->eo_check);
60         }
61
62 }
63
64 static char *setting_password_main_get_title_str(void *data)
65 {
66         retvm_if(data == NULL, NULL,
67                  "[Setting > Password] Data parameter is NULL");
68         SettingPasswordUG *ad = (SettingPasswordUG *) data;
69
70         switch (ad->view_type) {
71         case SETTING_PW_TYPE_SIM_LOCK_ON:
72         case SETTING_PW_TYPE_SIM_LOCK_OFF:
73                 return _("IDS_COM_BODY_AUTH_PASSWORD");
74                 break;
75         case SETTING_PW_TYPE_PIN_LOCK_ON:
76         case SETTING_PW_TYPE_PIN_LOCK_OFF:
77                 return _("IDS_ST_BODY_PIN1");
78                 break;
79         case SETTING_PW_TYPE_CHANGE_PIN1:
80                 return _("IDS_ST_BODY_CHANGE_PIN1");
81                 break;
82
83         case SETTING_PW_TYPE_CHANGE_PIN2:
84                 return _("IDS_ST_BODY_CHANGE_PIN2");
85                 break;
86
87         case SETTING_PW_TYPE_PIN1_BLOCKED:
88                 return _("IDS_ST_BODY_PUK1_CODE");
89                 break;
90         case SETTING_PW_TYPE_PIN2_BLOCKED:
91
92                 return _("IDS_ST_BODY_PUK2");
93                 break;
94         default:
95                 SETTING_TRACE_DEBUG("%s*** Unknown Password Type. ***%s",
96                                     SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
97                 break;
98         }
99         return NULL;
100
101 }
102
103 Elm_Object_Item* __create_navibar(void *data, Evas_Object *content, Evas_Object *navibar, setting_pw_navibar_style_t style)
104 {
105         SETTING_TRACE_BEGIN;
106         retv_if(data == NULL || content == NULL || navibar == NULL, NULL);
107
108         SettingPasswordUG *ad = (SettingPasswordUG *)data;
109
110         Elm_Object_Item *navi_item = NULL;
111         Evas_Object *done_btn = NULL;
112
113         switch(style)
114         {
115                 case SETTING_PW_NAVIBAR_WITH_LEFT_BTN :
116                         SETTING_TRACE_DEBUG("with left btn");
117                         navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
118                                                                         NULL, _("IDS_COM_SK_CANCEL"), NULL,
119                                                                         NULL,
120                                                                         setting_password_main_click_softkey_cancel_cb,
121                                                                         NULL, ad, content, navibar);
122                         break;
123                 case SETTING_PW_NAVIBAR_WITH_RIGHT_BTN :
124                         SETTING_TRACE_DEBUG("with right btn");
125                         navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
126                                                                         _("IDS_COM_SK_DONE"), NULL, NULL,
127                                                                         setting_password_main_click_softkey_done_cb, NULL,
128                                                                         NULL, ad, content, navibar);
129                         break;
130                 case SETTING_PW_NAVIBAR_WITH_BOTH_BTN:
131                         SETTING_TRACE_DEBUG("with both btn");
132                         navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
133                                                                         _("IDS_COM_SK_DONE"), _("IDS_COM_SK_CANCEL"), NULL,
134                                                                         setting_password_main_click_softkey_done_cb,
135                                                                         setting_password_main_click_softkey_cancel_cb,
136                                                                         NULL, ad, content, navibar);
137                         break;
138                 case SETTING_PW_NAVIBAR_WITH_NO_BTN:
139                         SETTING_TRACE_DEBUG("with no btn");
140                         navi_item = setting_create_navi_bar_top_buttons(setting_password_main_get_title_str(ad),
141                                                                         NULL, NULL, NULL,
142                                                                         NULL,
143                                                                         NULL,
144                                                                         NULL, ad, content, navibar);
145                 default:
146                         break;
147         }
148         retv_if(!navi_item, NULL);
149
150         done_btn = elm_object_item_part_content_get(navi_item, NAVI_BTN_STYLE_LEFT);
151         if(done_btn != NULL)
152         {
153                 setting_disable_evas_object(done_btn);
154                 setting_dim_evas_object(done_btn, TRUE);
155         }
156         return navi_item;
157 }
158
159 static int __create_common_password_frame(void *data)
160 {
161         SETTING_TRACE_BEGIN;
162         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
163
164         SettingPasswordUG *ad = (SettingPasswordUG *)data;
165         Evas_Object *navi_bar = NULL;
166         static int count = 0;
167
168         count++;
169         /* CONTENT */
170         if(ad->scroller != NULL)
171         {
172                 evas_object_del(ad->scroller);
173         }
174
175         Evas_Object *pw_list = elm_genlist_add(ad->win_main_layout);
176         elm_object_style_set(pw_list, "dialogue");
177         if(pw_list == NULL)
178                 return SETTING_RETURN_FAIL;
179
180         elm_genlist_clear(pw_list);     /* first to clear list */
181         elm_genlist_mode_set(pw_list, ELM_LIST_COMPRESS);
182
183
184 #if SUPPORT_BOTTOM_BTNS
185         ad->ly_main = setting_create_win_layout(ad->win_main_layout, ad->win_get);
186         retv_if(!ad->ly_main, SETTING_RETURN_FAIL);
187
188         navi_bar = setting_create_navi_bar(ad->ly_main);
189         retv_if(!navi_bar, SETTING_RETURN_FAIL);
190
191         ad->navi_it = __create_navibar(ad, pw_list, navi_bar, SETTING_PW_NAVIBAR_WITH_BOTH_BTN);
192
193         retv_if(!ad->navi_it, SETTING_RETURN_FAIL);
194 #else
195         ad->ly_main =
196             setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
197                                            setting_password_main_get_title_str
198                                            (ad), _("IDS_COM_SK_CANCEL"),
199                                            _("IDS_COM_SK_DONE"), NULL,
200                                            setting_password_main_click_softkey_cancel_cb,
201                                            setting_password_main_click_softkey_done_cb,
202                                            NULL, ad, pw_list /* contents */ ,
203                                            &navi_bar, &(ad->controllbar));
204         elm_object_item_disabled_set(elm_toolbar_last_item_get(ad->controllbar), EINA_TRUE);
205
206         if(ad->ly_main == NULL)
207                 return SETTING_RETURN_FAIL;
208 #endif
209
210         evas_object_event_callback_add(pw_list, EVAS_CALLBACK_MOUSE_UP,
211                                        __password_main_gl_mouse_up, ad);
212
213         Elm_Object_Item *item = elm_genlist_item_append(pw_list,
214                                                                 &(ad->itc_seperator), NULL, NULL,
215                                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
216         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
217
218         ad->scroller = pw_list;
219
220         return SETTING_RETURN_SUCCESS;
221 }
222
223 static int
224 setting_password_main_create(void *cb)
225 {
226         SETTING_TRACE_BEGIN;
227         /* error check */
228         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
229
230         SettingPasswordUG *ad = (SettingPasswordUG *) cb;
231         int ret = 0;
232
233         ret = __create_common_password_frame(ad);
234
235         if(ret < 0)
236                 return SETTING_RETURN_FAIL;
237
238         setting_password_main_create_ui(ad);
239
240         setting_view_password_main.is_create = 1;
241
242         SETTING_TRACE_END;
243         return SETTING_RETURN_SUCCESS;
244 }
245
246 static int setting_password_main_destroy(void *cb)
247 {
248         SETTING_TRACE_BEGIN;
249         /* error check */
250         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
251
252         SettingPasswordUG *ad = (SettingPasswordUG *) cb;
253         
254         if (ad->focus_timer) {
255                 ecore_timer_del(ad->focus_timer);
256                 ad->focus_timer = NULL;
257         }
258         if (ad->remove_timer) {
259                 ecore_timer_del(ad->remove_timer);
260                 ad->remove_timer = NULL;
261         }
262
263         if (ad->ly_main != NULL) {
264                 evas_object_del(ad->ly_main);
265                 ad->ly_main = NULL;
266                 setting_view_password_main.is_create = 0;
267         }
268         SETTING_TRACE_END;
269         return SETTING_RETURN_SUCCESS;
270 }
271
272 static int setting_password_main_update(void *cb)
273 {
274         SETTING_TRACE_BEGIN;
275         /* error check */
276         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
277
278         SettingPasswordUG *ad = (SettingPasswordUG *) cb;
279
280         if (ad->ly_main != NULL) {
281                 evas_object_show(ad->ly_main);
282         }
283
284         return SETTING_RETURN_SUCCESS;
285 }
286
287 static int setting_password_main_cleanup(void *cb)
288 {
289         /* error check */
290         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
291
292         SettingPasswordUG *ad = (SettingPasswordUG *) cb;
293
294         if (ad->ly_main != NULL) {
295                 evas_object_hide(ad->ly_main);
296         }
297
298         return SETTING_RETURN_SUCCESS;
299 }
300
301 /* ***************************************************
302  *
303  *general func
304  *
305  ***************************************************/
306
307 static int setting_password_main_create_ui(void *data)
308 {
309         /* error check */
310         retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
311                  "[Setting > Password] Data parameter is NULL");
312
313         SettingPasswordUG *ad = (SettingPasswordUG *) data;
314
315         SETTING_TRACE_DEBUG("ad->view_type=%d ***", ad->view_type);
316
317         switch (ad->view_type) {
318         case SETTING_PW_TYPE_SIM_LOCK_OFF:
319         case SETTING_PW_TYPE_PIN_LOCK_ON:
320         case SETTING_PW_TYPE_PIN_LOCK_OFF:
321                 setting_password_main_draw_1line_password(ad, NULL);
322                 break;
323         case SETTING_PW_TYPE_SIM_LOCK_ON:
324                 setting_password_main_draw_2line_password(ad, NULL);
325                 break;
326
327         case SETTING_PW_TYPE_CHANGE_PIN1:
328         case SETTING_PW_TYPE_CHANGE_PIN2:
329         case SETTING_PW_TYPE_PIN1_BLOCKED:
330         case SETTING_PW_TYPE_PIN2_BLOCKED:
331                 setting_password_main_draw_3line_password(ad, NULL);
332                 break;
333
334         default:
335                 SETTING_TRACE_DEBUG("%s*** Unknown Password Type. ***%s",
336                                     SETTING_FONT_BGREEN, SETTING_FONT_BLACK);
337                 break;
338         }
339
340         /** @todo this function always return 0, not verifying the function flow with the value */
341         return 0;
342 }
343
344 static void
345 setting_password_main_entry_changed_cb(void *data, Evas_Object *obj,
346                                        void *event_info)
347 {
348         retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
349         Setting_GenGroupItem_Data *list_item =
350             (Setting_GenGroupItem_Data *) data;
351         SettingPasswordUG *ad = (SettingPasswordUG *) list_item->userdata;
352         const char *entry_str = elm_entry_entry_get(obj);
353         list_item->sub_desc = (char *)g_strdup(entry_str);
354         bool isFoundEmptyEntry = FALSE;
355
356         Evas_Object *layout = elm_object_parent_widget_get(obj);
357         elm_object_part_text_set(layout, "elm.guidetext", "");
358
359         do {
360                 if (ad->ed_pw1) {
361                         entry_str = ad->ed_pw1->sub_desc;
362                         if (NULL == entry_str || '\0' == entry_str[0]) {
363                                 isFoundEmptyEntry = TRUE;
364                                 layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
365                                 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
366                                 break;
367                         }
368                 }
369                 if (ad->ed_pw2) {
370                         entry_str = ad->ed_pw2->sub_desc;
371                         if (NULL == entry_str || '\0' == entry_str[0]) {
372                                 isFoundEmptyEntry = TRUE;
373                                 layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
374                                 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
375                                 break;
376                         }
377                 }
378                 if (ad->ed_pw3) {
379                         entry_str = ad->ed_pw3->sub_desc;
380                         if (NULL == entry_str || '\0' == entry_str[0]) {
381                                 isFoundEmptyEntry = TRUE;
382                                 layout = elm_object_parent_widget_get(ad->ed_pw3->eo_check);
383                                 elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
384                                 break;
385                         }
386                 }
387
388         } while (0);
389
390         bool disableFlag = isFoundEmptyEntry;
391
392         #if SUPPORT_BOTTOM_BTNS
393         Evas_Object *done_btn = elm_object_item_part_content_get(ad->navi_it, NAVI_BTN_STYLE_LEFT);
394         if (disableFlag) {
395                 if (!evas_object_pass_events_get(done_btn)) { /* it had not yet been disabled */
396                         setting_disable_evas_object(done_btn);
397                         setting_dim_evas_object(done_btn, TRUE);
398                 }/* else already disabled */
399         } else {
400                 setting_enable_evas_object(done_btn);
401                 setting_undo_dim_evas_object(done_btn, TRUE);
402         }
403         #else
404         elm_object_item_disabled_set(elm_toolbar_last_item_get
405                                          (ad->controllbar), disableFlag);
406         #endif
407
408 }
409
410 static Eina_Bool __focus_on_idler(void *data)
411 {
412         /* error check */
413         retv_if(data == NULL, FALSE);
414
415         SettingPasswordUG *ad = (SettingPasswordUG *) data;
416
417         if(ad->ed_pw1)
418         {
419                 if (ad->ed_pw1->isFocusFlag || (ad->ed_pw1->eo_check != NULL))
420                 {
421                         /* no matter how many edifileds, it only need focus on 1st editfiled */
422                         elm_object_focus_set(ad->ed_pw1->eo_check, EINA_TRUE);
423                 }
424         }
425
426         return ECORE_CALLBACK_CANCEL;
427 }
428
429 static int setting_password_main_draw_1line_password(void *data, void *cb)
430 {
431         /* error check */
432         retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
433                  "[Setting > Password] Data parameter is NULL");
434
435         SettingPasswordUG *ad = (SettingPasswordUG *) data;
436
437         switch (ad->view_type) {
438         case SETTING_PW_TYPE_PIN_LOCK_ON:
439         case SETTING_PW_TYPE_PIN_LOCK_OFF:
440                 ad->ed_pw1 =
441                     setting_create_Gendial_field_entry(ad->scroller,
442                                                        &
443                                                        (ad->itc_variable_height),
444                                                        NULL, ad,
445                                                        SWALLOW_Type_LAYOUT_ENTRY,
446                                                        NULL, NULL, 0,
447                                                        "IDS_ST_BODY_PIN1", NULL,
448                                                        setting_password_main_entry_changed_cb,
449                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
450                                                        TRUE, TRUE,
451                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
452                                                        0, "0123456789", NULL);
453                 break;
454
455         default:
456                 break;
457         }
458
459         ad->focus_timer = ecore_timer_add(0.4, __focus_on_idler, ad);
460
461         return 0;
462 }
463
464 static int setting_password_main_clear_1line_password(void *data)
465 {
466         /* error check */
467         retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
468                  "[Setting > Password] Data parameter is NULL");
469
470         SettingPasswordUG *ad = (SettingPasswordUG *) data;
471         retv_if(NULL == ad->ed_pw1, -1);
472
473         ad->ed_pw1->sub_desc = NULL;
474         ad->ed_pw1->isFocusFlag = FALSE;
475
476         elm_entry_entry_set(ad->ed_pw1->eo_check, "");
477         Evas_Object *layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
478         elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
479         return 0;
480 }
481
482 static int setting_password_main_draw_2line_password(void *data, void *cb)
483 {
484         /* error check */
485         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
486
487         SettingPasswordUG *ad = (SettingPasswordUG *) data;
488
489         switch (ad->view_type) {
490         case SETTING_PW_TYPE_SIM_LOCK_ON:
491                 ad->ed_pw1 =
492                     setting_create_Gendial_field_entry(ad->scroller,
493                                                        &
494                                                        (ad->itc_variable_height),
495                                                        NULL, ad,
496                                                        SWALLOW_Type_LAYOUT_ENTRY,
497                                                        NULL, NULL, 0,
498                                                        PW_SHORT_GUIDE_NEW,
499                                                        NULL,
500                                                        setting_password_main_entry_changed_cb,
501                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
502                                                        TRUE, TRUE,
503                                                        SETTING_PW_UG_SIM_MAX_LENGTH,
504                                                        0, "0123456789", NULL);
505
506                 ad->ed_pw2 =
507                     setting_create_Gendial_field_entry(ad->scroller,
508                                                        &
509                                                        (ad->itc_variable_height),
510                                                        NULL, ad,
511                                                        SWALLOW_Type_LAYOUT_ENTRY,
512                                                        NULL, NULL, 0,
513                                                        PW_SHORT_GUIDE_CONFIRM,
514                                                        NULL,
515                                                        setting_password_main_entry_changed_cb,
516                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
517                                                        TRUE, FALSE,
518                                                        SETTING_PW_UG_SIM_MAX_LENGTH,
519                                                        0, "0123456789", NULL);
520                 break;
521
522         default:
523                 break;
524         }
525
526         ad->focus_timer = ecore_timer_add(1, __focus_on_idler, ad);
527         return 0;
528 }
529
530 static int setting_password_main_clear_2line_password(void *data)
531 {
532         /* error check */
533         retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
534                  "[Setting > Password] Data parameter is NULL");
535
536         SettingPasswordUG *ad = (SettingPasswordUG *) data;
537         Evas_Object *layout = NULL;
538
539         retv_if(NULL == ad->ed_pw1, -1);
540         ad->ed_pw1->sub_desc = NULL;
541         ad->ed_pw1->isFocusFlag = FALSE;
542         elm_entry_entry_set(ad->ed_pw1->eo_check, "");
543         layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
544         elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
545
546         retv_if(NULL == ad->ed_pw2, -1);
547         ad->ed_pw2->sub_desc = NULL;
548         ad->ed_pw2->isFocusFlag = FALSE;
549         elm_entry_entry_set(ad->ed_pw2->eo_check, "");
550         layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
551         elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
552         return 0;
553 }
554
555 static int setting_password_main_draw_3line_password(void *data, void *cb)
556 {
557         /* error check */
558         retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
559                  "[Setting > Password] Data parameter is NULL");
560
561         SettingPasswordUG *ad = (SettingPasswordUG *) data;
562         Elm_Input_Panel_Layout ime_style = ELM_INPUT_PANEL_LAYOUT_NORMAL;
563
564         switch (ad->view_type) {
565         case SETTING_PW_TYPE_CHANGE_PIN1:
566                 ad->ed_pw1 =
567                     setting_create_Gendial_field_entry(ad->scroller,
568                                                        &
569                                                        (ad->itc_variable_height),
570                                                        NULL, ad,
571                                                        SWALLOW_Type_LAYOUT_ENTRY,
572                                                        NULL, NULL, 0,
573                                                        PW_SHORT_GUIDE_CURRENT,
574                                                        NULL,
575                                                        setting_password_main_entry_changed_cb,
576                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
577                                                        TRUE, TRUE,
578                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
579                                                        0, "0123456789", NULL);
580
581                 ad->ed_pw2 =
582                     setting_create_Gendial_field_entry(ad->scroller,
583                                                        &
584                                                        (ad->itc_variable_height),
585                                                        NULL, ad,
586                                                        SWALLOW_Type_LAYOUT_ENTRY,
587                                                        NULL, NULL, 0,
588                                                        PW_SHORT_GUIDE_NEW,
589                                                        NULL,
590                                                        setting_password_main_entry_changed_cb,
591                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
592                                                        TRUE, FALSE,
593                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
594                                                        0, "0123456789", NULL);
595
596                 ad->ed_pw3 =
597                     setting_create_Gendial_field_entry(ad->scroller,
598                                                        &
599                                                        (ad->itc_variable_height),
600                                                        NULL, ad,
601                                                        SWALLOW_Type_LAYOUT_ENTRY,
602                                                        NULL, NULL, 0,
603                                                        PW_SHORT_GUIDE_CONFIRM,
604                                                        NULL,
605                                                        setting_password_main_entry_changed_cb,
606                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
607                                                        TRUE, FALSE,
608                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
609                                                        0, "0123456789", NULL);
610                 break;
611
612         case SETTING_PW_TYPE_CHANGE_PIN2:
613                 ad->ed_pw1 =
614                     setting_create_Gendial_field_entry(ad->scroller,
615                                                        &
616                                                        (ad->itc_variable_height),
617                                                        NULL, ad,
618                                                        SWALLOW_Type_LAYOUT_ENTRY,
619                                                        NULL, NULL, 0,
620                                                        PW_SHORT_GUIDE_CURRENT,
621                                                        NULL,
622                                                        setting_password_main_entry_changed_cb,
623                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
624                                                        TRUE, TRUE,
625                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
626                                                        0, "0123456789", NULL);
627
628                 ad->ed_pw2 =
629                     setting_create_Gendial_field_entry(ad->scroller,
630                                                        &
631                                                        (ad->itc_variable_height),
632                                                        NULL, ad,
633                                                        SWALLOW_Type_LAYOUT_ENTRY,
634                                                        NULL, NULL, 0,
635                                                        PW_SHORT_GUIDE_NEW,
636                                                        NULL,
637                                                        setting_password_main_entry_changed_cb,
638                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
639                                                        TRUE, FALSE,
640                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
641                                                        0, "0123456789", NULL);
642
643                 ad->ed_pw3 =
644                     setting_create_Gendial_field_entry(ad->scroller,
645                                                        &
646                                                        (ad->itc_variable_height),
647                                                        NULL, ad,
648                                                        SWALLOW_Type_LAYOUT_ENTRY,
649                                                        NULL, NULL, 0,
650                                                        PW_SHORT_GUIDE_CONFIRM,
651                                                        NULL,
652                                                        setting_password_main_entry_changed_cb,
653                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
654                                                        TRUE, FALSE,
655                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
656                                                        0, "0123456789", NULL);
657                 break;
658
659         case SETTING_PW_TYPE_PIN1_BLOCKED:
660                 ad->ed_pw1 =
661                     setting_create_Gendial_field_entry(ad->scroller,
662                                                        &
663                                                        (ad->itc_variable_height),
664                                                        NULL, ad,
665                                                        SWALLOW_Type_LAYOUT_ENTRY,
666                                                        NULL, NULL, 0,
667                                                        "IDS_ST_BODY_PUK1_CODE",
668                                                        NULL,
669                                                        setting_password_main_entry_changed_cb,
670                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
671                                                        TRUE, TRUE,
672                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
673                                                        0, "0123456789", NULL);
674
675                 ad->ed_pw2 =
676                     setting_create_Gendial_field_entry(ad->scroller,
677                                                        &
678                                                        (ad->itc_variable_height),
679                                                        NULL, ad,
680                                                        SWALLOW_Type_LAYOUT_ENTRY,
681                                                        NULL, NULL, 0,
682                                                        "IDS_ST_BODY_NEW_PIN1",
683                                                        NULL,
684                                                        setting_password_main_entry_changed_cb,
685                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
686                                                        TRUE, FALSE,
687                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
688                                                        0, "0123456789", NULL);
689
690                 ad->ed_pw3 =
691                     setting_create_Gendial_field_entry(ad->scroller,
692                                                        &
693                                                        (ad->itc_variable_height),
694                                                        NULL, ad,
695                                                        SWALLOW_Type_LAYOUT_ENTRY,
696                                                        NULL, NULL, 0,
697                                                        "IDS_ST_BODY_CONFIRM_NEW_PIN1",
698                                                        NULL,
699                                                        setting_password_main_entry_changed_cb,
700                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
701                                                        TRUE, FALSE,
702                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
703                                                        0, "0123456789", NULL);
704                 break;
705
706         case SETTING_PW_TYPE_PIN2_BLOCKED:
707                 ad->ed_pw1 =
708                     setting_create_Gendial_field_entry(ad->scroller,
709                                                        &
710                                                        (ad->itc_variable_height),
711                                                        NULL, ad,
712                                                        SWALLOW_Type_LAYOUT_ENTRY,
713                                                        NULL, NULL, 0,
714                                                        "IDS_ST_BODY_PUK2", NULL,
715                                                        setting_password_main_entry_changed_cb,
716                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
717                                                        TRUE, TRUE,
718                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
719                                                        0, "0123456789", NULL);
720
721                 ad->ed_pw2 =
722                     setting_create_Gendial_field_entry(ad->scroller,
723                                                        &
724                                                        (ad->itc_variable_height),
725                                                        NULL, ad,
726                                                        SWALLOW_Type_LAYOUT_ENTRY,
727                                                        NULL, NULL, 0,
728                                                        "IDS_ST_BODY_NEW_PIN2",
729                                                        NULL,
730                                                        setting_password_main_entry_changed_cb,
731                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
732                                                        TRUE, FALSE,
733                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
734                                                        0, "0123456789", NULL);
735
736                 ad->ed_pw3 =
737                     setting_create_Gendial_field_entry(ad->scroller,
738                                                        &
739                                                        (ad->itc_variable_height),
740                                                        NULL, ad,
741                                                        SWALLOW_Type_LAYOUT_ENTRY,
742                                                        NULL, NULL, 0,
743                                                        "IDS_ST_BODY_CONFIRM_NEW_PIN2",
744                                                        NULL,
745                                                        setting_password_main_entry_changed_cb,
746                                                        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,
747                                                        TRUE, FALSE,
748                                                        SETTING_PW_UG_PIN_MAX_LENGTH,
749                                                        0, "0123456789", NULL);
750                 break;
751
752         default:
753                 break;
754         }
755
756         ad->focus_timer = ecore_timer_add(1, __focus_on_idler, ad);
757         return 0;
758 }
759
760 static int setting_password_main_clear_3line_password(void *data)
761 {
762         /* error check */
763         retvm_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER,
764                  "[Setting > Password] Data parameter is NULL");
765
766         SettingPasswordUG *ad = (SettingPasswordUG *) data;
767         Evas_Object *layout = NULL;
768
769         retv_if(NULL == ad->ed_pw1, -1);
770         ad->ed_pw1->sub_desc = NULL;
771         ad->ed_pw1->isFocusFlag = FALSE;
772         elm_entry_entry_set(ad->ed_pw1->eo_check, "");
773         layout = elm_object_parent_widget_get(ad->ed_pw1->eo_check);
774         elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
775
776         retv_if(NULL == ad->ed_pw2, -1);
777         ad->ed_pw2->sub_desc = NULL;
778         ad->ed_pw2->isFocusFlag = FALSE;
779         elm_entry_entry_set(ad->ed_pw2->eo_check, "");
780         layout = elm_object_parent_widget_get(ad->ed_pw2->eo_check);
781         elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
782
783         retv_if(NULL == ad->ed_pw3, -1);
784         ad->ed_pw3->sub_desc = NULL;
785         ad->ed_pw3->isFocusFlag = FALSE;
786         elm_entry_entry_set(ad->ed_pw3->eo_check, "");
787         layout = elm_object_parent_widget_get(ad->ed_pw3->eo_check);
788         elm_object_part_text_set(layout, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
789         return 0;
790 }
791
792 static int setting_password_main_check_1line_password(void *data)
793 {
794         /* error check */
795         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
796
797         SettingPasswordUG *ad = (SettingPasswordUG *) data;
798
799         const char *entry_str = ad->ed_pw1->sub_desc;
800         ad->focus_data = ad->ed_pw1;
801
802         /*  Empty Check */
803         if (isEmptyStr(entry_str)) {
804                 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
805
806                 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
807         }
808
809         /*  Length Check */
810         int entry_str_len = safeStrLen(entry_str);
811         switch (ad->view_type) {
812         case SETTING_PW_TYPE_PIN_LOCK_ON:
813         case SETTING_PW_TYPE_PIN_LOCK_OFF:
814                 {
815                         if (entry_str_len < SETTING_PW_UG_PIN_MIN_LENGTH
816                             || entry_str_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
817                                 setting_password_main_warning_entry_added_byte_popup
818                                         (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
819                                 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
820                         }
821                 }
822                 break;
823         case SETTING_PW_TYPE_SIM_LOCK_OFF:
824                 {
825                         if (entry_str_len < SETTING_PW_UG_SIM_MIN_LENGTH
826                             || entry_str_len > SETTING_PW_UG_SIM_MAX_LENGTH) {
827                                 setting_password_main_warning_entry_added_byte_popup
828                                         (ad, SETTING_PW_UG_SIM_MIN_LENGTH, SETTING_PW_UG_SIM_MAX_LENGTH);
829                                 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
830                         }
831                 }
832         default:
833                 break;
834         }
835         return SETTING_RETURN_SUCCESS;
836 }
837
838 static int setting_password_main_check_2line_password(void *data)
839 {
840         /* error check */
841         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
842
843         SettingPasswordUG *ad = (SettingPasswordUG *) data;
844
845         const char *entry_str1 = ad->ed_pw1->sub_desc;
846         const char *entry_str2 = ad->ed_pw2->sub_desc;
847         ad->focus_data = ad->ed_pw1;
848
849         /*  Empty Check */
850         if (isEmptyStr(entry_str1)) {
851                 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
852
853                 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
854         }
855
856         if (isEmptyStr(entry_str2)) {
857                 ad->focus_data = ad->ed_pw2;
858                 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
859
860                 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
861         }
862
863         /*  Length Check */
864         int entry_str_len = safeStrLen(entry_str1);
865         switch (ad->view_type) {
866         case SETTING_PW_TYPE_SIM_LOCK_ON:
867                 {
868                         if (entry_str_len < SETTING_PW_UG_SIM_MIN_LENGTH
869                             || entry_str_len > SETTING_PW_UG_SIM_MAX_LENGTH) {
870                                 setting_password_main_warning_entry_added_byte_popup
871                                         (ad, SETTING_PW_UG_SIM_MIN_LENGTH, SETTING_PW_UG_SIM_MAX_LENGTH);
872                                 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
873                         }
874                 }
875                 break;
876         default:
877                 break;
878         }
879
880         /*  Match Check */
881         if (0 != safeStrCmp(entry_str1, entry_str2)) {
882                 setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
883
884                 return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
885         }
886
887         return SETTING_RETURN_SUCCESS;
888 }
889
890 static void
891 setting_password_main_warning_entry_added_byte_popup(SettingPasswordUG *ad,
892                                                      int min, int max)
893 {
894         char str[MAX_SPECIALIZITION_LEN + 1] = { 0 };
895
896         snprintf(str, MAX_SPECIALIZITION_LEN, "%d~%d %s", min, max, _("characters required"));
897
898         setting_password_ug_display_desc(ad, str, FALSE);
899
900 }
901
902 static int setting_password_main_check_3line_password(void *data)
903 {
904         /* error check */
905         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
906
907         SettingPasswordUG *ad = (SettingPasswordUG *) data;
908
909         const char *entry_str1 = ad->ed_pw1->sub_desc;
910         const char *entry_str2 = ad->ed_pw2->sub_desc;
911         const char *entry_str3 = ad->ed_pw3->sub_desc;
912         ad->focus_data = ad->ed_pw1;
913
914         /*  Empty Check */
915         if (isEmptyStr(entry_str1)) {
916                 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
917
918                 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
919         }
920
921         if (isEmptyStr(entry_str2)) {
922                 ad->focus_data = ad->ed_pw2;
923                 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
924
925                 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
926         }
927
928         if (isEmptyStr(entry_str3)) {
929                 ad->focus_data = ad->ed_pw3;
930                 setting_password_ug_display_desc(ad, _("IDS_ST_BODY_PASSWORD_EMPTY"), FALSE);
931
932                 return SETTING_ENTRY_RETURN_NULL_STR_ERR;
933         }
934
935         /*  Length Check */
936         int entry_str1_len = safeStrLen(entry_str1);
937         int entry_str2_len = safeStrLen(entry_str2);
938         int entry_str3_len = safeStrLen(entry_str3);
939         switch (ad->view_type) {
940         case SETTING_PW_TYPE_PIN1_BLOCKED:
941         case SETTING_PW_TYPE_PIN2_BLOCKED:
942         case SETTING_PW_TYPE_CHANGE_PIN1:
943         case SETTING_PW_TYPE_CHANGE_PIN2:
944                 {
945                         if (entry_str1_len < SETTING_PW_UG_PIN_MIN_LENGTH
946                             || entry_str1_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
947                                 setting_password_main_warning_entry_added_byte_popup
948                                         (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
949                                 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
950                         }
951                         if (entry_str2_len < SETTING_PW_UG_PIN_MIN_LENGTH
952                             || entry_str2_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
953                                 ad->focus_data = ad->ed_pw2;
954                                 setting_password_main_warning_entry_added_byte_popup
955                                         (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
956                                 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
957                         }
958                         if (entry_str3_len < SETTING_PW_UG_PIN_MIN_LENGTH
959                             || entry_str3_len > SETTING_PW_UG_PIN_MAX_LENGTH) {
960                                 ad->focus_data = ad->ed_pw3;
961                                 setting_password_main_warning_entry_added_byte_popup
962                                         (ad, SETTING_PW_UG_PIN_MIN_LENGTH, SETTING_PW_UG_PIN_MAX_LENGTH);
963                                 return SETTING_ENTRY_REQUIRED_CORRECT_DIGIT_PW;
964                         }
965                 }
966                 break;
967         default:
968                 break;
969         }
970
971         /*  Match Check */
972         if (0 != safeStrCmp(entry_str2, entry_str3)) {
973                 ad->focus_data = ad->ed_pw2;
974                 setting_password_ug_display_desc(ad, _("IDS_ST_POP_PASSWORDS_DO_NOT_MATCH"), FALSE);
975
976                 return SETTING_ENTRY_NOT_MATCH_NEW_CONF_PW;
977         }
978
979         return SETTING_RETURN_SUCCESS;
980 }
981
982 static void
983 setting_password_main_click_softkey_cancel_cb(void *data, Evas_Object *obj,
984                                               void *event_info)
985 {
986         /* error check */
987         retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
988
989         SettingPasswordUG *ad = (SettingPasswordUG *) data;
990
991         /* send result : Cancel */
992         service_h svc;
993         if(service_create(&svc))
994                 return;
995
996         service_add_extra_data(svc, "result", "Cancel");
997         ug_send_result(ad->ug, svc);
998         SETTING_TRACE("Send Result : %s\n", "Cancel");
999
1000         service_destroy(svc);
1001
1002         /* Send destroy request */
1003         ug_destroy_me(ad->ug);
1004
1005 }
1006
1007 static void
1008 setting_password_main_click_softkey_done_cb(void *data, Evas_Object *obj,
1009                                             void *event_info)
1010 {
1011         /* error check */
1012         retm_if(data == NULL, "[Setting > Password] Data parameter is NULL");
1013
1014         int err = 0;
1015         int ret = 0;
1016         char svalue[SHA256_DIGEST_LENGTH] = { 0, };
1017
1018         memset(svalue, 0x0, SHA256_DIGEST_LENGTH);
1019
1020         SettingPasswordUG *ad = (SettingPasswordUG *) data;
1021         service_h svc;
1022
1023         SETTING_TRACE("ad->view_type:%d", ad->view_type);
1024
1025         switch (ad->view_type) {
1026                 case SETTING_PW_TYPE_PIN_LOCK_ON:
1027                         {
1028                                 SETTING_TRACE("case SETTING_PW_TYPE_PIN_LOCK_ON");
1029
1030                                 ret = setting_password_main_check_1line_password(ad);
1031                                 if (ret == SETTING_RETURN_SUCCESS) {
1032                                         TelSimFacilityPw_t sim_sec_data = { 0, };
1033                                         int tapi_ret = TAPI_API_SUCCESS;
1034                                         const char *entry_str;
1035
1036                                         entry_str = ad->ed_pw1->sub_desc;
1037                                         if (isEmptyStr(entry_str)) {
1038                                                 ad->focus_data = ad->ed_pw1;
1039                                                 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
1040                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1041                                                 return;
1042                                         }
1043
1044                                         sim_sec_data.lock_type = TAPI_SIM_LOCK_SC;//TAPI_SIM_PTYPE_PIN1;
1045                                         sim_sec_data.pw = (unsigned char *)entry_str;
1046                                         sim_sec_data.pw_len = safeStrLen(entry_str);
1047
1048                                         tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
1049                                         setting_password_main_clear_1line_password(ad);
1050
1051                                         if (TAPI_API_SUCCESS != tapi_ret) {
1052                                                 ad->focus_data = ad->ed_pw1;
1053                                                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_enable_sim_facility err=%d ***%s",
1054                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1055                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1056                                         } else {
1057                                                 /*  Success. Send Message to Caller for Modify Pin Lock slider status */
1058                                                 SETTING_TRACE_DEBUG("*** [SUCCESS] tel_enable_sim_facility err=%d ***", tapi_ret);
1059                                         }
1060                                 } else {
1061                                         setting_password_main_clear_1line_password(ad);
1062                                 }
1063                         }
1064                         return;
1065                 case SETTING_PW_TYPE_PIN_LOCK_OFF:
1066                         {
1067                                 SETTING_TRACE("case SETTING_PW_TYPE_PIN_LOCK_OFF");
1068
1069                                 ret = setting_password_main_check_1line_password(ad);
1070
1071                                 if (ret == SETTING_RETURN_SUCCESS) {
1072                                         TelSimFacilityPw_t sim_sec_data = { 0, };
1073                                         int tapi_ret = TAPI_API_SUCCESS;
1074                                         const char *entry_str;
1075
1076                                         entry_str = ad->ed_pw1->sub_desc;
1077                                         if (isEmptyStr(entry_str)) {
1078                                                 ad->focus_data = ad->ed_pw1;
1079                                                 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
1080                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1081                                                 return;
1082                                         }
1083
1084                                         sim_sec_data.lock_type = TAPI_SIM_LOCK_SC;//TAPI_SIM_PTYPE_PIN1
1085                                         sim_sec_data.pw = (unsigned char *)entry_str;
1086                                         sim_sec_data.pw_len = safeStrLen(entry_str);
1087
1088                                         tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
1089                                         setting_password_main_clear_1line_password(ad);
1090
1091                                         if (TAPI_API_SUCCESS != tapi_ret) {
1092                                                 ad->focus_data = ad->ed_pw1;
1093                                                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_disable_sim_facility err=%d ***%s",
1094                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1095                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1096                                         } else {
1097                                                 /*  Success. Send Message to Caller for Modify Pin Lock slider status                                           */
1098                                         }
1099                                 } else {
1100                                         setting_password_main_clear_1line_password(ad);
1101                                 }
1102                         }
1103                         return;
1104                 case SETTING_PW_TYPE_PIN1_BLOCKED:
1105                         {
1106                                 /*  PIN1 Status is "Blocked": User should input puk code and new pin1 code. */
1107                                 /*  If puk code is correct and success to modify pin1 code, display pin1 code change popup */
1108                                 /*  But, if this menu is "Pin Lock", pinlock status will not be changed. */
1109                                 SETTING_TRACE("case SETTING_PW_TYPE_PIN1_BLOCKED");
1110                                 ret = setting_password_main_check_3line_password(ad);
1111
1112                                 if (ret == SETTING_RETURN_SUCCESS) {
1113                                         TelSimSecPw_t puk1_data = { 0, };
1114                                         TelSimSecPw_t pin1_data = { 0, };
1115                                         int tapi_ret = TAPI_API_SUCCESS;
1116                                         const char *puk;
1117                                         const char *new_pin1;
1118
1119                                         puk = ad->ed_pw1->sub_desc;
1120                                         new_pin1 = ad->ed_pw2->sub_desc;
1121                                         if (isEmptyStr(puk)) {
1122                                                 ad->focus_data = ad->ed_pw1;
1123                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1124                                                 return;
1125                                         }
1126
1127                                         if (isEmptyStr(new_pin1)) {
1128                                                 ad->focus_data = ad->ed_pw2;
1129                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1130                                                 return;
1131                                         }
1132
1133                                         puk1_data.type = TAPI_SIM_PTYPE_PUK1;
1134                                         puk1_data.pw = (unsigned char *)puk;
1135                                         puk1_data.pw_len = safeStrLen(puk);
1136
1137                                         pin1_data.type = TAPI_SIM_PTYPE_PIN1;
1138                                         pin1_data.pw = (unsigned char *)new_pin1;
1139                                         pin1_data.pw_len = safeStrLen(new_pin1);
1140
1141                                         tapi_ret = tel_verify_sim_puks(ad->handle, &puk1_data, &pin1_data, setting_sim_verify_puks_cb, ad);
1142                                         setting_password_main_clear_3line_password(ad);
1143
1144                                         if (TAPI_API_SUCCESS != tapi_ret) {
1145                                                 ad->focus_data = ad->ed_pw1;
1146                                                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_verify_sim_puks err=%d ***%s",
1147                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1148                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1149                                         } else {
1150                                                 /*  Success. Send Message to Caller for Modify Pin Lock slider status */
1151
1152                                         }
1153                                 } else {
1154                                         setting_password_main_clear_3line_password(ad);
1155                                 }
1156                         }
1157                         return;
1158                 case SETTING_PW_TYPE_PIN2_BLOCKED:
1159                         {
1160                                 SETTING_TRACE("case SETTING_PW_TYPE_PIN2_BLOCKED");
1161                                 ret = setting_password_main_check_3line_password(ad);
1162
1163                                 if (ret == SETTING_RETURN_SUCCESS) {
1164                                         TelSimSecPw_t puk2_data = { 0, };
1165                                         TelSimSecPw_t pin2_data = { 0, };
1166                                         int tapi_ret = TAPI_API_SUCCESS;
1167                                         const char *puk;
1168                                         const char *new_pin2;
1169
1170                                         puk = ad->ed_pw1->sub_desc;
1171                                         new_pin2 = ad->ed_pw2->sub_desc;
1172                                         if (isEmptyStr(puk)) {
1173                                                 ad->focus_data = ad->ed_pw1;
1174                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1175                                                 return;
1176                                         }
1177
1178                                         if (isEmptyStr(new_pin2)) {
1179                                                 ad->focus_data = ad->ed_pw2;
1180                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1181                                                 return;
1182                                         }
1183
1184                                         puk2_data.type = TAPI_SIM_PTYPE_PUK2;
1185                                         puk2_data.pw = (unsigned char *)puk;
1186                                         puk2_data.pw_len = safeStrLen(puk);
1187
1188                                         pin2_data.type = TAPI_SIM_PTYPE_PIN2;
1189                                         pin2_data.pw = (unsigned char *)new_pin2;
1190                                         pin2_data.pw_len = safeStrLen(new_pin2);
1191
1192                                         tapi_ret = tel_verify_sim_puks(ad->handle, &puk2_data, &pin2_data, setting_sim_verify_puks_cb, ad);
1193                                         setting_password_main_clear_3line_password(ad);
1194
1195                                         if (TAPI_API_SUCCESS != tapi_ret) {
1196                                                 ad->focus_data = ad->ed_pw1;
1197                                                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_verify_sim_puks err=%d ***%s",
1198                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1199                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1200                                         } else {
1201                                                 /*  Success. Send Message to Caller for Modify Pin Lock slider status */
1202
1203                                         }
1204                                 } else {
1205                                         setting_password_main_clear_3line_password(ad);
1206                                 }
1207                         }
1208                         return;
1209                 case SETTING_PW_TYPE_CHANGE_PIN1:
1210                         {
1211                                 SETTING_TRACE("case SETTING_PW_TYPE_CHANGE_PIN1");
1212
1213                                 ret = setting_password_main_check_3line_password(ad);
1214                                 if (ret == SETTING_RETURN_SUCCESS) {
1215                                         const char *old_pw;
1216                                         const char *new_pw;
1217                                         TelSimSecPw_t sim_old_sec_data = { 0, };
1218                                         TelSimSecPw_t sim_new_sec_data = { 0, };
1219                                         int tapi_ret = TAPI_API_SUCCESS;
1220
1221                                         old_pw = ad->ed_pw1->sub_desc;
1222                                         new_pw = ad->ed_pw2->sub_desc;
1223                                         if (isEmptyStr(old_pw)) {
1224                                                 ad->focus_data = ad->ed_pw1;
1225                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1226                                                 return;
1227                                         }
1228
1229                                         if (isEmptyStr(new_pw)) {
1230                                                 ad->focus_data = ad->ed_pw2;
1231                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1232                                                 return;
1233                                         }
1234
1235                                         sim_old_sec_data.type = TAPI_SIM_PTYPE_PIN1;
1236                                         sim_new_sec_data.type = TAPI_SIM_PTYPE_PIN1;
1237                                         sim_old_sec_data.pw = (unsigned char *)old_pw;
1238                                         sim_old_sec_data.pw_len = safeStrLen(old_pw);
1239                                         sim_new_sec_data.pw = (unsigned char *)new_pw;
1240                                         sim_new_sec_data.pw_len = safeStrLen(new_pw);
1241
1242                                         tapi_ret = tel_change_sim_pins(ad->handle, &sim_old_sec_data, &sim_new_sec_data, setting_sim_change_pins_cb, ad);
1243                                         setting_password_main_clear_3line_password(ad);
1244
1245                                         if (TAPI_API_SUCCESS != tapi_ret) {
1246                                                 ad->focus_data = ad->ed_pw1;
1247                                                 SETTING_TRACE_DEBUG("%s*** [ERR] TelTapiSimChangePIN err=%d ***%s",
1248                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1249                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1250                                         } else {
1251                                                 /*  Success popup and send message to caller */
1252                                                 /* setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PIN1_CHANGED")); */
1253                                         }
1254                                 } else {
1255                                         setting_password_main_clear_3line_password(ad);
1256                                 }
1257                         }
1258                         return;
1259                 case SETTING_PW_TYPE_CHANGE_PIN2:
1260                         {
1261                                 SETTING_TRACE("case SETTING_PW_TYPE_CHANGE_PIN2");
1262                                 ret = setting_password_main_check_3line_password(ad);
1263                                 if (ret == SETTING_RETURN_SUCCESS) {
1264                                         const char *old_pw;
1265                                         const char *new_pw;
1266                                         TelSimSecPw_t sim_old_sec_data = { 0, };
1267                                         TelSimSecPw_t sim_new_sec_data = { 0, };
1268                                         int tapi_ret = TAPI_API_SUCCESS;
1269
1270                                         old_pw = ad->ed_pw1->sub_desc;
1271                                         new_pw = ad->ed_pw2->sub_desc;
1272                                         if (isEmptyStr(old_pw)) {
1273                                                 ad->focus_data = ad->ed_pw1;
1274                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1275                                                 return;
1276                                         }
1277
1278                                         if (isEmptyStr(new_pw)) {
1279                                                 ad->focus_data = ad->ed_pw2;
1280                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1281                                                 return;
1282                                         }
1283
1284                                         sim_old_sec_data.type = TAPI_SIM_PTYPE_PIN2;
1285                                         sim_new_sec_data.type = TAPI_SIM_PTYPE_PIN2;
1286                                         sim_old_sec_data.pw = (unsigned char *)old_pw;
1287                                         sim_old_sec_data.pw_len = safeStrLen(old_pw);
1288                                         sim_new_sec_data.pw = (unsigned char *)new_pw;
1289                                         sim_new_sec_data.pw_len = safeStrLen(new_pw);
1290
1291                                         tapi_ret = tel_change_sim_pins(ad->handle, &sim_old_sec_data, &sim_new_sec_data, setting_sim_change_pins_cb, ad);
1292                                         setting_password_main_clear_3line_password(ad);
1293
1294                                         if (TAPI_API_SUCCESS != tapi_ret) {
1295                                                 ad->focus_data = ad->ed_pw1;
1296                                                 SETTING_TRACE_DEBUG("%s*** [ERR] TelTapiSimChangePIN err=%d ***%s",
1297                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1298                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1299                                         } else {
1300                                                 /*  Success popup and send message to caller */
1301                                                 /* setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_ST_POP_PIN2_CHANGED")); */
1302                                         }
1303                                 } else {
1304                                         setting_password_main_clear_3line_password(ad);
1305                                 }
1306                         }
1307                         return;
1308                 case SETTING_PW_TYPE_SIM_LOCK_ON:
1309                         {
1310                                 SETTING_TRACE("case SETTING_PW_TYPE_SIM_LOCK_ON");
1311
1312                                 ret = setting_password_main_check_2line_password(ad);
1313
1314                                 if (ret == SETTING_RETURN_SUCCESS) {
1315                                         TelSimFacilityPw_t sim_sec_data = { 0, };
1316                                         int tapi_ret = TAPI_API_SUCCESS;
1317                                         const char *entry_str;
1318                                         entry_str = ad->ed_pw1->sub_desc;
1319                                         if (isEmptyStr(entry_str)) {
1320                                                 ad->focus_data = ad->ed_pw1;
1321                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1322                                                 return;
1323                                         }
1324
1325                                         sim_sec_data.lock_type = TAPI_SIM_LOCK_PS;//TAPI_SIM_PTYPE_SIM
1326                                         sim_sec_data.pw = (unsigned char *)entry_str;
1327                                         sim_sec_data.pw_len = safeStrLen(entry_str);
1328
1329                                         tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
1330                                         setting_password_main_clear_2line_password(ad);
1331
1332                                         SETTING_TRACE("SIM Lock password : %s\n", (char *)(sim_sec_data.pw));
1333                                         if (TAPI_API_SUCCESS != tapi_ret) {
1334                                                 ad->focus_data = ad->ed_pw1;
1335                                                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_enable_sim_facility err=%d ***%s",
1336                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1337                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1338                                         } else {
1339                                                 /*  Success. Send Message to Caller for Modify Pin Lock slider status */
1340
1341                                         }
1342                                 } else {
1343                                         setting_password_main_clear_2line_password(ad);
1344                                 }
1345                         }
1346                         return;
1347                 case SETTING_PW_TYPE_SIM_LOCK_OFF:
1348                         {
1349                                 SETTING_TRACE("case SETTING_PW_TYPE_SIM_LOCK_OFF");
1350
1351                                 ret = setting_password_main_check_1line_password(ad);
1352                                 if (ret == SETTING_RETURN_SUCCESS) {
1353                                         TelSimFacilityPw_t sim_sec_data = { 0, };
1354                                         int tapi_ret = TAPI_API_SUCCESS;
1355                                         const char *entry_str;
1356
1357                                         entry_str = ad->ed_pw1->sub_desc;
1358                                         if (isEmptyStr(entry_str)) {
1359                                                 ad->focus_data = ad->ed_pw1;
1360                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1361                                                 return;
1362                                         }
1363
1364                                         sim_sec_data.lock_type = TAPI_SIM_LOCK_PS;//TAPI_SIM_PTYPE_SIM
1365                                         sim_sec_data.pw = (unsigned char *)entry_str;
1366                                         sim_sec_data.pw_len = safeStrLen(entry_str);
1367
1368                                         tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
1369                                         setting_password_main_clear_1line_password(ad);
1370
1371                                         if (TAPI_API_SUCCESS != tapi_ret) {
1372                                                 ad->focus_data = ad->ed_pw1;
1373                                                 SETTING_TRACE_DEBUG("%s*** [ERR] tel_disable_sim_facility err=%d ***%s",
1374                                                                                 SETTING_FONT_RED, tapi_ret, SETTING_FONT_BLACK);
1375                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1376                                         } else {
1377                                                 /*  Success. Send Message to Caller for Modify Pin Lock slider status */
1378
1379                                         }
1380                                 } else {
1381                                         setting_password_main_clear_1line_password(ad);
1382                                 }
1383                         }
1384                         return;
1385 #if SUPPORT_FDN
1386                 case SETTING_PW_TYPE_FDN_MODE_ON:
1387                         {
1388                                 SETTING_TRACE("case SETTING_PW_TYPE_FDN_MODE_ON");
1389                                 ret = setting_password_main_check_1line_password(ad);
1390
1391                                 if(ret == SETTING_RETURN_SUCCESS)
1392                                 {
1393                                         const char *entry_str;
1394                                         int tapi_ret = TAPI_API_INVALID_INPUT;
1395
1396                                         TelSimFacilityPw_t sim_sec_data = {0,};
1397                                         int ReqId;
1398
1399                                         entry_str = ad->ed_pw1->sub_desc;
1400                                         if(isEmptyStr(entry_str))
1401                                         {
1402                                                 ad->focus_data = ad->ed_pw1;
1403                                                 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
1404                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1405                                                 return;
1406                                         }
1407                                         sim_sec_data.lock_type = TAPI_SIM_LOCK_FD;//TAPI_SIM_PTYPE_PIN2;
1408                                         sim_sec_data.pw_len = safeStrLen(entry_str);
1409                                         sim_sec_data.pw = (unsigned char*)entry_str;
1410
1411                                         tapi_ret = tel_enable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_enable_cb, ad);
1412                                         setting_password_main_clear_1line_password(ad);
1413
1414                                         if(tapi_ret != TAPI_API_SUCCESS)
1415                                         {
1416                                                 ad->focus_data = ad->ed_pw1;
1417                                                 SETTING_TRACE_ERROR("[ERR] Failed to enable FDN. Tapi return %d", tapi_ret);
1418                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1419                                                 return;
1420                                         }
1421
1422                                         /* Success */
1423                                         if (service_create(&svc))
1424                                                 return;
1425
1426                                         service_add_extra_data(svc, "result", ad->view_type_string);
1427                                         ug_send_result(ad->ug, svc);
1428                                         SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
1429                                         service_destroy(svc);
1430                                         //ug_destroy_me(ad->ug);
1431                                 }
1432                                 else
1433                                 {
1434                                         /* check failed */
1435                                         setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), TRUE);
1436                                 }
1437                         }
1438                         break;
1439                 case SETTING_PW_TYPE_FDN_MODE_OFF:
1440                         {
1441                                 SETTING_TRACE("case SETTING_PW_TYPE_FDN_MODE_OFF");
1442                                 ret = setting_password_main_check_1line_password(ad);
1443
1444                                 if(ret == SETTING_RETURN_SUCCESS)
1445                                 {
1446                                         const char *entry_str;
1447                                         int tapi_ret = TAPI_API_INVALID_INPUT;
1448
1449                                         TelSimFacilityPw_t sim_sec_data = {0,};
1450
1451                                         entry_str = ad->ed_pw1->sub_desc;
1452                                         if(isEmptyStr(entry_str))
1453                                         {
1454                                                 ad->focus_data = ad->ed_pw1;
1455                                                 SETTING_TRACE_ERROR("[ERR] elm_entry_entry_get(ad->ed_pw1) return NULL!");
1456                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1457                                                 return;
1458                                         }
1459                                         sim_sec_data.lock_type = TAPI_SIM_LOCK_FD;//TAPI_SIM_PTYPE_PIN2
1460                                         sim_sec_data.pw_len = safeStrLen(entry_str);
1461                                         sim_sec_data.pw = (unsigned char*)entry_str;
1462
1463                                         tapi_ret = tel_disable_sim_facility(ad->handle, &sim_sec_data, setting_sim_facility_disable_cb, ad);
1464                                         setting_password_main_clear_1line_password(ad);
1465
1466                                         if(tapi_ret != TAPI_API_SUCCESS)
1467                                         {
1468                                                 ad->focus_data = ad->ed_pw1;
1469                                                 SETTING_TRACE_ERROR("[ERR] Failed to disable FDN. Tapi return %d", tapi_ret);
1470                                                 setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), FALSE);
1471                                                 return;
1472                                         }
1473
1474                                         /* Success */
1475                                         if (service_create(&svc))
1476                                                 return;
1477
1478                                         service_add_extra_data(svc, "result", ad->view_type_string);
1479                                         ug_send_result(ad->ug, svc);
1480                                         SETTING_TRACE("Send Result : %s\n", ad->view_type_string);
1481
1482                                         service_destroy(svc);
1483                                         //ug_destroy_me(ad->ug);
1484                                 }
1485                                 else
1486                                 {
1487                                         /* check failed */
1488                                         setting_password_ug_create_popup_notitle_nobtn(ad, _("IDS_COM_POP_ERROR"), TRUE);
1489                                 }
1490                         }
1491                         break;
1492 #endif
1493                 default:
1494                         return;
1495         }
1496 }