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.
22 #include <setting-common-data-type.h>
23 #include <setting-common-data-slp-setting.h>
24 #include <setting-common-draw-widget.h>
25 #include <setting-common-view.h>
27 #include <setting-security-main.h>
28 #include <setting-debug.h>
30 #if SUPPORT_ENCRYPTION
34 static int setting_security_main_create(void *cb);
35 static int setting_security_main_destroy(void *cb);
36 static int setting_security_main_update(void *cb);
37 static int setting_security_main_cleanup(void *cb);
39 setting_view setting_view_security_main = {
40 .create = setting_security_main_create,
41 .destroy = setting_security_main_destroy,
42 .update = setting_security_main_update,
43 .cleanup = setting_security_main_cleanup,
46 static Eina_Bool setting_security_main_click_softkey_back_cb(void *data, Elm_Object_Item *it);
47 static void setting_security_main_mouse_up_Gendial_list_cb(void *data,
51 void __security_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info);
53 #define SECURITY_ENGINE_NAME_MAX_LEN 128
55 #define SUPPORT_LOCKTYPE_IN_SECURITY_MENU 0
56 /* ***************************************************
60 ****************************************************/
62 static int setting_security_main_create(void *cb)
64 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
66 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
68 Evas_Object *scroller;
74 gboolean b_status = FALSE;
77 /* add basic layout */
78 char setBtnStr[MAX_DISPLAY_NAME_LEN_ON_UI];
79 snprintf(setBtnStr, sizeof(setBtnStr), "%s",
80 (char *)dgettext("sys_string", "IDS_ST_BUTTON_BACK"));
82 setting_create_layout_navi_bar_genlist(ad->win_main_layout,
86 (setting_call_back_func)setting_security_main_click_softkey_back_cb,
90 /*setting_enable_expandable_genlist(scroller, ad, __security_exp_cb, NULL); */
92 Elm_Object_Item *item = NULL;
94 ADD_GL_SEPARATOR(scroller);
96 /* Group List: Lock screen */
97 (void)setting_create_Gendial_field_titleItem(scroller,
99 KeyStr_LockScreen, NULL);
100 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
101 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
104 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
105 setting_security_main_mouse_up_Gendial_list_cb, ad,
106 SWALLOW_Type_INVALID,
108 0, KeyStr_LockScreen, NULL, NULL);
111 elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &(itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL),
112 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
115 app_info_h app_info = NULL;
116 /* replace deprecated API :
117 from app_manager_get_app_info()
118 to app_info_create() */
119 ret = app_info_create("org.tizen.msa", &app_info);
120 if (ret != APP_MANAGER_ERROR_NONE) {
121 SETTING_TRACE("No corresponding app_id for [%s]\n", "org.tizen.msa");
123 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
124 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
125 ad->data_security_update = setting_create_Gendial_field_def(scroller, &(ad->itc_1text_1icon),
126 setting_security_main_mouse_up_Gendial_list_cb, ad,
127 SWALLOW_Type_INVALID,
129 value, _(SECURITY_UPDATE_TEXT), NULL, NULL);
131 if (app_info_destroy(app_info) != 0) {
132 SETTING_TRACE_ERROR("app_info_destroy error for org.tizen.msa");
135 ADD_GL_SEPARATOR(scroller);
138 if (ad->data_sim_settings) {
139 if ((ad->handle == NULL) || (isEmulBin() == TRUE)) {
140 setting_disable_genlist_item(ad->data_sim_settings->item);
142 ret = setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
143 tapi_ret = tel_check_modem_power_status(ad->handle, &b_status);
144 if ((tapi_ret != TAPI_API_SUCCESS)
145 || (b_status != TAPI_PHONE_POWER_STATUS_ON)
146 || (value != VCONFKEY_TELEPHONY_SIM_INSERTED)) {
147 setting_disable_genlist_item(ad->data_sim_settings->item);
149 TelSimCardType_t cardInfo;
150 tapi_ret = tel_get_sim_type(ad->handle, &cardInfo);
151 if (tapi_ret == TAPI_API_SIM_PERM_BLOCKED)
152 setting_disable_genlist_item(ad->data_sim_settings->item);
155 /* If flight mode is ON, can't use sim settings menu */
157 vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &status);
159 setting_disable_genlist_item(ad->data_sim_settings->item);
162 setting_view_security_main.is_create = 1;
164 g_ad = (SettingSecurityUG *) malloc(sizeof(SettingSecurityUG)*1);
166 memcpy(g_ad, ad, sizeof(SettingSecurityUG));
168 vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE,
169 setting_security_main_vconf_change_cb, ad);
170 vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
171 setting_security_main_vconf_change_cb, ad);
174 return SETTING_RETURN_SUCCESS;
177 static int setting_security_main_destroy(void *cb)
181 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
183 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
184 #if SUPPORT_ENCRYPTION
185 if (ad->popup_sd_card_encryption) {
186 evas_object_del(ad->popup_sd_card_encryption);
187 ad->popup_sd_card_encryption = NULL;
190 if (ad->update_view_timer) {
191 ecore_timer_del(ad->update_view_timer);
192 ad->update_view_timer = NULL;
194 if (ad->get_security_list_timer) {
195 ecore_timer_del(ad->get_security_list_timer);
196 ad->get_security_list_timer = NULL;
198 if (ad->remove_sim_popup_timer) {
199 ecore_timer_del(ad->remove_sim_popup_timer);
200 ad->remove_sim_popup_timer = NULL;
202 if (ad->tapi_async_cb_check_timer) {
203 ecore_timer_del(ad->tapi_async_cb_check_timer);
204 ad->tapi_async_cb_check_timer = NULL;
207 vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE,
208 setting_security_main_vconf_change_cb);
209 vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
210 setting_security_main_vconf_change_cb);
211 if (ad->secrity_engine_list) {
212 g_list_free(ad->secrity_engine_list);
214 if (ad->ly_main != NULL) {
215 evas_object_del(ad->ly_main);
220 setting_view_security_main.is_create = 0;
222 return SETTING_RETURN_SUCCESS;
225 static int setting_security_main_update(void *cb)
229 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
230 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
232 evas_object_show(ad->ly_main);
234 return SETTING_RETURN_SUCCESS;
237 static int setting_security_main_cleanup(void *cb)
241 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
243 return SETTING_RETURN_SUCCESS;
246 /* ***************************************************
250 ****************************************************/
252 setting_security_main_click_softkey_back_cb(void *data, Elm_Object_Item *it)
256 retvm_if(data == NULL, EINA_FALSE, "[Setting > Security] Data parameter is NULL");
258 SettingSecurityUG *ad = (SettingSecurityUG *) data;
261 app_manager_is_running("gr47by21a5.SamsungAccount", &is_running);
262 if (is_running && ad->samsung_account_is_running) { /* If samsung account is running from Find my mobile, security ug can't be destroyed. */
265 if (ad->ug_mt) { /* If find my mobile ug is running, security ug can't be destroyed. */
269 /* Send destroy request */
270 ug_destroy_me(ad->ug);
274 int _handle_sim_exception(void *data, int sim_status)
276 retv_if(data == NULL, SETTING_RETURN_FAIL);
278 SettingSecurityUG *ad = (SettingSecurityUG *) data;
280 switch (sim_status) {
281 case VCONFKEY_TELEPHONY_SIM_INSERTED:
284 case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
286 setting_create_popup(NULL, ad->win_get,
287 NULL, _(SECURITY_SIM_NOT_PRESENT_MSG), NULL, 0, false, false, 0);
289 ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
290 SETTING_FONT_RED, sim_status, SETTING_FONT_BLACK);
291 return SETTING_RETURN_FAIL;
295 case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
296 case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
298 setting_create_popup(NULL, ad->win_get,
299 NULL, _("IDS_SIM_BODY_INVALID_SIM_CARD"), NULL, 0, false, false, 0);
301 ("%s*** [ERR] INCORRECTED SIM. sim_slot_type=%d ***%s",
302 SETTING_FONT_RED, sim_status, SETTING_FONT_BLACK);
303 return SETTING_RETURN_FAIL;
309 return SETTING_RETURN_SUCCESS;
312 static Eina_Bool __remove_sim_popup_cb(void *data)
315 retv_if(data == NULL, EINA_FALSE);
316 SettingSecurityUG *ad = (SettingSecurityUG *)data;
319 evas_object_del(ad->sim_popup);
320 ad->sim_popup = NULL;
322 ad->remove_sim_popup_timer = NULL;
326 static Eina_Bool _check_tapi_async_cb_is_called(void *data)
329 retv_if(data == NULL, EINA_FALSE);
331 SettingSecurityUG *ad = (SettingSecurityUG *)data;
333 if (!ad->enter_tapi_async_cb_flag) {
334 ad->sim_popup = setting_create_popup(ad, ad->win_get,
335 NULL, KeyStr_Security_Waiting_Sim,
336 (setting_call_back_func)__remove_sim_popup_cb,
338 ad->remove_sim_popup_timer = ecore_timer_add(1, __remove_sim_popup_cb, ad);
340 ad->tapi_async_cb_check_timer = NULL;
345 Eina_Bool __freeze_event_timer_cb(void *cb)
348 retv_if(cb == NULL, EINA_FALSE);
350 SettingSecurityUG *ad = (SettingSecurityUG *)cb;
352 evas_object_freeze_events_set(ad->navi_bar, EINA_FALSE);
353 ad->update_view_timer = NULL;
357 void setting_security_lockscreen_layout_ug_cb(ui_gadget_h ug,
367 base = (Evas_Object *) ug_get_layout(ug);
372 case UG_MODE_FULLVIEW:
373 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
375 evas_object_show(base);
383 static void setting_security_lockscreen_destroy_ug_cb(ui_gadget_h ug, void *priv)
386 ret_if(priv == NULL);
387 SettingSecurityUG *ad = (SettingSecurityUG *) priv;
389 setting_ug_destroy(ug);
391 elm_genlist_realized_items_update(ad->genlist);
395 setting_security_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
400 setting_retm_if(data == NULL, "Data parameter is NULL");
402 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
403 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
404 elm_genlist_item_selected_set(item, 0);
405 Setting_GenGroupItem_Data *list_item =
406 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
407 setting_retm_if(NULL == list_item, "list_item is NULL");
409 SettingSecurityUG *ad = (SettingSecurityUG *) data;
411 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
413 if (!safeStrCmp(KeyStr_LockScreen, list_item->keyStr)) {
415 int window_id = elm_win_xwindow_get(ad->win_get);
416 if (0 == app_launcher("lockscreen-options")) {
417 ad->update_view_timer = ecore_timer_add(1, __freeze_event_timer_cb, ad);
418 evas_object_freeze_events_set(ad->navi_bar, EINA_TRUE);
421 retm_if(data == NULL, "Data parameter is NULL");
423 SettingSecurityUG *ad = (SettingSecurityUG *) data;
425 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
426 setting_retm_if(!cbs, "calloc failed");
427 cbs->layout_cb = setting_security_lockscreen_layout_ug_cb;
428 cbs->result_cb = NULL;
429 cbs->destroy_cb = setting_security_lockscreen_destroy_ug_cb;
430 cbs->priv = (void *)ad;
432 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
434 SETTING_TRACE("To load ug[%s]", "lockscreen-options");
435 setting_ug_create(ad->ug, "lockscreen-options", UG_MODE_FULLVIEW, NULL, cbs);
441 void setting_security_main_vconf_change_cb(keynode_t *key, void *data)
444 /*ret_if(NULL == data); */
445 /*SettingSecurityUG *ad = (SettingSecurityUG *) data; */