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-locktype.h>
27 #include <setting-security.h>
28 #include <setting-debug.h>
29 #include <pkgmgr-info.h>
34 static int setting_security_locktype_create(void *cb);
35 static int setting_security_locktype_destroy(void *cb);
36 static int setting_security_locktype_update(void *cb);
37 static int setting_security_locktype_cleanup(void *cb);
38 setting_view setting_view_security_locktype = {
39 .create = setting_security_locktype_create,
40 .destroy = setting_security_locktype_destroy,
41 .update = setting_security_locktype_update,
42 .cleanup = setting_security_locktype_cleanup,
45 openlock_appdata *lockapp_data = NULL;
47 /* ***************************************************
51 ****************************************************/
53 static int __get_lockapp_index_from_pkgname(char *pkg_name)
57 return SETTING_RETURN_FAIL;
59 openlock_appdata *item = lockapp_data;
60 for(; item != NULL; item = item->next)
62 if(safeStrCmp(item->pkg_name, pkg_name) == 0)
65 return SETTING_RETURN_FAIL;
67 static int __get_lockapp_index_from_appname(char *app_name)
71 return SETTING_RETURN_FAIL;
73 openlock_appdata *item = lockapp_data;
74 for(; item != NULL; item = item->next)
76 if(safeStrCmp(item->app_name, app_name) == 0)
79 return SETTING_RETURN_FAIL;
81 static char* __get_lockapp_pkgname_from_appname(char *app_name)
87 openlock_appdata *item = lockapp_data;
88 for(; item != NULL; item = item->next)
90 if(safeStrCmp(item->app_name, app_name) == 0)
91 //return item->app_name;
92 return item->pkg_name;
97 int __get_appinfo_cb(pkgmgrinfo_appinfo_h appinfo, void *user_data)
103 SETTING_TRACE_DEBUG("handle is NULL");
107 openlock_appdata *item = lockapp_data;
108 openlock_appdata *new_item = NULL;
109 char *app_name = NULL;
111 ail_appinfo_h handle;
114 ret = pkgmgrinfo_appinfo_get_appid(appinfo, &app_id);
115 if(ret != 0 || !app_id)
117 SETTING_TRACE_DEBUG("pkgmgrinfo_appinfo_get_appid returns error");
121 ret = ail_get_appinfo(app_id, &handle);
122 if(ret != AIL_ERROR_OK)
124 SETTING_TRACE_DEBUG("ail_get_appinfo() returns error");
127 ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &app_name);
131 SETTING_TRACE_DEBUG("ail_appinfo_get_str() returns error");
132 ail_destroy_appinfo(handle);
135 SETTING_TRACE_DEBUG("app_name %s", app_name);
136 SETTING_TRACE_DEBUG("app_id %s", app_id);// format : 1234567890.AppName
139 while(item->next != NULL)
142 if(item->index == 0 && item->pkg_name == NULL)
144 SETTING_TRACE_DEBUG("first app");
146 item->app_name = (char*)strdup(app_name); // for display
147 item->pkg_name = (char*)strdup(app_id); // for vconf
149 if(!app_id && !app_name)
150 SETTING_TRACE_DEBUG("app info %d %s %s", item->index, item->pkg_name, item->app_name);
154 SETTING_TRACE_DEBUG("create new");
156 new_item = (openlock_appdata*)malloc(sizeof(openlock_appdata));
159 memset(new_item, 0x00, sizeof(openlock_appdata));
160 new_item->app_name = (char*)strdup(app_name); // for display
161 new_item->pkg_name = (char*)strdup(app_id); // for vconf
162 new_item->index = item->index + 1;
163 new_item->prev = item;
164 item->next = new_item;
166 if(!app_id && !app_name)
167 SETTING_TRACE_DEBUG("app info %d %s %s", new_item->index, new_item->pkg_name, new_item->app_name);
171 SETTING_TRACE_DEBUG("malloc() failed");
177 static int __add_3rd_party_lock(void *data)
180 ret_if(data == NULL);
183 SettingSecurityUG *ad = (SettingSecurityUG *) data;
185 /* Get info from AIL */
186 pkgmgrinfo_appinfo_filter_h filter;
190 ret = pkgmgrinfo_appinfo_filter_create(&filter);
193 SETTING_TRACE_DEBUG("pkgmgrinfo_appinfo_filter_create() failed");
196 ret = pkgmgrinfo_appinfo_filter_add_string(filter, PMINFO_APPINFO_PROP_APP_CATEGORY, "http://tizen.org/category/lockapp");
197 ret = pkgmgrinfo_appinfo_filter_count(filter, &count);
198 SETTING_TRACE_DEBUG("There is/are %d 3rd lock app(s)", count);
201 SETTING_TRACE_DEBUG("No 3rd lock app");
202 pkgmgrinfo_appinfo_filter_destroy(filter);
207 lockapp_data = (openlock_appdata*)malloc(sizeof(openlock_appdata));
208 if(lockapp_data == NULL)
210 SETTING_TRACE_DEBUG("malloc() failed");
213 memset(lockapp_data, 0x00, sizeof(openlock_appdata));
214 lockapp_data->prev = NULL;
215 lockapp_data->next = NULL;
216 lockapp_data->pkg_name = NULL;
217 lockapp_data->app_name = NULL;
218 lockapp_data->index = 0;
220 pkgmgrinfo_appinfo_filter_foreach_appinfo(filter, __get_appinfo_cb, NULL);
221 pkgmgrinfo_appinfo_filter_destroy(filter);
224 openlock_appdata *list = lockapp_data;
225 Setting_GenGroupItem_Data *item_data = NULL;
227 for(index = 0; index < count; index++)
229 SETTING_TRACE_DEBUG("add item [%d]", index);
230 ad->data_locktype_3rd[index] = setting_create_Gendial_field_1radio(ad->sl_scroller,
231 &(itc_1text_1icon_2),
232 setting_security_locktype_mouse_up_Gendial_list_cb, /*add to sel_cb */
235 ad->lock_type_rd, SETTING_SCREEN_LOCK_TYPE_OTHER + index,
238 if (ad->data_locktype_3rd[index]) {
239 ad->data_locktype_3rd[index]->userdata = ad;
241 SETTING_TRACE_ERROR("item_data is NULL");
244 char *open_lock_name = NULL;
245 open_lock_name = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
246 if(safeStrCmp(open_lock_name, list->app_name) == 0)
256 * create the lock type list
258 void __add_locktype_items(void *data)
261 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
263 SettingSecurityUG *ad = (SettingSecurityUG *) data;
265 Elm_Object_Item *item = NULL;
267 Setting_GenGroupItem_Data *item_data = NULL;
271 vconf_get_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, &locktype);
273 radio = elm_radio_add(ad->sl_scroller);
274 elm_radio_state_value_set(radio, -1);
275 ad->lock_type_rd = radio;
278 item = elm_genlist_item_append(ad->sl_scroller, &(ad->itc_seperator), NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
279 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
281 //evas_object_smart_callback_add(ad->sl_scroller, "realized", __gl_realized_cb, NULL);
284 // [FLOW] add default lock type
285 /* to do : radio menu */
287 ad->data_locktype_swipe =
288 setting_create_Gendial_field_1radio(ad->sl_scroller,
289 &(itc_1text_1icon_2),
290 setting_security_locktype_mouse_up_Gendial_list_cb, /*add to sel_cb */
293 radio, SETTING_SCREEN_LOCK_TYPE_SWIPE,
296 if (ad->data_locktype_swipe) {
297 ad->data_locktype_swipe->userdata = ad;
298 ad->data_locktype_swipe->group_style = SETTING_GROUP_STYLE_TOP;
300 SETTING_TRACE_ERROR("item_data is NULL");
304 /* [FLOW] Add 3rd party lock apps in list. */
305 index = __add_3rd_party_lock(ad);
308 /* To do : If type is OTHER, should calculate something.*/
309 if(locktype == SETTING_SCREEN_LOCK_TYPE_OTHER)
311 char *open_lock_name = NULL;
312 open_lock_name = vconf_get_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR);
313 //index = __get_index_of_lockapp(open_lock_name); // <-- symbol mismatch ?
314 index = __get_lockapp_index_from_pkgname(open_lock_name);
317 FREE(open_lock_name);
321 elm_radio_value_set(radio, locktype);
323 elm_radio_value_set(radio, locktype + index);
326 static int setting_security_locktype_create(void *cb)
329 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
331 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
333 /* add basic layout */
335 Evas_Object *scroller = NULL;
337 setting_push_layout_navi_bar_genlist(ad->win_main_layout,
339 _(Keystr_ScreenLockType),
340 _("IDS_COM_BODY_BACK"), NULL,
341 setting_security_locktype_click_softkey_back_cb,
342 NULL, ad, &scroller, ad->navi_bar);
344 ad->sl_scroller = scroller;
346 __add_locktype_items(ad);
348 setting_view_security_locktype.is_create = 1;
350 return SETTING_RETURN_SUCCESS;
353 static int setting_security_locktype_destroy(void *cb)
357 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
359 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
362 evas_object_del(ad->notify);
366 openlock_appdata *item = lockapp_data;
367 for(; item != NULL; item = item->next)
369 FREE(item->app_name);
370 FREE(item->pkg_name);
373 elm_naviframe_item_pop(ad->navi_bar);
375 setting_view_security_locktype.is_create = 0;
377 return SETTING_RETURN_SUCCESS;
380 static int setting_security_locktype_update(void *cb)
384 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
386 return SETTING_RETURN_SUCCESS;
389 static int setting_security_locktype_cleanup(void *cb)
393 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
395 SettingSecurityUG *ad = (SettingSecurityUG *) cb;
397 return setting_security_locktype_destroy(ad);
400 /* ***************************************************
404 ****************************************************/
407 * select each item of the list
410 setting_security_locktype_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
415 setting_retm_if(data == NULL, "Data parameter is NULL");
417 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
418 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
419 elm_genlist_item_selected_set(item, 0);
420 Setting_GenGroupItem_Data *list_item =
421 (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
422 SettingSecurityUG *ad = (SettingSecurityUG *) data;
423 int lock_type = list_item->chk_status;
424 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
425 int old_type = elm_radio_value_get(list_item->eo_check);
427 ad->selected_lock_type = list_item->keyStr;
429 /* If lock_type is same with old_lock_type, return. */
430 if(lock_type == old_type)
432 SETTING_TRACE_DEBUG("[Screen Lock Type] Selected same type");
437 char *pkg_name = NULL;
440 index = __get_lockapp_index_from_appname(list_item->keyStr);
442 SETTING_TRACE(" lock type : %d ---%d --- %d ", lock_type, SETTING_SCREEN_LOCK_TYPE_OTHER, index);
444 pkg_name = __get_lockapp_pkgname_from_appname(list_item->keyStr);
445 SETTING_TRACE_DEBUG("3rd lock selected. index[%d] pkg_name[%s]", index, pkg_name);
446 vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, pkg_name);
447 vconf_set_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, lock_type - index);
449 // elm_radio_value_set(list_item->eo_check, lock_type + index);
450 elm_radio_value_set(list_item->eo_check, index);
451 ug_destroy_me(ad->ug);
457 case SETTING_SCREEN_LOCK_TYPE_SWIPE:
458 if(vconf_set_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, lock_type) == 0)
461 elm_radio_value_set(list_item->eo_check, lock_type);
463 ug_destroy_me(ad->ug);
465 case SETTING_SCREEN_LOCK_TYPE_OTHER:
467 index = __get_lockapp_index_from_appname(list_item->keyStr);
468 pkg_name = __get_lockapp_pkgname_from_appname(list_item->keyStr);
469 SETTING_TRACE_DEBUG("3rd lock selected. index[%d] pkg_name[%s]", index, pkg_name);
470 vconf_set_str(VCONFKEY_SETAPPL_3RD_LOCK_PKG_NAME_STR, pkg_name);
471 vconf_set_int(VCONFKEY_SETAPPL_SCREEN_LOCK_TYPE_INT, lock_type);
473 elm_radio_value_set(list_item->eo_check, lock_type + index);
474 ug_destroy_me(ad->ug);
483 setting_security_locktype_click_softkey_back_cb(void *data, Evas_Object *obj,
488 retm_if(data == NULL, "[Setting > Security] Data parameter is NULL");
490 SettingSecurityUG *ad = (SettingSecurityUG *) data;
491 setting_view_change(&setting_view_security_locktype, &setting_view_security_main, ad);