4 * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd All Rights Reserved
6 * This file is part of org.tizen.setting
7 * Written by Hyejin Kim <hyejin0906.kim@samsung.com>
9 * PROPRIETARY/CONFIDENTIAL
11 * This software is the confidential and proprietary information of
12 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
13 * disclose such Confidential Information and shall use it only in
14 * accordance with the terms of the license agreement you entered
15 * into with SAMSUNG ELECTRONICS.
17 * SAMSUNG make no representations or warranties about the suitability
18 * of the software, either express or implied, including but not limited
19 * to the implied warranties of merchantability, fitness for a particular
20 * purpose, or non-infringement. SAMSUNG shall not be liable for any
21 * damages suffered by licensee as a result of using, modifying or
22 * distributing this software or its derivatives.
25 #include <setting-security.h>
26 #define Max_Passwd_View_Type_Len 64
28 #define UG_MODULE_API __attribute__ ((visibility("default")))
31 static struct _security_item security_its[] = {
32 { SETTING_SEC_PW_POWER_ON, "SETTING_PW_TYPE_POWER_ON_LOCK" },
33 { SETTING_SEC_PW_PHONE_LOCK, "SETTING_PW_TYPE_PHONE_LOCK" },
34 { SETTING_SEC_PW_PHONE_LOCK_ON, "SETTING_PW_TYPE_PHONE_LOCK_ON" },
35 { SETTING_SEC_PW_SIMPLE_PASSWD, "SETTING_PW_TYPE_SIMPLE_PASSWORD" },
36 { SETTING_SEC_PW_CHANGE_PASSWD, "SETTING_PW_TYPE_CHANGE_PASSWORD" },
37 { SETTING_SEC_PW_SIM_LOCK_ON, "SETTING_PW_TYPE_SIM_LOCK_ON" },
38 { SETTING_SEC_PW_SIM_LOCK_OFF, "SETTING_PW_TYPE_SIM_LOCK_OFF" },
39 { SETTING_SEC_PW_PIN_LOCK_ON, "SETTING_PW_TYPE_PIN_LOCK_ON" },
40 { SETTING_SEC_PW_PIN_LOCK_OFF, "SETTING_PW_TYPE_PIN_LOCK_OFF" },
41 { SETTING_SEC_PW_CHANGE_PIN1, "SETTING_PW_TYPE_CHANGE_PIN1" },
42 { SETTING_SEC_PW_FDN_MODE_ON, "SETTING_PW_TYPE_FDN_MODE_ON" },
43 { SETTING_SEC_PW_FDN_MODE_OFF, "SETTING_PW_TYPE_FDN_MODE_OFF" },
44 { SETTING_SEC_PW_CHANGE_PIN2, "SETTING_PW_TYPE_CHANGE_PIN2" },
45 { SETTING_SEC_PW_PIN1_BLOCKED, "SETTING_PW_TYPE_PIN1_BLOCKED" },
46 { SETTING_SEC_PW_PIN2_BLOCKED, "SETTING_PW_TYPE_PIN2_BLOCKED" },
47 { SETTING_SEC_PW_MAX, NULL }
50 static void setting_security_ug_cb_resize(void *data, Evas *e,
51 Evas_Object *obj, void *event_info)
55 SettingSecurityUG *ad = (SettingSecurityUG *) data; /* ad is point to data */
56 setting_view_update(&setting_view_security_main, ad);
59 static void *setting_security_ug_on_create(struct ui_gadget *ug,
60 enum ug_mode mode, bundle *data,
63 setting_retvm_if((!ug || !priv), NULL, "!ug || !priv");
65 SettingSecurityUG *securityUG = priv;
68 securityUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
69 securityUG->win_get = (Evas_Object *) ug_get_window();
70 evas_object_show(securityUG->win_main_layout);
71 securityUG->evas = evas_object_evas_get(securityUG->win_main_layout);
73 setting_retvm_if(securityUG->win_main_layout == NULL, NULL,
74 "[Setting >> About] cannot get main window ");
76 /* register view node table */
77 setting_view_node_table_intialize();
78 setting_view_node_table_register(&setting_view_security_main, NULL);
80 setting_create_Gendial_itc("dialogue/1text", &(securityUG->itc_1text));
81 setting_create_Gendial_itc("dialogue/2text.3", &(securityUG->itc_2text_2));
82 setting_create_Gendial_itc("dialogue/1text.1icon", &(securityUG->itc_1text_1icon));
84 securityUG->itc_seperator.item_style = "dialogue/separator/21/with_line";
85 securityUG->itc_seperator.func.text_get = NULL;
86 securityUG->itc_seperator.func.content_get = NULL;
87 securityUG->itc_seperator.func.state_get = NULL;
88 securityUG->itc_seperator.func.del = NULL;
90 securityUG->update_view_timer = NULL;
91 /* creating a view. */
92 setting_view_node_set_cur_view(&setting_view_security_main);
93 setting_view_create(&setting_view_security_main, (void *)securityUG);
94 evas_object_event_callback_add(securityUG->win_main_layout,
96 setting_security_ug_cb_resize,
98 return securityUG->ly_main;
101 static void setting_security_ug_on_start(struct ui_gadget *ug, bundle *data,
106 static void setting_security_ug_on_pause(struct ui_gadget *ug, bundle *data,
111 static void setting_security_ug_on_resume(struct ui_gadget *ug, bundle *data,
116 static void setting_security_ug_on_destroy(struct ui_gadget *ug, bundle *data,
119 setting_retm_if((!ug || !priv), "!ug || !priv");
120 SettingSecurityUG *securityUG = priv;
122 evas_object_event_callback_del(securityUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_security_ug_cb_resize); /* fix flash issue for gallery */
125 /* delete the allocated objects. */
126 setting_view_destroy(&setting_view_security_main, securityUG);
127 if (NULL != ug_get_layout(securityUG->ug)) {
128 evas_object_hide((Evas_Object *) ug_get_layout(securityUG->ug));
129 evas_object_del((Evas_Object *) ug_get_layout(securityUG->ug));
133 static void setting_security_ug_on_message(struct ui_gadget *ug, bundle *msg,
134 bundle *data, void *priv)
139 static void setting_security_ug_on_event(struct ui_gadget *ug,
140 enum ug_event event, bundle *data,
144 case UG_EVENT_LOW_MEMORY:
146 case UG_EVENT_LOW_BATTERY:
148 case UG_EVENT_LANG_CHANGE:
150 case UG_EVENT_ROTATE_PORTRAIT:
152 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
154 case UG_EVENT_ROTATE_LANDSCAPE:
156 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
158 case UG_EVENT_REGION_CHANGE:
165 static void setting_security_ug_on_key_event(struct ui_gadget *ug,
166 enum ug_key_event event,
167 bundle *data, void *priv)
171 SettingSecurityUG *ad = (SettingSecurityUG *) priv; /* ad is point to priv */
173 case UG_KEY_EVENT_END:
175 if (elm_naviframe_top_item_get(ad->navi_bar) ==
176 elm_naviframe_bottom_item_get(ad->navi_bar)) {
179 setting_view_cb_at_endKey(ad);
189 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
191 SettingSecurityUG *securityUG = calloc(1, sizeof(SettingSecurityUG));
192 setting_retvm_if(!securityUG, -1,
193 "Create SettingSecurityUG obj failed");
195 ops->create = setting_security_ug_on_create;
196 ops->start = setting_security_ug_on_start;
197 ops->pause = setting_security_ug_on_pause;
198 ops->resume = setting_security_ug_on_resume;
199 ops->destroy = setting_security_ug_on_destroy;
200 ops->message = setting_security_ug_on_message;
201 ops->event = setting_security_ug_on_event;
202 ops->key_event = setting_security_ug_on_key_event;
203 ops->priv = securityUG;
204 ops->opt = UG_OPT_INDICATOR_ENABLE;
209 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
211 struct SettingSecurityUG *securityUG;
212 setting_retm_if(!ops, "ops == NULL");
214 securityUG = ops->priv;
219 /* ***************************************************
223 ***************************************************/
224 static void setting_security_layout_passwd_ug_cb(struct ui_gadget *ug,
225 enum ug_mode mode, void *priv)
230 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
231 Evas_Object *base = ug_get_layout(ug);
236 case UG_MODE_FULLVIEW:
237 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
239 elm_win_resize_object_add(ad->win_get, base);
240 evas_object_show(base);
249 static void setting_security_destroy_password_ug_cb(struct ui_gadget *ug,
252 ret_if(priv == NULL || ug == NULL);
253 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
256 ad->ug_passwd = NULL;
260 gboolean setting_security_create_password_sg(void *data)
263 retv_if(data == NULL, FALSE);
265 SettingSecurityUG *ad = (SettingSecurityUG *) data; /* ad is point to data */
267 /* prevent the ug from being loaded again due to window event queuing */
268 /* added by JTS: CQ H0100135346 */
270 SETTING_TRACE("Password UG is already loaded.");
274 if((ad->pw_type < 0) || (ad->pw_type > SETTING_SEC_PW_MAX))
277 char str[Max_Passwd_View_Type_Len + 1] = { 0, };
278 safeCopyStr(str, security_its[ad->pw_type].pw_type_string, Max_Passwd_View_Type_Len);
280 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
284 cbs->layout_cb = setting_security_layout_passwd_ug_cb;
285 cbs->result_cb = setting_security_result_password_ug_cb;
286 cbs->destroy_cb = setting_security_destroy_password_ug_cb;
287 cbs->priv = (void *)ad;
288 bundle *b = bundle_create();
293 bundle_add(b, "viewtype", str);
295 ad->ug_passwd = ug_create(ad->ug, "setting-password-efl", UG_MODE_FULLVIEW, b, cbs);
296 if (NULL == ad->ug_passwd) { /* error handling */
297 evas_object_show(ad->ly_main);
307 /* ***************************************************
311 ***************************************************/
312 void setting_check_onoff_pin_lock_state(TelSimPinType_t type,
313 Evas_Object *chk_pin_lk)
315 ret_if(chk_pin_lk == NULL);
317 int tapi_ret = TAPI_API_SUCCESS;
318 TelSimPinStatus_t pin1_status = -1;
319 elm_check_state_set(chk_pin_lk, 0); /* default state */
321 tapi_ret = tel_get_sim_security_status(type, &pin1_status);
322 if (tapi_ret != TAPI_API_SUCCESS)
325 SETTING_TRACE("setting_check_onoff_pin_lock_state type: %d, status :%d",
329 switch (pin1_status) {
330 case TAPI_SIM_PIN_STATUS_ENABLED:
333 case TAPI_SIM_PIN_STATUS_DISABLED:
334 case TAPI_SIM_PIN_STATUS_BLOCKED:
335 case TAPI_SIM_PIN_STATUS_PUK_BLOCKED:
336 case TAPI_SIM_PIN_STATUS_UNKNOWN:
342 elm_check_state_set(chk_pin_lk, state); /* default state */
347 setting_security_result_password_ug_cb(struct ui_gadget *ug, bundle *b_result,
351 retm_if(priv == NULL, "Data paremeter is NULL");
353 SettingSecurityUG *ad = (SettingSecurityUG *) priv; /* ad is point to priv */
356 ad->chk_sim_lk = ad->data_sim_lk->eo_check;
358 ad->chk_pin_lk = ad->data_pin_lk->eo_check;
359 if (ad->data_phone_lk)
360 ad->chk_phone_lk = ad->data_phone_lk->eo_check;
361 if (ad->data_simple_pw)
362 ad->chk_simple_pw= ad->data_simple_pw->eo_check;
363 const char *result = bundle_get_val(b_result, "result");
365 /* divided pw view type */
366 SETTING_TRACE("ad->pw_type: %d result :%s", ad->pw_type, result);
367 ret_if(NULL == result);
369 if (0 == safeStrCmp(result, "SETTING_PW_TYPE_PHONE_LOCK"))
370 setting_check_onoff_status(ad->chk_phone_lk, BOOL_SLP_SETTING_POWER_ON_LOCK);
371 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_SIM_LOCK_ON"))
372 setting_check_onoff_pin_lock_state(TAPI_SIM_PTYPE_SIM, ad->chk_sim_lk);
373 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_SIM_LOCK_OFF"))
374 setting_check_onoff_pin_lock_state(TAPI_SIM_PTYPE_SIM, ad->chk_sim_lk);
375 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_PIN_LOCK_ON"))
376 setting_check_onoff_pin_lock_state(TAPI_SIM_PTYPE_PIN1, ad->chk_pin_lk);
377 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_PIN_LOCK_OFF"))
378 setting_check_onoff_pin_lock_state(TAPI_SIM_PTYPE_PIN1, ad->chk_pin_lk);
379 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_SIMPLE_PASSWORD"))
381 setting_check_onoff_status(ad->chk_simple_pw, BOOL_SLP_SETTING_SIMPLE_PASSWORD); /* reset check state */
383 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_CHANGE_PIN1"))
384 setting_check_onoff_pin_lock_state(TAPI_SIM_PTYPE_PIN1, ad->chk_pin_lk);
385 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_PIN1_BLOCKED"))
386 setting_check_onoff_pin_lock_state(TAPI_SIM_PTYPE_PIN1, ad->chk_pin_lk);
387 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_POWER_ON_LOCK"))
390 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_PHONE_LOCK_DISABLE"))
392 if (ad->data_phone_lk)
393 setting_disable_genlist_item(ad->data_phone_lk->item);
395 else if (0 == safeStrCmp(result, "SETTING_PW_TYPE_SIM_LOCK_DISABLE"))
398 setting_disable_genlist_item(ad->data_sim_lk->item);
400 evas_object_show(ad->ly_main);
407 UG_MODULE_API int setting_plugin_reset(bundle *data, void *priv)
411 #if SUPPORT_RUN_SYSTEM_COMMAND
412 ret += excuteCmd(SETTING_POSTINST_FILE, 1, "security");
414 ret += vconf_set_str(VCONFKEY_SETAPPL_PHONE_PASSWD_STR, "");
416 /* it may write some stragne thing into /opt/data/setting/set_info */
418 if (stat(PWD_FILE, &st) == 0)//file exist
420 if (remove(PWD_FILE) != 0) //delete the file
423 SETTING_TRACE("Failed to remove %s", PWD_FILE);
427 ret += vconf_set_bool(VCONFKEY_SETAPPL_STATE_POWER_ON_LOCK_BOOL, FALSE);
428 ret += vconf_set_bool(VCONFKEY_SETAPPL_STATE_SIMPLE_PASSWORD_BOOL, TRUE);