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.
23 * @file setting-cis-main2.c
24 * @brief implement first view of Setting application
26 * first view has tabbar and Gengrid
30 #include <setting-main.h>
31 #include <setting-handler.h>
32 #include <setting-helper.h>
34 #include <setting-common-sound.h>
35 #include <setting-common-alarmmgr.h>
41 * plain list item style
43 static char *s_grid_items[] = {
47 KeyStr_MultiWindowMode,
59 /* KeyStr_SafetyAssistance, */
64 static int setting_main_create(void *cb);
65 static int setting_main_destroy(void *cb);
66 static int setting_main_update(void *cb);
67 static int setting_main_cleanup(void *cb);
69 setting_view setting_view_main = {
70 .create = setting_main_create,
71 .update = setting_main_update,
72 .destroy = setting_main_destroy,
73 .cleanup = setting_main_cleanup,
77 /*//////////////////////////////////////////////////////////////////////////////////////////// */
79 void __all_gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
81 /*SETTING_TRACE_BEGIN; */
82 __gl_realized_cb(data, obj, event_info);
83 setting_retm_if(event_info == NULL, "invalid parameter: event_info is NULL");
84 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
85 /*elm_object_item_signal_emit(item, "elm,state,default", "elm");//to cancel the 2depth color */
86 Setting_GenGroupItem_Data *item_data = elm_object_item_data_get(item);
91 if (item_data->isPlaying) {
92 elm_object_item_signal_emit(item_data->item, "elm,state,expanded", "elm");
96 static void __all_gl_group_clicked_cb(void *data, Evas_Object *obj, void *event_info)
100 /*setting_retm_if(data == NULL, "Data parameter is NULL"); */
101 int view_type = (int)data;
102 setting_main_appdata *ad = g_main_ad;
103 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
104 elm_genlist_item_selected_set(item, 0);
105 Setting_GenGroupItem_Data *data_parentItem = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
106 setting_retm_if(data_parentItem == NULL, "data_parentItem is NULL");
109 Elm_Object_Item *start_item = NULL;
110 Elm_Object_Item *end_item = NULL;
113 data_parentItem->isPlaying = !data_parentItem->isPlaying;
114 int hide_flag = !(data_parentItem->isPlaying);
115 SETTING_TRACE("----------------------> expand list:%s, hide_flag:%d", _(data_parentItem->keyStr), hide_flag);
117 /*to controll the arrow */
119 elm_object_item_signal_emit(data_parentItem->item, "elm,state,contracted", "elm");
121 elm_object_item_signal_emit(data_parentItem->item, "elm,state,expanded", "elm");
123 int group_idx = data_parentItem->chk_status;
125 SETTING_TRACE("view_type:%d, group_idx:%d", view_type, group_idx);
126 start_item = ad->gl_data_item[view_type][group_idx]->item;
127 SETTING_TRACE("START:%s", _(ad->gl_data_item[view_type][group_idx]->keyStr));
128 if (group_idx != GL_Group_Apps) {
129 end_item = ad->gl_data_item[view_type][group_idx + 1]->item;
130 SETTING_TRACE("END:%s", _(ad->gl_data_item[view_type][group_idx + 1]->keyStr));
133 for (it = elm_genlist_item_next_get(start_item);
134 it && it != end_item; it = elm_genlist_item_next_get(it)) {
135 Setting_GenGroupItem_Data *data_parentItem = (Setting_GenGroupItem_Data *)elm_object_item_data_get(it);
136 if (data_parentItem && data_parentItem->keyStr) SETTING_TRACE("data_parentItem:%s", data_parentItem->keyStr);
137 elm_genlist_item_hide_set(it, hide_flag);
138 if (!hide_flag && group_idx == GL_Group_Apps) {
139 elm_genlist_item_bring_in(it, ELM_GENLIST_ITEM_SCROLLTO_IN);
145 Evas_Object *_view_list_geter(void *data)
148 retvm_if(data == NULL, NULL, "Invalid argument: data is NULL");
149 setting_main_appdata *ad = (setting_main_appdata *)data;
150 SETTING_TRACE("ad->sc_gl[SC_All]:%p", ad->sc_gl[SC_All_List]);
152 if (ad->sc_gl[SC_All_List]) {
153 evas_object_show(ad->sc_gl[SC_All_List]);
154 return ad->sc_gl[SC_All_List];
157 Evas_Object *genlist = elm_genlist_add(ad->win_main);
158 retvm_if(genlist == NULL, NULL, "Cannot set genlist object as contento of layout");
160 ad->sc_gl[SC_All_List] = genlist;
161 elm_genlist_realization_mode_set(genlist, EINA_TRUE);
162 elm_object_style_set(genlist, "dialogue");
163 elm_genlist_clear(genlist); /* first to clear list */
164 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS); /* resolve abnormal height issue */
165 evas_object_smart_callback_add(genlist, "realized", __all_gl_realized_cb, ad);
166 evas_object_show(genlist);
168 Setting_GenGroupItem_Data *item_data = NULL;
169 Elm_Object_Item *item = NULL;
170 int group_dx = GL_Group_QuickSettings;
171 setting_main_genlist_handler_reset(ad);
172 /*---------------------------------------------------------------------------------------- */
173 /* 2.category name loop */
174 /*---------------------------------------------------------------------------------------- */
177 char *icon_path = NULL;
178 char *ug_args = NULL;
180 char *group_name = NULL;
182 for (i = 0; i < setting_cfg_get_category_length(); i++) {
183 group_name = setting_cfg_get_category_name(i);
184 group_dx++;/*from the first */
185 item_data = setting_create_Gendial_field_groupitem(
187 &(ad->itc[GENDIAL_Type_expandable_proc]),
189 __all_gl_group_clicked_cb,
190 (void *)VIEW_All_List,
191 SWALLOW_Type_INVALID,
199 item_data->isPlaying = TRUE;/*expandable ? */
200 item_data->chk_status = group_dx;/*keep the group idx */
202 ad->gl_data_item[VIEW_All_List][group_dx] = item_data;
203 __BACK_POINTER_SET(ad->gl_data_item[VIEW_All_List][group_dx]);
209 /*---------------------------------------------------------------------------------------- */
210 /* 2. display each items, following category */
211 /*---------------------------------------------------------------------------------------- */
213 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
214 keyStr = setting_cfg_get_keyname_idx(i, j);
216 ug_args = setting_cfg_get_ug_args_idx(i, j);
217 icon_path = setting_cfg_get_icon_path_idx(i, j);
219 mainlist_entry *entry = settinig_drawer_hash_find(ad, keyStr);
222 if (entry->type == UG_HANDLE) {
223 if (is_ug_installed_by_ug_args(ug_args)) {
224 item_data = entry->ui_handler(ad, keyStr, icon_path, ug_args, genlist, NULL);
225 entry->item_data = item_data;
227 } else if (entry->type == UI_PROC) {
228 item_data = entry->ui_handler(ad, keyStr, icon_path, ug_args, genlist, NULL);
229 entry->item_data = item_data;
232 entry = settinig_drawer_hash_find(ad, "Default");
233 item_data = entry->ui_handler(ad, keyStr, icon_path, ug_args, genlist, NULL);
234 entry->item_data = item_data;
237 /* dupcated code (REFACTORING) */
238 if (item_data && item_data->item) {
240 set_node_pointer(keyStr, item_data->item);
241 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
247 /*SETTING_TRACE("keyStr[%s] is being set to BOTTOM style",_(item_data->keyStr)); */
248 setting_genlist_item_groupstyle_set(item_data, index == 1 ? SETTING_GROUP_STYLE_NONE : SETTING_GROUP_STYLE_BOTTOM);
250 setting_main_genlist_handler_set(ad, VIEW_All_List);
251 setting_main_genlist_handler_reset(ad);
255 static void ___grid_select_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
257 /*SETTING_TRACE_BEGIN; */
258 Evas_Object *image = elm_object_part_content_get(obj, "elm.swallow.icon");
260 elm_image_file_get(image, &file, NULL);
261 /*SETTING_TRACE("file:%s", file); */
262 if (!safeStrCmp(IMG_SETTING, file)) {
265 setting_dim_evas_object(elm_object_part_content_get(obj, "elm.swallow.icon"), FALSE);
266 elm_object_signal_emit(obj, "SELECTED", "elm");
268 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
269 retm_if(data == NULL, "Invalid argument: data is NULL");
270 Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
271 Evas_Point *point_down = data;
272 point_down->x = ev->output.x;
273 point_down->y = ev->output.y;
276 static void ___grid_release_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
278 /*SETTING_TRACE_BEGIN; */
279 setting_undo_dim_evas_object(elm_object_part_content_get(obj, "elm.swallow.icon"), FALSE);
280 elm_object_signal_emit(obj, "UNSELECTED", "elm");
283 static void ___grid_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
285 /*SETTING_TRACE_BEGIN; */
286 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
287 retm_if(data == NULL, "Invalid argument: data is NULL");
288 Evas_Point *point_down = data;
289 Evas_Event_Mouse_Move *ev = (Evas_Event_Mouse_Move *)event_info;
290 int x_offset = ev->cur.output.x - point_down->x;
291 int y_offset = ev->cur.output.y - point_down->y;
292 if (x_offset < 0) x_offset = -x_offset;
293 if (y_offset < 0) y_offset = -y_offset;
294 if (x_offset <= MIN_MOVE_DISTANCE && y_offset <= MIN_MOVE_DISTANCE) {
297 setting_undo_dim_evas_object(elm_object_part_content_get(obj, "elm.swallow.icon"), FALSE);
298 elm_object_signal_emit(obj, "UNSELECTED", "elm");
300 static void ___grid_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
302 /*SETTING_TRACE_BEGIN; */
304 Evas_Point *point_down = data;
305 FREE(point_down);/*delete the date. */
309 * To make an object looks clickable: if pressed, it is dim color;if unpressed, it is normal color;
314 void __grid_clickable_enable(Evas_Object *obj)
317 Evas_Point *point_down = calloc(1, sizeof(Evas_Point));
318 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN, ___grid_select_cb, point_down);
319 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, ___grid_release_cb, NULL);
320 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE, ___grid_mouse_move_cb, point_down);
321 evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, ___grid_del_cb, point_down);
325 static void __grid_binded_vconf_cb(keynode_t *key, void *data)
328 char *vconf_name = vconf_keynode_get_name(key);
329 SETTING_TRACE("the value of [ %s ] just changed", vconf_name);
331 Evas_Object *layout = data;
332 SETTING_TRACE("layout:%p", layout);
333 Evas_Object *image = elm_object_part_content_get(layout, "elm.swallow.icon");
337 char *icon_path = NULL;
338 if (!safeStrCmp(vconf_name, VCONFKEY_TELEPHONY_FLIGHT_MODE)) {
339 vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &status);
341 icon_path = (char *)g_strdup(SETTING_ICON_PATH_CFG"settings_flightoff2.png");
343 icon_path = (char *)g_strdup(SETTING_ICON_PATH_CFG"A01-1_icon_Flight_Mode.png");
346 #if SUPPORT_NETWORK_RESTRICTION
347 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_NETWORK_RESTRICT_MODE)) {
348 vconf_get_bool(VCONFKEY_SETAPPL_NETWORK_RESTRICT_MODE, &status);
350 icon_path = (char *)g_strdup(IMG_NetRestrictionOffMode);
352 icon_path = (char *)g_strdup(IMG_NetRestrictionMode);
356 else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_ENHANCED_TOUCH)) {
357 vconf_get_bool(VCONFKEY_SETAPPL_ENHANCED_TOUCH, &status);
359 icon_path = (char *)g_strdup(IMG_HighTouch);
361 icon_path = (char *)g_strdup(IMG_HighTouchOff);
363 } else if (!safeStrCmp(vconf_name, VCONFKEY_QUICKSETTING_MULTIWINDOW_ENABLED)) {
365 vconf_get_bool(VCONFKEY_QUICKSETTING_MULTIWINDOW_ENABLED, &status);
367 icon_path = (char *)g_strdup(IMG_MutiWindowDisable);
369 icon_path = (char *)g_strdup(IMG_MutiWindow);
372 icon_path = (char *)g_strdup(IMG_MutiWindow);
376 if (icon_path) elm_image_file_set(image, icon_path, NULL);
379 /*Duplicate one to give diff instance vconf cb to the two same name grids */
380 static void __grid_binded_vconf_cb2(keynode_t *key, void *data)
382 __grid_binded_vconf_cb(key, data);
385 static void _grid_del(void *data, Evas_Object *obj)
387 GridItem *item_data = (GridItem *) data;
389 G_FREE(item_data->name);
390 G_FREE(item_data->icon_path);
391 G_FREE((item_data->ug_name));
399 * @brief update toggle state in Genlist
401 * when genGrid updates, the toggle states in Genlist should be updated too.
403 * @param data application context
404 * @param obj NOT USED
405 * @param event_info NOT USED
407 static void ____gg_process_toogle_icon(void *data, Evas_Object *obj, void *event_info)
410 setting_retm_if(data == NULL, "data is NULL");
411 GridItem *pitem = (GridItem *)data;
413 setting_main_appdata *ad = pitem->data;
414 setting_retm_if(ad == NULL, "ad is NULL");
416 if (safeStrCmp(pitem->name, KeyStr_FlightMode) == 0) {
419 setting_get_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE, &old_status, &err);
421 if (ad && !old_status) {
422 ad->popup_flight_mode = setting_create_popup_with_btn(NULL,
423 ad->win_main, KeyStr_FlightMode,
424 ENABLE_FLIGHT_MODE_MSG,
425 setting_flightmode_turn_on_resp_cb,
426 0, 2, "IDS_ST_BUTTON_ENABLE", "IDS_COM_SK_CANCEL");
429 Setting_GenGroupItem_Data *item_to_update;
431 for (i = VIEW_All_List; i < VIEW_Max; i++) {
432 item_to_update = ad->gl_data_item[i][GL_FlightMode];
433 setting_update_gl_item_chk_status(item_to_update, !old_status);
436 setting_main_alternate_flight_mode(!old_status);
439 } else if (safeStrCmp(pitem->name, KeyStr_MultiWindowMode) == 0) {
442 ret = vconf_get_bool(VCONFKEY_QUICKSETTING_MULTIWINDOW_ENABLED, &value);
443 SETTING_TRACE_DEBUG("vconf_get_bool() returns %d", ret);
445 const char *tmp = pitem->icon_path;
448 pitem->icon_path = (char *)g_strdup(IMG_MutiWindow);
451 pitem->icon_path = (char *)g_strdup(IMG_MutiWindowDisable);
455 Evas_Object *layout = NULL;
456 Evas_Object *image = NULL;
457 if ((layout = elm_object_item_part_content_get(pitem->item, "elm.swallow.icon"))
458 && (image = elm_object_part_content_get(layout, "elm.swallow.icon"))) {
459 elm_image_file_set(image, pitem->icon_path, NULL);
462 vconf_set_bool(VCONFKEY_QUICKSETTING_MULTIWINDOW_ENABLED, !value);
463 } else if (safeStrCmp(pitem->name, KeyStr_NetRestrictionMode) == 0) {
464 int status = SETTING_ON_OFF_BTN_OFF;
466 setting_get_bool_slp_key(BOOL_SLP_SETTING_NET_RESTRICTION_MODE, &status, &err);
470 ad->popup_net_restriction_mode = setting_create_popup_with_btn(NULL,
472 "IDS_ST_HEADER_NETWORK_RESTRICTION_MODE_ABB_JPN",
473 "IDS_QP_POP_IN_NETWORK_RESTRICTION_MODE_YOU_CAN_USE_ALL_YOUR_APPLICATIONS_WITHOUT_CONNECTING_TO_THE_NETWORK_YOU_CAN_ALSO_RECEIVE_CALLS_AND_SMS_MESSAGES_MSG_JPN",
474 setting_main_net_restriction_mode_turn_on_resp_cb,
476 2, /* button count */
478 "IDS_COM_SK_CANCEL");
481 ad->popup_net_restriction_mode = setting_create_popup_with_btn(NULL,
483 "IDS_ST_HEADER_NETWORK_RESTRICTION_MODE_ABB_JPN" ,
484 "IDS_QP_POP_NETWORK_RESTRICTION_MODE_WILL_BE_DISABLED_JPN" ,
485 setting_main_net_restriction_mode_turn_off_resp_cb,
487 2, /* button count */
489 "IDS_COM_SK_CANCEL");
492 } else if (safeStrCmp(pitem->name, KeyStr_HighTouchSens) == 0) {
493 int old_status = display_get_enhanced_touch();
494 display_set_enhanced_touch((!old_status));
495 int new_status = display_get_enhanced_touch();
496 SETTING_TRACE("old_status:%d, display_get_enhanced_touch():%d", old_status, new_status);
497 if (new_status >= 0) {
498 const char *tmp = pitem->icon_path;
499 if (1 == new_status) {
501 vconf_set_bool(VCONFKEY_SETAPPL_ENHANCED_TOUCH, 1); /*sync to vconf */
502 pitem->icon_path = (char *)g_strdup(IMG_HighTouch);
504 vconf_set_bool(VCONFKEY_SETAPPL_ENHANCED_TOUCH, 0); /*sync to vconf */
505 pitem->icon_path = (char *)g_strdup(IMG_HighTouchOff);
509 Evas_Object *layout = NULL;
510 Evas_Object *image = NULL;
511 if ((layout = elm_object_item_part_content_get(pitem->item, "elm.swallow.icon"))
512 && (image = elm_object_part_content_get(layout, "elm.swallow.icon"))) {
513 elm_image_file_set(image, pitem->icon_path, NULL);
516 setting_create_simple_popup(NULL, ad->win_main,
517 NULL, "IDS_COM_POP_UNEXPECTED_ERROR");
525 * call event handler when touching each item on grid
526 @todo REMOVE THE IF_ELSE NESTED
528 static void ___gg_item_selected(void *data, Evas_Object *obj, void *event_info)
531 setting_retm_if(data == NULL, "data is NULL");
532 GridItem *pitem = (GridItem *)data;
534 setting_main_appdata *ad = pitem->data;
535 setting_retm_if(ad == NULL, "ad is NULL");
538 char *style = evas_object_data_get(obj, "style");
539 /*SETTING_TRACE("style:%s", style); */
540 if (!isEmptyStr(style)) { /*has value "WithCheck", it indicates we are in edit mode */
542 Evas_Object *layout = elm_object_item_part_content_get(pitem->item, "elm.swallow.icon");
544 Evas_Object *check = elm_object_part_content_get(layout, "elm.swallow.check");
546 int old = elm_check_state_get(check);
547 SETTING_TRACE("old:%d", old);
548 elm_check_state_set(check, !old);
551 ad->edit_sel_list = eina_list_append(ad->edit_sel_list, pitem->name);
553 /*NOTE!! DO NOT USE eina_list_remove() */
554 /*The API was based on eina_list_data_find_list(), */
555 /*which cannot statisfy ad->edit_sel_list's demanding(ad->edit_sel_list keep const strings,not addresses of memory) */
556 /*eina_list_data_find_list use memory address to compare: list_data == data */
557 Eina_List *list = ad->edit_sel_list;
559 char *str = eina_list_data_get(list);
562 if (0 == safeStrCmp(str, pitem->name))
564 list = eina_list_next(list);
566 ad->edit_sel_list = eina_list_remove_list(ad->edit_sel_list, list);
569 char text[MAX_DISPLAY_NAME_LEN_ON_UI + 1] = {0, };
570 snprintf(text, MAX_DISPLAY_NAME_LEN_ON_UI, _("IDS_ST_HEADER_PD_SELECTED"), eina_list_count(ad->edit_sel_list));
571 elm_object_item_part_text_set(ad->edit_navi_it, "elm.text.title", text);
577 if (ad->isInUGMode && ad->ug) {
578 SETTING_TRACE(" UG is already loaded - do nothing ");
579 return; /* do nothing */
582 effect_playsound_play();/* make sound (touch) */
584 if (!safeStrCmp(pitem->name, KeyStr_FlightMode)
585 || !safeStrCmp(pitem->name, KeyStr_NetRestrictionMode)
586 || !safeStrCmp(pitem->name, KeyStr_HighTouchSens)
587 /*|| !safeStrCmp(pitem->name, KeyStr_MultiWindowMode)*/) {
588 ____gg_process_toogle_icon(data, obj, event_info);
590 } else if (!safeStrCmp(pitem->name, KeyStr_Call)
591 || !safeStrCmp(pitem->name, keystr_Blockingmode)
592 #if SUPPORT_DRIVINGMODE
593 || !safeStrCmp(pitem->name, keystr_Drivingmode)
596 SETTING_TRACE("pitem->ug_name:%s", pitem->ug_name);
597 if (app_launcher(pitem->ug_name) == 0) {
599 ad->event_freeze_timer = ecore_timer_add(1, setting_main_freeze_event_timer_cb, ad);
600 evas_object_freeze_events_set(ad->navibar_main, EINA_TRUE);
602 int click_times = setting_cfg_get_click_times((char *)(pitem->name));
603 setting_cfg_set_click_times((char *)(pitem->name), ++click_times);
604 setting_cfg_file_update();
608 /*special checking: */
609 /*1.Network cannot work when SIM card is not prepared */
610 if (safeStrCmp(pitem->name, KeyStr_Network) == 0) {
613 setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
614 if (VCONFKEY_TELEPHONY_SIM_INSERTED != value) {
615 setting_create_simple_popup(NULL, ad->win_main, NULL,
616 "IDS_ST_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES");
617 SETTING_TRACE_ERROR("*** [ERR] Invalid SIM. sim_slot_type=%d ***", value);
621 /*2.powersaving cannot work when Flightmode on */
622 if (safeStrCmp(pitem->name, KeyStr_Powersaving) == 0) {
624 vconf_get_bool(VCONFKEY_TELEPHONY_FLIGHT_MODE, &status);
626 setting_create_simple_popup(NULL, ad->win_main,
627 NULL, "IDS_IM_POP_THIS_FEATURE_IS_NOT_AVAILABLE_WHILE_FLIGHT_MODE_IS_ON");
632 /*3.Quick command cannot work when TTS on */
634 vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &tts_state);
636 if (!safeStrCmp(pitem->name, KeyStr_QUICK_CMD)) {
637 char noti_str[MAX_SPECIALIZITION_LEN + 1] = { 0, };
638 snprintf(noti_str, sizeof(noti_str), _(FEATURE_UNAVALIABLE_WHILE_TTS_ON), _(KeyStr_QUICK_CMD));
639 setting_create_popup_without_btn(NULL, ad->win_main, NULL, _(noti_str),
640 NULL, 0.0, TRUE, FALSE);
645 /* initialize UG module */
646 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
647 setting_retm_if(!cbs, "calloc failed");
648 cbs->layout_cb = setting_main_layout_ug_cb;
649 cbs->result_cb = setting_main_result_ug_cb;
650 cbs->destroy_cb = setting_main_destroy_ug_cb;
651 cbs->priv = (void *)ad;
653 char *path = get_ug_path_from_ug_args((void *)(pitem->ug_name)); /* void* -> char* */
654 app_control_h svc = get_bundle_from_ug_args((void *)(pitem->ug_name)); /* void* -> char* */
655 setting_main_click_grid_item_ug_cb(ad, obj, path, svc, cbs);
659 app_control_destroy(svc);
661 int click_times = setting_cfg_get_click_times((char *)(pitem->name));
662 setting_cfg_set_click_times((char *)(pitem->name), ++click_times);
663 setting_cfg_file_update();
666 static Eina_Bool _navibar_back_pop_cb(void *data, Elm_Object_Item *it)
669 retv_if(!data, EINA_FALSE);
670 setting_main_appdata *ad = (setting_main_appdata *) data;
672 if (ad && ad->win_main) {
673 elm_win_lower(ad->win_main);
681 void _setting_genlist_itc_init(void *cb)
683 setting_main_appdata *ad = (setting_main_appdata *) cb;
685 /* [UI] create structures for genlist style */
686 setting_create_Gendial_itc("1line", &(ad->itc[GENDIAL_Type_1text_1icon_2]));
687 setting_create_Gendial_itc("1line", &(ad->itc[GENDIAL_Type_1text_2icon]));
688 setting_create_Gendial_itc("1line", &(ad->itc[GENDIAL_Type_1icon_2text]));
689 setting_create_Gendial_itc("dialogue/1text.1icon.2", &(ad->itc[GENDIAL_Type_1text_2icon_2]));
690 setting_create_Gendial_itc("dialogue/2text.2icon.3", &(ad->itc[GENDIAL_Type_2text_2icon_3]));
691 setting_create_Gendial_itc("groupindex", &(ad->itc[GENDIAL_Type_group_item]));
692 setting_create_Gendial_itc("searchbar", &(ad->itc[GENDIAL_Type_sel_all]));
693 setting_create_Gendial_itc("setting.1text.2icon", &(ad->itc[GENDIAL_Type_1text_2icon_9]));
694 setting_create_Gendial_itc("setting.1text.2icon.1", &(ad->itc[GENDIAL_Type_1text_2icon_10]));
695 setting_create_Gendial_itc("dialogue/2text", &(ad->itc[GENDIAL_Type_2text_3]));
697 setting_create_Gendial_itc("1line", &(ad->itc[GENDIAL_Type_1text_2icon_divider]));
698 setting_create_Gendial_itc("groupindex", &(ad->itc[GENDIAL_Type_expandable_proc]));
700 ad->itc_expand_grid.func.del = NULL; /* _gl_Gendial_del; */
703 static void _setting_tapi_init(void *cb)
705 setting_main_appdata *ad = (setting_main_appdata *) cb;
706 /*pass NULL to let TAPI access default module */
707 ad->handle = tel_init(NULL);
709 SETTING_TRACE_ERROR("*** [ERR] tel_init failed ***");
711 SETTING_TRACE("tel_init ok[handle:%p]", ad->handle);
715 static void _setting_tapi_deinit(void *cb)
717 setting_main_appdata *ad = (setting_main_appdata *) cb;
720 int tapi_ret = tel_deinit(ad->handle);
721 if (tapi_ret != TAPI_API_SUCCESS) {
722 SETTING_TRACE_DEBUG("*** [ERR] tel_deinit. [%d] ***", tapi_ret);
724 SETTING_TRACE("*** tel_deinit OK ");
730 /* "virtualkeypad,state,on" */
731 static void ___title_toolbar_show(void *data, Evas_Object *obj, void *event_info)
734 setting_main_appdata *ad = (setting_main_appdata *) data;
736 Evas_Object *navi_bar = NULL;
738 if (ad->isInUGMode && ad->ug) {
739 Evas_Object *layout = (Evas_Object *)ug_get_layout(ad->ug);
741 navi_bar = elm_object_part_content_get(layout, "elm.swallow.content");
744 navi_bar = ad->navibar_main;
747 const char *support = evas_object_data_get(navi_bar, "sip.naviframe.title_obj");
748 SETTING_TRACE("support:%s", support);
749 Elm_Object_Item *top_item = elm_naviframe_top_item_get(navi_bar);
750 if (0 == safeStrCmp("SEARCH", support)) {
752 } else if (support) {
754 elm_object_item_signal_emit(top_item, "elm,state,sip,shown", "");
759 /* "virtualkeypad,state,off" */
760 static void ___title_toolbar_hide(void *data, Evas_Object *obj, void *event_info)
763 setting_main_appdata *ad = (setting_main_appdata *) data;
765 Evas_Object *navi_bar = NULL;
767 if (ad->isInUGMode && ad->ug) {
768 Evas_Object *layout = (Evas_Object *)ug_get_layout(ad->ug);
770 navi_bar = elm_object_part_content_get(layout, "elm.swallow.content");
773 navi_bar = ad->navibar_main;
776 const char *support = evas_object_data_get(navi_bar, "sip.naviframe.title_obj");
778 SETTING_TRACE("support:%s", support);
779 Elm_Object_Item *top_item = elm_naviframe_top_item_get(navi_bar);
780 if (0 == safeStrCmp("SEARCH", support)) {
782 } else if (support) {
784 elm_object_item_signal_emit(top_item, "elm,state,sip,hidden", "");
789 Evas_Object *setting_main_layout_conform_create(Evas_Object *win_layout, Evas_Object *win_obj, void *data)
793 Evas_Object *layout = NULL;
795 Evas_Object *conform = NULL;
796 /*conform = elm_conformant_add(win_obj); */
797 conform = (Evas_Object *) app_get_preinitialized_conformant();
799 conform = elm_conformant_add(win_obj);
801 setting_main_appdata *ad = (setting_main_appdata *) data;
806 SETTING_TRACE_DEBUG("Add conformant!!!!!");
809 layout = elm_layout_add(conform);
810 setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
812 elm_layout_theme_set(layout, "layout", "application", "default");
813 evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
814 evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
815 /*elm_win_resize_object_add(win_obj, layout); */
816 elm_win_resize_object_add(win_obj, conform);
817 elm_object_content_set(conform, layout);
819 Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
820 elm_object_part_content_set(layout, "elm.swallow.bg", bg);
821 evas_object_show(layout);
823 evas_object_smart_callback_add(conform, "virtualkeypad,state,on", ___title_toolbar_show, ad);
824 evas_object_smart_callback_add(conform, "virtualkeypad,state,off", ___title_toolbar_hide, ad);
826 elm_win_conformant_set(ad->win_main, EINA_TRUE);
827 evas_object_show(conform);
830 Evas_Object *indicator_bg = elm_bg_add(conform);
831 elm_object_style_set(indicator_bg, "indicator/headerbg");
832 elm_object_part_content_set(conform, "elm.swallow.indicator_bg", indicator_bg);
833 evas_object_show(indicator_bg);
835 ad->conform = conform;
836 evas_object_data_set(win_obj, "conformant", conform);
837 LAUNCH_SETTING_OUT();
842 * @brief create all view layout
847 * navibar <- view_layout <- "elm.swallow.bg" : bg
848 * <- "elm.swallow.content" : all_list
849 * <- "elm.swallow.left" : left_panel
851 static int setting_main_create(void *cb)
855 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
856 setting_main_appdata *ad = (setting_main_appdata *) cb;
858 _setting_tapi_init(ad);
859 _setting_genlist_itc_init(ad);
860 settinig_drawer_hash_init(ad);
862 /* create a layout conformant */
863 ad->ly_main = setting_main_layout_conform_create(ad->win_main, ad->win_main, ad);
864 setting_retvm_if(ad->ly_main == NULL, FALSE, "ly_main == NULL");
866 /* create a navibar */
867 ad->navibar_main = setting_create_navi_bar(ad->ly_main);
868 setting_retvm_if(ad->navibar_main == NULL, FALSE, "navibar_main == NULL");
869 setting_conformant_keypad_state(ad->win_main, TRUE);
873 Evas_Object *view_layout = elm_layout_add(ad->navibar_main);
874 setting_retvm_if(view_layout == NULL, FALSE, "view_layout == NULL");
875 elm_layout_theme_set(view_layout, "layout", "application", "default");
876 evas_object_show(view_layout);
877 ad->view_layout = view_layout;
879 /* push a view to the naviframe */
880 Elm_Object_Item *navi_it = elm_naviframe_item_push(ad->navibar_main, "IDS_ST_OPT_SETTINGS", NULL, NULL, view_layout, NULL);
881 elm_naviframe_item_title_enabled_set(navi_it, EINA_TRUE, EINA_TRUE);
882 ad->main_navi_it = navi_it;
883 elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
884 elm_naviframe_item_pop_cb_set(navi_it, _navibar_back_pop_cb, ad);
886 if (! is_searchmode_app(ad->is_searchmode)) {
887 ad->list_type = SETTING_LIST_VIEW;
888 ad->view_type = SETTING_TAB_VIEW_QUICK_SETTINGS;
889 (void)preference_get_int(PREFKEY_VIEW_TYPE, &ad->list_type);
890 (void)preference_get_int(PREFKEY_TAB_VIEW_TAB, &ad->view_type);
891 SETTING_TRACE("ad->list_type:%d", ad->list_type);
892 SETTING_TRACE("ad->view_type:%d", ad->view_type);
894 Evas_Object *all_list = NULL;
896 all_list = _view_list_geter(ad);
898 setting_retvm_if(all_list == NULL, FALSE, "all_list == NULL");
899 elm_object_part_content_set(view_layout, "elm.swallow.content", all_list);
903 setting_view_main.is_create = 1;
904 LAUNCH_SETTING_OUT();
906 return SETTING_RETURN_SUCCESS;
909 static int setting_main_destroy(void *cb)
913 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
915 setting_main_appdata *ad = (setting_main_appdata *) cb;
916 if (0 == setting_view_main.is_create) {
917 /*already not exsit */
918 return SETTING_RETURN_SUCCESS;
920 evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,on", ___title_toolbar_show);
921 evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,off", ___title_toolbar_hide);
922 evas_object_data_set(ad->win_main, "conformant", NULL);
923 _setting_tapi_deinit(ad);
925 if (ad->event_freeze_timer) {
926 ecore_timer_del(ad->event_freeze_timer);
927 ad->event_freeze_timer = NULL;
929 evas_object_smart_callback_del(ad->main_genlist, "realized", __gl_realized_cb);
930 if (ad->save_idler) {
931 ecore_timer_del(ad->save_idler);
932 ad->save_idler = NULL;
935 if (ad->update_idler) {
936 ecore_timer_del(ad->update_idler);
937 ad->update_idler = NULL;
941 ecore_timer_del(ad->bt_timer);
944 if (ad->wifi_timer) {
945 ecore_timer_del(ad->wifi_timer);
946 ad->wifi_timer = NULL;
949 ecore_timer_del(ad->nfc_timer);
950 ad->nfc_timer = NULL;
953 if (ad->update_font_idler) {
954 ecore_idler_del(ad->update_font_idler);
955 ad->update_font_idler = NULL;
958 if (ad->driving_mode_popup) {
959 evas_object_del(ad->driving_mode_popup);
960 ad->driving_mode_popup = NULL;
963 elm_object_part_content_unset(ad->view_layout, "elm.swallow.content");
964 elm_object_item_part_content_unset(ad->main_navi_it, "tabbar");
965 if (ad->sc_gl[SC_All_List]) {
966 evas_object_del(ad->sc_gl[SC_All_List]);
967 ad->sc_gl[SC_All_List] = NULL;
969 if (ad->sc_gl[SC_All_Grid]) {
970 evas_object_del(ad->sc_gl[SC_All_Grid]);
971 ad->sc_gl[SC_All_Grid] = NULL;
975 evas_object_del(ad->ctrl_bar);
978 int i = SETTING_TAB_VIEW_QUICK_SETTINGS;
979 for (; i < SETTING_TAB_VIEW_MAX; i++) {
980 if (ad->sub_view[i]) {
981 evas_object_del(ad->sub_view[i]);
982 ad->sub_view[i] = NULL;
986 if (ad->save_idler) {
987 ecore_timer_del(ad->save_idler);
988 ad->save_idler = NULL;
991 if (ad->update_idler) {
992 ecore_timer_del(ad->update_idler);
993 ad->update_idler = NULL;
997 ecore_timer_del(ad->bt_timer);
1000 if (ad->wifi_timer) {
1001 ecore_timer_del(ad->wifi_timer);
1002 ad->wifi_timer = NULL;
1004 if (ad->nfc_timer) {
1005 ecore_timer_del(ad->nfc_timer);
1006 ad->nfc_timer = NULL;
1009 if (ad->update_font_idler) {
1010 ecore_idler_del(ad->update_font_idler);
1011 ad->update_font_idler = NULL;
1015 effect_playsound_close();
1017 /* then destroy the UI object. */
1019 evas_object_del(ad->ly_main);
1025 int ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE, __vconf_change_cb);
1027 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
1031 setting_view_main.is_create = 0;
1033 return SETTING_RETURN_SUCCESS;
1036 static int setting_main_update(void *cb)
1038 SETTING_TRACE_BEGIN;
1041 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1043 setting_main_appdata *ad = (setting_main_appdata *) cb;
1045 if (ad->ly_main != NULL) {
1046 /*evas_object_show(ad->ly_main); */
1049 return SETTING_RETURN_SUCCESS;
1054 static int setting_main_cleanup(void *cb)
1056 SETTING_TRACE_BEGIN;
1058 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1060 setting_main_appdata *ad = (setting_main_appdata *) cb;
1062 if (ad->ly_main != NULL) {
1063 /*evas_object_hide(ad->ly_main); */
1066 return SETTING_RETURN_SUCCESS;
1070 /* ***************************************************
1074 ***************************************************/
1075 /*/////////////////////////////////////////////////////////////////////////////////// */