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