3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 * http://floralicense.org/license/
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.
17 #include <setting-common-data-type.h>
18 #include <setting-common-data-slp-setting.h>
19 #include <setting-common-draw-widget.h>
20 #include <setting-common-view.h>
22 #include <setting-security-sim-settings.h>
23 #include <setting-security-main.h>
24 #include <setting-debug.h>
26 static int setting_security_sim_settings_create(void *cb);
27 static int setting_security_sim_settings_destroy(void *cb);
28 static int setting_security_sim_settings_update(void *cb);
29 static int setting_security_sim_settings_cleanup(void *cb);
31 setting_view setting_view_security_sim_settings = {
32 .create = setting_security_sim_settings_create,
33 .destroy = setting_security_sim_settings_destroy,
34 .update = setting_security_sim_settings_update,
35 .cleanup = setting_security_sim_settings_cleanup,
38 /* ***************************************************
42 ****************************************************/
44 static int setting_security_sim_settings_create(void *cb)
47 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
49 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
51 Evas_Object *scroller;
52 Elm_Object_Item *item = NULL;
54 /* add basic layout */
55 setting_push_layout_navi_bar_genlist(ad->win_main_layout,
58 dgettext("sys_string", "IDS_COM_BODY_BACK"), NULL,
59 setting_security_sim_settings_click_softkey_back_cb,
60 NULL, ad, &scroller, ad->navi_bar);
63 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
64 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
66 /* to do : sim settings menu */
69 //if TAPI is responsed in time, ad->sim_status will have invalid value,
70 //or else ad->data_sim_lk will be updated by setting_security_sim_get_facility_cb
71 ad->data_sim_lk = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
72 setting_security_sim_settings_mouse_up_Gendial_list_cb, ad,
75 ad->sim_status,"IDS_ST_BODY_SIM_LOCK", NULL, setting_security_sim_settings_chk_btn_cb);
77 ad->data_sim_lk->userdata = ad;
79 SETTING_TRACE_ERROR("ad->data_sim_lk is null");
80 return SETTING_RETURN_FAIL;
83 //setting_security_main_update_view(ad, "IDS_ST_BODY_SIM_LOCK");
85 item = elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
86 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
89 //if TAPI is responsed in time, ad->sim_status will have invalid value,
90 //or else ad->data_pin_lk will be updated by setting_security_sim_get_facility_cb
91 ad->data_pin_lk = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
92 setting_security_sim_settings_mouse_up_Gendial_list_cb, ad,
95 ad->pin1_status,"IDS_COM_BODY_PIN_LOCK", NULL, setting_security_sim_settings_chk_btn_cb);
97 ad->data_pin_lk->userdata = ad;
100 ad->data_change_pin1 = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
101 setting_security_sim_settings_mouse_up_Gendial_list_cb,ad,
102 SWALLOW_Type_INVALID,
104 0,"IDS_ST_BODY_CHANGE_PIN1", NULL, NULL);
107 setting_disable_genlist_item(ad->data_change_pin1->item);
110 ad->data_change_pin2 = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
111 setting_security_sim_settings_mouse_up_Gendial_list_cb,ad,
112 SWALLOW_Type_INVALID,
114 0,"IDS_ST_BODY_CHANGE_PIN2", NULL, NULL);
118 //if TAPI is responsed in time, ad->sim_status will have invalid value,
119 //or else ad->data_fdn will be updated by setting_security_sim_get_facility_cb
120 ad->data_fdn = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
121 setting_security_sim_settings_mouse_up_Gendial_list_cb, ad,
122 SWALLOW_Type_1TOGGLE,
124 ad->pin2_status, Keystr_FDN, NULL, setting_security_sim_settings_chk_btn_cb);
126 ad->data_fdn->userdata = ad;
129 setting_view_security_sim_settings.is_create = 1;
131 return SETTING_RETURN_SUCCESS;
135 static int setting_security_sim_settings_destroy(void *cb)
139 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
141 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
143 elm_naviframe_item_pop(ad->navi_bar);
145 setting_view_security_sim_settings.is_create = 0;
147 return SETTING_RETURN_SUCCESS;
150 static int setting_security_sim_settings_update(void *cb)
154 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
156 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
158 SETTING_TRACE("Update SIM menu");
159 if (ad->data_sim_lk)//it indicates TAPI is not responsed in time
161 ad->data_sim_lk->chk_status = ad->sim_status;
162 elm_check_state_set(ad->data_sim_lk->eo_check, ad->sim_status);
165 SETTING_TRACE("Update PIN menu");
166 if (ad->data_pin_lk)//it indicates TAPI is not responsed in time
168 ad->data_pin_lk->chk_status = ad->pin1_status;
169 elm_check_state_set(ad->data_pin_lk->eo_check, ad->pin1_status);
170 if(ad->data_pin_lk->chk_status == 0)
171 setting_disable_genlist_item(ad->data_change_pin1->item);
173 setting_enable_genlist_item(ad->data_change_pin1->item);
176 return SETTING_RETURN_SUCCESS;
179 static int setting_security_sim_settings_cleanup(void *cb)
183 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
185 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
186 return setting_security_sim_settings_destroy(ad);
189 /* ***************************************************
193 ****************************************************/
195 static void get_pin_lock_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
199 TelSimPinOperationResult_t sec_rt = result;
200 TelSimLockInfo_t *lock = data;
202 SettingSecurityUG *ad = (SettingSecurityUG *)user_data;
207 evas_object_del(ad->sim_popup);
208 ad->sim_popup = NULL;
211 int old_state = elm_check_state_get(ad->data_pin_lk->eo_check);
213 SETTING_TRACE("Current status of PIN Lock is ON");
214 ad->pw_type = SETTING_SEC_PW_PIN_LOCK_OFF;
216 SETTING_TRACE("Current status of PIN Lock is OFF");
217 ad->pw_type = SETTING_SEC_PW_PIN_LOCK_ON;
220 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);
221 if(lock->lock_status == 2) /* PUK */
223 SETTING_TRACE("Current status of PIN Lock is Blocked");
224 ad->pw_type = SETTING_SEC_PW_PIN1_BLOCKED;
226 else if(lock->lock_status == 5) /* Blocked */
228 setting_create_simple_popup(NULL, ad->win_get,
229 NULL, _("PUK is blocked. Can't use PIN Lock"));
233 setting_security_create_password_sg(ad);
236 void _draw_pin_onoff_status(void *data, Evas_Object *check)
238 SETTING_TRACE("PIN Lock");
240 ret_if(data == NULL);
242 SettingSecurityUG *ad = (SettingSecurityUG *) data;
247 ad->sel_item = 0; /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
249 ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
251 ret = _handle_sim_exception(ad, value);
252 if(ret == SETTING_RETURN_FAIL)
255 /* check sim status */
256 int tapi_ret = TAPI_API_INVALID_INPUT;
257 TelSimCardType_t sim_card = TAPI_SIM_CARD_TYPE_UNKNOWN;
259 tapi_ret = tel_get_sim_type(ad->handle, &sim_card);
260 SETTING_TRACE("SIM Type is %d", (int)sim_card);
261 if (sim_card == (TelSimCardType_t) TAPI_SIM_CARD_TYPE_UNKNOWN) {
263 ("%s*** [ERR] tel_get_sim_type. sim_card=%d ***%s",
264 SETTING_FONT_RED, sim_card, SETTING_FONT_BLACK);
265 setting_create_simple_popup(NULL, ad->win_get,
266 NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
273 evas_object_del(ad->sim_popup);
274 ad->sim_popup = NULL;
276 ad->sim_popup = setting_create_popup_without_btn(ad, ad->win_get,
277 NULL, _("Waiting response of SIM ..."),
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)
290 ret_if(data == NULL || user_data == NULL);
292 TelSimPinOperationResult_t sec_rt = result;
293 TelSimLockInfo_t *lock = data;
295 SettingSecurityUG *ad = (SettingSecurityUG *)user_data;
300 evas_object_del(ad->sim_popup);
301 ad->sim_popup = NULL;
304 int old_state = elm_check_state_get(ad->data_sim_lk->eo_check);
306 SETTING_TRACE("Current status of SIM Lock is ON");
307 ad->pw_type = SETTING_SEC_PW_SIM_LOCK_OFF;
309 SETTING_TRACE("Current status of SIM Lock is OFF");
310 ad->pw_type = SETTING_SEC_PW_SIM_LOCK_ON;
313 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);
315 if(lock->lock_status == 5) /* Blocked */
317 setting_create_simple_popup(NULL, ad->win_get,
318 NULL, _("SIM is blocked. Can't use SIM Lock"));
322 setting_security_create_password_sg(ad);
325 void _draw_sim_onoff_status(void *data, Evas_Object *check)
327 ret_if(data == NULL);
329 SettingSecurityUG *ad = (SettingSecurityUG *) data;
334 ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
335 ret = _handle_sim_exception(ad, value);
336 if(ret == SETTING_RETURN_FAIL)
342 evas_object_del(ad->sim_popup);
343 ad->sim_popup = NULL;
345 ad->sim_popup = setting_create_popup_without_btn(ad, ad->win_get,
346 NULL, _("Waiting response of SIM ..."),
350 if(tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_PS, get_sim_lock_info_cb, ad) != 0)
352 SETTING_TRACE_ERROR("failed to call tel_get_sim_lock_info()");
356 static void get_change_pin_info_cb(TapiHandle *handle, int result, void *data, void *user_data)
359 ret_if(data == NULL || user_data == NULL);
361 TelSimPinOperationResult_t sec_rt = result;
362 TelSimLockInfo_t *lock = data;
364 SettingSecurityUG *ad = (SettingSecurityUG *)user_data;
366 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);
367 if(lock->lock_type == TAPI_SIM_LOCK_SC && lock->lock_status == 2) /* PUK required */
369 SETTING_TRACE("Current status of PIN Lock is Blocked");
370 ad->pw_type = SETTING_SEC_PW_PIN1_BLOCKED;
372 else if(lock->lock_type == TAPI_SIM_LOCK_SC && lock->lock_status == 1) /* PIN required */
374 ad->pw_type = SETTING_SEC_PW_CHANGE_PIN1;
376 else if(lock->lock_type == TAPI_SIM_LOCK_FD && lock->lock_status == 4) /* PUK2 required */
378 SETTING_TRACE("Current status of Change PIN2 is Blocked");
379 ad->pw_type = SETTING_SEC_PW_PIN2_BLOCKED;
381 else if(lock->lock_type == TAPI_SIM_LOCK_FD && lock->lock_status == 3) /* PIN2 required */
383 ad->pw_type = SETTING_SEC_PW_CHANGE_PIN2;
385 else if(lock->lock_status == 5) /* Blocked */
387 setting_create_simple_popup(NULL, ad->win_get,
388 NULL, _("Permanent block SIM"));
392 setting_security_create_password_sg(ad);
395 void _mouse_up_change_pin(void *data, int sel_item)
397 ret_if(data == NULL);
399 SettingSecurityUG *ad = (SettingSecurityUG *) data;
401 ad->sel_item = sel_item; /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
406 ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
409 case VCONFKEY_TELEPHONY_SIM_INSERTED:
411 case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
412 setting_create_simple_popup(NULL, ad->win_get,
413 NULL, _("IDS_ST_SECURITY_BODY_NOIMSI"));
415 ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
416 SETTING_FONT_RED, value, SETTING_FONT_BLACK);
419 case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
420 case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
421 setting_create_simple_popup(NULL, ad->win_get,
422 NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
424 ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
425 SETTING_FONT_RED, value, SETTING_FONT_BLACK);
432 /* check sim status */
433 TapiResult_t tapi_ret = TAPI_API_INVALID_INPUT;
434 TelSimCardType_t sim_card = TAPI_SIM_CARD_TYPE_UNKNOWN;
436 tapi_ret = tel_get_sim_type(ad->handle, &sim_card);
438 if (sim_card == (TelSimCardType_t) SETTING_TAPI_UNKNOWN_SIM_TYPE) {
440 ("%s*** [ERR] tel_get_sim_type. sim_card=%d ***%s",
441 SETTING_FONT_RED, sim_card, SETTING_FONT_BLACK);
442 setting_create_simple_popup(NULL, ad->win_get,
443 NULL, _("IDS_COM_BODY_INVALID_SIM_CARD"));
446 if(sel_item == 1 && (ad->pin1_status == TAPI_SIM_FACILITY_ENABLED))
448 if(tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_SC, get_change_pin_info_cb, ad) != 0)
450 SETTING_TRACE_ERROR("failed to call tel_get_sim_lock_info()");
453 else if(sel_item == 3)
455 if(tel_get_sim_lock_info(ad->handle, TAPI_SIM_LOCK_FD, get_change_pin_info_cb, ad) != 0)
457 SETTING_TRACE_ERROR("failed to call tel_get_sim_lock_info()");
459 //ad->pw_type = SETTING_SEC_PW_CHANGE_PIN2;
460 //setting_security_create_password_sg(ad);
465 setting_security_sim_settings_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
470 setting_retm_if(data == NULL, "Data parameter is NULL");
472 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
473 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
474 elm_genlist_item_selected_set(item, 0);
475 Setting_GenGroupItem_Data *list_item =
476 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
479 SettingSecurityUG *ad = (SettingSecurityUG *) data;
481 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
483 if (!safeStrCmp("IDS_ST_BODY_SIM_LOCK", list_item->keyStr)) {
484 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
485 _draw_sim_onoff_status(ad, list_item->eo_check);
487 }else if (!safeStrCmp("IDS_COM_BODY_PIN_LOCK", list_item->keyStr)) {
488 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
489 _draw_pin_onoff_status(ad, list_item->eo_check);
491 } else if (!safeStrCmp("IDS_ST_BODY_CHANGE_PIN1", list_item->keyStr)) {
492 _mouse_up_change_pin(ad, 1); /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
493 } else if (!safeStrCmp("IDS_ST_BODY_CHANGE_PIN2", list_item->keyStr)) {
494 _mouse_up_change_pin(ad, 3); /* 0:click pin lock, 1:change pin1 code, 2:fdn, 3: change pin2 code */
499 setting_security_sim_settings_chk_btn_cb(void *data, Evas_Object *obj,
504 retm_if(data == NULL, "[Setting > Reset] Data parameter is NULL");
505 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
506 SettingSecurityUG *ad = list_item->userdata;
508 list_item->chk_status = elm_check_state_get(obj); /* for genlist update status */
510 if (!safeStrCmp("IDS_ST_BODY_SIM_LOCK", list_item->keyStr)) {
511 //Rollback state of toggle.
512 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
513 list_item->chk_status = !list_item->chk_status;
514 elm_check_state_set(obj, list_item->chk_status);
515 _draw_sim_onoff_status(ad, obj);
517 }else if (!safeStrCmp("IDS_COM_BODY_PIN_LOCK", list_item->keyStr)) {
518 //Rollback state of toggle.
519 //it invokes async TAPIs to enable/disable, so don't change the status at first to avoid rollback
520 list_item->chk_status = !list_item->chk_status;
521 elm_check_state_set(obj, list_item->chk_status);
522 _draw_pin_onoff_status(ad, obj);
529 setting_security_sim_settings_click_softkey_back_cb(void *data, Evas_Object *obj,
534 retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
536 SettingSecurityUG *ad = (SettingSecurityUG *) data;
538 setting_view_change(&setting_view_security_sim_settings, &setting_view_security_main, ad);