Merge branch 'master' into tizen_2.1
[apps/core/preloaded/settings.git] / src / setting-main.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Flora License, Version 1.0 (the License);
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://floralicense.org/license/
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an AS IS BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 #include <tapi_common.h>
18 #include <aul.h>
19 #include <ail.h>
20 #include <time.h>
21 #include <setting-main.h>
22 #include <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     if (support)
1479     {
1480         Elm_Object_Item *top_item = elm_naviframe_top_item_get(navi_bar);
1481         if (top_item)
1482             elm_object_item_signal_emit(top_item, "elm,state,sip,shown", "");
1483     }
1484 }
1485
1486 static void __setting_hide_title_toolbar(void *data, Evas_Object *obj, void *event_info)
1487 {
1488     SETTING_TRACE_BEGIN;
1489     //elm_object_item_signal_emit(data, "elm,state,sip,hidden", "");
1490     setting_main_appdata *ad = (setting_main_appdata *) data;
1491
1492     Evas_Object *navi_bar = NULL;
1493
1494     if (ad->isInUGMode && ad->ug) {
1495         Evas_Object *layout = (Evas_Object *)ug_get_layout(ad->ug);
1496         if (layout)
1497             navi_bar = elm_object_part_content_get(layout, "elm.swallow.content");
1498     } else {
1499         navi_bar = ad->navibar_main;
1500     }
1501
1502     const char *support = evas_object_data_get(navi_bar, "sip.naviframe.title_obj");
1503
1504     SETTING_TRACE("support:%s", support);
1505     if (support)
1506     {
1507         Elm_Object_Item *top_item = elm_naviframe_top_item_get(navi_bar);
1508         if (top_item)
1509             elm_object_item_signal_emit(top_item, "elm,state,sip,hidden", "");
1510     }
1511 }
1512
1513 static bool __setting_create_main_view(void *data)
1514 {
1515         SETTING_TRACE_BEGIN;
1516         /* error check */
1517         setting_retvm_if(data == NULL, FALSE, "data == NULL");
1518         setting_main_appdata *ad = (setting_main_appdata *) data;
1519
1520         Evas_Object *conform = elm_conformant_add(ad->win_main);
1521         ad->ly_main = setting_create_win_layout(ad->win_main, ad->win_main);
1522         evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1523         evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
1524         elm_win_resize_object_add(ad->win_main, conform);
1525         elm_object_content_set(conform, ad->ly_main);
1526         evas_object_show(conform);
1527
1528     evas_object_smart_callback_add(conform, "virtualkeypad,state,on", __setting_show_title_toolbar, ad);
1529     evas_object_smart_callback_add(conform, "virtualkeypad,state,off", __setting_hide_title_toolbar, ad);
1530
1531         elm_win_conformant_set(ad->win_main, EINA_TRUE);
1532
1533         ad->conform = conform;
1534
1535         ad->navibar_main = setting_create_navi_bar(ad->ly_main);
1536
1537         ad->main_genlist = elm_genlist_add(ad->navibar_main);
1538         elm_object_style_set(ad->main_genlist, "dialogue");
1539         retvm_if(ad->main_genlist == NULL, FALSE,
1540                  "Cannot set scroller object as contento of layout");
1541
1542         //elm_genlist_homogeneous_set(ad->main_genlist, EINA_TRUE);
1543         elm_genlist_clear(ad->main_genlist);    /* first to clear list */
1544         evas_object_smart_callback_add(ad->main_genlist, "realized", __gl_realized, ad);
1545
1546         setting_create_navi_bar_buttons(_("IDS_COM_BODY_SETTINGS"),
1547                                         _("IDS_COM_BODY_BACK"), NULL, _("IDS_ST_OPT_ALL"),
1548                                         __btnback_clicked_cb, NULL,
1549                                         __allFrequent_btn_cb, ad, ad->main_genlist,
1550                                         ad->navibar_main, NULL);
1551
1552         ad->profile_type = MAIN_PROFILE_PREFERRED;
1553         ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1554         ad->load_fns[Func_Type_System] = __load_system_level0_list;
1555         ad->load_fns[Func_Type_Apps] = __load_applications_level_all_list;
1556         ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level_all_list;
1557         setting_main_refresh(ad);
1558         return TRUE;
1559 }
1560
1561 static bool __setting_create_prefered_view(void *data)
1562 {
1563         SETTING_TRACE_BEGIN;
1564         /* error check */
1565         setting_retvm_if(data == NULL, FALSE, "data == NULL");
1566         setting_main_appdata *ad = (setting_main_appdata *) data;
1567
1568         /* the genlist will be destroyed with its parent view, when using elm_naviframe_item_pop() to destroy the view. */
1569         ad->edit_preferred_genlist = elm_genlist_add(ad->win_main);
1570         elm_object_style_set(ad->edit_preferred_genlist, "dialogue");
1571         elm_genlist_clear(ad->edit_preferred_genlist);  /* first to clear list */
1572
1573         /*  [UI] edit preffered view */
1574         Evas_Object *sub_layout = elm_layout_add(ad->win_main);
1575         elm_object_style_set(sub_layout, "dialogue");
1576         elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "search_layout");
1577         evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
1578         evas_object_show(sub_layout);
1579
1580         ad->gl_sel_all = elm_genlist_add(ad->win_main);
1581         elm_genlist_clear(ad->gl_sel_all);      /* first to clear list */
1582         elm_genlist_bounce_set(ad->gl_sel_all, 0, 0);
1583
1584         elm_object_part_content_set(sub_layout, "search_bar", ad->gl_sel_all);  /*  add 'Select all' */
1585         elm_object_part_content_set(sub_layout, "search_list", ad->edit_preferred_genlist);     /*  add Genlist */
1586
1587         /*  push, not create */
1588         setting_push_layout_navi_bar(_(EDIT_PREFERRED_STR),
1589                                      _("IDS_COM_SK_CANCEL"),
1590                                      _("IDS_COM_SK_DONE"), NULL,
1591                                      __prefered_buttons_cb, __prefered_buttons_cb, NULL, ad,
1592                                      sub_layout, ad->navibar_main,
1593                                      NULL);
1594         SETTING_TRACE_END;
1595         return TRUE;
1596 }
1597
1598 static void setting_main_tapi_event_cb(TapiHandle *handle, int result, void *data, void *user_data)
1599 {
1600         SETTING_TRACE_BEGIN;
1601         ret_if(!user_data);
1602         setting_main_appdata *ad = user_data;
1603         ad->b_fm_requesting = FALSE;
1604         SETTING_TRACE("result:%d", result);
1605
1606         int err = 0;
1607         switch (result) {
1608         case TAPI_POWER_FLIGHT_MODE_RESP_ON:
1609
1610                 setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1611                                          SETTING_ON_OFF_BTN_ON, &err);
1612
1613                 //If Setting has validate operation (fm_waiting_op == FM_LEAVE) to process, process it.
1614                 //Otherwise, do nothing
1615                 if (FM_LEAVE == ad->fm_waiting_op)
1616                 {
1617                         //Send the latest operation
1618                         ad->fm_waiting_op = FM_INVALID;
1619                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
1620                         setting_retm_if(err != TAPI_API_SUCCESS,
1621                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
1622
1623                         //sucessfully sent,
1624                         ad->b_fm_requesting = TRUE;
1625
1626                 }
1627                 break;
1628
1629         case TAPI_POWER_FLIGHT_MODE_RESP_OFF:
1630
1631                 setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1632                                          SETTING_ON_OFF_BTN_OFF, &err);
1633
1634                 //If Setting has validate operation (here, fm_waiting_op == FM_ENTER) to process,process it.
1635                 //Otherwise, do nothing
1636                 if (FM_ENTER == ad->fm_waiting_op)
1637                 {
1638                         //Send the latest operation
1639                         ad->fm_waiting_op = FM_INVALID;
1640                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
1641                         setting_retm_if(err != TAPI_API_SUCCESS,
1642                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
1643
1644                         //sucessfully sent,
1645                         ad->b_fm_requesting = TRUE;
1646                 }
1647
1648                 break;
1649
1650         case TAPI_POWER_FLIGHT_MODE_RESP_FAIL:
1651                 //Setting has a validate operation to process, Send the operation request
1652                 if (FM_ENTER == ad->fm_waiting_op)
1653                 {
1654                         ad->fm_waiting_op = FM_INVALID;
1655                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
1656
1657                         setting_retm_if(err != TAPI_API_SUCCESS,
1658                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
1659                         ad->b_fm_requesting = TRUE;
1660                 }
1661                 else if (FM_LEAVE == ad->fm_waiting_op)
1662                 {
1663                         ad->fm_waiting_op = FM_INVALID;
1664                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
1665
1666                         setting_retm_if(err != TAPI_API_SUCCESS,
1667                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
1668                         ad->b_fm_requesting = TRUE;
1669                 }
1670                 else //Current requset is the last one, Setting needs to notify user
1671                 {
1672                         setting_create_popup_without_btn(ad, ad->win_main,
1673                                              _("IDS_COM_POP_ERROR"),
1674                                              _("IDS_ST_POP_UNABLE_TO_TURN_ON_FLIGHT_MODE_VODA"),
1675                                              NULL, POPUP_INTERVAL,
1676                                              FALSE, FALSE);
1677
1678                         //It is need to rollback the status,
1679                         if (ad->data_flight) {
1680                                 ad->data_flight->chk_status = !ad->data_flight->chk_status;
1681                                 elm_check_state_set(ad->data_flight->eo_check, ad->data_flight->chk_status);
1682                         }
1683                         return;
1684                 }
1685
1686                 //sucessfully sent,
1687                 ad->b_fm_requesting = TRUE;
1688
1689                 break;
1690
1691         case TAPI_POWER_FLIGHT_MODE_RESP_MAX:
1692                 setting_create_popup_without_btn(ad, ad->win_main,
1693                                      _("IDS_COM_POP_ERROR"),
1694                                      _("IDS_COM_POP_UNEXPECTED_ERROR"),
1695                                      NULL, POPUP_INTERVAL, FALSE, FALSE);
1696
1697                 //It is need to rollback the status,
1698                 if (ad->data_flight) {
1699                         ad->data_flight->chk_status = !ad->data_flight->chk_status;
1700                         elm_check_state_set(ad->data_flight->eo_check, ad->data_flight->chk_status);
1701                 }
1702                 break;
1703         default:
1704                 /* do nothing */
1705                 SETTING_TRACE_DEBUG("default");
1706                 if(ad->data_flight)
1707                         setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1708                                          ad->data_flight->chk_status, &err);
1709                 break;
1710         }
1711         return;
1712 }
1713
1714 static int setting_main_refresh(void *data)
1715 {
1716         SETTING_TRACE_BEGIN;
1717         setting_main_appdata *ad = (setting_main_appdata *) data;
1718         elm_genlist_clear(ad->main_genlist);    /* first to clear list */
1719
1720 #if 0
1721         if (is_ug_installed_by_ug_args("rcs-config"))
1722         {
1723                 Elm_Object_Item *item = elm_genlist_item_append(ad->main_genlist, &itc_seperator, NULL, NULL,
1724                                             ELM_GENLIST_ITEM_NONE, NULL, NULL);
1725                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1726                 setting_create_Gendial_field_groupitem(ad->main_genlist,
1727                                                        &(ad->itc[GENDIAL_Type_1text_1icon_2]),
1728                                                        NULL,
1729                                                        setting_main_click_list_ex_ug_cb,
1730                                                        "rcs-config",
1731                                                        SWALLOW_Type_INVALID,
1732                                                        IMG_Joyn, NULL,
1733                                                        0, KeyStr_Joyn, NULL,
1734                                                        NULL);
1735         }
1736 #endif
1737
1738         int i;
1739         for(i = Func_Type_Connectivity; i < Func_Type_MAX; i++)
1740                 (ad->load_fns[i]) (ad);
1741
1742         memset(ad->load_fns, 0, Func_Type_MAX *sizeof(menu_list_load_fn));
1743         SETTING_TRACE_END;
1744         return SETTING_RETURN_SUCCESS;
1745 }
1746
1747 static int setting_main_create(void *cb)
1748 {
1749         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1750
1751         setting_main_appdata *ad = (setting_main_appdata *) cb;
1752         g_main_ad = ad;
1753         //pass NULL to let TAPI access default module
1754         ad->handle = tel_init(NULL);
1755         if (!ad->handle) {
1756                 SETTING_TRACE_ERROR("*** [ERR] tel_init failed ***");
1757         } else {
1758                 SETTING_TRACE("tel_init ok[handle:%p]", ad->handle);
1759         }
1760         setting_create_Gendial_itc("dialogue/1text.1icon.2",
1761                                    &(ad->itc[GENDIAL_Type_1text_1icon_2]));
1762         setting_create_Gendial_itc("dialogue/1text.2icon",
1763                                    &(ad->itc[GENDIAL_Type_1text_2icon]));
1764         setting_create_Gendial_itc("dialogue/2text.1icon.3",
1765                                    &(ad->itc[GENDIAL_Type_1icon_2text]));
1766         setting_create_Gendial_itc("dialogue/1text.1icon.2",
1767                                    &(ad->itc[GENDIAL_Type_1text_2icon_2]));
1768         setting_create_Gendial_itc("dialogue/2text.2icon.3",
1769                                    &(ad->itc[GENDIAL_Type_2text_2icon_3]));
1770         setting_create_Gendial_itc("dialogue/title",
1771                                    &(ad->itc[GENDIAL_Type_group_item]));
1772         setting_create_Gendial_itc("select_all",
1773                                    &(ad->itc[GENDIAL_Type_sel_all]));
1774
1775         setting_create_Gendial_itc("dialogue/2text.3", &(ad->itc[GENDIAL_Type_2text_3]));
1776
1777         ad->view_type = SETTING_VIEW_MAIN;
1778         __setting_create_main_view(ad);
1779
1780         setting_view_main.is_create = 1;
1781
1782         setting_drawer_list_init();
1783         return SETTING_RETURN_SUCCESS;
1784 }
1785
1786 static int setting_main_destroy(void *cb)
1787 {
1788         SETTING_TRACE_BEGIN;
1789         /* error check */
1790         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1791
1792         setting_main_appdata *ad = (setting_main_appdata *) cb;
1793         if (0 == setting_view_main.is_create)
1794         {
1795                 //already not exsit
1796                 return SETTING_RETURN_SUCCESS;
1797         }
1798
1799     evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,on", __setting_show_title_toolbar);
1800     evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,off", __setting_hide_title_toolbar);
1801
1802         if (ad->refresh_idler) {
1803                 ecore_idler_del(ad->refresh_idler);
1804                 ad->refresh_idler = NULL;
1805         }
1806
1807         if (ad->handle) {
1808                 int tapi_ret = tel_deinit(ad->handle);
1809                 if (tapi_ret != TAPI_API_SUCCESS) {
1810                         SETTING_TRACE_DEBUG("*** [ERR] tel_deinit. [%d] ***", tapi_ret);
1811                 } else {
1812                         SETTING_TRACE("***  tel_deinit OK ");
1813                 }
1814                 ad->handle = NULL;
1815         }
1816
1817         /* then destroy the UI object. */
1818         if (ad->item_check_list) {
1819                 eina_list_free(ad->item_check_list);
1820                 ad->item_check_list = NULL;
1821         } else {
1822                 SETTING_TRACE("*** ad->item_check_list is NULL - abnormal state ");
1823         }
1824
1825         if (ad->ly_main) {
1826                 evas_object_del(ad->ly_main);
1827                 ad->ly_main = NULL;
1828         }
1829
1830         if (ad->flight_popup) {
1831                 evas_object_del(ad->flight_popup);
1832                 ad->flight_popup = NULL;
1833         }
1834
1835         evas_object_smart_callback_del(ad->main_genlist, "realized", __gl_realized);
1836
1837         setting_dbus_handler_fini();
1838         setting_drawer_list_fini();
1839
1840         setting_view_main.is_create = 0;
1841         SETTING_TRACE_END;
1842         return SETTING_RETURN_SUCCESS;
1843 }
1844
1845 static int setting_main_update(void *cb)
1846 {
1847         SETTING_TRACE_BEGIN;
1848
1849         /* error check */
1850         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1851
1852         setting_main_appdata *ad = (setting_main_appdata *) cb;
1853
1854         if (ad->ly_main != NULL) {
1855                 //evas_object_show(ad->ly_main);
1856         }
1857
1858         return SETTING_RETURN_SUCCESS;
1859 }
1860
1861 static int setting_main_cleanup(void *cb)
1862 {
1863         SETTING_TRACE_BEGIN;
1864         /* error check */
1865         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1866
1867         setting_main_appdata *ad = (setting_main_appdata *) cb;
1868
1869         if (ad->ly_main != NULL) {
1870                 //evas_object_hide(ad->ly_main);
1871         }
1872
1873         return SETTING_RETURN_SUCCESS;
1874 }
1875
1876 /* ***************************************************
1877  *
1878  *general func
1879  *
1880  ***************************************************/
1881
1882 void setting_update_gl_item(void* data)
1883 {
1884         SETTING_TRACE_BEGIN;
1885         setting_main_appdata *ad = data;
1886         retm_if(!data, "Invalid argument: data is NULL");
1887
1888         int nDx = 0;
1889         Eina_Bool bGlUpdate = EINA_FALSE;
1890         Setting_GenGroupItem_Data *item_to_update = NULL;
1891
1892         for(;nDx<GL_ITEM_MAX; nDx++) {
1893                 if(EINA_TRUE == ad->updateItems[nDx]) {
1894                         switch (nDx)
1895                         {
1896                         case GL_ITEM_WIFI:
1897                                 item_to_update = ad->data_wifi;
1898                                 bGlUpdate = EINA_TRUE;
1899                                 break;
1900                         case GL_ITEM_BT:
1901                                 item_to_update = ad->data_bt;
1902                                 bGlUpdate = EINA_TRUE;
1903                                 break;
1904                         case GL_ITEM_NFC:
1905                                 item_to_update = ad->data_nfc;
1906                                 bGlUpdate = EINA_TRUE;
1907                                 break;
1908                         case GL_ITEM_FLIGHT:
1909                                 item_to_update = ad->data_flight;
1910                                 bGlUpdate = EINA_FALSE;
1911                                 break;
1912
1913
1914
1915
1916                         default: // other case
1917                                 continue;
1918                         }
1919
1920                         if (item_to_update) {
1921                                 SETTING_TRACE("gl update [%s], bGlUpdate:%d", _(item_to_update->keyStr), bGlUpdate);
1922                                 if(bGlUpdate) {
1923                                         SETTING_TRACE("gl update:%d", nDx);
1924                                         elm_object_item_data_set(item_to_update->item, item_to_update);
1925                                         elm_genlist_item_update(item_to_update->item);
1926                                 } else {
1927                                         SETTING_TRACE("chk update:%d", nDx);
1928                                         elm_check_state_set(item_to_update->eo_check, item_to_update->chk_status);
1929                                 }
1930                         }
1931
1932                         ad->updateItems[nDx] = EINA_FALSE;
1933                 } // if(EINA_TRUE == ad->updateItems[nDx])
1934
1935         }
1936
1937         SETTING_TRACE_END;
1938         return;
1939 }
1940
1941 void setting_main_destroy_ug_cb(ui_gadget_h ug, void *priv)
1942 {
1943         setting_main_appdata *ad = (setting_main_appdata *) priv;
1944         if (!ad)
1945                 return;         /*  do nothing if ad is NULL */
1946
1947         if (ug) {
1948                 ug_destroy(ug);
1949                 ad->ug = NULL;
1950         }
1951
1952         setting_main_click_list_item_reset_data(ad, NULL);
1953
1954         // update main genlist in unloading UG
1955         SETTING_TRACE("update main genlist in unloading UG");
1956         setting_update_gl_item(ad);
1957
1958         SETTING_TRACE_END;
1959 }
1960
1961 void setting_main_result_ug_cb(ui_gadget_h ug, service_h service,
1962                                       void *priv)
1963 {
1964         if (!priv) return;
1965
1966         // set default local automatically
1967         set_defaultLangICU();
1968 }
1969
1970 void setting_main_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1971                                       void *priv)
1972 {
1973         setting_main_appdata *ad = (setting_main_appdata *) priv;
1974         Evas_Object *base;
1975
1976         if (!priv)
1977                 return;
1978         SETTING_TRACE_BEGIN;
1979
1980         base = (Evas_Object *) ug_get_layout(ug);
1981         if (!base)
1982                 return;
1983
1984         switch (mode) {
1985         case UG_MODE_FULLVIEW:
1986                 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1987                                                  EVAS_HINT_EXPAND);
1988                 evas_object_show(base);
1989                 break;
1990         default:
1991                 break;
1992         }
1993
1994         SETTING_TRACE_END;
1995 }
1996
1997 /* ***************************************************
1998  *
1999  *call back func
2000  *
2001  ***************************************************/
2002
2003 void setting_main_click_list_item_reset_data(void *data,
2004                                                     Evas_Object *obj)
2005 {
2006         SETTING_TRACE_BEGIN;
2007         setting_main_appdata *ad = (setting_main_appdata *) data;
2008
2009         ad->isInUGMode = FALSE;
2010
2011         SETTING_TRACE_END;
2012 }
2013
2014 void /* obj is the layout clicked */
2015 setting_main_click_list_item_ug_cb(void *data, Evas_Object *obj,
2016                                    char *ug_to_load, service_h svc,
2017                                    struct ug_cbs *cbs)
2018 {
2019         SETTING_TRACE_BEGIN;
2020         setting_main_appdata *ad = (setting_main_appdata *) data;
2021         if (!ug_to_load) {
2022                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
2023                 return;
2024         }
2025 #if DISABLED_CODE
2026         char ug_file[PATH_MAX];
2027         if (snprintf
2028             (ug_file, PATH_MAX, "%s/libug-%s.so", SETTING_UG_PATH,
2029              ug_to_load) < 0)
2030                 return;
2031         SETTING_TRACE("ug_file:%s", ug_file);
2032         if (!ecore_file_exists(ug_file)) {
2033                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
2034                 return;
2035         }
2036 #endif
2037         SETTING_TRACE("to create libug-%s.so", ug_to_load);
2038         ad->ug = ug_create(NULL, ug_to_load, UG_MODE_FULLVIEW, svc, cbs);
2039         if (ad->ug) {
2040                 ad->isInUGMode = TRUE;
2041                 memset(ad->cur_loaded_ug, 0x00, MAX_DISPLAY_NAME_LEN_ON_UI);
2042                 safeCopyStr(ad->cur_loaded_ug, ug_to_load, MAX_DISPLAY_NAME_LEN_ON_UI);
2043         } else {
2044
2045                 evas_object_show(ad->ly_main);
2046
2047                 SETTING_TRACE_ERROR("errno:%d", errno);
2048                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
2049         }
2050         SETTING_TRACE_END;
2051 }
2052
2053 void
2054 setting_main_click_list_default_ug_cb(void *data, Evas_Object *obj,
2055                                       void *event_info)
2056 {
2057         setting_main_appdata *ad = data;
2058         setting_create_simple_popup(ad, ad->win_main, NULL,
2059                                           NO_UG_FOUND_MSG);
2060 }
2061
2062 void
2063 setting_main_click_list_usb_cb(void *data, Evas_Object *obj, void *event_info)
2064 {
2065         SETTING_TRACE_BEGIN;
2066         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2067
2068         int err;
2069         int value = -1;
2070         char *str_text = USB_NEED_OFF;
2071
2072         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2073 #if 0
2074         setting_get_int_slp_key(INT_SLP_SETTING_MOBILE_AP_STATUS, &value, &err);
2075         if (err != 0)
2076         {
2077                 SETTING_TRACE_ERROR("FAIL: VCONFKEY_MOBILE_HOTSPOT_MODE may not exist\n");
2078                 setting_main_click_list_ex_ug_cb(data, obj, item);
2079                 return;
2080         }
2081 #endif
2082         /* If mobile hotspot is on, going USB utilties is blocked by a popup*/
2083         if (value & VCONFKEY_MOBILE_HOTSPOT_MODE_USB)
2084         {
2085                 elm_genlist_item_selected_set(item, EINA_FALSE);
2086                 setting_create_simple_popup(g_main_ad, g_main_ad->win_main, NULL, (str_text));
2087         }
2088         else
2089         {
2090                 setting_main_click_list_ex_ug_cb(data, obj, item);
2091         }
2092
2093         SETTING_TRACE_END;
2094 }
2095
2096 void setting_main_click_list_more_cb(void *data, Evas_Object *obj, void *event_info)
2097 {
2098         SETTING_TRACE_BEGIN;
2099         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2100         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2101         elm_genlist_item_selected_set(item, EINA_FALSE);
2102         retm_if(data == NULL, "Invalid argument: data is NULL");
2103         setting_main_appdata *ad = data;
2104         Setting_GenGroupItem_Data *selected_item_data =
2105                     (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2106         SETTING_TRACE("selected_item_data->keyStr:%s", selected_item_data->keyStr);
2107         if (0 == safeStrCmp(selected_item_data->keyStr, KeyStr_MoreConnect))
2108         {
2109                 ad->view_load = SETTING_VIEW_CONNECTIVE_MORE;
2110         }
2111         else if (0 == safeStrCmp(selected_item_data->keyStr, KeyStr_MoreSystem))
2112         {
2113                 ad->view_load = SETTING_VIEW_SYSTEM_MORE;
2114         }
2115         else
2116         {
2117                 return;
2118         }
2119         setting_view_change(&setting_view_main, &setting_view_more_menu, ad);
2120 }
2121
2122
2123 void
2124 setting_main_click_list_ex_ug_cb(void *data, Evas_Object *obj,
2125                                  void *event_info)
2126 {
2127         SETTING_TRACE_BEGIN;
2128         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2129         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2130
2131         elm_genlist_item_selected_set(item, EINA_FALSE);
2132
2133         if (g_main_ad->ug) {
2134                 SETTING_TRACE
2135                     ("[ad->ug non-NULL]skip genlist click event!!");
2136
2137                 SETTING_TRACE_END;
2138                 return;
2139         }
2140
2141         if (NULL == data) {     /* pass NULL to ug_args when create setting.cfg. */
2142                 setting_create_simple_popup(g_main_ad,
2143                                           g_main_ad->win_main,
2144                                           NULL, NO_UG_FOUND_MSG);
2145                 SETTING_TRACE_END;
2146                 return;
2147         }
2148
2149         setting_main_appdata *ad = g_main_ad;
2150
2151         /*  if UG is created by Setting app, setting_main_click_list_ex_ug_cb is diabled. */
2152         if (ad->isInUGMode) {
2153                 SETTING_TRACE("isInUGMode : TRUE - another UG is running now.");
2154                 ad->isInUGMode = FALSE;
2155                 SETTING_TRACE_END;
2156                 return;
2157         } else {
2158                 SETTING_TRACE
2159                     ("isInUGMode : FALSE - another UG is NOT running now.")
2160         }
2161
2162         Setting_GenGroupItem_Data *selected_item_data =
2163             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2164         setting_main_click_list_item_reset_data(ad, obj);
2165         const char *item_name = _(selected_item_data->keyStr);
2166         ret_if(!item_name);
2167
2168         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
2169         setting_retm_if(!cbs, "calloc failed");
2170         cbs->layout_cb = setting_main_layout_ug_cb;
2171         cbs->result_cb = setting_main_result_ug_cb;
2172         cbs->destroy_cb = setting_main_destroy_ug_cb;
2173         cbs->priv = (void *)ad;
2174
2175         char *path = get_ug_path_from_ug_args(data);
2176         service_h svc = get_bundle_from_ug_args(data);
2177         setting_main_click_list_item_ug_cb(ad, obj, path, svc, cbs);
2178         if (path)
2179                 FREE(path);
2180         if (cbs)
2181                 FREE(cbs);
2182         path = NULL;
2183         cbs = NULL;
2184         service_destroy(svc);
2185 }
2186 void
2187 setting_main_click_list_plugin_cb(void *data, Evas_Object *obj,
2188                                  void *event_info)
2189 {
2190         SETTING_TRACE_BEGIN;
2191         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2192         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2193         elm_genlist_item_selected_set(item, EINA_FALSE);
2194         Setting_GenGroupItem_Data *selected_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2195
2196         setting_main_appdata *ad = data;
2197
2198         ad->plugin_path = strdup(selected_item->sub_desc);
2199         SETTING_TRACE(" >> SELECTED plugin name : %s \n", ad->plugin_path);
2200
2201         PluginNode* plugin_node = setting_plugin_create(g_main_ad->navibar_main, g_main_ad->win_main);
2202         plugin_node->plugin_path = strdup(selected_item->sub_desc);
2203         ad->plugin_node = plugin_node; // the selected plugin name
2204
2205         setting_drawer_list_init();
2206         setting_dbus_handler_init( ad->plugin_node );
2207
2208         setting_plugin_load(plugin_node, (const char *)plugin_node->plugin_path);
2209 }
2210
2211 /**
2212  * @see [caller] setting_main_list_mouse_up_cb
2213  * @see [caller] setting_main_sel_list_mouse_up_cb
2214  */
2215 static void __rotate_lock_handler(int chk_status, setting_main_appdata *ad )
2216 {
2217         SETTING_TRACE_BEGIN;
2218         if( chk_status == 1)
2219         {
2220                 // toggle : 0 --> 1
2221                 int angle = elm_win_rotation_get(ad->win_main);
2222                 elm_win_rotation_with_resize_set(ad->win_main, angle);
2223         } else {
2224                 elm_win_rotation_with_resize_set(ad->win_main, 0);
2225         }
2226         vconf_set_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, chk_status);
2227 }
2228
2229 /**
2230  * toggle cb
2231  */
2232 void setting_main_list_mouse_up_cb(void *data, Evas_Object *eo,
2233                                           void *event_info)
2234 {
2235         SETTING_TRACE_BEGIN;
2236         retm_if(data == NULL, "Data parameter is NULL");
2237         Setting_GenGroupItem_Data *list_item =
2238             (Setting_GenGroupItem_Data *) data;
2239         SETTING_TRACE("process item [%s]", list_item->keyStr);
2240         list_item->chk_status = elm_check_state_get(eo);        /* for update new state */
2241
2242         SETTING_TRACE("change radio[%s], status is:%d", _(list_item->keyStr),
2243                       list_item->chk_status);
2244         setting_main_appdata *ad = g_main_ad;
2245
2246         if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
2247                 int err;
2248                 if (elm_check_state_get(eo)) {
2249                         setting_set_bool_slp_key
2250                             (BOOL_SLP_SETTING_USE_PACKET_DATA,
2251                              SETTING_ON_OFF_BTN_ON, &err);
2252                 } else {
2253                         setting_set_bool_slp_key
2254                             (BOOL_SLP_SETTING_USE_PACKET_DATA,
2255                              SETTING_ON_OFF_BTN_OFF, &err);
2256                 }
2257
2258         } else if (!safeStrCmp(KeyStr_Landscape, list_item->keyStr)) {
2259                 __rotate_lock_handler(list_item->chk_status, ad);
2260         }
2261
2262         return;
2263 }
2264
2265 /**
2266  * genlist touch cb
2267  */
2268 void setting_main_sel_list_mouse_up_cb(void *data, Evas_Object *eo,
2269                                               void *event_info)
2270 {
2271         SETTING_TRACE_BEGIN;
2272         setting_retm_if(data == NULL, "Data parameter is NULL");
2273
2274         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2275         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2276         elm_genlist_item_selected_set(item, 0);
2277         Setting_GenGroupItem_Data *list_item =
2278             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2279
2280         list_item->chk_status = elm_check_state_get(list_item->eo_check);
2281
2282         /* new status */
2283     list_item->chk_status = !list_item->chk_status;
2284     elm_check_state_set(list_item->eo_check, list_item->chk_status);
2285
2286         setting_main_appdata *ad = (setting_main_appdata *) data;
2287         if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
2288                 /* setting_reset_slp_key_by_status(eo, BOOL_SLP_SETTING_USE_PACKET_DATA); */
2289                 int err;
2290                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
2291                                          list_item->chk_status, &err);
2292
2293         } else if (!safeStrCmp(KeyStr_Landscape, list_item->keyStr)) {
2294                 __rotate_lock_handler(list_item->chk_status, ad);
2295         }
2296
2297         return;
2298 }
2299
2300 void __alternate_flight_mode(Evas_Object *check)
2301 {
2302         SETTING_TRACE_BEGIN;
2303         int ret;
2304         Eina_Bool status =  elm_check_state_get(check);
2305         SETTING_TRACE("flight mode status : %d", status);
2306         setting_main_appdata *ad = g_main_ad;
2307
2308         //Check whether some requestion is processing by TAPI
2309         if (ad->b_fm_requesting)
2310         {
2311                 //Do nothing, just mark the lastest operation..
2312                 SETTING_TRACE("Some requestion is processing by TAPI, wait to process");
2313                 ad->fm_waiting_op = status ? FM_ENTER : FM_LEAVE;
2314                 return;
2315         }
2316
2317         //otherwise, invalid waiting operation and send requsetion to TAPI:
2318         ad->fm_waiting_op = FM_INVALID;
2319         if (status) {
2320                 ret = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
2321                 setting_retm_if(ret != TAPI_API_SUCCESS,
2322                                 "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
2323         } else {
2324                 ret = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
2325                 setting_retm_if(ret != TAPI_API_SUCCESS,
2326                                 "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
2327         }
2328
2329         //sucessfully sent,
2330         ad->b_fm_requesting = TRUE;
2331         SETTING_TRACE_END;
2332 }
2333
2334 static void __tethering_disabled_cb(tethering_error_e error, tethering_type_e type, tethering_disabled_cause_e code, void *data)
2335 {
2336         int ret;
2337
2338         if (data) {
2339                 tethering_h th = (tethering_h)data;
2340                 tethering_destroy(th);
2341         }
2342
2343         ret = wifi_initialize();
2344         setting_retm_if(ret < 0, "*** [ERR] wifi_initialize() ***");
2345
2346         ret = wifi_activate(NULL, NULL);
2347         if (ret < 0) {
2348                 wifi_deinitialize();
2349         }
2350         setting_retm_if(ret < 0, "*** [ERR] wifi_activate() ***");
2351
2352         ret = wifi_deinitialize();
2353         setting_retm_if(ret < 0, "*** [ERR] wifi_deinitialize() ***");
2354 }
2355
2356 static void __tethering_turn_off_resp_cb(void *data, Evas_Object *obj, void *event_info)
2357 {
2358         setting_retm_if(NULL == obj, "NULL == obj");
2359         int response_type = btn_type(obj);
2360         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)data;
2361
2362         if (g_main_ad)
2363         {
2364                 evas_object_del(g_main_ad->popup);
2365                 g_main_ad->popup = NULL;
2366         }
2367
2368         if (POPUP_RESPONSE_OK == response_type)
2369         {
2370                 tethering_h th = NULL;
2371                 tethering_error_e ret = TETHERING_ERROR_NONE;
2372
2373                 ret = tethering_create(&th);
2374                 if (ret != TETHERING_ERROR_NONE) {
2375                         list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
2376                         list_item->chk_status = EINA_FALSE;
2377                         elm_object_item_data_set(list_item->item, list_item);
2378                         elm_genlist_item_update(list_item->item);
2379                 }
2380
2381                 ret = tethering_set_disabled_cb(th, TETHERING_TYPE_WIFI, __tethering_disabled_cb, th);
2382                 if (ret != TETHERING_ERROR_NONE) {
2383                         list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
2384                         list_item->chk_status = EINA_FALSE;
2385                         elm_object_item_data_set(list_item->item, list_item);
2386                         elm_genlist_item_update(list_item->item);
2387
2388                         tethering_destroy(th);
2389                         return;
2390                 }
2391
2392                 tethering_disable(th, TETHERING_TYPE_WIFI);
2393         }
2394         else if (POPUP_RESPONSE_CANCEL == response_type)
2395         {
2396                 list_item->swallow_type = SWALLOW_Type_1ICON_1RADIO;
2397                 list_item->chk_status = EINA_FALSE;
2398                 elm_object_item_data_set(list_item->item, list_item);
2399                 elm_genlist_item_update(list_item->item);
2400         }
2401 }
2402
2403 void __alternate_wifi_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
2404 {
2405         SETTING_TRACE_BEGIN;
2406         int ret;
2407         Eina_Bool status =  elm_check_state_get(check);
2408         SETTING_TRACE("wifi mode status : %d", status);
2409
2410         int value, err;
2411
2412         if (tethering_is_enabled(NULL, TETHERING_TYPE_WIFI) == TRUE) {
2413                 list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2414                 elm_object_item_data_set(list_item->item, list_item);
2415                 elm_genlist_item_update(list_item->item);
2416
2417                 g_main_ad->popup = setting_create_popup_with_btn(list_item,
2418                                 g_main_ad->win_main, NULL,
2419                                 _("Connecting Wi-Fi will turn off Mobile hotspot. Continue?"),
2420                                 __tethering_turn_off_resp_cb,
2421                                 0, 2, _("IDS_COM_SK_OK"), _("IDS_COM_SK_CANCEL"));
2422         } else {
2423                 ret = wifi_initialize();
2424                 if (ret < 0) {
2425                         setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
2426                         list_item->chk_status = value;
2427                         elm_object_item_data_set(list_item->item, list_item);
2428                         elm_genlist_item_update(list_item->item);
2429                 }
2430                 setting_retm_if(ret < 0, "*** [ERR] wifi_initialize() ***");
2431
2432                 if (status) {
2433                         ret = wifi_activate(NULL, NULL);
2434                         if (ret < 0) {
2435                                 setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
2436                                 list_item->chk_status = value;
2437                                 elm_object_item_data_set(list_item->item, list_item);
2438                                 elm_genlist_item_update(list_item->item);
2439                                 wifi_deinitialize();
2440                         }
2441                         setting_retm_if(ret < 0, "*** [ERR] wifi_activate() ***");
2442                 } else {
2443                         ret = wifi_deactivate(NULL, NULL);
2444                         if (ret < 0) {
2445                                 setting_get_int_slp_key(INT_SLP_SETTING_WIFI_STATUS, &value, &err);
2446                                 list_item->chk_status = value;
2447                                 elm_object_item_data_set(list_item->item, list_item);
2448                                 elm_genlist_item_update(list_item->item);
2449                                 wifi_deinitialize();
2450                         }
2451                         setting_retm_if(ret < 0, "*** [ERR] wifi_deactivate() ***");
2452                 }
2453
2454                 ret = wifi_deinitialize();
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                 }
2461                 setting_retm_if(ret < 0, "*** [ERR] wifi_deinitialize() ***");
2462
2463                 list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2464                 elm_object_item_data_set(list_item->item, list_item);
2465                 elm_genlist_item_update(list_item->item);
2466
2467         }
2468         SETTING_TRACE_END;
2469 }
2470
2471 void __alternate_bt_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
2472 {
2473         SETTING_TRACE_BEGIN;
2474         int ret;
2475         Eina_Bool status =  elm_check_state_get(check);
2476         SETTING_TRACE("bt mode status : %d", status);
2477
2478         int value, err;
2479
2480         ret = bt_initialize();
2481         if (ret < 0) {
2482                 setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
2483                 list_item->chk_status = value;
2484                 elm_object_item_data_set(list_item->item, list_item);
2485                 elm_genlist_item_update(list_item->item);
2486         }
2487         setting_retm_if(ret < 0, "*** [ERR] bt_initialize() ***");
2488
2489
2490         if (status) {
2491                 ret = bt_adapter_enable();
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                         bt_deinitialize();
2498                 }
2499                 setting_retm_if(ret < 0, "*** [ERR] bt_adapter_enable() ***");
2500         } else {
2501                 ret = bt_adapter_disable();
2502                 if (ret < 0) {
2503                         setting_get_int_slp_key(INT_SLP_SETTING_BT_STATUS, &value, &err);
2504                         list_item->chk_status = value;
2505                         elm_object_item_data_set(list_item->item, list_item);
2506                         elm_genlist_item_update(list_item->item);
2507                         bt_deinitialize();
2508                 }
2509                 setting_retm_if(ret < 0, "*** [ERR] bt_adapter_disable() ***");
2510         }
2511
2512         ret = bt_deinitialize();
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         }
2519         setting_retm_if(ret < 0, "*** [ERR] bt_deinitialize() ***");
2520
2521         list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2522         elm_object_item_data_set(list_item->item, list_item);
2523         elm_genlist_item_update(list_item->item);
2524
2525         SETTING_TRACE_END;
2526 }
2527
2528 void __alternate_nfc_mode(Setting_GenGroupItem_Data *list_item, Evas_Object *check)
2529 {
2530         SETTING_TRACE_BEGIN;
2531         int ret;
2532         Eina_Bool status =  elm_check_state_get(check);
2533         SETTING_TRACE("nfc mode status : %d", status);
2534
2535         int value, err;
2536
2537         ret = nfc_manager_initialize(NULL, NULL);
2538         if (ret < 0) {
2539                 setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
2540                 list_item->chk_status = value;
2541                 elm_object_item_data_set(list_item->item, list_item);
2542                 elm_genlist_item_update(list_item->item);
2543         }
2544         setting_retm_if(ret < 0, "*** [ERR] nfc_manager_initialize() ***");
2545
2546         ret = nfc_manager_set_activation(status, NULL, NULL);
2547         if (ret < 0) {
2548                 setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
2549                 list_item->chk_status = value;
2550                 elm_object_item_data_set(list_item->item, list_item);
2551                 elm_genlist_item_update(list_item->item);
2552                 nfc_manager_deinitialize();
2553         }
2554         setting_retm_if(ret < 0, "*** [ERR] nfc_manager_set_activation() ***");
2555
2556         ret = nfc_manager_deinitialize();
2557         if (ret < 0) {
2558                 setting_get_bool_slp_key(BOOL_SLP_SETTING_NFC_STATUS, &value, &err);
2559                 list_item->chk_status = value;
2560                 elm_object_item_data_set(list_item->item, list_item);
2561                 elm_genlist_item_update(list_item->item);
2562         }
2563         setting_retm_if(ret < 0, "*** [ERR] nfc_manager_deinitialize() ***");
2564
2565         list_item->swallow_type = SWALLOW_Type_1ICON_1PROCESS;
2566         elm_object_item_data_set(list_item->item, list_item);
2567         elm_genlist_item_update(list_item->item);
2568
2569         SETTING_TRACE_END;
2570 }
2571
2572 void __alternate_sbeam_mode(Evas_Object *check)
2573 {
2574         SETTING_TRACE_BEGIN;
2575         int ret;
2576         Eina_Bool status =  elm_check_state_get(check);
2577         SETTING_TRACE("wifi mode status : %d", status);
2578
2579         vconf_set_bool(VCONFKEY_NFC_SBEAM, status);
2580
2581         SETTING_TRACE_END;
2582 }
2583
2584 void
2585 setting_main_click_list_network_ug_cb(void *data, Evas_Object *obj,
2586                                       void *event_info)
2587 {
2588         SETTING_TRACE_BEGIN;
2589         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2590         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2591
2592         elm_genlist_item_selected_set(item, EINA_FALSE);
2593
2594         if (g_main_ad->ug) {
2595                 SETTING_TRACE
2596                     ("[ad->ug non-NULL]skip genlist click event!!");
2597
2598                 SETTING_TRACE_END;
2599                 return;
2600         }
2601
2602         setting_main_appdata *ad = g_main_ad;
2603         setting_main_click_list_item_reset_data(ad, obj);
2604
2605         int err = 0;
2606         int value;
2607         setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
2608         SETTING_TRACE("value:%d", value);
2609         switch (value) {
2610         case VCONFKEY_TELEPHONY_SIM_INSERTED:
2611                 {
2612                         struct ug_cbs *cbs =
2613                             (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
2614                         setting_retm_if(!cbs, "calloc failed");
2615                         cbs->layout_cb = setting_main_layout_ug_cb;
2616                         cbs->result_cb = setting_main_result_ug_cb;
2617                         cbs->destroy_cb = setting_main_destroy_ug_cb;
2618                         cbs->priv = (void *)ad;
2619                         setting_main_click_list_item_ug_cb(data, obj,
2620                                                            "setting-network-efl",
2621                                                            NULL, cbs);
2622                         FREE(cbs);
2623                         break;
2624                 }
2625         case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
2626                 setting_create_simple_popup(NULL, ad->win_main,
2627                                             NULL, _("IDS_ST_HEADER_INSERT_SIM_CARD_ABB"));
2628                 SETTING_TRACE("%s*** [ERR] No SIM. sim_slot_type=%d ***%s",
2629                               SETTING_FONT_RED, value, SETTING_FONT_BLACK);
2630                 return;
2631                 break;
2632         case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
2633         case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
2634                 setting_create_simple_popup(NULL, ad->win_main,
2635                                             NULL,_("IDS_COM_BODY_INVALID_SIM_CARD"));
2636                 SETTING_TRACE("%s*** [ERR] Invalid SIM. sim_slot_type=%d ***%s",
2637                               SETTING_FONT_RED, value, SETTING_FONT_BLACK);
2638                 return;
2639                 break;
2640         default:
2641                 break;
2642         }
2643
2644 }
2645
2646 /**
2647  * genlist touch cb
2648  */
2649 static void
2650 setting_main_click_Gendial_list_flight_mode_cb(void *data, Evas_Object *obj,
2651                                                void *event_info)
2652 {
2653     /* error check */
2654     setting_retm_if(data == NULL, "Data parameter is NULL");
2655
2656     retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2657     Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2658     elm_genlist_item_selected_set(item, 0);
2659     Setting_GenGroupItem_Data *list_item =
2660         (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2661     int old_status = elm_check_state_get(list_item->eo_check);
2662     /* new status */
2663     list_item->chk_status = !old_status;
2664     elm_check_state_set(list_item->eo_check, list_item->chk_status);
2665
2666     __alternate_flight_mode(list_item->eo_check);
2667     SETTING_TRACE_END;
2668 }
2669
2670 /**
2671  * toggle cb
2672  */
2673 void
2674 setting_main_click_list_flight_mode_cb(void *data, Evas_Object *obj,
2675                                        void *event_info)
2676 {
2677         SETTING_TRACE_BEGIN;
2678         retm_if(data == NULL, "Data parameter is NULL");
2679         Setting_GenGroupItem_Data *list_item =
2680             (Setting_GenGroupItem_Data *) data;
2681         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2682         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2683                       list_item->chk_status);
2684
2685         __alternate_flight_mode(obj);
2686         SETTING_TRACE_END;
2687 }
2688
2689 /**
2690  * toggle cb
2691  */
2692 void
2693 setting_main_click_list_wifi_mode_cb(void *data, Evas_Object *obj,
2694                                        void *event_info)
2695 {
2696         SETTING_TRACE_BEGIN;
2697         retm_if(data == NULL, "Data parameter is NULL");
2698         Setting_GenGroupItem_Data *list_item =
2699             (Setting_GenGroupItem_Data *) data;
2700         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2701         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2702                       list_item->chk_status);
2703
2704         __alternate_wifi_mode(list_item, obj);
2705         SETTING_TRACE_END;
2706 }
2707
2708 /**
2709  * toggle cb
2710  */
2711 void
2712 setting_main_click_list_bt_mode_cb(void *data, Evas_Object *obj,
2713                                        void *event_info)
2714 {
2715         SETTING_TRACE_BEGIN;
2716         retm_if(data == NULL, "Data parameter is NULL");
2717         Setting_GenGroupItem_Data *list_item =
2718             (Setting_GenGroupItem_Data *) data;
2719         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2720         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2721                       list_item->chk_status);
2722
2723         __alternate_bt_mode(list_item, obj);
2724         SETTING_TRACE_END;
2725 }
2726
2727 /**
2728  * toggle cb
2729  */
2730 void
2731 setting_main_click_list_nfc_mode_cb(void *data, Evas_Object *obj,
2732                                        void *event_info)
2733 {
2734         SETTING_TRACE_BEGIN;
2735         retm_if(data == NULL, "Data parameter is NULL");
2736         Setting_GenGroupItem_Data *list_item =
2737             (Setting_GenGroupItem_Data *) data;
2738         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2739         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2740                       list_item->chk_status);
2741
2742         __alternate_nfc_mode(list_item, obj);
2743         SETTING_TRACE_END;
2744 }
2745
2746 /**
2747  * toggle cb
2748  */
2749 void
2750 setting_main_click_list_sbeam_mode_cb(void *data, Evas_Object *obj,
2751                                        void *event_info)
2752 {
2753         SETTING_TRACE_BEGIN;
2754         retm_if(data == NULL, "Data parameter is NULL");
2755         Setting_GenGroupItem_Data *list_item =
2756             (Setting_GenGroupItem_Data *) data;
2757         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2758         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2759                       list_item->chk_status);
2760
2761         __alternate_sbeam_mode(obj);
2762         SETTING_TRACE_END;
2763 }
2764
2765 /**
2766  * store current selection in setting.cfg
2767  */
2768 void setting_try_save_check_list(void *data)
2769 {
2770         SETTING_TRACE_BEGIN;
2771         setting_main_appdata *ad = (setting_main_appdata *) data;
2772
2773         Eina_List *check_list = ad->item_check_list;
2774         Setting_GenGroupItem_Data *list_item = NULL;
2775         int update_count = 0;
2776
2777         while (check_list) {
2778                 list_item = (Setting_GenGroupItem_Data *) eina_list_data_get(check_list);
2779                 if (NULL == list_item) continue;
2780
2781                 update_count++;
2782                 if (list_item->chk_status) {
2783                         /* to update config file */
2784                         setting_cfg_set_pos(list_item->keyStr, Cfg_Item_Pos_Level0);
2785                 } else {
2786                         /* to update config file */
2787                         setting_cfg_set_pos(list_item->keyStr, Cfg_Item_Pos_Level1);
2788                 }
2789                 check_list = eina_list_next(check_list);
2790         }
2791
2792         if (update_count == 0) {
2793                 /* to popup tips notify */
2794         } else {
2795                 setting_cfg_file_update();
2796         }
2797         SETTING_TRACE_END;
2798 }
2799
2800 void
2801 setting_main_click_edit_preferred_cb(void *data, Evas_Object *obj, void *event_info)
2802 {
2803         SETTING_TRACE_BEGIN;
2804
2805         setting_main_appdata *ad = (setting_main_appdata *) data;
2806         ad->view_type = SETTING_VIEW_ALL_CHECK;
2807         __setting_create_prefered_view(ad);
2808         __load_check_list(ad, &(ad->edit_preferred_genlist), NULL);
2809
2810         SETTING_TRACE_END;
2811 }