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