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