Tizen 2.0 Release
[apps/home/settings.git] / src / setting-main.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
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
8  *
9  *     http://floralicense.org/license/
10  *
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.
16  */
17 #include <tapi_common.h>
18 #include <aul.h>
19 #include <ail.h>
20 #include <time.h>
21 #include <setting-main.h>
22 #include <setting-plugin.h>
23 #include <wifi.h>
24 #include <tethering.h>
25 #include <bluetooth.h>
26 #include <nfc.h>
27
28 #define PLUGIN_PREFIX "/opt"
29
30 typedef struct _DrawAppInfo
31 {
32         int ncount;
33         //------------------------------------
34         void (*draw_app)(void* arg, char* name, char* pkgname);
35         void* data;
36 } DrawAppInfo;
37
38 static int setting_main_create(void *cb);
39 static int setting_main_destroy(void *cb);
40 static int setting_main_update(void *cb);
41 static int setting_main_cleanup(void *cb);
42
43 setting_view setting_view_main = {
44         .create = setting_main_create,
45         .update = setting_main_update,
46         .destroy = setting_main_destroy,
47         .cleanup = setting_main_cleanup,
48 };
49
50 setting_main_appdata *g_main_ad = NULL;
51
52 static void setting_main_tapi_event_cb(TapiHandle *handle, int result, void *data, void *user_data);
53 static int setting_main_refresh(void *data);
54 static void __alternate_flight_mode(Evas_Object *check);
55 static void setting_main_click_Gendial_list_flight_mode_cb(void *data,
56                                                            Evas_Object *obj,
57                                                            void *event_info);
58 static void __alternate_flight_mode(Evas_Object *check);
59
60 void setting_main_click_list_item_ug_cb(void *data, Evas_Object *obj, char *ug_to_load, service_h svc, struct ug_cbs *cbs);
61
62 static void
63 __setting_chk_changed(void *data, Evas_Object *obj, void *event_info)
64 {
65         /* SETTING_TRACE_BEGIN; */
66         retm_if(data == NULL, "Data parameter is NULL");
67         Setting_GenGroupItem_Data *list_item =
68             (Setting_GenGroupItem_Data *) data;
69         /* SETTING_TRACE("process item [%s]", _(list_item->keyStr)); */
70         list_item->chk_status = elm_check_state_get(obj);
71
72         Eina_List *check_list = g_main_ad->item_check_list;
73         Setting_GenGroupItem_Data *item = NULL;
74         bool isFoundNotSelSomeone = FALSE;
75         bool isFoundSelSomeone = FALSE;
76         while (check_list) {
77                 item = (Setting_GenGroupItem_Data *)
78                     eina_list_data_get(check_list);
79                 if (NULL == item) {
80                         continue;
81                 }
82                 if (!(item->chk_status)) {
83                         isFoundNotSelSomeone = TRUE;
84                 } else {
85                         isFoundSelSomeone = TRUE;
86                 }
87                 if (isFoundNotSelSomeone && isFoundSelSomeone) {
88                         break;
89                 }
90                 check_list = eina_list_next(check_list);
91         }
92
93         if (isFoundNotSelSomeone) {
94                 g_main_ad->check_all_item->chk_status = 0;      /* for update new state */
95         } else {
96                 g_main_ad->check_all_item->chk_status = 1;      /* for update new state */
97         }
98         elm_object_item_data_set(g_main_ad->check_all_item->item, g_main_ad->check_all_item);
99         elm_genlist_item_update(g_main_ad->check_all_item->item);
100
101         if (isFoundSelSomeone) {
102                 /* SETTING_TRACE("Set it to active"); */
103                 /*
104                 elm_object_item_disabled_set(elm_toolbar_last_item_get
105                                                  (g_main_ad->controllbar_all_check),
106                                                  EINA_FALSE);*/
107         }
108 }
109
110 static void __setting_list_changed(void *data, Evas_Object *obj,
111                                    void *event_info)
112 {
113
114         SETTING_TRACE_BEGIN;
115         /* error check */
116         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
117
118         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
119         elm_genlist_item_selected_set(item, 0);
120         Setting_GenGroupItem_Data *list_item =
121             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
122
123         int old_status = elm_check_state_get(list_item->eo_check);
124         /* new status */
125         list_item->chk_status = !old_status;
126         elm_check_state_set(list_item->eo_check, list_item->chk_status);
127
128         Eina_List *check_list = g_main_ad->item_check_list;
129         Setting_GenGroupItem_Data *group_item = NULL;
130         bool isFoundNotSelSomeone = FALSE;
131         bool isFoundSelSomeone = FALSE;
132         while (check_list) {
133                 group_item = (Setting_GenGroupItem_Data *)
134                     eina_list_data_get(check_list);
135                 if (NULL == group_item) {
136                         continue;
137                 }
138                 if (!(group_item->chk_status)) {
139                         isFoundNotSelSomeone = TRUE;
140                         /* break; */
141                 } else {
142                         isFoundSelSomeone = TRUE;
143                 }
144                 if (isFoundNotSelSomeone && isFoundSelSomeone) {
145                         break;
146                 }
147
148                 check_list = eina_list_next(check_list);
149         }
150
151         if (isFoundNotSelSomeone) {
152                 g_main_ad->check_all_item->chk_status = 0;      /* for update new state */
153         } else {
154                 g_main_ad->check_all_item->chk_status = 1;      /* for update new state */
155         }
156         elm_object_item_data_set(g_main_ad->check_all_item->item, g_main_ad->check_all_item);
157         elm_genlist_item_update(g_main_ad->check_all_item->item);
158
159         if (isFoundSelSomeone) {
160                 /* SETTING_TRACE("Set it to active"); */
161                 /*
162                 elm_object_item_disabled_set(elm_toolbar_last_item_get
163                                                  (g_main_ad->controllbar_all_check),
164                                                  EINA_FALSE);*/
165         }
166
167 }
168
169 static void
170 __setting_chk_sel_all_changed(void *data, Evas_Object *obj, void *event_info)
171 {
172         /* SETTING_TRACE_BEGIN; */
173         retm_if(data == NULL, "Data parameter is NULL");
174         Setting_GenGroupItem_Data *list_item =
175             (Setting_GenGroupItem_Data *) data;
176         bool is_all_checked = elm_check_state_get(obj);
177         list_item->chk_status = is_all_checked; /* for update new state */
178         /* SETTING_TRACE("is_all_checked:%d", is_all_checked); */
179
180         Eina_List *check_list = g_main_ad->item_check_list;
181
182         while (check_list) {
183                 list_item = (Setting_GenGroupItem_Data *)
184                     eina_list_data_get(check_list);
185                 if (NULL == list_item) {
186                         continue;
187                 }
188                 list_item->chk_status = is_all_checked;
189                 elm_object_item_data_set(list_item->item, list_item);
190                 elm_genlist_item_update(list_item->item);
191                 check_list = eina_list_next(check_list);
192         }
193         if (is_all_checked) {
194                 /*
195                 elm_object_item_disabled_set(elm_toolbar_last_item_get
196                                                  (g_main_ad->controllbar_all_check),
197                                                  EINA_FALSE);*/
198         }
199 }
200
201 static void __setting_list_sel_all_changed(void *data, Evas_Object *obj,
202                                            void *event_info)
203 {
204         /* error check */
205         SETTING_TRACE_BEGIN;
206         SETTING_TRACE();
207         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
208         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
209         elm_genlist_item_selected_set(item, 0);
210         Setting_GenGroupItem_Data *list_item =
211             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
212
213         int old_status = elm_check_state_get(list_item->eo_check);
214         /* new status */
215         int is_all_checked = list_item->chk_status = !old_status;
216         elm_check_state_set(list_item->eo_check, list_item->chk_status);
217
218         Eina_List *check_list = g_main_ad->item_check_list;
219
220         while (check_list) {
221                 list_item = (Setting_GenGroupItem_Data *)
222                     eina_list_data_get(check_list);
223                 if (NULL == list_item) {
224                         continue;
225                 }
226                 list_item->chk_status = is_all_checked;
227                 /* elm_check_state_set(list_item->eo_check, is_all_checked); */
228                 elm_object_item_data_set(list_item->item, list_item);
229                 elm_genlist_item_update(list_item->item);
230                 check_list = eina_list_next(check_list);
231         }
232         if (is_all_checked) {
233                 /*
234                 elm_object_item_disabled_set(elm_toolbar_last_item_get
235                                                  (g_main_ad->controllbar_all_check),
236                                                  EINA_FALSE);*/
237         }
238
239 }
240
241 static void __load_check_list(void *data, Evas_Object **genlist,
242                               char *menuNameKey)
243 {
244         SETTING_TRACE_BEGIN;
245         setting_main_appdata *ad = (setting_main_appdata *) data;
246
247         bool state = FALSE;
248         char *keyStr = NULL;
249         Cfg_Item_Position pos = Cfg_Item_Pos_Uninstall;
250         bool isFoundNonSelItem = FALSE;
251         bool isFoundSelSomeoneItem = FALSE;
252
253         int i, j;
254         char *icon_path = NULL;
255
256         ad->check_all_item =
257             setting_create_Gendial_field_def(ad->gl_sel_all,
258                                              &(ad->itc[GENDIAL_Type_sel_all]),
259                                              __setting_list_sel_all_changed, ad,
260                                              SWALLOW_Type_1CHECK, NULL, NULL,
261                                              state, KeyStr_Select_All, NULL,
262                                              __setting_chk_sel_all_changed);
263         __BACK_POINTER_SET(ad->check_all_item);
264
265         Setting_GenGroupItem_Data *item = NULL;
266         Setting_GenGroupItem_Data *category_item = NULL;
267         for (i = 0; i < setting_cfg_get_category_length(); i++) {
268                 if (NULL == menuNameKey) {
269                         /* SETTING_TRACE("load all the items in config file"); */
270                 } else
271                     if (safeStrCmp
272                         (setting_cfg_get_category_name(i), menuNameKey)) {
273                         continue;
274                 }
275                 char *category_name = setting_cfg_get_category_name(i);
276
277                 category_item =
278                     setting_create_Gendial_field_group_titleItem(*genlist,
279                                                                  &(ad->itc
280                                                                    [GENDIAL_Type_group_item]),
281                                                                  NULL,
282                                                                  ELM_GENLIST_ITEM_NONE,
283                                                                  category_name,
284                                                                  NULL);
285                 if (category_item) {
286                         for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
287                                 keyStr = setting_cfg_get_keyname_idx(i, j);
288                                 pos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
289
290                                 if (Cfg_Item_Pos_Level1 == pos) {
291                                         state = FALSE;
292                                         isFoundNonSelItem = TRUE;
293                                 } else {
294                                         state = TRUE;
295                                         isFoundSelSomeoneItem = TRUE;
296                                 }
297
298                         icon_path = setting_cfg_get_icon_path_idx(i, j);
299                         item =
300                             setting_create_Gendial_field_groupitem(*genlist,
301                                                                    &(ad->itc
302                                                                      [GENDIAL_Type_1text_2icon_2]),
303                                                                    category_item->item,
304                                                                    __setting_list_changed,
305                                                                    ad,
306                                                                    SWALLOW_Type_1CHECKICON,
307                                                                    NULL,
308                                                                    icon_path,
309                                                                    state,
310                                                                    keyStr, NULL,
311                                                                    __setting_chk_changed);
312
313                                 ad->item_check_list =
314                                     eina_list_append(ad->item_check_list, item);
315                         }
316                 } else {
317                         SETTING_TRACE_ERROR("category_item is NULL");
318                 }
319         }
320
321         if (ad->check_all_item) {
322                 if (isFoundNonSelItem) {
323                         ad->check_all_item->chk_status = 0;     /* for update new state */
324                 } else {
325                         ad->check_all_item->chk_status = 1;     /* for update new state */
326                 }
327                 elm_object_item_data_set(ad->check_all_item->item, ad->check_all_item);
328                 elm_genlist_item_update(ad->check_all_item->item);
329         } else {
330                 SETTING_TRACE_ERROR("ad->check_all_item is NULL");
331         }
332
333         if (isFoundSelSomeoneItem) {
334         /*      elm_object_item_disabled_set(elm_toolbar_last_item_get
335                                                  (ad->controllbar_all_check),
336                                                  EINA_FALSE);
337                                                  */
338         } else {
339         /*
340                 elm_object_item_disabled_set(elm_toolbar_last_item_get
341                                                  (ad->controllbar_all_check),
342                                                  EINA_TRUE);*/
343         }
344         SETTING_TRACE_END;
345 }
346
347
348 static Setting_GenGroupItem_Data * __flightmode_handler(void* data, char* keyStr, char* icon_path, char* ug_name, Evas_Object *genlist)
349 {
350         // NOT UG --> it's just UI drawing
351
352         setting_main_appdata *ad = (setting_main_appdata *)data;
353         int value, err;
354         setting_get_bool_slp_key (BOOL_SLP_SETTING_FLIGHT_MODE, &value, &err);
355
356         /* create flight_mode */
357         ad->data_flight = setting_create_Gendial_field_groupitem(genlist,
358                                                    &(ad->itc[GENDIAL_Type_1text_2icon]),
359                                                    NULL,
360                                                    setting_main_click_Gendial_list_flight_mode_cb,
361                                                    ad,
362                                                    SWALLOW_Type_1ICON_1RADIO,
363                                                    icon_path,
364                                                    NULL,
365                                                    value,
366                                                    keyStr,
367                                                    NULL,
368                                                    setting_main_click_list_flight_mode_cb);
369         __BACK_POINTER_SET(ad->data_flight);
370
371         return ad->data_flight;
372 }
373
374 static Setting_GenGroupItem_Data * __wifi_handler(void* data, char* keyStr, char* icon_path, char* ug_args, Evas_Object *genlist)
375 {
376         setting_main_appdata *ad = (setting_main_appdata *)data;
377         int value, err;
378         setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
379
380         //char* pa_wifi = get_pa_Wi_Fi_on_off_str();
381         ad->data_wifi = setting_create_Gendial_field_groupitem(genlist,
382                                                    &(ad->itc[GENDIAL_Type_1text_2icon]),
383                                                    NULL,
384                                                    setting_main_click_list_ex_ug_cb,
385                                                    ug_args,
386                                                    SWALLOW_Type_1ICON_1RADIO,
387                                                    icon_path,
388                                                    NULL,
389                                                    value,
390                                                    keyStr,
391                                                    NULL,
392                                                    setting_main_click_list_wifi_mode_cb);
393         __BACK_POINTER_SET(ad->data_wifi);
394         if(ad->data_wifi)
395                 ad->data_wifi->userdata = ad;
396         //G_FREE(pa_wifi);
397
398         return ad->data_wifi;
399 }
400
401 static Setting_GenGroupItem_Data * __bluetooth_handler(void* data, char* keyStr, char* icon_path, char* ug_args, Evas_Object *genlist)
402 {
403         setting_main_appdata *ad = (setting_main_appdata *)data;
404         int value, err;
405         setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
406
407         ad->data_bt = setting_create_Gendial_field_groupitem(genlist,
408                                                    &(ad->itc[GENDIAL_Type_1text_2icon]),
409                                                    NULL,
410                                                    setting_main_click_list_ex_ug_cb,
411                                                    ug_args,
412                                                    SWALLOW_Type_1ICON_1RADIO,
413                                                    icon_path,
414                                                    NULL,
415                                                    value,
416                                                    keyStr,
417                                                    NULL,
418                                                    setting_main_click_list_bt_mode_cb);
419         __BACK_POINTER_SET(ad->data_bt);
420         if(ad->data_bt)
421                 ad->data_bt->userdata = ad;
422
423         return ad->data_bt;
424 }
425
426 static Setting_GenGroupItem_Data * __allshare_handler(void* data, char* keyStr, char* icon_path, char* ug_args, Evas_Object *genlist)
427 {
428         setting_main_appdata *ad = (setting_main_appdata *)data;
429
430         Setting_GenGroupItem_Data * obj = setting_create_Gendial_field_groupitem(genlist,
431                                                                    &(ad->itc[GENDIAL_Type_1text_1icon_2]),
432                                                                    NULL,
433                                                                    setting_main_click_list_default_ug_cb,
434                                                                    ad,
435                                                                    SWALLOW_Type_INVALID,
436                                                                    icon_path,
437                                                                    NULL, 0,
438                                                                    keyStr,
439                                                                    NULL,
440                                                                    NULL);
441         return obj;
442 }
443
444 static Setting_GenGroupItem_Data * __network_handler(void* data, char* keyStr, char* icon_path, char* ug_args, Evas_Object *genlist)
445 {
446         setting_main_appdata *ad = (setting_main_appdata *)data;
447
448         ad->data_network = setting_create_Gendial_field_groupitem(genlist,
449                                                                        &(ad->itc[GENDIAL_Type_1text_1icon_2]),
450                                                                        NULL,
451                                                                        setting_main_click_list_network_ug_cb,
452                                                                        ad,
453                                                                        SWALLOW_Type_INVALID,
454                                                                        icon_path,
455                                                                        NULL, 0,
456                                                                        keyStr,
457                                                                        NULL,
458                                                                        NULL);
459
460         return ad->data_network;
461 }
462
463 static Setting_GenGroupItem_Data * __nfc_handler(void* data, char* keyStr, char* icon_path, char* ug_args, Evas_Object *genlist)
464 {
465         setting_main_appdata *ad = (setting_main_appdata *)data;
466
467         int value, err;
468         setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
469
470         ad->data_nfc = setting_create_Gendial_field_groupitem(genlist,
471                                                    &(ad->itc[GENDIAL_Type_1text_2icon]),
472                                                    NULL,
473                                                    setting_main_click_list_ex_ug_cb,
474                                                    ug_args,
475                                                    SWALLOW_Type_1ICON_1RADIO,
476                                                    icon_path,
477                                                    NULL,
478                                                    value,
479                                                    keyStr,
480                                                    NULL,
481                                                    setting_main_click_list_nfc_mode_cb);
482         __BACK_POINTER_SET(ad->data_nfc);
483         if(ad->data_nfc)
484                 ad->data_nfc->userdata = ad;
485
486 #if DISABLED_CODE
487         setting_create_Gendial_field_def(genlist, &itc_multiline_text, NULL,
488                  ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
489                  NULL, NULL, 0, SETTING_NFC_DESC, NULL, NULL);
490         elm_genlist_item_select_mode_set(elm_genlist_item_append(genlist, &(itc_seperator), NULL, NULL,ELM_GENLIST_ITEM_NONE, NULL, NULL),
491                                          ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
492 #endif
493         return ad->data_nfc;
494 }
495
496 static Setting_GenGroupItem_Data * __default_handler(void* data, char* keyStr, char* icon_path, char* ug_args, Evas_Object *genlist)
497 {
498         setting_main_appdata *ad = (setting_main_appdata *)data;
499         Setting_GenGroupItem_Data * obj = setting_create_Gendial_field_groupitem(genlist,
500                                                            &(ad->itc[GENDIAL_Type_1text_1icon_2]),
501                                                            NULL,
502                                                            setting_main_click_list_ex_ug_cb,
503                                                            ug_args,
504                                                            SWALLOW_Type_INVALID,
505                                                            icon_path,
506                                                            NULL, 0,
507                                                            keyStr,
508                                                            NULL,
509                                                            NULL);
510
511
512         return obj;
513 }
514
515 typedef struct mainlist_entry mainlist_entry;
516
517 struct mainlist_entry {
518         char* title;
519         Setting_GenGroupItem_Data* (*ui_handler)(void* data, char* title, char* iconpath, char* ugname, Evas_Object *genlist);
520 };
521
522
523 enum {
524         MAINLIST_ENTRY_FLIGHT_MODE = 0,
525         MAINLIST_ENTRY_WIFI,
526         MAINLIST_ENTRY_BT,
527         MAINLIST_ENTRY_ALLSHARE,
528         MAINLIST_ENTRY_NETWORK,
529         MAINLIST_ENTRY_NFC,
530         MAINLIST_ENTRY_DEFAULT,
531         MAINLIST_ENTRY_MAX,
532 };
533
534 static mainlist_entry mainlist_table[] = {
535                 {KeyStr_FlightMode,     __flightmode_handler},                  // 0 --> NOT UG
536                 {KeyStr_WiFi,                   __wifi_handler},                                // 1 --> UG
537                 {KeyStr_Bluetooth,              __bluetooth_handler},                   // 1 --> UG
538                 {KeyStr_AllShare,               __allshare_handler},                    // NOT UG
539                 {KeyStr_Network,                __network_handler},                             // 1 --> UG
540                 {KeyStr_NFC,                    __nfc_handler},                                 // 1 --> UG
541                 {"Default",                     __default_handler},                             // 1 --> UG
542
543                 //--------------------------------------------------------------
544                 {NULL, NULL},
545         };
546
547
548 void __gl_realized(void *data, Evas_Object *obj, void *event_info)
549 {
550         //SETTING_TRACE_BEGIN;
551         setting_retm_if(data == NULL, "invalid parameter: data is NULL");
552         setting_retm_if(event_info == NULL, "invalid parameter: event_info is NULL");
553         setting_main_appdata *ad = (setting_main_appdata *)data;
554         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
555         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item);
556
557         //setting_retm_if(list_item == NULL, "list_item is NULL");
558
559         if (list_item) {
560                 if (list_item->group_style == SETTING_GROUP_STYLE_TOP) {
561                         elm_object_item_signal_emit(item, "elm,state,top", "");
562                 } else if (list_item->group_style == SETTING_GROUP_STYLE_BOTTOM) {
563                         elm_object_item_signal_emit(item, "elm,state,bottom", "");
564                 } else if (list_item->group_style == SETTING_GROUP_STYLE_CENTER) {
565                         elm_object_item_signal_emit(item, "elm,state,center", "");
566                 } else if (list_item->group_style == SETTING_GROUP_STYLE_NONE) {
567                         /* do nothing */
568                 } else {
569                         SETTING_TRACE_ERROR("list_item->group_style is wrong");
570                 }
571         } else {
572                 /* item is used for description */
573                 elm_object_item_signal_emit(item, "elm,state,center", "");
574         }
575 }
576
577 // Flight Mode  - not UG
578 // All share    - not UG
579 // WiFi                 - added toggle
580 // Bluetooth
581 // Mobile AP
582 // Network
583 // NFC
584 // Other UGs
585 void __load_connectivity_menu_list(void *data, Cfg_Item_Position inputPos, Evas_Object *genlist)
586 {
587         SETTING_TRACE_BEGIN;
588         setting_main_appdata *ad = data;
589         //group title, only display in setting main view
590         if (SETTING_VIEW_MAIN == ad->view_load) {
591                 setting_create_Gendial_field_group_titleItem(ad->main_genlist,
592                                                      &(ad->itc[GENDIAL_Type_group_item]),
593                                                      NULL,
594                                                      ELM_GENLIST_ITEM_NONE,
595                                                      KeyStr_Connectivity, NULL);
596         }
597
598         int idx_second_menu = 0;
599
600         char *keyStr = NULL;
601         char *icon_path = NULL;
602         char *ug_args = NULL;
603         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
604         int i, j;
605
606         bool is_emulator = isEmulBin();
607
608         Setting_GenGroupItem_Data *item_data = NULL;
609         int index = 0;
610
611         for (i = 0; i < setting_cfg_get_category_length(); i++) {
612                 if (safeStrCmp
613                     (setting_cfg_get_category_name(i), KeyStr_Connectivity))
614                         continue;
615
616                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
617                         keyStr = setting_cfg_get_keyname_idx(i, j);
618                         tmpPos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
619                         ug_args = setting_cfg_get_ug_args_idx(i, j);
620                         icon_path = setting_cfg_get_icon_path_idx(i, j);
621                         /* SETTING_TRACE_DEBUG("Got an item[keyStr:%s, ug_args:%s, pos:%d]", */
622                         /*                     keyStr, ug_args, tmpPos); */
623
624                         if (is_emulator) {
625                                 if (!safeStrCmp(KeyStr_FlightMode, keyStr)) {
626                                         continue; /* hide Flight Mode in Emulator*/
627                                 } else if (!safeStrCmp(KeyStr_WiFi, keyStr)) {
628                                         continue; /* hide WIFI in Emulator*/
629                                 } else if (!safeStrCmp(KeyStr_WiFiDirect, keyStr)) {
630                                         continue; /* hide WiFiDirect in Emulator*/
631                                 } else if (!safeStrCmp(KeyStr_Network, keyStr)) {
632                                         continue; /* hide Network in Emulator*/
633                                 } else if (!safeStrCmp(KeyStr_Bluetooth, keyStr)) {
634                                         continue; /* hide Bluetooth in Emulator*/
635                                 } else if (!safeStrCmp(KeyStr_MobileAP, keyStr)) {
636                                         continue; /* hide Tethering in Emulator*/
637                                 } else {
638                                         /* do nothing */
639                                 }
640                         }
641
642                         if (idx_second_menu < MAX_MORE_MENU_NUM
643                             && Cfg_Item_Pos_Level1 == tmpPos
644                             && SETTING_VIEW_MAIN == ad->view_load
645                             && MAIN_PROFILE_PREFERRED == ad->profile_type) {
646
647                                 if (is_ug_installed_by_ug_args(ug_args)) {
648                                         ad->more_connective_menus[idx_second_menu++] = keyStr;
649                                 }
650                         }
651
652                         if (Cfg_Item_Pos_Level_All == inputPos) {
653                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
654                                 continue;
655                         }
656
657                         if (!safeStrCmp(KeyStr_FlightMode, keyStr)) {   /* load special radio */
658                                 // ug == NULL
659                                 item_data = mainlist_table[MAINLIST_ENTRY_FLIGHT_MODE].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
660
661                         } else if (!safeStrCmp(KeyStr_AllShare, keyStr)) {      /* NOT UG */
662
663                                 item_data = mainlist_table[MAINLIST_ENTRY_ALLSHARE].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
664
665                         } else if (!safeStrCmp(KeyStr_WiFi, keyStr) && is_ug_installed_by_ug_args(ug_args)) {   /* load special icon */
666
667                                 item_data = mainlist_table[MAINLIST_ENTRY_WIFI].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
668
669                         } else if (!safeStrCmp(KeyStr_Bluetooth, keyStr) && is_ug_installed_by_ug_args(ug_args)) {      /* load special icon */
670
671                                 item_data = mainlist_table[MAINLIST_ENTRY_BT].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
672
673                         }
674 #if 0
675  else if (!safeStrCmp(KeyStr_MobileAP, keyStr) && is_ug_installed_by_ug_args(ug_args)) {        /* load special icon */
676
677                                 item_data = mainlist_table[MAINLIST_ENTRY_MOBILEAP].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
678
679                         }
680 #endif
681                          else if (!safeStrCmp(KeyStr_Network, keyStr) && is_ug_installed_by_ug_args(ug_args)) { /* load special UG */
682
683                                 item_data = mainlist_table[MAINLIST_ENTRY_NETWORK].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
684
685                         } else if (!safeStrCmp(KeyStr_NFC, keyStr) && is_ug_installed_by_ug_args(ug_args)) {    /* load special icon */
686                                 int nfc_value = FALSE; //default
687                                 vconf_get_bool(VCONFKEY_NFC_FEATURE, &nfc_value);
688                                 if (VCONFKEY_NFC_FEATURE_ON == nfc_value)
689                                 {
690                                         item_data = mainlist_table[MAINLIST_ENTRY_NFC].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
691                                 }
692                         } else {        /* load other UGs */
693                                 if (is_ug_installed_by_ug_args(ug_args))
694                                 {
695                                         item_data = mainlist_table[MAINLIST_ENTRY_DEFAULT].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
696                                 }
697                         }
698
699                         if (item_data) {
700                                 if (j == 0) {
701                                         item_data->group_style = SETTING_GROUP_STYLE_TOP;
702                                 } else if (j == setting_cfg_get_menu_length(i) - 1) {
703                                         item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
704                                 } else {
705                                         item_data->group_style = SETTING_GROUP_STYLE_CENTER;
706                                 }
707
708                                 if (index == 0) {
709                                         item_data->group_style = SETTING_GROUP_STYLE_TOP;
710                                 }
711                                 index++;
712                         }
713                 }
714         }
715
716         //end group , only display in setting main view
717 #if SUPPORT_MORE_ITEM_FUNCTION
718                 if (SETTING_VIEW_MAIN == ad->view_load && MAIN_PROFILE_PREFERRED == ad->profile_type && idx_second_menu > 0)
719                 {
720                         char sub_text[MAX_COMMON_BUFFER_LEN] = {0, };
721                         int idx = 0;
722                         while (idx < MAX_MORE_MENU_NUM && ad->more_connective_menus[idx])
723                         {
724                                 if (idx != 0)
725                                 {
726                                         safeStrNCat(sub_text, ", ", MAX_COMMON_BUFFER_LEN);
727                                 }
728                                 safeStrNCat(sub_text, _(ad->more_connective_menus[idx]), MAX_COMMON_BUFFER_LEN);
729                                 idx++;
730                         }
731
732                         ad->data_moreConnect =
733                                 setting_create_Gendial_field_groupitem(ad->main_genlist,
734                                                                        &(ad->itc[GENDIAL_Type_2text_3]),
735                                                                        NULL,
736                                                                        setting_main_click_list_more_cb,
737                                                                        ad,
738                                                                        SWALLOW_Type_INVALID,
739                                                                        NULL,
740                                                                        NULL,
741                                                                        0,
742                                                                        KeyStr_MoreConnect,
743                                                                        sub_text,
744                                                                        NULL);
745                         __BACK_POINTER_SET(ad->data_moreConnect);
746
747                         /* if has <more ..> item , change the last item_date to SETTING_GROUP_STYLE_CENTER*/
748                         if (item_data && index > 1) {
749                                 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
750                         }
751                         ad->data_moreConnect->group_style = SETTING_GROUP_STYLE_BOTTOM;
752
753                         item_data = ad->data_moreConnect;
754                         index++;
755                 }
756 #endif
757
758         if (index == 1) {
759                 item_data->group_style = SETTING_GROUP_STYLE_NONE;
760         } else if (index == 2) {
761                 item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
762         }
763         SETTING_TRACE_END;
764 }
765
766 void __load_connectivity_level0_list(void *data)
767 {
768         setting_main_appdata *ad = data;
769         __load_connectivity_menu_list(ad, Cfg_Item_Pos_Level0, ad->main_genlist);
770 }
771
772 void __load_connectivity_level_all_list(void *data)
773 {
774         SETTING_TRACE_BEGIN;
775         setting_main_appdata *ad = data;
776         __load_connectivity_menu_list(ad, Cfg_Item_Pos_Level_All, ad->main_genlist);
777 }
778
779 void __load_system_menu_list(void *data, Cfg_Item_Position inputPos, Evas_Object *genlist)
780 {
781         SETTING_TRACE_BEGIN;
782         SETTING_TRACE_DEBUG("pos :%d", inputPos);
783         setting_main_appdata *ad = data;
784         //group title, only display in setting main view
785         if (SETTING_VIEW_MAIN == ad->view_load) {
786                 setting_create_Gendial_field_group_titleItem(ad->main_genlist,
787                                                      &(ad->itc[GENDIAL_Type_group_item]),
788                                                      NULL,
789                                                      ELM_GENLIST_ITEM_NONE,
790                                                      KeyStr_System, NULL);
791         }
792         int idx_second_menu = 0;
793
794         char *keyStr = NULL;
795         char *icon_path = NULL;
796         char *ug_args = NULL;
797
798         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
799
800         int ncount = 0;
801         int i, j;
802
803         bool is_emulator = isEmulBin();
804
805         Setting_GenGroupItem_Data *item_data = NULL;
806         int index = 0;
807
808         //SETTING_TRACE("setting_cfg_get_category_length() :: %d ", setting_cfg_get_category_length());
809         for (i = 0; i < setting_cfg_get_category_length(); i++) {
810                 if (safeStrCmp(setting_cfg_get_category_name(i), KeyStr_System))
811                         continue;
812
813                 //SETTING_TRACE(" setting_cfg_get_menu_length(%d) :: %d ",i, setting_cfg_get_menu_length(i) );
814                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
815                         keyStr = setting_cfg_get_keyname_idx(i, j);
816                         /* sg_path = setting_cfg_get_ugpath_idx(i, j); */
817                         tmpPos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
818                         icon_path = setting_cfg_get_icon_path_idx(i, j);
819                         ug_args = setting_cfg_get_ug_args_idx(i, j);
820
821                         //SETTING_TRACE("KeyString :  %s , tmpPos : %d , inputPos : %d ", keyStr, tmpPos, inputPos );
822
823                         if (is_emulator) {
824                                 if (!safeStrCmp(KeyStr_Security, keyStr)) {
825                                         continue; /* hide Security in Emulator*/
826                                 } else if (!safeStrCmp(KeyStr_Memory, keyStr)) {
827                                         continue; /* hide Memory in Emulator*/
828                                 } else if (!safeStrCmp(KeyStr_Powersaving, keyStr)) {
829                                         continue; /* hide Powersaving in Emulator*/
830                                 } else if (!safeStrCmp(KeyStr_FlightMode, keyStr)) {
831                                         continue; /* hide Powersaving in Emulator*/
832                                 } else {
833                                         /* do nothing */
834                                 }
835                         }
836
837                         if (idx_second_menu < MAX_MORE_MENU_NUM
838                             && Cfg_Item_Pos_Level1 == tmpPos
839                             && SETTING_VIEW_MAIN == ad->view_load
840                             && MAIN_PROFILE_PREFERRED == ad->profile_type) {
841
842                             if (is_ug_installed_by_ug_args(ug_args)) {
843                                 ad->more_system_menus[idx_second_menu++] = keyStr;
844                             }
845                         }
846
847                         if (Cfg_Item_Pos_Level_All == inputPos) {
848                                 // do nothing
849                                 //SETTING_TRACE("Cfg_Item_Pos_Level_All == inputPos ---> no draw --- WHY?? ");
850                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
851                                 //SETTING_TRACE("inputPos == tmp Pos ---> no draw --- WHY?? ");
852                                 continue;
853                         }
854
855                         if (!safeStrCmp(KeyStr_FlightMode, keyStr)) {   /* load special radio */
856                                 // ug == NULL
857                                 item_data = mainlist_table[MAINLIST_ENTRY_FLIGHT_MODE].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
858
859                         }
860                         else if (!safeStrCmp(KeyStr_Landscape, keyStr)) {       /* load special UG */
861                                 int value = 0;
862                                 vconf_get_bool
863                                     (VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &value);
864
865                                 ad->data_rotationMode =
866                                     setting_create_Gendial_field_groupitem(genlist,
867                                                                            &(ad->itc[GENDIAL_Type_1text_2icon]),
868                                                                            NULL,
869                                                                            setting_main_sel_list_mouse_up_cb,
870                                                                            ad,
871                                                                            SWALLOW_Type_1ICON_1RADIO,
872                                                                            icon_path,
873                                                                            NULL,
874                                                                            value,
875                                                                            keyStr,
876                                                                            NULL,
877                                                                            setting_main_list_mouse_up_cb);
878                                 __BACK_POINTER_SET(ad->data_rotationMode);
879                                 item_data = ad->data_rotationMode;
880                         }
881                         else if (!safeStrCmp(KeyStr_Brightness, keyStr)) {
882
883                                 char* pa_bright = get_brightness_mode_str();
884                                 ad->data_bright=
885                                     setting_create_Gendial_field_groupitem(genlist,
886                                                                            &(ad->itc[GENDIAL_Type_1icon_2text]),
887                                                                            NULL,
888                                                                            setting_main_click_list_ex_ug_cb,
889                                                                            ug_args,
890                                                                            SWALLOW_Type_INVALID,
891                                                                            icon_path,
892                                                                            NULL,
893                                                                            0,
894                                                                            keyStr,
895                                                                            pa_bright,
896                                                                            NULL);
897                                 __BACK_POINTER_SET(ad->data_bright);
898                                 item_data = ad->data_bright;
899                                 ncount++;
900                         }
901                         else {  /* load other UGs */
902                                 item_data = setting_create_Gendial_field_groupitem(genlist,
903                                                                        &(ad->itc[GENDIAL_Type_1text_1icon_2]),
904                                                                        NULL,
905                                                                        setting_main_click_list_ex_ug_cb,
906                                                                        ug_args,
907                                                                        SWALLOW_Type_INVALID,
908                                                                        icon_path,
909                                                                        NULL, 0,
910                                                                        keyStr,
911                                                                        NULL,
912                                                                        NULL);
913                                 ncount++;
914                         }
915
916                         if (item_data) {
917                                 if (j == 0) {
918                                         item_data->group_style = SETTING_GROUP_STYLE_TOP;
919                                 } else if (j == setting_cfg_get_menu_length(i) - 1) {
920                                         item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
921                                 } else {
922                                         item_data->group_style = SETTING_GROUP_STYLE_CENTER;
923                                 }
924
925                                 if (index == 0) {
926                                         item_data->group_style = SETTING_GROUP_STYLE_TOP;
927                                 }
928                                 index++;
929                         }
930                 }
931         }
932         //end group, only display in setting main view
933 #if SUPPORT_MORE_ITEM_FUNCTION
934                 if (SETTING_VIEW_MAIN == ad->view_load && MAIN_PROFILE_PREFERRED == ad->profile_type && idx_second_menu > 0)
935                 {
936                         char sub_text[MAX_COMMON_BUFFER_LEN] = {0, };
937                         int idx = 0;
938                         while (idx < MAX_MORE_MENU_NUM && ad->more_system_menus[idx])
939                         {
940                                 if (idx != 0)
941                                 {
942                                         safeStrNCat(sub_text, ", ", MAX_COMMON_BUFFER_LEN);
943                                 }
944                                 safeStrNCat(sub_text, _(ad->more_system_menus[idx]), MAX_COMMON_BUFFER_LEN);
945                                 idx++;
946                         }
947
948                         ad->data_moreSystem =
949                                 setting_create_Gendial_field_groupitem(ad->main_genlist,
950                                                                        &(ad->itc[GENDIAL_Type_2text_3]),
951                                                                        NULL,
952                                                                        setting_main_click_list_more_cb,
953                                                                        ad,
954                                                                        SWALLOW_Type_INVALID,
955                                                                        NULL,
956                                                                        NULL,
957                                                                        0,
958                                                                        KeyStr_MoreSystem,
959                                                                        sub_text,
960                                                                        NULL);
961                         __BACK_POINTER_SET(ad->data_moreSystem);
962
963                         /* if has <more ..> item , change the last item_date to SETTING_GROUP_STYLE_CENTER*/
964                         if (item_data && index > 1) {
965                                 item_data->group_style = SETTING_GROUP_STYLE_CENTER;
966                         }
967                         ad->data_moreSystem->group_style = SETTING_GROUP_STYLE_BOTTOM;
968
969                         item_data = ad->data_moreSystem;
970                         index++;
971                 }
972 #endif
973         if (index == 1) {
974                 item_data->group_style = SETTING_GROUP_STYLE_NONE;
975         } else if (index == 2) {
976                 item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
977         }
978 }
979
980 static void __load_system_level0_list(void *data)
981 {
982         setting_main_appdata *ad = data;
983         __load_system_menu_list(ad, Cfg_Item_Pos_Level0, ad->main_genlist);
984 }
985
986 static void __load_system_level_all_list(void *data)
987 {
988         SETTING_TRACE_BEGIN;
989         setting_main_appdata *ad = data;
990         __load_system_menu_list(ad, Cfg_Item_Pos_Level_All, ad->main_genlist);
991 }
992
993 static void __load_applications_menu_list(void *data,
994                                           Cfg_Item_Position inputPos)
995 {
996         SETTING_TRACE_BEGIN;
997         SETTING_TRACE_DEBUG("pos :%d", inputPos);
998         setting_main_appdata *ad = data;
999
1000         bool is_emulator = isEmulBin();
1001
1002         //group title
1003         setting_create_Gendial_field_group_titleItem(ad->main_genlist,
1004                                                      &(ad->itc[GENDIAL_Type_group_item]),
1005                                                      NULL,
1006                                                      ELM_GENLIST_ITEM_NONE,
1007                                                      KeyStr_Applications, NULL);
1008         char *keyStr = NULL;
1009         char *icon_path = NULL;
1010         char *ug_args = NULL;
1011         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
1012         int i, j;
1013
1014         Setting_GenGroupItem_Data *item_data = NULL;
1015         int index = 0;
1016         for (i = 0; i < setting_cfg_get_category_length(); i++) {
1017                 if (safeStrCmp
1018                     (setting_cfg_get_category_name(i), KeyStr_Applications))
1019                         continue;
1020
1021                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
1022                         keyStr = setting_cfg_get_keyname_idx(i, j);
1023                         icon_path = setting_cfg_get_icon_path_idx(i, j);
1024                         ug_args = setting_cfg_get_ug_args_idx(i, j);
1025                         tmpPos =
1026                             (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
1027
1028                         if (Cfg_Item_Pos_Level_All == inputPos) {
1029                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
1030                                 continue;
1031                         }
1032
1033                         if (is_emulator) {
1034                                  /* hide all except Email */
1035                                 if (safeStrCmp(KeyStr_Email, keyStr)) {
1036                                         continue;
1037                                 } else {
1038                                         /* do nothing */
1039                                 }
1040                         }
1041
1042                         item_data = setting_create_Gendial_field_groupitem(ad->main_genlist,
1043                                                                &(ad->itc[GENDIAL_Type_1text_1icon_2]),
1044                                                                NULL,
1045                                                                setting_main_click_list_ex_ug_cb,
1046                                                                ug_args,
1047                                                                SWALLOW_Type_INVALID,
1048                                                                icon_path, NULL,
1049                                                                0, keyStr, NULL,
1050                                                                NULL);
1051
1052                         if (item_data) {
1053                                 if (j == 0) {
1054                                         item_data->group_style = SETTING_GROUP_STYLE_TOP;
1055                                 } else if (j == setting_cfg_get_menu_length(i) - 1) {
1056                                         item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
1057                                 } else {
1058                                         item_data->group_style = SETTING_GROUP_STYLE_CENTER;
1059                                 }
1060
1061                                 if (index == 0) {
1062                                         item_data->group_style = SETTING_GROUP_STYLE_TOP;
1063                                 }
1064                                 index++;
1065                         }
1066                 }
1067         }
1068
1069         if (index == 1) {
1070                 item_data->group_style = SETTING_GROUP_STYLE_NONE;
1071         } else if (index == 2) {
1072                 item_data->group_style = SETTING_GROUP_STYLE_BOTTOM;
1073         }
1074
1075         SETTING_TRACE_END;
1076 }
1077
1078 static void __load_applications_level0_list(void *data)
1079 {
1080         setting_main_appdata *ad = data;
1081         __load_applications_menu_list(ad, Cfg_Item_Pos_Level0);
1082 }
1083
1084 static void __load_applications_level_all_list(void *data)
1085 {
1086         SETTING_TRACE_BEGIN;
1087         setting_main_appdata *ad = data;
1088         __load_applications_menu_list(ad, Cfg_Item_Pos_Level_All);
1089 }
1090
1091
1092 bool is_3rdapp_installed_setting_cfg(char* pkgname)
1093 {
1094         SETTING_TRACE_BEGIN;
1095         char path[512];
1096
1097         SETTING_TRACE("1");
1098         if (snprintf(path, 512, PLUGIN_PREFIX"/apps/%s/setting/setting.xml", pkgname) < 0)
1099                 return false;
1100
1101         struct stat st;
1102         bool result_opt = false;
1103
1104         if(stat(path, &st) == 0) {
1105                 result_opt = true;
1106         } else {
1107                 SETTING_TRACE_ERROR(" %s is *NOT* present\n", path);
1108                 result_opt = false;
1109         }
1110
1111         return result_opt;
1112 }
1113
1114 /**
1115  * @param data
1116  * ex) name : AppSetting4
1117  * ex) pkgname : UBKFwQidax.AppSetting4
1118  */
1119 static void draw_3rdapp(void* data, char* name, char* pkgname)
1120 {
1121         SETTING_TRACE_BEGIN;
1122         SETTING_TRACE(" name : %s", name);
1123         SETTING_TRACE(" pkgname : %s", pkgname);
1124
1125         setting_main_appdata *ad = data;
1126
1127         //3rd cfg
1128         char fullpath[512];
1129         if (snprintf(fullpath, 512,  PLUGIN_PREFIX"/apps/%s/setting/setting.xml", pkgname) < 0)
1130                 return;
1131
1132         SETTING_TRACE(" fullpath : %s", fullpath);
1133
1134         if (ad)
1135         {
1136                 char* plugin_path =  strdup(fullpath);
1137                 Setting_GenGroupItem_Data * plugin_node = setting_create_Gendial_field_groupitem(ad->main_genlist,
1138                                                            &(ad->itc[GENDIAL_Type_1text_1icon_2]),
1139                                                            NULL,
1140                                                            setting_main_click_list_plugin_cb,
1141                                                            ad,
1142                                                            SWALLOW_Type_INVALID,
1143                                                            IMG_DefaultIcon, NULL,
1144                                                            0, name, plugin_path,        // <<-- refactoring
1145                                                            NULL);
1146         }
1147         SETTING_TRACE_END;
1148 }
1149
1150 /**
1151  *
1152  * ail code here
1153  */
1154 static ail_cb_ret_e __download_apps_cb(ail_appinfo_h ai, void* data)
1155 {
1156         DrawAppInfo* pinfo = (DrawAppInfo*)data;
1157     char *id;
1158
1159         if (AIL_ERROR_OK == ail_appinfo_get_str(ai, AIL_PROP_PACKAGE_STR, &id))
1160         {
1161                 SETTING_TRACE(" 3rd party - app name : ----> %s ", id);
1162         }
1163
1164     ail_appinfo_h handle;
1165
1166     char *name = NULL;
1167     char *icon = NULL;
1168     int installed_time;
1169     bool nodisplay = false;
1170     bool removable = true;
1171
1172     if (AIL_ERROR_OK == ail_package_get_appinfo(id, &handle))
1173         {
1174                 if (AIL_ERROR_OK != ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &name))
1175                         SETTING_TRACE("cannot get name");
1176
1177                 if (AIL_ERROR_OK != ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &icon))
1178                         SETTING_TRACE("cannot get icon");
1179
1180                 if (AIL_ERROR_OK != ail_appinfo_get_bool(handle, AIL_PROP_NODISPLAY_BOOL, &nodisplay))
1181                         SETTING_TRACE("cannot get nodisplay");
1182
1183                 if (AIL_ERROR_OK != ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_REMOVABLE_BOOL, &removable))
1184                         SETTING_TRACE("cannot get removable");
1185
1186                 if (AIL_ERROR_OK != ail_appinfo_get_int(handle, AIL_PROP_X_SLP_INSTALLEDTIME_INT, &installed_time))
1187                         SETTING_TRACE("cannot get installed_time");
1188
1189                 //SETTING_TRACE("installed_time = %d ", installed_time);
1190                 if (installed_time != 0 && is_3rdapp_installed_setting_cfg(id) == true )
1191                 {
1192                         SETTING_TRACE(" 3rd party - app name : ----> id : %s --- name : %s ", id, name);
1193                         SETTING_TRACE(" 3rd party - icon : ----> %s ", icon);
1194                         SETTING_TRACE(" 3rd party - nodisplay :  ----> %d ", nodisplay);
1195                         pinfo->ncount++;
1196
1197                         // draw code here
1198                         if (pinfo->draw_app != NULL)
1199                         {
1200                                 SETTING_TRACE(">>> pkg name --> %s ", id);
1201                                 pinfo->draw_app(pinfo->data, strdup(name)/* appname*/, strdup(id)/* pkg_name*/);
1202                         }
1203                 }
1204         }
1205         SETTING_TRACE_END;
1206     return AIL_CB_RET_CONTINUE;
1207 }
1208
1209
1210 /**
1211  * get 3rd party applist from AIL & searching dir/file by the defined rule
1212  * @param data ad
1213  * if data is NULL --> just get how many items are there
1214  * if data is NOT NULL --> draw UI code
1215  */
1216 static int get_downloadapp_list(void* data)
1217 {
1218         SETTING_TRACE_BEGIN;
1219
1220         setting_main_appdata *ad = data;
1221
1222         int ncount = 0;
1223         ail_filter_h f;
1224
1225         DrawAppInfo* pinfo = (DrawAppInfo*)malloc(sizeof(DrawAppInfo));
1226
1227         if (pinfo) {
1228                 pinfo->ncount = 0;
1229                 pinfo->draw_app = draw_3rdapp;
1230                 pinfo->data = ad;
1231
1232                 if (ail_filter_new(&f) == AIL_ERROR_OK)
1233                 {
1234                         if (ail_filter_add_bool(f, AIL_PROP_NODISPLAY_BOOL, false) != AIL_ERROR_OK)
1235                         {
1236                                 SETTING_TRACE("ail filter error");
1237
1238                                 free(pinfo);
1239                                 pinfo = NULL;
1240
1241                                 ail_filter_destroy(f);
1242                                 return 0;
1243                         }
1244
1245                         ail_filter_list_appinfo_foreach(f, __download_apps_cb, pinfo);
1246                         //---------------------------------------------------------------
1247                         ail_filter_destroy(f);
1248                 }
1249                 ncount = pinfo->ncount;
1250
1251                 free(pinfo);
1252                 pinfo = NULL;
1253         }
1254
1255         SETTING_TRACE_END;
1256         return ncount;
1257 }
1258
1259 static int __get_downloaded_apps_num(Cfg_Item_Position inputPos)
1260 {
1261         SETTING_TRACE_BEGIN;
1262         SETTING_TRACE_DEBUG("pos :%d", inputPos);
1263         int downloaded_apps_num = 0;
1264         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
1265         int i, j;
1266         for (i = 0; i < setting_cfg_get_category_length(); i++) {
1267                 if (safeStrCmp
1268                     (setting_cfg_get_category_name(i), KeyStr_DownloadedAPPs))
1269                         continue;
1270
1271                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
1272                         tmpPos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
1273                         if (Cfg_Item_Pos_Level_All == inputPos) {
1274                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
1275                                 continue;
1276                         }
1277
1278                         downloaded_apps_num++;
1279                 }
1280         }
1281
1282         // draw UI with AUL code
1283 #ifdef PLUGIN
1284         downloaded_apps_num = get_downloadapp_list(NULL);
1285         SETTING_TRACE("Exit %s with return[%d]",__FUNCTION__, downloaded_apps_num);
1286 #endif
1287
1288         SETTING_TRACE("Exit %s with return[%d]",__FUNCTION__, downloaded_apps_num);
1289         return downloaded_apps_num;
1290 }
1291
1292
1293 static void __load_downloaded_apps_menu_list(void *data,
1294                                              Cfg_Item_Position inputPos)
1295 {
1296         SETTING_TRACE_BEGIN;
1297         SETTING_TRACE_DEBUG("pos :%d", inputPos);
1298         setting_main_appdata *ad = data;
1299
1300         // if the number of download apps is zero, display a bottom seperator
1301         if (0 == __get_downloaded_apps_num(inputPos)) {
1302                 Elm_Object_Item *item = NULL;
1303                 item = elm_genlist_item_append(ad->main_genlist, &itc_bottom_seperator, NULL, NULL,
1304                                         ELM_GENLIST_ITEM_NONE, NULL, NULL);
1305                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1306                 return;
1307         }
1308
1309         //group title
1310         setting_create_Gendial_field_group_titleItem(ad->main_genlist,
1311                                                      &(ad->itc[GENDIAL_Type_group_item]),
1312                                                      NULL,
1313                                                      ELM_GENLIST_ITEM_NONE,
1314                                                      KeyStr_DownloadedAPPs,
1315                                                      NULL);
1316         get_downloadapp_list(ad);
1317         //SETTING_TRACE("Exit %s with return[%d]",__FUNCTION__, downloaded_apps_num);
1318         SETTING_TRACE_END;
1319 }
1320
1321 static void __load_downloaded_apps_level0_list(void *data)
1322 {
1323         setting_main_appdata *ad = data;
1324         __load_downloaded_apps_menu_list(ad, Cfg_Item_Pos_Level0);
1325 }
1326
1327 static void __load_downloaded_apps_level_all_list(void *data)
1328 {
1329         SETTING_TRACE_BEGIN;
1330         setting_main_appdata *ad = data;
1331         __load_downloaded_apps_menu_list(ad, Cfg_Item_Pos_Level_All);
1332 }
1333
1334 static void __check_all_view_clear(void *data)
1335 {
1336         SETTING_TRACE_BEGIN;
1337         ret_if(!data);
1338         setting_main_appdata *ad = data;
1339         if (ad->item_check_list) {
1340                 eina_list_free(ad->item_check_list);
1341                 ad->item_check_list = NULL;
1342         }
1343
1344         ad->gl_sel_all = NULL;
1345         ad->edit_preferred_genlist  = NULL;
1346         //ad->controllbar_all_check = NULL;
1347         ad->check_all_item =NULL;
1348 }
1349
1350 static void __prefered_buttons_cb(void *data, Evas_Object *obj, void *event_info)
1351 {
1352         SETTING_TRACE_BEGIN;
1353         ret_if(!data);
1354         setting_main_appdata *ad = (setting_main_appdata *) data;
1355         const char *key = NULL;
1356
1357         key = elm_object_text_get(obj);
1358         setting_retm_if(data == NULL
1359                         || key == NULL, "data == NULL || key == NULL");
1360
1361         SETTING_TRACE_DEBUG("press button: %s", key);
1362
1363         // "Done"
1364         if (!safeStrCmp(key, dgettext("sys_string", "IDS_COM_SK_DONE"))) {
1365
1366                 if (ad->profile_type == MAIN_PROFILE_ALL) {
1367                         SETTING_TRACE_DEBUG("Cancel to hide current view.");
1368                         setting_try_save_check_list(ad);        /* need to save too */
1369                         __check_all_view_clear(ad);
1370                         elm_naviframe_item_pop(ad->navibar_main);       // pop(preferred) --> main
1371                         return;
1372                 }
1373
1374                 // MAIN_PROFILE_PREFERRED and Etc
1375                 // redraw setting-main
1376                 setting_try_save_check_list(ad);
1377                 elm_naviframe_item_pop(ad->navibar_main);  // pop (preferred) -> main
1378
1379                 //After the view is popuped, all the object handlers should be reset NULL.
1380                 __check_all_view_clear(ad);
1381                 ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1382                 ad->load_fns[Func_Type_System] = __load_system_level0_list;
1383                 ad->load_fns[Func_Type_Apps] = __load_applications_level0_list;
1384                 ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level0_list;
1385                 int ret = setting_main_refresh(ad);
1386                 ret_if(ret != SETTING_RETURN_SUCCESS);
1387                 return;
1388         }
1389
1390         // "Cancel"
1391         if (!safeStrCmp(key, setting_gettext("IDS_COM_SK_CANCEL"))
1392             || !safeStrCmp(key, dgettext("sys_string", "IDS_COM_BODY_BACK"))) {
1393                 SETTING_TRACE_DEBUG("Cancel to hide current view.");
1394                 elm_naviframe_item_pop(ad->navibar_main);
1395                 //After the view is popuped, all the object handlers should be reset NULL.
1396                 __check_all_view_clear(ad);
1397                 return;
1398         }
1399 }
1400
1401
1402 static void __btnback_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1403 {
1404         SETTING_TRACE_BEGIN;
1405         ret_if(!data);
1406         setting_main_appdata *ad = (setting_main_appdata *) data;
1407         elm_win_lower(ad->win_main);
1408 }
1409
1410 static Eina_Bool __refresh_on_idle(void *data)
1411 {
1412         SETTING_TRACE_BEGIN;
1413         retv_if(!data, FALSE);
1414         setting_main_appdata *ad = data;
1415         if (MAIN_PROFILE_ALL == ad->profile_type)
1416         {
1417                 ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level_all_list;
1418                 ad->load_fns[Func_Type_System] = __load_system_level_all_list;
1419                 ad->load_fns[Func_Type_Apps] = __load_applications_level_all_list;
1420                 ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level_all_list;
1421                 setting_main_refresh(ad);
1422         }
1423         else if (MAIN_PROFILE_PREFERRED == ad->profile_type)
1424         {
1425                 ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1426                 ad->load_fns[Func_Type_System] = __load_system_level0_list;
1427                 ad->load_fns[Func_Type_Apps] = __load_applications_level0_list;
1428                 ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level0_list;
1429                 setting_main_refresh(ad);
1430         }
1431         ad->refresh_idler = NULL;
1432         return FALSE;
1433 }
1434
1435 static void __allFrequent_btn_cb(void *data, Evas_Object *obj, void *event_info)
1436 {
1437         SETTING_TRACE_BEGIN;
1438         ret_if(!data || !obj);
1439         setting_main_appdata *ad = (setting_main_appdata *) data;
1440         //if already has the task,cancel the old task with ecore_idler_del,then add new idler task.
1441         if (ad->refresh_idler) {
1442                 ecore_idler_del(ad->refresh_idler);
1443                 ad->refresh_idler = NULL;
1444         }
1445
1446         //Elm_Object_Item *item = elm_toolbar_first_item_get(obj);
1447         //ret_if(!item);
1448         if (MAIN_PROFILE_ALL == ad->profile_type)
1449         {
1450                 SETTING_TRACE("Change to Preferred view");
1451                 elm_object_text_set(obj, _(ALL_STR));
1452                 ad->profile_type = MAIN_PROFILE_PREFERRED;
1453         }
1454         else if (MAIN_PROFILE_PREFERRED == ad->profile_type)
1455         {
1456                 SETTING_TRACE("Change to ALL view");
1457                 elm_object_text_set(obj, _(PREFERRED_STR));
1458                 ad->profile_type = MAIN_PROFILE_ALL;
1459         }
1460         else
1461         {
1462                 return;
1463         }
1464         ad->refresh_idler = ecore_idler_add((Ecore_Task_Cb) __refresh_on_idle, ad);
1465 }
1466
1467 static void __setting_show_title_toolbar(void *data, Evas_Object *obj, void *event_info)
1468 {
1469     SETTING_TRACE_BEGIN;
1470     //elm_object_item_signal_emit(data, "elm,state,sip,shown", "");
1471     setting_main_appdata *ad = (setting_main_appdata *) data;
1472
1473     Evas_Object *navi_bar = NULL;
1474
1475     if (ad->isInUGMode && ad->ug) {
1476         Evas_Object *layout = (Evas_Object *)ug_get_layout(ad->ug);
1477         if (layout)
1478             navi_bar = elm_object_part_content_get(layout, "elm.swallow.content");
1479     } else {
1480         navi_bar = ad->navibar_main;
1481     }
1482
1483     const char *support = evas_object_data_get(navi_bar, "sip.naviframe.title_obj");
1484     SETTING_TRACE("support:%s", support);
1485     if (support)
1486     {
1487         Elm_Object_Item *top_item = elm_naviframe_top_item_get(navi_bar);
1488         if (top_item)
1489             elm_object_item_signal_emit(top_item, "elm,state,sip,shown", "");
1490     }
1491 }
1492
1493 static void __setting_hide_title_toolbar(void *data, Evas_Object *obj, void *event_info)
1494 {
1495     SETTING_TRACE_BEGIN;
1496     //elm_object_item_signal_emit(data, "elm,state,sip,hidden", "");
1497     setting_main_appdata *ad = (setting_main_appdata *) data;
1498
1499     Evas_Object *navi_bar = NULL;
1500
1501     if (ad->isInUGMode && ad->ug) {
1502         Evas_Object *layout = (Evas_Object *)ug_get_layout(ad->ug);
1503         if (layout)
1504             navi_bar = elm_object_part_content_get(layout, "elm.swallow.content");
1505     } else {
1506         navi_bar = ad->navibar_main;
1507     }
1508
1509     const char *support = evas_object_data_get(navi_bar, "sip.naviframe.title_obj");
1510
1511     SETTING_TRACE("support:%s", support);
1512     if (support)
1513     {
1514         Elm_Object_Item *top_item = elm_naviframe_top_item_get(navi_bar);
1515         if (top_item)
1516             elm_object_item_signal_emit(top_item, "elm,state,sip,hidden", "");
1517     }
1518 }
1519
1520 static bool __setting_create_main_view(void *data)
1521 {
1522         SETTING_TRACE_BEGIN;
1523         /* error check */
1524         setting_retvm_if(data == NULL, FALSE, "data == NULL");
1525         setting_main_appdata *ad = (setting_main_appdata *) data;
1526
1527         Evas_Object *conform = elm_conformant_add(ad->win_main);
1528         ad->ly_main = setting_create_win_layout(ad->win_main, ad->win_main);
1529         evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1530         evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
1531         elm_win_resize_object_add(ad->win_main, conform);
1532         elm_object_content_set(conform, ad->ly_main);
1533         evas_object_show(conform);
1534
1535     evas_object_smart_callback_add(conform, "virtualkeypad,state,on", __setting_show_title_toolbar, ad);
1536     evas_object_smart_callback_add(conform, "virtualkeypad,state,off", __setting_hide_title_toolbar, ad);
1537
1538         elm_win_conformant_set(ad->win_main, EINA_TRUE);
1539
1540         ad->conform = conform;
1541
1542         ad->navibar_main = setting_create_navi_bar(ad->ly_main);
1543
1544         ad->main_genlist = elm_genlist_add(ad->navibar_main);
1545         elm_object_style_set(ad->main_genlist, "dialogue");
1546         retvm_if(ad->main_genlist == NULL, FALSE,
1547                  "Cannot set scroller object as contento of layout");
1548
1549         //elm_genlist_homogeneous_set(ad->main_genlist, EINA_TRUE);
1550         elm_genlist_clear(ad->main_genlist);    /* first to clear list */
1551         evas_object_smart_callback_add(ad->main_genlist, "realized", __gl_realized, ad);
1552
1553         setting_create_navi_bar_buttons(_("IDS_COM_BODY_SETTINGS"),
1554                                         _("IDS_COM_BODY_BACK"), NULL, _("IDS_ST_OPT_ALL"),
1555                                         __btnback_clicked_cb, NULL,
1556                                         __allFrequent_btn_cb, ad, ad->main_genlist,
1557                                         ad->navibar_main, NULL);
1558
1559         ad->profile_type = MAIN_PROFILE_PREFERRED;
1560         ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1561         ad->load_fns[Func_Type_System] = __load_system_level0_list;
1562         ad->load_fns[Func_Type_Apps] = __load_applications_level_all_list;
1563         ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level_all_list;
1564         setting_main_refresh(ad);
1565         return TRUE;
1566 }
1567
1568 static bool __setting_create_prefered_view(void *data)
1569 {
1570         SETTING_TRACE_BEGIN;
1571         /* error check */
1572         setting_retvm_if(data == NULL, FALSE, "data == NULL");
1573         setting_main_appdata *ad = (setting_main_appdata *) data;
1574
1575         /* the genlist will be destroyed with its parent view, when using elm_naviframe_item_pop() to destroy the view. */
1576         ad->edit_preferred_genlist = elm_genlist_add(ad->win_main);
1577         elm_object_style_set(ad->edit_preferred_genlist, "dialogue");
1578         elm_genlist_clear(ad->edit_preferred_genlist);  /* first to clear list */
1579
1580         /*  [UI] edit preffered view */
1581         Evas_Object *sub_layout = elm_layout_add(ad->win_main);
1582         elm_object_style_set(sub_layout, "dialogue");
1583         elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "search_layout");
1584         evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
1585         evas_object_show(sub_layout);
1586
1587         ad->gl_sel_all = elm_genlist_add(ad->win_main);
1588         elm_genlist_clear(ad->gl_sel_all);      /* first to clear list */
1589         elm_genlist_bounce_set(ad->gl_sel_all, 0, 0);
1590
1591         elm_object_part_content_set(sub_layout, "search_bar", ad->gl_sel_all);  /*  add 'Select all' */
1592         elm_object_part_content_set(sub_layout, "search_list", ad->edit_preferred_genlist);     /*  add Genlist */
1593
1594         /*  push, not create */
1595         setting_push_layout_navi_bar(_(EDIT_PREFERRED_STR),
1596                                      _("IDS_COM_SK_CANCEL"),
1597                                      _("IDS_COM_SK_DONE"), NULL,
1598                                      __prefered_buttons_cb, __prefered_buttons_cb, NULL, ad,
1599                                      sub_layout, ad->navibar_main,
1600                                      NULL);
1601         SETTING_TRACE_END;
1602         return TRUE;
1603 }
1604
1605 static void setting_main_tapi_event_cb(TapiHandle *handle, int result, void *data, void *user_data)
1606 {
1607         SETTING_TRACE_BEGIN;
1608         ret_if(!user_data);
1609         setting_main_appdata *ad = user_data;
1610         ad->b_fm_requesting = FALSE;
1611         SETTING_TRACE("result:%d", result);
1612
1613         int err = 0;
1614         switch (result) {
1615         case TAPI_POWER_FLIGHT_MODE_RESP_ON:
1616
1617                 setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1618                                          SETTING_ON_OFF_BTN_ON, &err);
1619
1620                 //If Setting has validate operation (fm_waiting_op == FM_LEAVE) to process, process it.
1621                 //Otherwise, do nothing
1622                 if (FM_LEAVE == ad->fm_waiting_op)
1623                 {
1624                         //Send the latest operation
1625                         ad->fm_waiting_op = FM_INVALID;
1626                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
1627                         setting_retm_if(err != TAPI_API_SUCCESS,
1628                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
1629
1630                         //sucessfully sent,
1631                         ad->b_fm_requesting = TRUE;
1632
1633                 }
1634                 break;
1635
1636         case TAPI_POWER_FLIGHT_MODE_RESP_OFF:
1637
1638                 setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1639                                          SETTING_ON_OFF_BTN_OFF, &err);
1640
1641                 //If Setting has validate operation (here, fm_waiting_op == FM_ENTER) to process,process it.
1642                 //Otherwise, do nothing
1643                 if (FM_ENTER == ad->fm_waiting_op)
1644                 {
1645                         //Send the latest operation
1646                         ad->fm_waiting_op = FM_INVALID;
1647                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
1648                         setting_retm_if(err != TAPI_API_SUCCESS,
1649                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
1650
1651                         //sucessfully sent,
1652                         ad->b_fm_requesting = TRUE;
1653                 }
1654
1655                 break;
1656
1657         case TAPI_POWER_FLIGHT_MODE_RESP_FAIL:
1658                 //Setting has a validate operation to process, Send the operation request
1659                 if (FM_ENTER == ad->fm_waiting_op)
1660                 {
1661                         ad->fm_waiting_op = FM_INVALID;
1662                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
1663
1664                         setting_retm_if(err != TAPI_API_SUCCESS,
1665                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
1666                         ad->b_fm_requesting = TRUE;
1667                 }
1668                 else if (FM_LEAVE == ad->fm_waiting_op)
1669                 {
1670                         ad->fm_waiting_op = FM_INVALID;
1671                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
1672
1673                         setting_retm_if(err != TAPI_API_SUCCESS,
1674                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
1675                         ad->b_fm_requesting = TRUE;
1676                 }
1677                 else //Current requset is the last one, Setting needs to notify user
1678                 {
1679                         setting_create_popup_without_btn(ad, ad->win_main,
1680                                              _("IDS_COM_POP_ERROR"),
1681                                              _("IDS_ST_POP_UNABLE_TO_TURN_ON_FLIGHT_MODE_VODA"),
1682                                              NULL, POPUP_INTERVAL,
1683                                              FALSE, FALSE);
1684
1685                         //It is need to rollback the status,
1686                         if (ad->data_flight) {
1687                                 ad->data_flight->chk_status = !ad->data_flight->chk_status;
1688                                 elm_check_state_set(ad->data_flight->eo_check, ad->data_flight->chk_status);
1689                         }
1690                         return;
1691                 }
1692
1693                 //sucessfully sent,
1694                 ad->b_fm_requesting = TRUE;
1695
1696                 break;
1697
1698         case TAPI_POWER_FLIGHT_MODE_RESP_MAX:
1699                 setting_create_popup_without_btn(ad, ad->win_main,
1700                                      _("IDS_COM_POP_ERROR"),
1701                                      _("IDS_COM_POP_UNEXPECTED_ERROR"),
1702                                      NULL, POPUP_INTERVAL, FALSE, FALSE);
1703
1704                 //It is need to rollback the status,
1705                 if (ad->data_flight) {
1706                         ad->data_flight->chk_status = !ad->data_flight->chk_status;
1707                         elm_check_state_set(ad->data_flight->eo_check, ad->data_flight->chk_status);
1708                 }
1709                 break;
1710         default:
1711                 /* do nothing */
1712                 SETTING_TRACE_DEBUG("default");
1713                 if(ad->data_flight)
1714                         setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1715                                          ad->data_flight->chk_status, &err);
1716                 break;
1717         }
1718         return;
1719 }
1720
1721 static int setting_main_refresh(void *data)
1722 {
1723         SETTING_TRACE_BEGIN;
1724         setting_main_appdata *ad = (setting_main_appdata *) data;
1725         elm_genlist_clear(ad->main_genlist);    /* first to clear list */
1726
1727 #if 0
1728         if (is_ug_installed_by_ug_args("rcs-config"))
1729         {
1730                 Elm_Object_Item *item = elm_genlist_item_append(ad->main_genlist, &itc_seperator, NULL, NULL,
1731                                             ELM_GENLIST_ITEM_NONE, NULL, NULL);
1732                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1733                 setting_create_Gendial_field_groupitem(ad->main_genlist,
1734                                                        &(ad->itc[GENDIAL_Type_1text_1icon_2]),
1735                                                        NULL,
1736                                                        setting_main_click_list_ex_ug_cb,
1737                                                        "rcs-config",
1738                                                        SWALLOW_Type_INVALID,
1739                                                        IMG_Joyn, NULL,
1740                                                        0, KeyStr_Joyn, NULL,
1741                                                        NULL);
1742         }
1743 #endif
1744
1745         int i;
1746         for(i = Func_Type_Connectivity; i < Func_Type_MAX; i++)
1747                 (ad->load_fns[i]) (ad);
1748
1749         memset(ad->load_fns, 0, Func_Type_MAX *sizeof(menu_list_load_fn));
1750         SETTING_TRACE_END;
1751         return SETTING_RETURN_SUCCESS;
1752 }
1753
1754 static int setting_main_create(void *cb)
1755 {
1756         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1757
1758         setting_main_appdata *ad = (setting_main_appdata *) cb;
1759         g_main_ad = ad;
1760         //pass NULL to let TAPI access default module
1761         ad->handle = tel_init(NULL);
1762         if (!ad->handle) {
1763                 SETTING_TRACE_ERROR("*** [ERR] tel_init failed ***");
1764         } else {
1765                 SETTING_TRACE("tel_init ok[handle:%p]", ad->handle);
1766         }
1767         setting_create_Gendial_itc("dialogue/1text.1icon.2",
1768                                    &(ad->itc[GENDIAL_Type_1text_1icon_2]));
1769         setting_create_Gendial_itc("dialogue/1text.2icon",
1770                                    &(ad->itc[GENDIAL_Type_1text_2icon]));
1771         setting_create_Gendial_itc("dialogue/2text.1icon.3",
1772                                    &(ad->itc[GENDIAL_Type_1icon_2text]));
1773         setting_create_Gendial_itc("dialogue/1text.1icon.2",
1774                                    &(ad->itc[GENDIAL_Type_1text_2icon_2]));
1775         setting_create_Gendial_itc("dialogue/2text.2icon.3",
1776                                    &(ad->itc[GENDIAL_Type_2text_2icon_3]));
1777         setting_create_Gendial_itc("dialogue/title",
1778                                    &(ad->itc[GENDIAL_Type_group_item]));
1779         setting_create_Gendial_itc("select_all",
1780                                    &(ad->itc[GENDIAL_Type_sel_all]));
1781
1782         setting_create_Gendial_itc("dialogue/2text.3", &(ad->itc[GENDIAL_Type_2text_3]));
1783
1784         ad->view_type = SETTING_VIEW_MAIN;
1785         __setting_create_main_view(ad);
1786
1787         setting_view_main.is_create = 1;
1788
1789         setting_drawer_list_init();
1790         return SETTING_RETURN_SUCCESS;
1791 }
1792
1793 static int setting_main_destroy(void *cb)
1794 {
1795         SETTING_TRACE_BEGIN;
1796         /* error check */
1797         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1798
1799         setting_main_appdata *ad = (setting_main_appdata *) cb;
1800         if (0 == setting_view_main.is_create)
1801         {
1802                 //already not exsit
1803                 return SETTING_RETURN_SUCCESS;
1804         }
1805
1806     evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,on", __setting_show_title_toolbar);
1807     evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,off", __setting_hide_title_toolbar);
1808
1809         if (ad->refresh_idler) {
1810                 ecore_idler_del(ad->refresh_idler);
1811                 ad->refresh_idler = NULL;
1812         }
1813
1814         if (ad->handle) {
1815                 int tapi_ret = tel_deinit(ad->handle);
1816                 if (tapi_ret != TAPI_API_SUCCESS) {
1817                         SETTING_TRACE_DEBUG("*** [ERR] tel_deinit. [%d] ***", tapi_ret);
1818                 } else {
1819                         SETTING_TRACE("***  tel_deinit OK ");
1820                 }
1821                 ad->handle = NULL;
1822         }
1823
1824         /* then destroy the UI object. */
1825         if (ad->item_check_list) {
1826                 eina_list_free(ad->item_check_list);
1827                 ad->item_check_list = NULL;
1828         } else {
1829                 SETTING_TRACE("*** ad->item_check_list is NULL - abnormal state ");
1830         }
1831
1832         if (ad->ly_main) {
1833                 evas_object_del(ad->ly_main);
1834                 ad->ly_main = NULL;
1835         }
1836
1837         if (ad->flight_popup) {
1838                 evas_object_del(ad->flight_popup);
1839                 ad->flight_popup = NULL;
1840         }
1841
1842 #if 0
1843         if (ad->plugin_node)
1844         {
1845                 setting_plugin_destroy(ad->plugin_node);
1846         }
1847 #endif
1848
1849         evas_object_smart_callback_del(ad->main_genlist, "realized", __gl_realized);
1850
1851         setting_dbus_handler_fini();
1852         setting_drawer_list_fini();
1853
1854         setting_view_main.is_create = 0;
1855         SETTING_TRACE_END;
1856         return SETTING_RETURN_SUCCESS;
1857 }
1858
1859 static int setting_main_update(void *cb)
1860 {
1861         SETTING_TRACE_BEGIN;
1862
1863         /* error check */
1864         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1865
1866         setting_main_appdata *ad = (setting_main_appdata *) cb;
1867
1868         if (ad->ly_main != NULL) {
1869                 //evas_object_show(ad->ly_main);
1870         }
1871
1872         return SETTING_RETURN_SUCCESS;
1873 }
1874
1875 static int setting_main_cleanup(void *cb)
1876 {
1877         SETTING_TRACE_BEGIN;
1878         /* error check */
1879         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1880
1881         setting_main_appdata *ad = (setting_main_appdata *) cb;
1882
1883         if (ad->ly_main != NULL) {
1884                 //evas_object_hide(ad->ly_main);
1885         }
1886
1887         return SETTING_RETURN_SUCCESS;
1888 }
1889
1890 /* ***************************************************
1891  *
1892  *general func
1893  *
1894  ***************************************************/
1895
1896 void setting_update_gl_item(void* data)
1897 {
1898         SETTING_TRACE_BEGIN;
1899         setting_main_appdata *ad = data;
1900         retm_if(!data, "Invalid argument: data is NULL");
1901
1902         int nDx = 0;
1903         Eina_Bool bGlUpdate = EINA_FALSE;
1904         Setting_GenGroupItem_Data *item_to_update = NULL;
1905
1906         for(;nDx<GL_ITEM_MAX; nDx++) {
1907                 if(EINA_TRUE == ad->updateItems[nDx]) {
1908                         switch (nDx)
1909                         {
1910                         case GL_ITEM_WIFI:
1911                                 item_to_update = ad->data_wifi;
1912                                 bGlUpdate = EINA_TRUE;
1913                                 break;
1914                         case GL_ITEM_BT:
1915                                 item_to_update = ad->data_bt;
1916                                 bGlUpdate = EINA_TRUE;
1917                                 break;
1918                         case GL_ITEM_NFC:
1919                                 item_to_update = ad->data_nfc;
1920                                 bGlUpdate = EINA_TRUE;
1921                                 break;
1922                         case GL_ITEM_FLIGHT:
1923                                 item_to_update = ad->data_flight;
1924                                 bGlUpdate = EINA_FALSE;
1925                                 break;
1926
1927
1928
1929
1930                         default: // other case
1931                                 continue;
1932                         }
1933
1934                         if (item_to_update) {
1935                                 SETTING_TRACE("gl update [%s], bGlUpdate:%d", _(item_to_update->keyStr), bGlUpdate);
1936                                 if(bGlUpdate) {
1937                                         SETTING_TRACE("gl update:%d", nDx);
1938                                         elm_object_item_data_set(item_to_update->item, item_to_update);
1939                                         elm_genlist_item_update(item_to_update->item);
1940                                 } else {
1941                                         SETTING_TRACE("chk update:%d", nDx);
1942                                         elm_check_state_set(item_to_update->eo_check, item_to_update->chk_status);
1943                                 }
1944                         }
1945
1946                         ad->updateItems[nDx] = EINA_FALSE;
1947                 } // if(EINA_TRUE == ad->updateItems[nDx])
1948
1949         }
1950
1951         SETTING_TRACE_END;
1952         return;
1953 }
1954
1955 void setting_main_destroy_ug_cb(ui_gadget_h ug, void *priv)
1956 {
1957         setting_main_appdata *ad = (setting_main_appdata *) priv;
1958         if (!ad)
1959                 return;         /*  do nothing if ad is NULL */
1960
1961         if (ug) {
1962                 ug_destroy(ug);
1963                 ad->ug = NULL;
1964         }
1965
1966         setting_main_click_list_item_reset_data(ad, NULL);
1967
1968         // update main genlist in unloading UG
1969         SETTING_TRACE("update main genlist in unloading UG");
1970         setting_update_gl_item(ad);
1971
1972         SETTING_TRACE_END;
1973 }
1974
1975 void setting_main_result_ug_cb(ui_gadget_h ug, service_h service,
1976                                       void *priv)
1977 {
1978         if (!priv) return;
1979
1980         // set default local automatically
1981         set_defaultLangICU();
1982 }
1983
1984 void setting_main_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1985                                       void *priv)
1986 {
1987         setting_main_appdata *ad = (setting_main_appdata *) priv;
1988         Evas_Object *base;
1989
1990         if (!priv)
1991                 return;
1992         SETTING_TRACE_BEGIN;
1993
1994         base = (Evas_Object *) ug_get_layout(ug);
1995         if (!base)
1996                 return;
1997
1998         switch (mode) {
1999         case UG_MODE_FULLVIEW:
2000                 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
2001                                                  EVAS_HINT_EXPAND);
2002                 evas_object_show(base);
2003                 break;
2004         default:
2005                 break;
2006         }
2007
2008         SETTING_TRACE_END;
2009 }
2010
2011 /* ***************************************************
2012  *
2013  *call back func
2014  *
2015  ***************************************************/
2016
2017 void setting_main_click_list_item_reset_data(void *data,
2018                                                     Evas_Object *obj)
2019 {
2020         SETTING_TRACE_BEGIN;
2021         setting_main_appdata *ad = (setting_main_appdata *) data;
2022
2023         ad->isInUGMode = FALSE;
2024
2025         SETTING_TRACE_END;
2026 }
2027
2028 void /* obj is the layout clicked */
2029 setting_main_click_list_item_ug_cb(void *data, Evas_Object *obj,
2030                                    char *ug_to_load, service_h svc,
2031                                    struct ug_cbs *cbs)
2032 {
2033         SETTING_TRACE_BEGIN;
2034         setting_main_appdata *ad = (setting_main_appdata *) data;
2035         if (!ug_to_load) {
2036                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
2037                 return;
2038         }
2039 #if DISABLED_CODE
2040         char ug_file[PATH_MAX];
2041         if (snprintf
2042             (ug_file, PATH_MAX, "%s/libug-%s.so", SETTING_UG_PATH,
2043              ug_to_load) < 0)
2044                 return;
2045         SETTING_TRACE("ug_file:%s", ug_file);
2046         if (!ecore_file_exists(ug_file)) {
2047                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
2048                 return;
2049         }
2050 #endif
2051         SETTING_TRACE("to create libug-%s.so", ug_to_load);
2052         ad->ug = ug_create(NULL, ug_to_load, UG_MODE_FULLVIEW, svc, cbs);
2053         if (ad->ug) {
2054                 ad->isInUGMode = TRUE;
2055                 memset(ad->cur_loaded_ug, 0x00, MAX_DISPLAY_NAME_LEN_ON_UI);
2056                 safeCopyStr(ad->cur_loaded_ug, ug_to_load, MAX_DISPLAY_NAME_LEN_ON_UI);
2057         } else {
2058
2059                 evas_object_show(ad->ly_main);
2060
2061                 SETTING_TRACE_ERROR("errno:%d", errno);
2062                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
2063         }
2064         SETTING_TRACE_END;
2065 }
2066
2067 void
2068 setting_main_click_list_default_ug_cb(void *data, Evas_Object *obj,
2069                                       void *event_info)
2070 {
2071         setting_main_appdata *ad = data;
2072         setting_create_simple_popup(ad, ad->win_main, NULL,
2073                                           NO_UG_FOUND_MSG);
2074 }
2075
2076 void
2077 setting_main_click_list_usb_cb(void *data, Evas_Object *obj, void *event_info)
2078 {
2079         SETTING_TRACE_BEGIN;
2080         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2081
2082         int err;
2083         int value = -1;
2084         char *str_text = USB_NEED_OFF;
2085
2086         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2087 #if 0
2088         setting_get_int_slp_key(INT_SLP_SETTING_MOBILE_AP_STATUS, &value, &err);
2089         if (err != 0)
2090         {
2091                 SETTING_TRACE_ERROR("FAIL: VCONFKEY_MOBILE_HOTSPOT_MODE may not exist\n");
2092                 setting_main_click_list_ex_ug_cb(data, obj, item);
2093                 return;
2094         }
2095 #endif
2096         /* If mobile hotspot is on, going USB utilties is blocked by a popup*/
2097         if (value & VCONFKEY_MOBILE_HOTSPOT_MODE_USB)
2098         {
2099                 elm_genlist_item_selected_set(item, EINA_FALSE);
2100                 setting_create_simple_popup(g_main_ad, g_main_ad->win_main, NULL, (str_text));
2101         }
2102         else
2103         {
2104                 setting_main_click_list_ex_ug_cb(data, obj, item);
2105         }
2106
2107         SETTING_TRACE_END;
2108 }
2109
2110 void setting_main_click_list_more_cb(void *data, Evas_Object *obj, void *event_info)
2111 {
2112         SETTING_TRACE_BEGIN;
2113         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2114         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2115         elm_genlist_item_selected_set(item, EINA_FALSE);
2116         retm_if(data == NULL, "Invalid argument: data is NULL");
2117         setting_main_appdata *ad = data;
2118         Setting_GenGroupItem_Data *selected_item_data =
2119                     (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2120         SETTING_TRACE("selected_item_data->keyStr:%s", selected_item_data->keyStr);
2121         if (0 == safeStrCmp(selected_item_data->keyStr, KeyStr_MoreConnect))
2122         {
2123                 ad->view_load = SETTING_VIEW_CONNECTIVE_MORE;
2124         }
2125         else if (0 == safeStrCmp(selected_item_data->keyStr, KeyStr_MoreSystem))
2126         {
2127                 ad->view_load = SETTING_VIEW_SYSTEM_MORE;
2128         }
2129         else
2130         {
2131                 return;
2132         }
2133         setting_view_change(&setting_view_main, &setting_view_more_menu, ad);
2134 }
2135
2136
2137 void
2138 setting_main_click_list_ex_ug_cb(void *data, Evas_Object *obj,
2139                                  void *event_info)
2140 {
2141         SETTING_TRACE_BEGIN;
2142         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2143         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2144
2145         elm_genlist_item_selected_set(item, EINA_FALSE);
2146
2147         if (g_main_ad->ug) {
2148                 SETTING_TRACE
2149                     ("[ad->ug non-NULL]skip genlist click event!!");
2150
2151                 SETTING_TRACE_END;
2152                 return;
2153         }
2154
2155         if (NULL == data) {     /* pass NULL to ug_args when create setting.cfg. */
2156                 setting_create_simple_popup(g_main_ad,
2157                                           g_main_ad->win_main,
2158                                           NULL, NO_UG_FOUND_MSG);
2159                 SETTING_TRACE_END;
2160                 return;
2161         }
2162
2163         setting_main_appdata *ad = g_main_ad;
2164
2165         /*  if UG is created by Setting app, setting_main_click_list_ex_ug_cb is diabled. */
2166         if (ad->isInUGMode) {
2167                 SETTING_TRACE("isInUGMode : TRUE - another UG is running now.");
2168                 ad->isInUGMode = FALSE;
2169                 SETTING_TRACE_END;
2170                 return;
2171         } else {
2172                 SETTING_TRACE
2173                     ("isInUGMode : FALSE - another UG is NOT running now.")
2174         }
2175
2176         Setting_GenGroupItem_Data *selected_item_data =
2177             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2178         setting_main_click_list_item_reset_data(ad, obj);
2179         const char *item_name = _(selected_item_data->keyStr);
2180         ret_if(!item_name);
2181
2182         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
2183         setting_retm_if(!cbs, "calloc failed");
2184         cbs->layout_cb = setting_main_layout_ug_cb;
2185         cbs->result_cb = setting_main_result_ug_cb;
2186         cbs->destroy_cb = setting_main_destroy_ug_cb;
2187         cbs->priv = (void *)ad;
2188
2189         char *path = get_ug_path_from_ug_args(data);
2190         service_h svc = get_bundle_from_ug_args(data);
2191         setting_main_click_list_item_ug_cb(ad, obj, path, svc, cbs);
2192         if (path)
2193                 FREE(path);
2194         if (cbs)
2195                 FREE(cbs);
2196         path = NULL;
2197         cbs = NULL;
2198         service_destroy(svc);
2199 }
2200 void
2201 setting_main_click_list_plugin_cb(void *data, Evas_Object *obj,
2202                                  void *event_info)
2203 {
2204         SETTING_TRACE_BEGIN;
2205         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2206         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2207         elm_genlist_item_selected_set(item, EINA_FALSE);
2208         Setting_GenGroupItem_Data *selected_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2209
2210         setting_main_appdata *ad = data;
2211
2212
2213         ad->plugin_path = strdup(selected_item->sub_desc);
2214         SETTING_TRACE(" >> SELECTED plugin name : %s \n", ad->plugin_path);
2215
2216         setting_dbus_handler_init( ad );
2217
2218         #if 1
2219         PluginNode* plugin_node = setting_plugin_create(ad);
2220         plugin_node->plugin_path = strdup(ad->plugin_path);
2221         setting_plugin_load(plugin_node, (const char *)plugin_node->plugin_path);
2222
2223         ad->plugin_node = plugin_node; // the selected plugin name
2224         #endif
2225 }
2226
2227 /**
2228  * @see [caller] setting_main_list_mouse_up_cb
2229  * @see [caller] setting_main_sel_list_mouse_up_cb
2230  */
2231 static void __rotate_lock_handler(int chk_status, setting_main_appdata *ad )
2232 {
2233         SETTING_TRACE_BEGIN;
2234         if( chk_status == 1)
2235         {
2236                 // toggle : 0 --> 1
2237                 int angle = elm_win_rotation_get(ad->win_main);
2238                 elm_win_rotation_with_resize_set(ad->win_main, angle);
2239         } else {
2240                 elm_win_rotation_with_resize_set(ad->win_main, 0);
2241         }
2242         vconf_set_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, chk_status);
2243 }
2244
2245 /**
2246  * toggle cb
2247  */
2248 void setting_main_list_mouse_up_cb(void *data, Evas_Object *eo,
2249                                           void *event_info)
2250 {
2251         SETTING_TRACE_BEGIN;
2252         retm_if(data == NULL, "Data parameter is NULL");
2253         Setting_GenGroupItem_Data *list_item =
2254             (Setting_GenGroupItem_Data *) data;
2255         SETTING_TRACE("process item [%s]", list_item->keyStr);
2256         list_item->chk_status = elm_check_state_get(eo);        /* for update new state */
2257
2258         SETTING_TRACE("change radio[%s], status is:%d", _(list_item->keyStr),
2259                       list_item->chk_status);
2260         setting_main_appdata *ad = g_main_ad;
2261
2262         if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
2263                 int err;
2264                 if (elm_check_state_get(eo)) {
2265                         setting_set_bool_slp_key
2266                             (BOOL_SLP_SETTING_USE_PACKET_DATA,
2267                              SETTING_ON_OFF_BTN_ON, &err);
2268                 } else {
2269                         setting_set_bool_slp_key
2270                             (BOOL_SLP_SETTING_USE_PACKET_DATA,
2271                              SETTING_ON_OFF_BTN_OFF, &err);
2272                 }
2273
2274         } else if (!safeStrCmp(KeyStr_Landscape, list_item->keyStr)) {
2275                 __rotate_lock_handler(list_item->chk_status, ad);
2276         }
2277
2278         return;
2279 }
2280
2281 /**
2282  * genlist touch cb
2283  */
2284 void setting_main_sel_list_mouse_up_cb(void *data, Evas_Object *eo,
2285                                               void *event_info)
2286 {
2287         SETTING_TRACE_BEGIN;
2288         setting_retm_if(data == NULL, "Data parameter is NULL");
2289
2290         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2291         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2292         elm_genlist_item_selected_set(item, 0);
2293         Setting_GenGroupItem_Data *list_item =
2294             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2295
2296         list_item->chk_status = elm_check_state_get(list_item->eo_check);
2297
2298         /* new status */
2299     list_item->chk_status = !list_item->chk_status;
2300     elm_check_state_set(list_item->eo_check, list_item->chk_status);
2301
2302         setting_main_appdata *ad = (setting_main_appdata *) data;
2303         if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
2304                 /* setting_reset_slp_key_by_status(eo, BOOL_SLP_SETTING_USE_PACKET_DATA); */
2305                 int err;
2306                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
2307                                          list_item->chk_status, &err);
2308
2309         } else if (!safeStrCmp(KeyStr_Landscape, list_item->keyStr)) {
2310                 __rotate_lock_handler(list_item->chk_status, ad);
2311         }
2312
2313         return;
2314 }
2315
2316 void __alternate_flight_mode(Evas_Object *check)
2317 {
2318         SETTING_TRACE_BEGIN;
2319         int ret;
2320         Eina_Bool status =  elm_check_state_get(check);
2321         SETTING_TRACE("flight mode status : %d", status);
2322         setting_main_appdata *ad = g_main_ad;
2323
2324         //Check whether some requestion is processing by TAPI
2325         if (ad->b_fm_requesting)
2326         {
2327                 //Do nothing, just mark the lastest operation..
2328                 SETTING_TRACE("Some requestion is processing by TAPI, wait to process");
2329                 ad->fm_waiting_op = status ? FM_ENTER : FM_LEAVE;
2330                 return;
2331         }
2332
2333         //otherwise, invalid waiting operation and send requsetion to TAPI:
2334         ad->fm_waiting_op = FM_INVALID;
2335         if (status) {
2336                 ret = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
2337                 setting_retm_if(ret != TAPI_API_SUCCESS,
2338                                 "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
2339         } else {
2340                 ret = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
2341                 setting_retm_if(ret != TAPI_API_SUCCESS,
2342                                 "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
2343         }
2344
2345         //sucessfully sent,
2346         ad->b_fm_requesting = TRUE;
2347         SETTING_TRACE_END;
2348 }
2349
2350 static void __tethering_disabled_cb(tethering_error_e error, tethering_type_e type, tethering_disabled_cause_e code, void *data)
2351 {
2352         int ret;
2353
2354         if (data) {
2355                 tethering_h th = (tethering_h)data;
2356                 tethering_destroy(th);
2357         }
2358
2359         ret = wifi_initialize();
2360         setting_retm_if(ret < 0, "*** [ERR] wifi_initialize() ***");
2361
2362         ret = wifi_activate(NULL, NULL);
2363         if (ret < 0) {
2364                 wifi_deinitialize();
2365         }
2366         setting_retm_if(ret < 0, "*** [ERR] wifi_activate() ***");
2367
2368         ret = wifi_deinitialize();
2369         setting_retm_if(ret < 0, "*** [ERR] wifi_deinitialize() ***");
2370 }
2371
2372 static void __tethering_turn_off_resp_cb(void *data, Evas_Object *obj, void *event_info)
2373 {
2374         setting_retm_if(NULL == obj, "NULL == obj");
2375         int response_type = btn_type(obj);
2376         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
2377
2378         if (g_main_ad)
2379         {
2380                 evas_object_del(g_main_ad->popup);
2381                 g_main_ad->popup = NULL;
2382         }
2383
2384         if (POPUP_RESPONSE_OK == response_type)
2385         {
2386                 tethering_h th = NULL;
2387                 tethering_error_e ret = TETHERING_ERROR_NONE;
2388
2389                 ret = tethering_create(&th);
2390                 if (ret != TETHERING_ERROR_NONE) {
2391                         list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
2392                         list_item->chk_status = EINA_FALSE;
2393                         elm_object_item_data_set(list_item->item, list_item);
2394                         elm_genlist_item_update(list_item->item);
2395                 }
2396
2397                 ret = tethering_set_disabled_cb(th, TETHERING_TYPE_WIFI, __tethering_disabled_cb, th);
2398                 if (ret != TETHERING_ERROR_NONE) {
2399                         list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
2400                         list_item->chk_status = EINA_FALSE;
2401                         elm_object_item_data_set(list_item->item, list_item);
2402                         elm_genlist_item_update(list_item->item);
2403
2404                         tethering_destroy(th);
2405                         return;
2406                 }
2407
2408                 tethering_disable(th, TETHERING_TYPE_WIFI);
2409         }
2410         else if (POPUP_RESPONSE_CANCEL == response_type)
2411         {
2412                 list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
2413                 list_item->chk_status = EINA_FALSE;
2414                 elm_object_item_data_set(list_item->item, list_item);
2415                 elm_genlist_item_update(list_item->item);
2416         }
2417 }
2418
2419 void __alternate_wifi_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
2420 {
2421         SETTING_TRACE_BEGIN;
2422         int ret;
2423         Eina_Bool status =  elm_check_state_get(check);
2424         SETTING_TRACE("wifi mode status : %d", status);
2425
2426         int value, err;
2427
2428         if (tethering_is_enabled(NULL, TETHERING_TYPE_WIFI) == TRUE) {
2429                 list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2430                 elm_object_item_data_set(list_item->item, list_item);
2431                 elm_genlist_item_update(list_item->item);
2432
2433                 g_main_ad->popup = setting_create_popup_with_btn(list_item,
2434                                 g_main_ad->win_main, NULL,
2435                                 _("Connecting Wi-Fi will turn off Mobile hotspot. Continue?"),
2436                                 __tethering_turn_off_resp_cb,
2437                                 0, 2, _("IDS_COM_SK_OK"), _("IDS_COM_SK_CANCEL"));
2438         } else {
2439                 ret = wifi_initialize();
2440                 if (ret < 0) {
2441                         setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
2442                         list_item->chk_status = value;
2443                         elm_object_item_data_set(list_item->item, list_item);
2444                         elm_genlist_item_update(list_item->item);
2445                 }
2446                 setting_retm_if(ret < 0, "*** [ERR] wifi_initialize() ***");
2447
2448                 if (status) {
2449                         ret = wifi_activate(NULL, NULL);
2450                         if (ret < 0) {
2451                                 setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
2452                                 list_item->chk_status = value;
2453                                 elm_object_item_data_set(list_item->item, list_item);
2454                                 elm_genlist_item_update(list_item->item);
2455                                 wifi_deinitialize();
2456                         }
2457                         setting_retm_if(ret < 0, "*** [ERR] wifi_activate() ***");
2458                 } else {
2459                         ret = wifi_deactivate(NULL, NULL);
2460                         if (ret < 0) {
2461                                 setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
2462                                 list_item->chk_status = value;
2463                                 elm_object_item_data_set(list_item->item, list_item);
2464                                 elm_genlist_item_update(list_item->item);
2465                                 wifi_deinitialize();
2466                         }
2467                         setting_retm_if(ret < 0, "*** [ERR] wifi_deactivate() ***");
2468                 }
2469
2470                 ret = wifi_deinitialize();
2471                 if (ret < 0) {
2472                         setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
2473                         list_item->chk_status = value;
2474                         elm_object_item_data_set(list_item->item, list_item);
2475                         elm_genlist_item_update(list_item->item);
2476                 }
2477                 setting_retm_if(ret < 0, "*** [ERR] wifi_deinitialize() ***");
2478
2479                 list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2480                 elm_object_item_data_set(list_item->item, list_item);
2481                 elm_genlist_item_update(list_item->item);
2482
2483         }
2484         SETTING_TRACE_END;
2485 }
2486
2487 void __alternate_bt_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
2488 {
2489         SETTING_TRACE_BEGIN;
2490         int ret;
2491         Eina_Bool status =  elm_check_state_get(check);
2492         SETTING_TRACE("bt mode status : %d", status);
2493
2494         int value, err;
2495
2496         ret = bt_initialize();
2497         if (ret < 0) {
2498                 setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
2499                 list_item->chk_status = value;
2500                 elm_object_item_data_set(list_item->item, list_item);
2501                 elm_genlist_item_update(list_item->item);
2502         }
2503         setting_retm_if(ret < 0, "*** [ERR] bt_initialize() ***");
2504
2505
2506         if (status) {
2507                 ret = bt_adapter_enable();
2508                 if (ret < 0) {
2509                         setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
2510                         list_item->chk_status = value;
2511                         elm_object_item_data_set(list_item->item, list_item);
2512                         elm_genlist_item_update(list_item->item);
2513                         bt_deinitialize();
2514                 }
2515                 setting_retm_if(ret < 0, "*** [ERR] bt_adapter_enable() ***");
2516         } else {
2517                 ret = bt_adapter_disable();
2518                 if (ret < 0) {
2519                         setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
2520                         list_item->chk_status = value;
2521                         elm_object_item_data_set(list_item->item, list_item);
2522                         elm_genlist_item_update(list_item->item);
2523                         bt_deinitialize();
2524                 }
2525                 setting_retm_if(ret < 0, "*** [ERR] bt_adapter_disable() ***");
2526         }
2527
2528         ret = bt_deinitialize();
2529         if (ret < 0) {
2530                 setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
2531                 list_item->chk_status = value;
2532                 elm_object_item_data_set(list_item->item, list_item);
2533                 elm_genlist_item_update(list_item->item);
2534         }
2535         setting_retm_if(ret < 0, "*** [ERR] bt_deinitialize() ***");
2536
2537         list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2538         elm_object_item_data_set(list_item->item, list_item);
2539         elm_genlist_item_update(list_item->item);
2540
2541         SETTING_TRACE_END;
2542 }
2543
2544 void __alternate_nfc_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
2545 {
2546         SETTING_TRACE_BEGIN;
2547         int ret;
2548         Eina_Bool status =  elm_check_state_get(check);
2549         SETTING_TRACE("nfc mode status : %d", status);
2550
2551         int value, err;
2552
2553         ret = nfc_manager_initialize(NULL, NULL);
2554         if (ret < 0) {
2555                 setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
2556                 list_item->chk_status = value;
2557                 elm_object_item_data_set(list_item->item, list_item);
2558                 elm_genlist_item_update(list_item->item);
2559         }
2560         setting_retm_if(ret < 0, "*** [ERR] nfc_manager_initialize() ***");
2561
2562         ret = nfc_manager_set_activation(status, NULL, NULL);
2563         if (ret < 0) {
2564                 setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
2565                 list_item->chk_status = value;
2566                 elm_object_item_data_set(list_item->item, list_item);
2567                 elm_genlist_item_update(list_item->item);
2568                 nfc_manager_deinitialize();
2569         }
2570         setting_retm_if(ret < 0, "*** [ERR] nfc_manager_set_activation() ***");
2571
2572         ret = nfc_manager_deinitialize();
2573         if (ret < 0) {
2574                 setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
2575                 list_item->chk_status = value;
2576                 elm_object_item_data_set(list_item->item, list_item);
2577                 elm_genlist_item_update(list_item->item);
2578         }
2579         setting_retm_if(ret < 0, "*** [ERR] nfc_manager_deinitialize() ***");
2580
2581         list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2582         elm_object_item_data_set(list_item->item, list_item);
2583         elm_genlist_item_update(list_item->item);
2584
2585         SETTING_TRACE_END;
2586 }
2587
2588 void __alternate_sbeam_mode(Evas_Object *check)
2589 {
2590         SETTING_TRACE_BEGIN;
2591         int ret;
2592         Eina_Bool status =  elm_check_state_get(check);
2593         SETTING_TRACE("wifi mode status : %d", status);
2594
2595         vconf_set_bool(VCONFKEY_NFC_SBEAM, status);
2596
2597         SETTING_TRACE_END;
2598 }
2599
2600 void
2601 setting_main_click_list_network_ug_cb(void *data, Evas_Object *obj,
2602                                       void *event_info)
2603 {
2604         SETTING_TRACE_BEGIN;
2605         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2606         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2607
2608         elm_genlist_item_selected_set(item, EINA_FALSE);
2609
2610         if (g_main_ad->ug) {
2611                 SETTING_TRACE
2612                     ("[ad->ug non-NULL]skip genlist click event!!");
2613
2614                 SETTING_TRACE_END;
2615                 return;
2616         }
2617
2618         setting_main_appdata *ad = g_main_ad;
2619         setting_main_click_list_item_reset_data(ad, obj);
2620
2621         int err = 0;
2622         int value;
2623         setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
2624         SETTING_TRACE("value:%d", value);
2625         switch (value) {
2626         case VCONFKEY_TELEPHONY_SIM_INSERTED:
2627                 {
2628                         struct ug_cbs *cbs =
2629                             (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
2630                         setting_retm_if(!cbs, "calloc failed");
2631                         cbs->layout_cb = setting_main_layout_ug_cb;
2632                         cbs->result_cb = setting_main_result_ug_cb;
2633                         cbs->destroy_cb = setting_main_destroy_ug_cb;
2634                         cbs->priv = (void *)ad;
2635                         setting_main_click_list_item_ug_cb(data, obj,
2636                                                            "setting-network-efl",
2637                                                            NULL, cbs);
2638                         FREE(cbs);
2639                         break;
2640                 }
2641         case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
2642                 setting_create_simple_popup(NULL, ad->win_main,
2643                                             NULL, _("IDS_ST_HEADER_INSERT_SIM_CARD_ABB"));
2644                 SETTING_TRACE("%s*** [ERR] No SIM. sim_slot_type=%d ***%s",
2645                               SETTING_FONT_RED, value, SETTING_FONT_BLACK);
2646                 return;
2647                 break;
2648         case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
2649         case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
2650                 setting_create_simple_popup(NULL, ad->win_main,
2651                                             NULL,_("IDS_COM_BODY_INVALID_SIM_CARD"));
2652                 SETTING_TRACE("%s*** [ERR] Invalid SIM. sim_slot_type=%d ***%s",
2653                               SETTING_FONT_RED, value, SETTING_FONT_BLACK);
2654                 return;
2655                 break;
2656         default:
2657                 break;
2658         }
2659
2660 }
2661
2662 /**
2663  * genlist touch cb
2664  */
2665 static void
2666 setting_main_click_Gendial_list_flight_mode_cb(void *data, Evas_Object *obj,
2667                                                void *event_info)
2668 {
2669     /* error check */
2670     setting_retm_if(data == NULL, "Data parameter is NULL");
2671
2672     retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2673     Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2674     elm_genlist_item_selected_set(item, 0);
2675     Setting_GenGroupItem_Data *list_item =
2676         (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2677     int old_status = elm_check_state_get(list_item->eo_check);
2678     /* new status */
2679     list_item->chk_status = !old_status;
2680     elm_check_state_set(list_item->eo_check, list_item->chk_status);
2681
2682     __alternate_flight_mode(list_item->eo_check);
2683     SETTING_TRACE_END;
2684 }
2685
2686 /**
2687  * toggle cb
2688  */
2689 void
2690 setting_main_click_list_flight_mode_cb(void *data, Evas_Object *obj,
2691                                        void *event_info)
2692 {
2693         SETTING_TRACE_BEGIN;
2694         retm_if(data == NULL, "Data parameter is NULL");
2695         Setting_GenGroupItem_Data *list_item =
2696             (Setting_GenGroupItem_Data *) data;
2697         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2698         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2699                       list_item->chk_status);
2700
2701         __alternate_flight_mode(obj);
2702         SETTING_TRACE_END;
2703 }
2704
2705 /**
2706  * toggle cb
2707  */
2708 void
2709 setting_main_click_list_wifi_mode_cb(void *data, Evas_Object *obj,
2710                                        void *event_info)
2711 {
2712         SETTING_TRACE_BEGIN;
2713         retm_if(data == NULL, "Data parameter is NULL");
2714         Setting_GenGroupItem_Data *list_item =
2715             (Setting_GenGroupItem_Data *) data;
2716         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2717         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2718                       list_item->chk_status);
2719
2720         __alternate_wifi_mode(list_item, obj);
2721         SETTING_TRACE_END;
2722 }
2723
2724 /**
2725  * toggle cb
2726  */
2727 void
2728 setting_main_click_list_bt_mode_cb(void *data, Evas_Object *obj,
2729                                        void *event_info)
2730 {
2731         SETTING_TRACE_BEGIN;
2732         retm_if(data == NULL, "Data parameter is NULL");
2733         Setting_GenGroupItem_Data *list_item =
2734             (Setting_GenGroupItem_Data *) data;
2735         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2736         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2737                       list_item->chk_status);
2738
2739         __alternate_bt_mode(list_item, obj);
2740         SETTING_TRACE_END;
2741 }
2742
2743 /**
2744  * toggle cb
2745  */
2746 void
2747 setting_main_click_list_nfc_mode_cb(void *data, Evas_Object *obj,
2748                                        void *event_info)
2749 {
2750         SETTING_TRACE_BEGIN;
2751         retm_if(data == NULL, "Data parameter is NULL");
2752         Setting_GenGroupItem_Data *list_item =
2753             (Setting_GenGroupItem_Data *) data;
2754         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2755         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2756                       list_item->chk_status);
2757
2758         __alternate_nfc_mode(list_item, obj);
2759         SETTING_TRACE_END;
2760 }
2761
2762 /**
2763  * toggle cb
2764  */
2765 void
2766 setting_main_click_list_sbeam_mode_cb(void *data, Evas_Object *obj,
2767                                        void *event_info)
2768 {
2769         SETTING_TRACE_BEGIN;
2770         retm_if(data == NULL, "Data parameter is NULL");
2771         Setting_GenGroupItem_Data *list_item =
2772             (Setting_GenGroupItem_Data *) data;
2773         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2774         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2775                       list_item->chk_status);
2776
2777         __alternate_sbeam_mode(obj);
2778         SETTING_TRACE_END;
2779 }
2780
2781 /**
2782  * store current selection in setting.cfg
2783  */
2784 void setting_try_save_check_list(void *data)
2785 {
2786         SETTING_TRACE_BEGIN;
2787         setting_main_appdata *ad = (setting_main_appdata *) data;
2788
2789         Eina_List *check_list = ad->item_check_list;
2790         Setting_GenGroupItem_Data *list_item = NULL;
2791         int update_count = 0;
2792
2793         while (check_list) {
2794                 list_item = (Setting_GenGroupItem_Data *) eina_list_data_get(check_list);
2795                 if (NULL == list_item) continue;
2796
2797                 update_count++;
2798                 if (list_item->chk_status) {
2799                         /* to update config file */
2800                         setting_cfg_set_pos(list_item->keyStr, Cfg_Item_Pos_Level0);
2801                 } else {
2802                         /* to update config file */
2803                         setting_cfg_set_pos(list_item->keyStr, Cfg_Item_Pos_Level1);
2804                 }
2805                 check_list = eina_list_next(check_list);
2806         }
2807
2808         if (update_count == 0) {
2809                 /* to popup tips notify */
2810         } else {
2811                 setting_cfg_file_update();
2812         }
2813         SETTING_TRACE_END;
2814 }
2815
2816 void
2817 setting_main_click_edit_preferred_cb(void *data, Evas_Object *obj, void *event_info)
2818 {
2819         SETTING_TRACE_BEGIN;
2820
2821         setting_main_appdata *ad = (setting_main_appdata *) data;
2822         ad->view_type = SETTING_VIEW_ALL_CHECK;
2823         __setting_create_prefered_view(ad);
2824         __load_check_list(ad, &(ad->edit_preferred_genlist), NULL);
2825
2826         SETTING_TRACE_END;
2827 }