4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #include <setting-common-data-type.h>
22 #include <setting-common-data-slp-setting.h>
23 #include <setting-common-draw-widget.h>
24 #include <setting-common-view.h>
26 #include <setting-security-sim-settings.h>
27 #include <setting-security-main.h>
28 #include <setting-debug.h>
30 static int setting_security_sim_settings_create(void *cb);
31 static int setting_security_sim_settings_destroy(void *cb);
32 static int setting_security_sim_settings_update(void *cb);
33 static int setting_security_sim_settings_cleanup(void *cb);
35 setting_view setting_view_security_sim_settings = {
36 .create = setting_security_sim_settings_create,
37 .destroy = setting_security_sim_settings_destroy,
38 .update = setting_security_sim_settings_update,
39 .cleanup = setting_security_sim_settings_cleanup,
42 /* ***************************************************
46 ****************************************************/
48 static int setting_security_sim_settings_create(void *cb)
51 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
53 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
55 Evas_Object *scroller;
56 Elm_Object_Item *item = NULL;
58 /* add basic layout */
59 setting_push_layout_navi_bar_genlist(ad->win_main_layout,
61 _("IDS_ST_BODY_SIM_CARD_SETTINGS"),
62 dgettext("sys_string", "IDS_COM_BODY_BACK"), NULL,
63 setting_security_sim_settings_click_softkey_back_cb,
64 NULL, ad, &scroller, ad->navi_bar);
67 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
68 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
70 /* to do : sim settings menu */
73 //if TAPI is responsed in time, ad->sim_status will have invalid value,
74 //or else ad->data_sim_lk will be updated by setting_security_sim_get_facility_cb
75 ad->data_sim_lk = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
76 setting_security_sim_settings_mouse_up_Gendial_list_cb, ad,
79 ad->sim_status,"IDS_ST_BODY_SIM_LOCK", NULL, setting_security_sim_settings_chk_btn_cb);
81 ad->data_sim_lk->userdata = ad;
83 SETTING_TRACE_ERROR("ad->data_sim_lk is null");
84 return SETTING_RETURN_FAIL;
87 //setting_security_main_update_view(ad, "IDS_ST_BODY_SIM_LOCK");
89 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
90 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
93 //if TAPI is responsed in time, ad->sim_status will have invalid value,
94 //or else ad->data_pin_lk will be updated by setting_security_sim_get_facility_cb
95 ad->data_pin_lk = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
96 setting_security_sim_settings_mouse_up_Gendial_list_cb, ad,
99 ad->pin1_status,"IDS_COM_BODY_PIN_LOCK", NULL, setting_security_sim_settings_chk_btn_cb);
101 ad->data_pin_lk->userdata = ad;
104 ad->data_change_pin1 = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
105 setting_security_sim_settings_mouse_up_Gendial_list_cb,ad,
106 SWALLOW_Type_INVALID,
108 0,"IDS_ST_BODY_CHANGE_PIN1", NULL, NULL);
111 setting_disable_genlist_item(ad->data_change_pin1->item);
114 ad->data_change_pin2 = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
115 setting_security_sim_settings_mouse_up_Gendial_list_cb,ad,
116 SWALLOW_Type_INVALID,
118 0,"IDS_ST_BODY_CHANGE_PIN2", NULL, NULL);
120 setting_disable_genlist_item(ad->data_change_pin2->item);
123 //if TAPI is responsed in time, ad->sim_status will have invalid value,
124 //or else ad->data_fdn will be updated by setting_security_sim_get_facility_cb
125 ad->data_fdn = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
126 setting_security_sim_settings_mouse_up_Gendial_list_cb, ad,
127 SWALLOW_Type_1TOGGLE,
129 ad->pin2_status, Keystr_FDN, NULL, setting_security_sim_settings_chk_btn_cb);
131 ad->data_fdn->userdata = ad;
134 setting_view_security_sim_settings.is_create = 1;
136 vconf_notify_key_changed(VCONFKEY_SETAPPL_SIM_LOCK_ATTEMPTS_LEFT_INT,
137 setting_security_main_vconf_change_cb, ad);
139 return SETTING_RETURN_SUCCESS;
143 static int setting_security_sim_settings_destroy(void *cb)
147 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
149 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
151 elm_naviframe_item_pop(ad->navi_bar);
153 vconf_ignore_key_changed(VCONFKEY_SETAPPL_SIM_LOCK_ATTEMPTS_LEFT_INT,
154 setting_security_main_vconf_change_cb);
156 setting_view_security_sim_settings.is_create = 0;
158 return SETTING_RETURN_SUCCESS;
161 static int setting_security_sim_settings_update(void *cb)
165 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
167 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
169 SETTING_TRACE("Update SIM menu");
170 if (ad->data_sim_lk)//it indicates TAPI is not responsed in time
172 ad->data_sim_lk->chk_status = ad->sim_status;
173 elm_check_state_set(ad->data_sim_lk->eo_check, ad->sim_status);
176 SETTING_TRACE("Update PIN menu");
177 if (ad->data_pin_lk)//it indicates TAPI is not responsed in time
179 ad->data_pin_lk->chk_status = ad->pin1_status;
180 elm_check_state_set(ad->data_pin_lk->eo_check, ad->pin1_status);
181 if(ad->data_pin_lk->chk_status == 0)
182 setting_disable_genlist_item(ad->data_change_pin1->item);
184 setting_enable_genlist_item(ad->data_change_pin1->item);
187 if(ad->data_change_pin2)
189 if(ad->pin2_status == 0)
190 setting_disable_genlist_item(ad->data_change_pin2->item);
192 setting_enable_genlist_item(ad->data_change_pin2->item);
194 return SETTING_RETURN_SUCCESS;
197 static int setting_security_sim_settings_cleanup(void *cb)
201 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
203 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
204 return setting_security_sim_settings_destroy(ad);
207 /* ***************************************************
211 ****************************************************/
213 static void get_pin_lock_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
217 TelSimPinOperationResult_t sec_rt = result;
218 TelSimLockInfo_t *lock = data;
220 SettingSecurityUG *ad = (SettingSecurityUG *)user_data;
222 int old_state = elm_check_state_get(ad->data_pin_lk->eo_check);
224 SETTING_TRACE("Current status of PIN Lock is ON");
225 ad->pw_type = SETTING_SEC_PW_PIN_LOCK_OFF;
227 SETTING_TRACE("Current status of PIN Lock is OFF");
228 ad->pw_type = SETTING_SEC_PW_PIN_LOCK_ON;
231 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);
232 if(lock->lock_status == 2) /* PUK */
234 SETTING_TRACE("Current status of PIN Lock is Blocked");
235 ad->pw_type = SETTING_SEC_PW_PIN1_BLOCKED;
237 else if(lock->lock_status == 5) /* Blocked */
239 setting_create_simple_popup(NULL, ad->win_get,
240 NULL, _("PUK is blocked. Can't use PIN Lock"));
244 setting_security_create_password_sg(ad);
247 void _draw_pin_onoff_status(void *data, Evas_Object *check)
249 SETTING_TRACE("PIN Lock");
251 ret_if(data == NULL);
253 SettingSecurityUG *ad = (SettingSecurityUG *) data;
258 ad->sel_item = 0; /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
260 ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
262 ret = _handle_sim_exception(ad, value);
263 if(ret == SETTING_RETURN_FAIL)
266 /* check sim status */
267 int tapi_ret = TAPI_API_INVALID_INPUT;
268 TelSimCardType_t sim_card = TAPI_SIM_CARD_TYPE_UNKNOWN;
270 tapi_ret = tel_get_sim_type(ad->handle, &sim_card);
271 SETTING_TRACE("SIM Type is %d", (int)sim_card);
272 if (sim_card == (TelSimCardType_t) TAPI_SIM_CARD_TYPE_UNKNOWN) {
274 ("%s*** [ERR] tel_get_sim_type. sim_card=%d ***%s",
275 SETTING_FONT_RED, sim_card, SETTING_FONT_BLACK);
276 setting_create_simple_popup(NULL, ad->win_get,
277 NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
281 if(tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_SC, get_pin_lock_info_cb, ad) != 0)
283 SETTING_TRACE_ERROR("failed to call tel_get_sim_lock_info()");
287 static void get_sim_lock_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
291 TelSimPinOperationResult_t sec_rt = result;
292 TelSimLockInfo_t *lock = data;
294 SettingSecurityUG *ad = (SettingSecurityUG *)user_data;
296 int old_state = elm_check_state_get(ad->data_sim_lk->eo_check);
298 SETTING_TRACE("Current status of SIM Lock is ON");
299 ad->pw_type = SETTING_SEC_PW_SIM_LOCK_OFF;
301 SETTING_TRACE("Current status of SIM Lock is OFF");
302 ad->pw_type = SETTING_SEC_PW_SIM_LOCK_ON;
305 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);
307 if(lock->lock_status == 5) /* Blocked */
309 setting_create_simple_popup(NULL, ad->win_get,
310 NULL, _("SIM is blocked. Can't use SIM Lock"));
314 setting_security_create_password_sg(ad);
317 void _draw_sim_onoff_status(void *data, Evas_Object *check)
319 ret_if(data == NULL);
321 SettingSecurityUG *ad = (SettingSecurityUG *) data;
326 ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
327 ret = _handle_sim_exception(ad, value);
328 if(ret == SETTING_RETURN_FAIL)
331 if(tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_PS, get_sim_lock_info_cb, ad) != 0)
333 SETTING_TRACE_ERROR("failed to call tel_get_sim_lock_info()");
337 static void get_change_pin_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
341 TelSimPinOperationResult_t sec_rt = result;
342 TelSimLockInfo_t *lock = data;
344 SettingSecurityUG *ad = (SettingSecurityUG *)user_data;
346 ad->pw_type = SETTING_SEC_PW_CHANGE_PIN1;
348 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);
349 if(lock->lock_status == 2) /* PUK */
351 SETTING_TRACE("Current status of PIN Lock is Blocked");
352 ad->pw_type = SETTING_SEC_PW_PIN1_BLOCKED;
354 else if(lock->lock_status == 5) /* Blocked */
356 setting_create_simple_popup(NULL, ad->win_get,
357 NULL, _("PUK is blocked. Can't use PIN Lock"));
361 setting_security_create_password_sg(ad);
364 void _mouse_up_change_pin(void *data, int sel_item)
366 ret_if(data == NULL);
368 SettingSecurityUG *ad = (SettingSecurityUG *) data;
370 ad->sel_item = sel_item; /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
375 ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
378 case VCONFKEY_TELEPHONY_SIM_INSERTED:
380 case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
381 setting_create_simple_popup(NULL, ad->win_get,
382 NULL, _("IDS_ST_SECURITY_BODY_NOIMSI"));
384 ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
385 SETTING_FONT_RED, value, SETTING_FONT_BLACK);
388 case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
389 case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
390 setting_create_simple_popup(NULL, ad->win_get,
391 NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
393 ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
394 SETTING_FONT_RED, value, SETTING_FONT_BLACK);
401 /* check sim status */
402 TapiResult_t tapi_ret = TAPI_API_INVALID_INPUT;
403 TelSimCardType_t sim_card = TAPI_SIM_CARD_TYPE_UNKNOWN;
405 tapi_ret = tel_get_sim_type(ad->handle, &sim_card);
407 if (sim_card == (TelSimCardType_t) SETTING_TAPI_UNKNOWN_SIM_TYPE) {
409 ("%s*** [ERR] tel_get_sim_type. sim_card=%d ***%s",
410 SETTING_FONT_RED, sim_card, SETTING_FONT_BLACK);
411 setting_create_simple_popup(NULL, ad->win_get,
412 NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
415 if(sel_item == 1 && (ad->pin1_status == TAPI_SIM_FACILITY_ENABLED))
417 if(tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_SC, get_change_pin_info_cb, ad) != 0)
419 SETTING_TRACE_ERROR("failed to call tel_get_sim_lock_info()");
422 else if(sel_item == 3 && (ad->pin2_status == TAPI_SIM_FACILITY_ENABLED))
424 ad->pw_type = SETTING_SEC_PW_CHANGE_PIN2;
425 setting_security_create_password_sg(ad);
430 setting_security_sim_settings_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
435 setting_retm_if(data == NULL, "Data parameter is NULL");
437 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
438 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
439 elm_genlist_item_selected_set(item, 0);
440 Setting_GenGroupItem_Data *list_item =
441 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
444 SettingSecurityUG *ad = (SettingSecurityUG *) data;
446 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
448 if (!safeStrCmp("IDS_ST_BODY_SIM_LOCK", list_item->keyStr)) {
449 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
450 _draw_sim_onoff_status(ad, list_item->eo_check);
452 }else if (!safeStrCmp("IDS_COM_BODY_PIN_LOCK", list_item->keyStr)) {
453 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
454 _draw_pin_onoff_status(ad, list_item->eo_check);
456 } else if (!safeStrCmp("IDS_ST_BODY_CHANGE_PIN1", list_item->keyStr)) {
457 _mouse_up_change_pin(ad, 1); /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
458 } else if (!safeStrCmp("IDS_ST_BODY_CHANGE_PIN2", list_item->keyStr)) {
459 _mouse_up_change_pin(ad, 3); /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
464 setting_security_sim_settings_chk_btn_cb(void *data, Evas_Object *obj,
469 retm_if(data == NULL, "[Setting > Reset] Data parameter is NULL");
470 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
471 SettingSecurityUG *ad = list_item->userdata;
473 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
475 if (!safeStrCmp("IDS_ST_BODY_SIM_LOCK", list_item->keyStr)) {
476 //Rollback state of toggle.
477 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
478 list_item->chk_status = !list_item->chk_status;
479 elm_check_state_set(obj, list_item->chk_status);
480 _draw_sim_onoff_status(ad, obj);
482 }else if (!safeStrCmp("IDS_COM_BODY_PIN_LOCK", list_item->keyStr)) {
483 //Rollback state of toggle.
484 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
485 list_item->chk_status = !list_item->chk_status;
486 elm_check_state_set(obj, list_item->chk_status);
487 _draw_pin_onoff_status(ad, obj);
491 else if (!safeStrCmp(Keystr_FDN, list_item->keyStr)){
492 //Rollback state of toggle.
493 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
494 list_item->chk_status = !list_item->chk_status;
495 elm_check_state_set(obj, list_item->chk_status);
497 _draw_fdn_onoff_status(ad, obj);
504 setting_security_sim_settings_click_softkey_back_cb(void *data, Evas_Object *obj,
509 retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
511 SettingSecurityUG *ad = (SettingSecurityUG *) data;
513 setting_view_change(&setting_view_security_sim_settings, &setting_view_security_main, ad);