Create sub-text of 'More connectivity' and 'More system' menu.
[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         int idx_second_menu = 0;
578         
579         char *keyStr = NULL;
580         char *icon_path = NULL;
581         char *ug_args = NULL;
582         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
583         int i, j;
584
585         for (i = 0; i < setting_cfg_get_category_length(); i++) {
586                 if (safeStrCmp
587                     (setting_cfg_get_category_name(i), KeyStr_Connectivity))
588                         continue;
589
590                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
591                         keyStr = setting_cfg_get_keyname_idx(i, j);
592                         tmpPos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
593                         ug_args = setting_cfg_get_ug_args_idx(i, j);
594                         icon_path = setting_cfg_get_icon_path_idx(i, j);
595                         /* SETTING_TRACE_DEBUG("Got an item[keyStr:%s, ug_args:%s, pos:%d]", */
596                         /*                     keyStr, ug_args, tmpPos); */
597                         
598                         if (idx_second_menu < MAX_MORE_MENU_NUM
599                             && Cfg_Item_Pos_Level1 == tmpPos
600                             && SETTING_VIEW_MAIN == ad->view_load
601                             && MAIN_PROFILE_PREFERRED == ad->profile_type) {
602                             
603                                 ad->more_connective_menus[idx_second_menu++] = keyStr;
604                         }
605
606                         if (Cfg_Item_Pos_Level_All == inputPos) {
607                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
608                                 continue;
609                         }
610
611
612                         if (!safeStrCmp(KeyStr_FlightMode, keyStr)) {   /* load special radio */
613                                 // ug == NULL
614                                 mainlist_table[MAINLIST_ENTRY_FLIGHT_MODE].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
615
616                         } else if (!safeStrCmp(KeyStr_AllShare, keyStr)) {      /* NOT UG */
617
618                                 mainlist_table[MAINLIST_ENTRY_ALLSHARE].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
619
620                         } else if (!safeStrCmp(KeyStr_WiFi, keyStr) && is_ug_installed_by_ug_args(ug_args)) {   /* load special icon */
621
622                                 mainlist_table[MAINLIST_ENTRY_WIFI].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
623
624                         } else if (!safeStrCmp(KeyStr_Bluetooth, keyStr) && is_ug_installed_by_ug_args(ug_args)) {      /* load special icon */
625
626                                 mainlist_table[MAINLIST_ENTRY_BT].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
627
628                         } else if (!safeStrCmp(KeyStr_MobileAP, keyStr) && is_ug_installed_by_ug_args(ug_args)) {       /* load special icon */
629
630                                 mainlist_table[MAINLIST_ENTRY_MOBILEAP].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
631
632                         } else if (!safeStrCmp(KeyStr_Network, keyStr) && is_ug_installed_by_ug_args(ug_args)) {        /* load special UG */
633
634                                 mainlist_table[MAINLIST_ENTRY_NETWORK].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
635
636                         } else if (!safeStrCmp(KeyStr_NFC, keyStr) && is_ug_installed_by_ug_args(ug_args)) {    /* load special icon */
637
638                                 mainlist_table[MAINLIST_ENTRY_NFC].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
639
640                         } else {        /* load other UGs */
641                                 if (is_ug_installed_by_ug_args(ug_args))
642                                 {
643                                         mainlist_table[MAINLIST_ENTRY_DEFAULT].ui_handler(ad, keyStr, icon_path, ug_args, genlist);
644                                 }
645                         }
646                 }
647         }
648
649         //end group , only display in setting main view
650 #if SUPPORT_MORE_ITEM_FUNCTION
651                 if (SETTING_VIEW_MAIN == ad->view_load && MAIN_PROFILE_PREFERRED == ad->profile_type)
652                 {
653                         char sub_text[MAX_COMMON_BUFFER_LEN] = {0, };
654                         int idx = 0;
655                         while (idx < MAX_MORE_MENU_NUM && ad->more_connective_menus[idx])
656                         {
657                                 if (idx != 0)
658                                 {
659                                         safeStrNCat(sub_text, ", ", MAX_COMMON_BUFFER_LEN);
660                                 }
661                                 safeStrNCat(sub_text, _(ad->more_connective_menus[idx]), MAX_COMMON_BUFFER_LEN);
662                                 idx++;
663                         }
664
665                         ad->data_moreConnect =
666                                 setting_create_Gendial_field_groupitem(ad->main_genlist,
667                                                                        &(ad->itc[GENDIAL_Type_2text_3]),
668                                                                        NULL,
669                                                                        setting_main_click_list_more_cb,
670                                                                        ad,
671                                                                        SWALLOW_Type_INVALID,
672                                                                        NULL,
673                                                                        NULL,
674                                                                        0,
675                                                                        KeyStr_MoreConnect,
676                                                                        sub_text,
677                                                                        NULL);
678                         __BACK_POINTER_SET(ad->data_moreConnect);
679                 }
680 #endif
681         SETTING_TRACE_END;
682 }
683
684 void __load_connectivity_level0_list(void *data)
685 {
686         setting_main_appdata *ad = data;
687         __load_connectivity_menu_list(ad, Cfg_Item_Pos_Level0, ad->main_genlist);
688 }
689
690 void __load_connectivity_level_all_list(void *data)
691 {
692         SETTING_TRACE_BEGIN;
693         setting_main_appdata *ad = data;
694         __load_connectivity_menu_list(ad, Cfg_Item_Pos_Level_All, ad->main_genlist);
695 }
696
697 void __load_system_menu_list(void *data, Cfg_Item_Position inputPos, Evas_Object *genlist)
698 {
699         SETTING_TRACE_BEGIN;
700         SETTING_TRACE_DEBUG("pos :%d", inputPos);
701         setting_main_appdata *ad = data;
702         //group title, only display in setting main view
703         if (SETTING_VIEW_MAIN == ad->view_load) {
704                 setting_create_Gendial_field_group_titleItem(ad->main_genlist,
705                                                      &(ad->itc[GENDIAL_Type_group_item]),
706                                                      NULL,
707                                                      ELM_GENLIST_ITEM_NONE,
708                                                      KeyStr_System, NULL);
709         }
710         int idx_second_menu = 0;
711
712         char *keyStr = NULL;
713         char *icon_path = NULL;
714         char *ug_args = NULL;
715
716         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
717
718         int ncount = 0;
719         int i, j;
720
721         //SETTING_TRACE("setting_cfg_get_category_length() :: %d ", setting_cfg_get_category_length());
722         for (i = 0; i < setting_cfg_get_category_length(); i++) {
723                 if (safeStrCmp(setting_cfg_get_category_name(i), KeyStr_System))
724                         continue;
725
726                 //SETTING_TRACE(" setting_cfg_get_menu_length(%d) :: %d ",i, setting_cfg_get_menu_length(i) );
727                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
728                         keyStr = setting_cfg_get_keyname_idx(i, j);
729                         /* sg_path = setting_cfg_get_ugpath_idx(i, j); */
730                         tmpPos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
731                         icon_path = setting_cfg_get_icon_path_idx(i, j);
732                         ug_args = setting_cfg_get_ug_args_idx(i, j);
733
734                         if (idx_second_menu < MAX_MORE_MENU_NUM
735                             && Cfg_Item_Pos_Level1 == tmpPos
736                             && SETTING_VIEW_MAIN == ad->view_load
737                             && MAIN_PROFILE_PREFERRED == ad->profile_type) {
738                                 ad->more_system_menus[idx_second_menu++] = keyStr;
739                         }
740
741                         //SETTING_TRACE("KeyString :  %s , tmpPos : %d , inputPos : %d ", keyStr, tmpPos, inputPos );
742                         if (Cfg_Item_Pos_Level_All == inputPos) {
743                                 // do nothing
744                                 //SETTING_TRACE("Cfg_Item_Pos_Level_All == inputPos ---> no draw --- WHY?? ");
745                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
746                                 //SETTING_TRACE("inputPos == tmp Pos ---> no draw --- WHY?? ");
747                                 continue;
748                         }
749
750                         if (!safeStrCmp(KeyStr_Landscape, keyStr)) {    /* load special UG */
751                                 int value = 0;
752                                 vconf_get_bool
753                                     (VCONFKEY_SETAPPL_ROTATE_LOCK_BOOL, &value);
754                                 value = !value;
755
756                                 ad->data_rotationMode =
757                                     setting_create_Gendial_field_groupitem(genlist,
758                                                                            &(ad->itc[GENDIAL_Type_1text_2icon]),
759                                                                            NULL,
760                                                                            setting_main_sel_list_mouse_up_cb,
761                                                                            ad,
762                                                                            SWALLOW_Type_1ICON_1RADIO,
763                                                                            icon_path,
764                                                                            NULL,
765                                                                            value,
766                                                                            keyStr,
767                                                                            NULL,
768                                                                            setting_main_list_mouse_up_cb);
769                                 __BACK_POINTER_SET(ad->data_rotationMode);
770                         }
771                         else if (!safeStrCmp(KeyStr_Brightness, keyStr)) {
772
773                                 char* pa_bright = get_brightness_mode_str();
774                                 ad->data_bright=
775                                     setting_create_Gendial_field_groupitem(genlist,
776                                                                            &(ad->itc[GENDIAL_Type_1icon_2text]),
777                                                                            NULL,
778                                                                            setting_main_click_list_ex_ug_cb,
779                                                                            ug_args,
780                                                                            SWALLOW_Type_INVALID,
781                                                                            icon_path,
782                                                                            NULL,
783                                                                            0,
784                                                                            keyStr,
785                                                                            pa_bright,
786                                                                            NULL);
787                                 __BACK_POINTER_SET(ad->data_bright);
788                                 ncount++;
789                         }
790                         else {  /* load other UGs */
791
792                                 if (is_ug_installed_by_ug_args(ug_args))
793                                 {
794                                         setting_create_Gendial_field_groupitem(genlist,
795                                                                                &(ad->itc[GENDIAL_Type_1text_1icon_2]),
796                                                                                NULL,
797                                                                                setting_main_click_list_ex_ug_cb,
798                                                                                ug_args,
799                                                                                SWALLOW_Type_INVALID,
800                                                                                icon_path,
801                                                                                NULL, 0,
802                                                                                keyStr,
803                                                                                NULL,
804                                                                                NULL);
805                                         ncount++;
806                                 }
807                         }
808                 }
809         }
810         //end group, only display in setting main view
811 #if SUPPORT_MORE_ITEM_FUNCTION
812                 if (SETTING_VIEW_MAIN == ad->view_load && MAIN_PROFILE_PREFERRED == ad->profile_type)
813                 {
814                         char sub_text[MAX_COMMON_BUFFER_LEN] = {0, };
815                         int idx = 0;
816                         while (idx < MAX_MORE_MENU_NUM && ad->more_system_menus[idx])
817                         {
818                                 if (idx != 0)
819                                 {
820                                         safeStrNCat(sub_text, ", ", MAX_COMMON_BUFFER_LEN);
821                                 }
822                                 safeStrNCat(sub_text, _(ad->more_system_menus[idx]), MAX_COMMON_BUFFER_LEN);
823                                 idx++;
824                         }
825                         
826                         ad->data_moreSystem =
827                                 setting_create_Gendial_field_groupitem(ad->main_genlist,
828                                                                        &(ad->itc[GENDIAL_Type_2text_3]),
829                                                                        NULL,
830                                                                        setting_main_click_list_more_cb,
831                                                                        ad,
832                                                                        SWALLOW_Type_INVALID,
833                                                                        NULL,
834                                                                        NULL,
835                                                                        0,
836                                                                        KeyStr_MoreSystem,
837                                                                        sub_text,
838                                                                        NULL);
839                         __BACK_POINTER_SET(ad->data_moreSystem);
840                 }
841 #endif
842 }
843
844 static void __load_system_level0_list(void *data)
845 {
846         setting_main_appdata *ad = data;
847         __load_system_menu_list(ad, Cfg_Item_Pos_Level0, ad->main_genlist);
848 }
849
850 static void __load_system_level_all_list(void *data)
851 {
852         SETTING_TRACE_BEGIN;
853         setting_main_appdata *ad = data;
854         __load_system_menu_list(ad, Cfg_Item_Pos_Level_All, ad->main_genlist);
855 }
856
857 static void __load_applications_menu_list(void *data,
858                                           Cfg_Item_Position inputPos)
859 {
860         SETTING_TRACE_BEGIN;
861         SETTING_TRACE_DEBUG("pos :%d", inputPos);
862         setting_main_appdata *ad = data;
863
864         //group title
865         setting_create_Gendial_field_group_titleItem(ad->main_genlist,
866                                                      &(ad->itc[GENDIAL_Type_group_item]),
867                                                      NULL,
868                                                      ELM_GENLIST_ITEM_NONE,
869                                                      KeyStr_Applications, NULL);
870         char *keyStr = NULL;
871         char *icon_path = NULL;
872         char *ug_args = NULL;
873         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
874         int i, j;
875
876         for (i = 0; i < setting_cfg_get_category_length(); i++) {
877                 if (safeStrCmp
878                     (setting_cfg_get_category_name(i), KeyStr_Applications))
879                         continue;
880
881                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
882                         keyStr = setting_cfg_get_keyname_idx(i, j);
883                         icon_path = setting_cfg_get_icon_path_idx(i, j);
884                         ug_args = setting_cfg_get_ug_args_idx(i, j);
885                         tmpPos =
886                             (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
887
888                         if (Cfg_Item_Pos_Level_All == inputPos) {
889                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
890                                 continue;
891                         }
892
893                         setting_create_Gendial_field_groupitem(ad->main_genlist,
894                                                                &(ad->itc[GENDIAL_Type_1text_1icon_2]),
895                                                                NULL,
896                                                                setting_main_click_list_ex_ug_cb,
897                                                                ug_args,
898                                                                SWALLOW_Type_INVALID,
899                                                                icon_path, NULL,
900                                                                0, keyStr, NULL,
901                                                                NULL);
902
903                 }
904         }
905
906         SETTING_TRACE_END;
907 }
908
909 static void __load_applications_level0_list(void *data)
910 {
911         setting_main_appdata *ad = data;
912         __load_applications_menu_list(ad, Cfg_Item_Pos_Level0);
913 }
914
915 static void __load_applications_level_all_list(void *data)
916 {
917         SETTING_TRACE_BEGIN;
918         setting_main_appdata *ad = data;
919         __load_applications_menu_list(ad, Cfg_Item_Pos_Level_All);
920 }
921
922 static int __get_downloaded_apps_num(Cfg_Item_Position inputPos)
923 {
924         SETTING_TRACE_BEGIN;
925         SETTING_TRACE_DEBUG("pos :%d", inputPos);
926         int downloaded_apps_num = 0;
927         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
928         int i, j;
929         for (i = 0; i < setting_cfg_get_category_length(); i++) {
930                 if (safeStrCmp
931                     (setting_cfg_get_category_name(i), KeyStr_DownloadedAPPs))
932                         continue;
933
934                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
935                         tmpPos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
936                         if (Cfg_Item_Pos_Level_All == inputPos) {
937                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
938                                 continue;
939                         }
940
941                         downloaded_apps_num++;
942                 }
943         }
944
945 #ifdef PLUGIN
946         //3rd cfg
947         DIR *dp = opendir (PLUGIN_CFG_DIR);
948         if (dp != NULL)
949         {
950                 struct dirent *ep;
951                 while (ep = readdir (dp))
952                 {
953                                 if (0 == safeStrCmp(".", ep->d_name)
954                                     || 0 == safeStrCmp("..", ep->d_name))
955                                 {
956                                         continue;
957                                 }
958                                 downloaded_apps_num++;
959                 }
960                 (void) closedir (dp);
961         }
962 #endif
963         SETTING_TRACE("Exit %s with return[%d]",__FUNCTION__, downloaded_apps_num);
964         return downloaded_apps_num;
965 }
966
967 static void __load_downloaded_apps_menu_list(void *data,
968                                              Cfg_Item_Position inputPos)
969 {
970         SETTING_TRACE_BEGIN;
971         SETTING_TRACE_DEBUG("pos :%d", inputPos);
972         setting_main_appdata *ad = data;
973
974         // if the number of download apps is zero, display a bottom seperator
975         if (0 == __get_downloaded_apps_num(inputPos)) {
976                 Elm_Object_Item *item = NULL;
977                 item = elm_genlist_item_append(ad->main_genlist, &itc_bottom_seperator, NULL, NULL,
978                                         ELM_GENLIST_ITEM_NONE, NULL, NULL);
979                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
980                 return;
981         }
982
983         //group title
984         setting_create_Gendial_field_group_titleItem(ad->main_genlist,
985                                                      &(ad->itc[GENDIAL_Type_group_item]),
986                                                      NULL,
987                                                      ELM_GENLIST_ITEM_NONE,
988                                                      KeyStr_DownloadedAPPs,
989                                                      NULL);
990         char *keyStr = NULL;
991         char *icon_path = NULL;
992         char *ug_args = NULL;
993
994         Cfg_Item_Position tmpPos = Cfg_Item_Pos_Uninstall;
995         int i, j;
996         for (i = 0; i < setting_cfg_get_category_length(); i++) {
997                 if (safeStrCmp
998                     (setting_cfg_get_category_name(i), KeyStr_DownloadedAPPs))
999                         continue;
1000
1001                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
1002                         keyStr = setting_cfg_get_keyname_idx(i, j);
1003                         tmpPos =
1004                             (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
1005                         icon_path = setting_cfg_get_icon_path_idx(i, j);
1006                         ug_args = setting_cfg_get_ug_args_idx(i, j);
1007
1008                         if (Cfg_Item_Pos_Level_All == inputPos) {
1009                         } else if (inputPos != tmpPos) {        /* not in the inputPos level */
1010                                 continue;
1011                         }
1012
1013                         setting_create_Gendial_field_groupitem(ad->main_genlist,
1014                                                                &(ad->itc[GENDIAL_Type_1text_1icon_2]),
1015                                                                NULL,
1016                                                                setting_main_click_list_ex_ug_cb,
1017                                                                ug_args,
1018                                                                SWALLOW_Type_INVALID,
1019                                                                icon_path, NULL,
1020                                                                0, keyStr, NULL,
1021                                                                NULL);
1022
1023                 }
1024         }
1025
1026         #ifdef PLUGIN
1027         //3rd cfg
1028         DIR *dp = opendir (PLUGIN_CFG_DIR);
1029         if (dp != NULL)
1030         {
1031                 struct dirent *ep;
1032
1033                 char fullpath[256];
1034
1035                 while (ep = readdir (dp))
1036                 {
1037                                 memset(fullpath, 0x00, 256);
1038                                 strncpy(fullpath, PLUGIN_CFG_DIR, 256);
1039                                 strncat(fullpath, "/", 256);
1040                                 strncat(fullpath, ep->d_name, 256);
1041
1042                                 //SETTING_TRACE("ep->d_name:%s", ep->d_name);
1043                                 if (0 == safeStrCmp(".", ep->d_name)
1044                                     || 0 == safeStrCmp("..", ep->d_name))
1045                                 {
1046                                         continue;
1047                                 }
1048                                 SETTING_TRACE("fullpath: %s", fullpath);
1049                                 char *p = strrchr(ep->d_name, '.');
1050                                 *p = '\0';
1051                                 setting_create_Gendial_field_groupitem(ad->main_genlist,
1052                                                                        &(ad->itc[GENDIAL_Type_1text_1icon_2]),
1053                                                                        NULL,
1054                                                                        setting_main_click_list_plugin_cb,
1055                                                                        strdup(fullpath),
1056                                                                        SWALLOW_Type_INVALID,
1057                                                                        IMG_DefaultIcon, NULL,
1058                                                                        0, ep->d_name, NULL,
1059                                                                        NULL);
1060
1061                 }
1062                 (void) closedir (dp);
1063         }
1064         #endif
1065         SETTING_TRACE_END;
1066 }
1067
1068 static void __load_downloaded_apps_level0_list(void *data)
1069 {
1070         setting_main_appdata *ad = data;
1071         __load_downloaded_apps_menu_list(ad, Cfg_Item_Pos_Level0);
1072 }
1073
1074 static void __load_downloaded_apps_level_all_list(void *data)
1075 {
1076         SETTING_TRACE_BEGIN;
1077         setting_main_appdata *ad = data;
1078         __load_downloaded_apps_menu_list(ad, Cfg_Item_Pos_Level_All);
1079 }
1080
1081 static void __check_all_view_clear(void *data)
1082 {
1083         SETTING_TRACE_BEGIN;
1084         ret_if(!data);
1085         setting_main_appdata *ad = data;
1086         if (ad->item_check_list) {
1087                 eina_list_free(ad->item_check_list);
1088                 ad->item_check_list = NULL;
1089         }
1090
1091         ad->gl_sel_all = NULL;
1092         ad->edit_preferred_genlist  = NULL;
1093         ad->controllbar_all_check = NULL;
1094         ad->check_all_item =NULL;
1095 }
1096
1097 static void __prefered_buttons_cb(void *data, Evas_Object *obj, void *event_info)
1098 {
1099         SETTING_TRACE_BEGIN;
1100         ret_if(!data);
1101         setting_main_appdata *ad = (setting_main_appdata *) data;
1102         const char *key = NULL;
1103
1104         #if SUPPORT_BOTTOM_BTNS
1105         ret_if(!event_info);
1106         Elm_Object_Item *it = event_info;
1107         key = elm_object_item_text_get(it);
1108         #else
1109         key = elm_object_text_get(obj);
1110         #endif
1111         setting_retm_if(data == NULL
1112                         || key == NULL, "data == NULL || key == NULL");
1113
1114         SETTING_TRACE_DEBUG("press button: %s", key);
1115
1116         // "Done"
1117         if (!safeStrCmp(key, dgettext("sys_string", "IDS_COM_SK_DONE"))) {
1118
1119                 if (ad->profile_type == MAIN_PROFILE_ALL) {
1120                         SETTING_TRACE_DEBUG("Cancel to hide current view.");
1121                         setting_try_save_check_list(ad);        /* need to save too */
1122                         __check_all_view_clear(ad);
1123                         elm_naviframe_item_pop(ad->navibar_main);       // pop(preferred) --> main
1124                         return;
1125                 }
1126
1127                 // MAIN_PROFILE_PREFERRED and Etc
1128                 // redraw setting-main
1129                 setting_try_save_check_list(ad);
1130                 elm_naviframe_item_pop(ad->navibar_main);  // pop (preferred) -> main
1131
1132                 //After the view is popuped, all the object handlers should be reset NULL.
1133                 __check_all_view_clear(ad);
1134                 ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1135                 ad->load_fns[Func_Type_System] = __load_system_level0_list;
1136                 ad->load_fns[Func_Type_Apps] = __load_applications_level0_list;
1137                 ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level0_list;
1138                 int ret = setting_main_refresh(ad);
1139                 ret_if(ret != SETTING_RETURN_SUCCESS);
1140                 return;
1141         }
1142
1143         // "Cancel"
1144         if (!safeStrCmp(key, setting_gettext("IDS_COM_SK_CANCEL"))
1145             || !safeStrCmp(key, dgettext("sys_string", "IDS_COM_BODY_BACK"))) {
1146                 SETTING_TRACE_DEBUG("Cancel to hide current view.");
1147                 elm_naviframe_item_pop(ad->navibar_main);
1148                 //After the view is popuped, all the object handlers should be reset NULL.
1149                 __check_all_view_clear(ad);
1150                 return;
1151         }
1152 }
1153
1154 static void __setting_contorlbar_clicked(void *data, Evas_Object *obj,
1155                                          void *event_info)
1156 {
1157         SETTING_TRACE_BEGIN;
1158         ret_if(data == NULL || obj == NULL);
1159         setting_main_appdata *ad = (setting_main_appdata *) data;
1160         int index = -1;
1161         /* elm_segment_control_selected_segment_get(obj, &index); */
1162         Elm_Object_Item *sel_item = elm_segment_control_item_selected_get(obj);
1163         ret_if(sel_item == NULL);
1164         index = elm_segment_control_item_index_get(sel_item);
1165
1166         switch (index) {
1167         case 0:
1168                 {
1169                         SETTING_TRACE("Preferred");
1170                         ad->profile_type = MAIN_PROFILE_PREFERRED;
1171                         ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1172                         ad->load_fns[Func_Type_System] = __load_system_level0_list;
1173                         ad->load_fns[Func_Type_Apps] = __load_applications_level0_list;
1174                         ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level0_list;
1175
1176                         break;
1177                 }
1178         case 1:
1179                 {
1180                         SETTING_TRACE("All");
1181                         ad->profile_type = MAIN_PROFILE_ALL;
1182                         ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level_all_list;
1183                         ad->load_fns[Func_Type_System] = __load_system_level_all_list;
1184                         ad->load_fns[Func_Type_Apps] = __load_applications_level_all_list;
1185                         ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level_all_list;
1186                         break;
1187                 }
1188         default:
1189                 {
1190                         return;
1191                 }
1192         }
1193         int ret = setting_main_refresh(ad);
1194         ret_if(ret != SETTING_RETURN_SUCCESS);
1195 }
1196
1197 static void __btnback_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1198 {
1199         SETTING_TRACE_BEGIN;
1200         ret_if(!data);
1201         setting_main_appdata *ad = (setting_main_appdata *) data;
1202         elm_win_lower(ad->win_main);
1203 }
1204
1205 static void __allFrequent_btn_cb(void *data, Evas_Object *obj, void *event_info)
1206 {
1207         SETTING_TRACE_BEGIN;
1208         ret_if(!data || !obj);
1209         setting_main_appdata *ad = (setting_main_appdata *) data;
1210         Elm_Object_Item *item = elm_toolbar_first_item_get(obj);
1211         ret_if(!item);
1212
1213         if (MAIN_PROFILE_ALL == ad->profile_type)
1214         {
1215                 SETTING_TRACE("Change to Preferred view");
1216                 elm_object_item_text_set(item, _(ALL_STR));
1217                 ad->profile_type = MAIN_PROFILE_PREFERRED;
1218                 ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1219                 ad->load_fns[Func_Type_System] = __load_system_level0_list;
1220                 ad->load_fns[Func_Type_Apps] = __load_applications_level0_list;
1221                 ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level0_list;
1222                 setting_main_refresh(ad);
1223         }
1224         else if (MAIN_PROFILE_PREFERRED == ad->profile_type)
1225         {
1226                 SETTING_TRACE("Change to ALL view");
1227                 elm_object_item_text_set(item, _(PREFERRED_STR));
1228                 ad->profile_type = MAIN_PROFILE_ALL;
1229                 ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level_all_list;
1230                 ad->load_fns[Func_Type_System] = __load_system_level_all_list;
1231                 ad->load_fns[Func_Type_Apps] = __load_applications_level_all_list;
1232                 ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level_all_list;
1233                 setting_main_refresh(ad);
1234         }
1235         else
1236         {
1237                 return;
1238         }
1239 }
1240
1241 /**
1242  * creat a layout
1243  */
1244 Evas_Object *__create_main_view_widgets(Evas_Object *win_main, void *cb,
1245                                         Evas_Object *content,
1246                                         char *title_text,
1247                                         bool isFoundPreferredItem,
1248                                         Evas_Object **navibar,
1249                                         Elm_Object_Item **edit_item,
1250                                         Elm_Object_Item **segment_all,
1251                                         Elm_Object_Item **segment_preferred)
1252 {
1253         SETTING_TRACE_BEGIN;
1254
1255         /*  add layout to win_main */
1256         Evas_Object *ly = elm_layout_add(win_main);
1257         setting_retvm_if(ly == NULL, FALSE, "layout == NULL");
1258         elm_layout_theme_set(ly, "layout", "application", "default");
1259         evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND,
1260                                          EVAS_HINT_EXPAND);
1261         elm_win_resize_object_add(win_main, ly);
1262         Evas_Object *bg = setting_create_bg(ly, win_main, "group_list");
1263         elm_object_part_content_set(ly, "elm.swallow.bg", bg);
1264         evas_object_show(ly);
1265
1266         /*  add navi_bar to the layout */
1267         Evas_Object *navi_bar = elm_naviframe_add(ly);
1268
1269         elm_object_part_content_set(ly, "elm.swallow.content", navi_bar);
1270         evas_object_show(navi_bar);
1271         *navibar = navi_bar;
1272
1273         // create 'back' button on navigaiton bar
1274         Evas_Object* btn_back = elm_button_add(navi_bar);
1275         evas_object_smart_callback_add(btn_back, "clicked", __btnback_clicked_cb, g_main_ad);
1276
1277         Evas_Object *controlbar = elm_toolbar_add(navi_bar);
1278         setting_retvm_if(controlbar == NULL, FALSE, "controlbar == NULL");
1279         elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
1280         //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
1281
1282         /*  add segment control */
1283         Evas_Object *segment = elm_segment_control_add(controlbar);
1284         setting_retvm_if(segment == NULL, FALSE, "segment == NULL");
1285
1286         Elm_Object_Item *seg_preferred = NULL, *seg_all = NULL;
1287         *segment_preferred = seg_preferred = elm_segment_control_item_add(segment, NULL, _(PREFERRED_STR));
1288         *segment_all = seg_all = elm_segment_control_item_add(segment, NULL, _(ALL_STR));
1289
1290         evas_object_show(segment);
1291         evas_object_smart_callback_add(segment, "changed",
1292                                        __setting_contorlbar_clicked, cb);
1293
1294         #if !SUPPORT_BOTTOM_BTNS
1295         Elm_Object_Item *item = NULL;
1296         Elm_Object_Item *navi_it = elm_naviframe_item_push(navi_bar, title_text, btn_back, NULL, content, NULL);
1297         elm_object_style_set(btn_back, NAVI_BACK_BUTTON_STYLE);
1298         /*  add 'Edit preffered' button to controlbar */
1299         Evas_Object *btn_pref = setting_create_button(controlbar, _(EDIT_PREFERRED_STR),
1300                               NAVI_DEF_BUTTON_STYLE,
1301                               setting_main_click_edit_preferred_cb,cb);
1302
1303         *edit_item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
1304         elm_object_item_part_content_set(*edit_item, "object", btn_pref);
1305         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
1306         elm_object_item_part_content_set(item, "object", segment);
1307         elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
1308
1309         elm_object_item_part_content_set(navi_it, "optionheader", controlbar);
1310         #else
1311         Elm_Object_Item *navi_it = elm_naviframe_item_push(navi_bar, title_text, btn_back, NULL, content, "segment/instant");
1312         elm_object_style_set(btn_back, NAVI_BACK_BUTTON_STYLE);
1313
1314         elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, "", NULL, NULL), EINA_TRUE);
1315         *edit_item = elm_toolbar_item_append(controlbar, NULL, _(EDIT_PREFERRED_STR), setting_main_click_edit_preferred_cb, cb);
1316
1317         elm_object_item_part_content_set(navi_it, "controlbar", controlbar);
1318         elm_object_item_part_content_set(navi_it, "segment", segment);
1319         #endif
1320
1321
1322         if (isFoundPreferredItem) {
1323                 elm_segment_control_item_selected_set(seg_preferred, EINA_TRUE);
1324         } else {
1325                 elm_segment_control_item_selected_set(seg_all, EINA_TRUE);
1326         }
1327         return ly;
1328 }
1329
1330 static bool __setting_create_main_view(void *data)
1331 {
1332         SETTING_TRACE_BEGIN;
1333         /* error check */
1334         setting_retvm_if(data == NULL, FALSE, "data == NULL");
1335         setting_main_appdata *ad = (setting_main_appdata *) data;
1336 #if SUPPORT_MORE_ITEM_FUNCTION
1337         ad->ly_main = setting_create_win_layout(ad->win_main, ad->win_main);
1338         ad->navibar_main = setting_create_navi_bar(ad->ly_main);
1339         /*  add controlbar */
1340         Evas_Object *controlbar = elm_toolbar_add(ad->navibar_main);
1341         setting_retvm_if(controlbar == NULL, FALSE, "controlbar == NULL");
1342         elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
1343
1344         ad->main_genlist = elm_genlist_add(ad->navibar_main);
1345         elm_object_style_set(ad->main_genlist, "dialogue");
1346         retvm_if(ad->main_genlist == NULL, FALSE,
1347                  "Cannot set scroller object as contento of layout");
1348         elm_genlist_clear(ad->main_genlist);    /* first to clear list */
1349
1350         setting_create_navi_bar_buttons(_("IDS_COM_BODY_SETTINGS"),
1351                                         _("IDS_COM_BODY_BACK"), "", _("IDS_ST_OPT_ALL"),
1352                                         __btnback_clicked_cb, NULL,
1353                                         __allFrequent_btn_cb, ad, ad->main_genlist,
1354                                         ad->navibar_main, controlbar);
1355         elm_object_item_disabled_set(elm_toolbar_last_item_get(controlbar), EINA_TRUE);
1356
1357         ad->controlbar = controlbar;
1358
1359         ad->profile_type = MAIN_PROFILE_PREFERRED;
1360         ad->load_fns[Func_Type_Connectivity] = __load_connectivity_level0_list;
1361         ad->load_fns[Func_Type_System] = __load_system_level0_list;
1362         ad->load_fns[Func_Type_Apps] = __load_applications_level_all_list;
1363         ad->load_fns[Func_Type_DownApp] = __load_downloaded_apps_level_all_list;
1364         setting_main_refresh(ad);
1365         return TRUE;
1366 #endif
1367
1368         ad->main_genlist = elm_genlist_add(ad->win_main);
1369         elm_object_style_set(ad->main_genlist, "dialogue");
1370         elm_genlist_clear(ad->main_genlist);    /* first to clear list */
1371         int i, j, pos;
1372         int isFoundPreferredItem = FALSE;
1373         for (i = 0; i < setting_cfg_get_category_length(); i++) {
1374                 for (j = 0; j < setting_cfg_get_menu_length(i); j++) {
1375                         pos = (Cfg_Item_Position) setting_cfg_get_pos_idx(i, j);
1376                         if (Cfg_Item_Pos_Level0 == pos) {
1377                                 isFoundPreferredItem = TRUE;
1378                                 break;
1379                         }
1380                 }
1381                 if (isFoundPreferredItem) {
1382                         break;
1383                 }
1384         }
1385
1386         ad->ly_main = __create_main_view_widgets(ad->win_main, ad,
1387                                                  ad->main_genlist,
1388                                                  _("IDS_COM_BODY_SETTINGS"),
1389                                                  isFoundPreferredItem,
1390                                                  &ad->navibar_main,
1391                                                  &ad->edit_item,
1392                                                  &ad->segment_all,
1393                                                  &ad->segment_preferred);
1394         setting_retvm_if(ad->ly_main == NULL, FALSE, "ad->ly_main == NULL");
1395
1396         SETTING_TRACE_END;
1397         return TRUE;
1398 }
1399
1400 static bool __setting_create_prefered_view(void *data)
1401 {
1402         SETTING_TRACE_BEGIN;
1403         /* error check */
1404         setting_retvm_if(data == NULL, FALSE, "data == NULL");
1405         setting_main_appdata *ad = (setting_main_appdata *) data;
1406
1407         /* the genlist will be destroyed with its parent view, when using elm_naviframe_item_pop() to destroy the view. */
1408         ad->edit_preferred_genlist = elm_genlist_add(ad->win_main);
1409         elm_object_style_set(ad->edit_preferred_genlist, "dialogue");
1410         elm_genlist_clear(ad->edit_preferred_genlist);  /* first to clear list */
1411
1412         /*  [UI] edit preffered view */
1413         Evas_Object *sub_layout = elm_layout_add(ad->win_main);
1414         elm_object_style_set(sub_layout, "dialogue");
1415         elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "search_layout");
1416         evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
1417         evas_object_show(sub_layout);
1418
1419         ad->gl_sel_all = elm_genlist_add(ad->win_main);
1420         elm_genlist_clear(ad->gl_sel_all);      /* first to clear list */
1421         elm_genlist_bounce_set(ad->gl_sel_all, 0, 0);
1422
1423         elm_object_part_content_set(sub_layout, "search_bar", ad->gl_sel_all);  /*  add 'Select all' */
1424         elm_object_part_content_set(sub_layout, "search_list", ad->edit_preferred_genlist);     /*  add Genlist */
1425
1426         /*  push, not create */
1427         setting_push_layout_navi_bar(_(EDIT_PREFERRED_STR),
1428                                      _("IDS_COM_SK_CANCEL"),
1429                                      _("IDS_COM_SK_DONE"), NULL,
1430                                      __prefered_buttons_cb, __prefered_buttons_cb, NULL, ad,
1431                                      sub_layout, ad->navibar_main,
1432                                      &(ad->controllbar_all_check));
1433         SETTING_TRACE_END;
1434         return TRUE;
1435 }
1436
1437 static void setting_main_tapi_event_cb(TapiHandle *handle, int result, void *data, void *user_data)
1438 {
1439         SETTING_TRACE_BEGIN;
1440         ret_if(!user_data);
1441         setting_main_appdata *ad = user_data;
1442         ad->b_fm_requesting = FALSE;
1443         SETTING_TRACE("result:%d", result);
1444
1445         int err = 0;
1446         switch (result) {
1447         case TAPI_POWER_FLIGHT_MODE_RESP_ON:
1448
1449                 setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1450                                          SETTING_ON_OFF_BTN_ON, &err);
1451
1452                 //If Setting has validate operation (fm_waiting_op == FM_LEAVE) to process, process it.
1453                 //Otherwise, do nothing
1454                 if (FM_LEAVE == ad->fm_waiting_op)
1455                 {
1456                         //Send the latest operation
1457                         ad->fm_waiting_op = FM_INVALID;
1458                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
1459                         setting_retm_if(err != TAPI_API_SUCCESS,
1460                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
1461
1462                         //sucessfully sent,
1463                         ad->b_fm_requesting = TRUE;
1464
1465                 }
1466                 break;
1467
1468         case TAPI_POWER_FLIGHT_MODE_RESP_OFF:
1469
1470                 setting_set_bool_slp_key(BOOL_SLP_SETTING_FLIGHT_MODE,
1471                                          SETTING_ON_OFF_BTN_OFF, &err);
1472
1473                 //If Setting has validate operation (here, fm_waiting_op == FM_ENTER) to process,process it.
1474                 //Otherwise, do nothing
1475                 if (FM_ENTER == ad->fm_waiting_op)
1476                 {
1477                         //Send the latest operation
1478                         ad->fm_waiting_op = FM_INVALID;
1479                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
1480                         setting_retm_if(err != TAPI_API_SUCCESS,
1481                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
1482
1483                         //sucessfully sent,
1484                         ad->b_fm_requesting = TRUE;
1485                 }
1486
1487                 break;
1488
1489         case TAPI_POWER_FLIGHT_MODE_RESP_FAIL:
1490                 //Setting has a validate operation to process, Send the operation request
1491                 if (FM_ENTER == ad->fm_waiting_op)
1492                 {
1493                         ad->fm_waiting_op = FM_INVALID;
1494                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
1495
1496                         setting_retm_if(err != TAPI_API_SUCCESS,
1497                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
1498                         ad->b_fm_requesting = TRUE;
1499                 }
1500                 else if (FM_LEAVE == ad->fm_waiting_op)
1501                 {
1502                         ad->fm_waiting_op = FM_INVALID;
1503                         err = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
1504
1505                         setting_retm_if(err != TAPI_API_SUCCESS,
1506                                         "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
1507                         ad->b_fm_requesting = TRUE;
1508                 }
1509                 else //Current requset is the last one, Setting needs to notify user
1510                 {
1511                         setting_create_popup_without_btn(ad, ad->win_main,
1512                                              _("IDS_COM_POP_ERROR"),
1513                                              _("IDS_ST_POP_UNABLE_TO_TURN_ON_FLIGHT_MODE_VODA"),
1514                                              NULL, POPUP_INTERVAL,
1515                                              FALSE, FALSE);
1516
1517                         //It is need to rollback the status,
1518                         ad->data_flight->chk_status = !ad->data_flight->chk_status;
1519                         elm_check_state_set(ad->data_flight->eo_check, ad->data_flight->chk_status);
1520                         return;
1521                 }
1522
1523                 //sucessfully sent,
1524                 ad->b_fm_requesting = TRUE;
1525
1526                 break;
1527
1528         case TAPI_POWER_FLIGHT_MODE_RESP_MAX:
1529                 setting_create_popup_without_btn(ad, ad->win_main,
1530                                      _("IDS_COM_POP_ERROR"),
1531                                      _("IDS_COM_POP_UNEXPECTED_ERROR"),
1532                                      NULL, POPUP_INTERVAL, FALSE, FALSE);
1533
1534                 //It is need to rollback the status,
1535                 ad->data_flight->chk_status = !ad->data_flight->chk_status;
1536                 elm_check_state_set(ad->data_flight->eo_check, ad->data_flight->chk_status);
1537                 break;
1538         default:
1539                 /* do nothing */
1540                 break;
1541         }
1542         return;
1543 }
1544
1545 static int setting_main_refresh(void *data)
1546 {
1547         SETTING_TRACE_BEGIN;
1548         setting_main_appdata *ad = (setting_main_appdata *) data;
1549         elm_genlist_clear(ad->main_genlist);    /* first to clear list */
1550
1551         if (is_ug_installed_by_ug_args("rcs-config"))
1552         {
1553                 Elm_Object_Item *item = elm_genlist_item_append(ad->main_genlist, &itc_seperator, NULL, NULL,
1554                                             ELM_GENLIST_ITEM_NONE, NULL, NULL);
1555                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1556                 setting_create_Gendial_field_groupitem(ad->main_genlist,
1557                                                        &(ad->itc[GENDIAL_Type_1text_1icon_2]),
1558                                                        NULL,
1559                                                        setting_main_click_list_ex_ug_cb,
1560                                                        "rcs-config",
1561                                                        SWALLOW_Type_INVALID,
1562                                                        IMG_Joyn, NULL,
1563                                                        0, KeyStr_Joyn, NULL,
1564                                                        NULL);
1565         }
1566
1567         int i;
1568         for(i = Func_Type_Connectivity; i < Func_Type_MAX; i++)
1569                 (ad->load_fns[i]) (ad);
1570
1571         memset(ad->load_fns, 0, Func_Type_MAX *sizeof(menu_list_load_fn));
1572         SETTING_TRACE_END;
1573         return SETTING_RETURN_SUCCESS;
1574 }
1575
1576 static int setting_main_create(void *cb)
1577 {
1578         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1579
1580         setting_main_appdata *ad = (setting_main_appdata *) cb;
1581         g_main_ad = ad;
1582         //pass NULL to let TAPI access default module
1583         ad->handle = tel_init(NULL);
1584         if (!ad->handle) {
1585                 SETTING_TRACE_ERROR("*** [ERR] tel_init failed ***");
1586         } else {
1587                 SETTING_TRACE("tel_init ok[handle:%p]", ad->handle);
1588         }
1589         setting_create_Gendial_itc("dialogue/1text.1icon.2",
1590                                    &(ad->itc[GENDIAL_Type_1text_1icon_2]));
1591         setting_create_Gendial_itc("dialogue/1text.2icon",
1592                                    &(ad->itc[GENDIAL_Type_1text_2icon]));
1593         setting_create_Gendial_itc("dialogue/2text.1icon.3",
1594                                    &(ad->itc[GENDIAL_Type_1icon_2text]));
1595         setting_create_Gendial_itc("dialogue/1text.1icon.2",
1596                                    &(ad->itc[GENDIAL_Type_1text_2icon_2]));
1597         setting_create_Gendial_itc("dialogue/title",
1598                                    &(ad->itc[GENDIAL_Type_group_item]));
1599         setting_create_Gendial_itc("select_all",
1600                                    &(ad->itc[GENDIAL_Type_sel_all]));
1601
1602         setting_create_Gendial_itc("dialogue/2text.3", &(ad->itc[GENDIAL_Type_2text_3]));
1603
1604         ad->view_type = SETTING_VIEW_MAIN;
1605         __setting_create_main_view(ad);
1606         setting_view_main.is_create = 1;
1607
1608         return SETTING_RETURN_SUCCESS;
1609 }
1610
1611 static int setting_main_destroy(void *cb)
1612 {
1613         SETTING_TRACE_BEGIN;
1614         /* error check */
1615         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1616
1617         setting_main_appdata *ad = (setting_main_appdata *) cb;
1618         if (0 == setting_view_main.is_create)
1619         {
1620                 //already not exsit
1621                 return SETTING_RETURN_SUCCESS;
1622         }
1623
1624         if (ad->handle) {
1625                 int tapi_ret = tel_deinit(ad->handle);
1626                 if (tapi_ret != TAPI_API_SUCCESS) {
1627                         SETTING_TRACE_DEBUG("*** [ERR] tel_deinit. [%d] ***", tapi_ret);
1628                 } else {
1629                         SETTING_TRACE("***  tel_deinit OK ");
1630                 }
1631                 ad->handle = NULL;
1632         }
1633
1634         /* then destroy the UI object. */
1635         if (ad->item_check_list) {
1636                 eina_list_free(ad->item_check_list);
1637                 ad->item_check_list = NULL;
1638         } else {
1639                 SETTING_TRACE("*** ad->item_check_list is NULL - abnormal state ");
1640         }
1641
1642         if (ad->ly_main) {
1643                 evas_object_del(ad->ly_main);
1644                 ad->ly_main = NULL;
1645         }
1646
1647         if (ad->flight_popup) {
1648                 evas_object_del(ad->flight_popup);
1649                 ad->flight_popup = NULL;
1650         }
1651         setting_view_main.is_create = 0;
1652         SETTING_TRACE_END;
1653         return SETTING_RETURN_SUCCESS;
1654 }
1655
1656 static int setting_main_update(void *cb)
1657 {
1658         SETTING_TRACE_BEGIN;
1659
1660         /* error check */
1661         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1662
1663         setting_main_appdata *ad = (setting_main_appdata *) cb;
1664
1665         if (ad->ly_main != NULL) {
1666                 //evas_object_show(ad->ly_main);
1667         }
1668
1669         return SETTING_RETURN_SUCCESS;
1670 }
1671
1672 static int setting_main_cleanup(void *cb)
1673 {
1674         SETTING_TRACE_BEGIN;
1675         /* error check */
1676         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1677
1678         setting_main_appdata *ad = (setting_main_appdata *) cb;
1679
1680         if (ad->ly_main != NULL) {
1681                 //evas_object_hide(ad->ly_main);
1682         }
1683
1684         return SETTING_RETURN_SUCCESS;
1685 }
1686
1687 /* ***************************************************
1688  *
1689  *general func
1690  *
1691  ***************************************************/
1692
1693 void setting_update_gl_item(void* data)
1694 {
1695         SETTING_TRACE_BEGIN;
1696         setting_main_appdata *ad = data;
1697         retm_if(!data, "Invalid argument: data is NULL");
1698
1699         int nDx = 0;
1700         Eina_Bool bGlUpdate = EINA_FALSE;
1701         Setting_GenGroupItem_Data *item_to_update = NULL;
1702
1703         for(;nDx<GL_ITEM_MAX; nDx++) {
1704                 if(EINA_TRUE == ad->updateItems[nDx]) {
1705                         switch (nDx)
1706                         {
1707                         case GL_ITEM_WIFI:
1708                                 item_to_update = ad->data_wifi;
1709                                 bGlUpdate = EINA_TRUE;
1710                                 break;
1711                         case GL_ITEM_BT:
1712                                 item_to_update = ad->data_bt;
1713                                 bGlUpdate = EINA_TRUE;
1714                                 break;
1715                         case GL_ITEM_NFC:
1716                                 item_to_update = ad->data_nfc;
1717                                 bGlUpdate = EINA_TRUE;
1718                                 break;
1719                         case GL_ITEM_MAP:
1720                                 item_to_update = ad->data_mobileApp;
1721                                 bGlUpdate = EINA_TRUE;
1722                                 break;
1723                         case GL_ITEM_FLIGHT:
1724                                 item_to_update = ad->data_flight;
1725                                 bGlUpdate = EINA_FALSE;
1726                                 break;
1727
1728
1729
1730
1731                         default: // other case
1732                                 continue;
1733                         }
1734
1735                         if(bGlUpdate) {
1736                                 SETTING_TRACE("gl update:%d", nDx);
1737                                 elm_object_item_data_set(item_to_update->item, item_to_update);
1738                                 elm_genlist_item_update(item_to_update->item);
1739                         } else {
1740                                 SETTING_TRACE("chk update:%d", nDx);
1741                                 elm_check_state_set(item_to_update->eo_check, item_to_update->chk_status);
1742                         }
1743
1744                         ad->updateItems[nDx] = EINA_FALSE;
1745                 } // if(EINA_TRUE == ad->updateItems[nDx])
1746
1747         }
1748
1749         SETTING_TRACE_END;
1750         return;
1751 }
1752
1753 void setting_main_destroy_ug_cb(ui_gadget_h ug, void *priv)
1754 {
1755         setting_main_appdata *ad = (setting_main_appdata *) priv;
1756         if (!ad)
1757                 return;         /*  do nothing if ad is NULL */
1758
1759         if (ug) {
1760                 ug_destroy(ug);
1761                 ad->ug = NULL;
1762         }
1763
1764         setting_main_click_list_item_reset_data(ad, NULL);
1765
1766         // update main genlist in unloading UG
1767         SETTING_TRACE("update main genlist in unloading UG");
1768         setting_update_gl_item(ad);
1769
1770         SETTING_TRACE_END;
1771 }
1772
1773 void setting_main_result_ug_cb(ui_gadget_h ug, service_h service,
1774                                       void *priv)
1775 {
1776         if (!priv)
1777                 return;
1778         SETTING_TRACE_BEGIN;
1779
1780         SETTING_TRACE_END;
1781 }
1782
1783 void setting_main_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
1784                                       void *priv)
1785 {
1786         setting_main_appdata *ad = (setting_main_appdata *) priv;
1787         Evas_Object *base;
1788
1789         if (!priv)
1790                 return;
1791         SETTING_TRACE_BEGIN;
1792
1793         base = (Evas_Object *) ug_get_layout(ug);
1794         if (!base)
1795                 return;
1796
1797         switch (mode) {
1798         case UG_MODE_FULLVIEW:
1799                 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
1800                                                  EVAS_HINT_EXPAND);
1801                 elm_win_resize_object_add(ad->win_main, base);
1802                 evas_object_show(base);
1803                 break;
1804         default:
1805                 break;
1806         }
1807
1808         SETTING_TRACE_END;
1809 }
1810
1811 /* ***************************************************
1812  *
1813  *call back func
1814  *
1815  ***************************************************/
1816
1817 void setting_main_click_list_item_reset_data(void *data,
1818                                                     Evas_Object *obj)
1819 {
1820         SETTING_TRACE_BEGIN;
1821         setting_main_appdata *ad = (setting_main_appdata *) data;
1822
1823         ad->isInUGMode = FALSE;
1824
1825         SETTING_TRACE_END;
1826 }
1827
1828 void /* obj is the layout clicked */
1829 setting_main_click_list_item_ug_cb(void *data, Evas_Object *obj,
1830                                    char *ug_to_load, service_h svc,
1831                                    struct ug_cbs *cbs)
1832 {
1833         SETTING_TRACE_BEGIN;
1834         setting_main_appdata *ad = (setting_main_appdata *) data;
1835         if (!ug_to_load) {
1836                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
1837                 return;
1838         }
1839 #if DISABLED_CODE
1840         char ug_file[PATH_MAX];
1841         if (snprintf
1842             (ug_file, PATH_MAX, "%s/libug-%s.so", SETTING_UG_PATH,
1843              ug_to_load) < 0)
1844                 return;
1845         SETTING_TRACE("ug_file:%s", ug_file);
1846         if (!ecore_file_exists(ug_file)) {
1847                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
1848                 return;
1849         }
1850 #endif
1851         SETTING_TRACE("to create libug-%s.so", ug_to_load);
1852         ad->ug = ug_create(NULL, ug_to_load, UG_MODE_FULLVIEW, svc, cbs);
1853         if (ad->ug) {
1854                 ad->isInUGMode = TRUE;
1855         } else {
1856
1857                 evas_object_show(ad->ly_main);
1858
1859                 SETTING_TRACE_ERROR("errno:%d", errno);
1860                 setting_create_simple_popup(ad, ad->win_main, NULL, NO_UG_FOUND_MSG);
1861         }
1862         SETTING_TRACE_END;
1863 }
1864
1865 void
1866 setting_main_click_list_default_ug_cb(void *data, Evas_Object *obj,
1867                                       void *event_info)
1868 {
1869         setting_main_appdata *ad = data;
1870         setting_create_simple_popup(ad, ad->win_main, NULL,
1871                                           NO_UG_FOUND_MSG);
1872 }
1873
1874 void
1875 setting_main_click_list_usb_cb(void *data, Evas_Object *obj, void *event_info)
1876 {
1877         SETTING_TRACE_BEGIN;
1878         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1879
1880         int err;
1881         int value = -1;
1882         char *str_text = USB_NEED_OFF;
1883
1884         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1885
1886         setting_get_int_slp_key(INT_SLP_SETTING_MOBILE_AP_STATUS, &value, &err);
1887         if (err != 0)
1888         {
1889                 SETTING_TRACE_ERROR("FAIL: VCONFKEY_MOBILE_HOTSPOT_MODE may not exist\n");
1890                 setting_main_click_list_ex_ug_cb(data, obj, item);
1891                 return;
1892         }
1893
1894         /* If mobile hotspot is on, going USB utilties is blocked by a popup*/
1895         if (value & VCONFKEY_MOBILE_HOTSPOT_MODE_USB)
1896         {
1897                 elm_genlist_item_selected_set(item, EINA_FALSE);
1898                 setting_create_simple_popup(g_main_ad, g_main_ad->win_main, NULL, (str_text));
1899         }
1900         else
1901         {
1902                 setting_main_click_list_ex_ug_cb(data, obj, item);
1903         }
1904
1905         SETTING_TRACE_END;
1906 }
1907
1908 void setting_main_click_list_more_cb(void *data, Evas_Object *obj, void *event_info)
1909 {
1910         SETTING_TRACE_BEGIN;
1911         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1912         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1913         elm_genlist_item_selected_set(item, EINA_FALSE);
1914         retm_if(data == NULL, "Invalid argument: data is NULL");
1915         setting_main_appdata *ad = data;
1916         Setting_GenGroupItem_Data *selected_item_data =
1917                     (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1918         SETTING_TRACE("selected_item_data->keyStr:%s", selected_item_data->keyStr);
1919         if (0 == safeStrCmp(selected_item_data->keyStr, KeyStr_MoreConnect))
1920         {
1921                 ad->view_load = SETTING_VIEW_CONNECTIVE_MORE;
1922         }
1923         else if (0 == safeStrCmp(selected_item_data->keyStr, KeyStr_MoreSystem))
1924         {
1925                 ad->view_load = SETTING_VIEW_SYSTEM_MORE;
1926         }
1927         else
1928         {
1929                 return;
1930         }
1931         setting_view_change(&setting_view_main, &setting_view_more_menu, ad);
1932 }
1933
1934
1935 void
1936 setting_main_click_list_ex_ug_cb(void *data, Evas_Object *obj,
1937                                  void *event_info)
1938 {
1939         SETTING_TRACE_BEGIN;
1940         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1941         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1942
1943         elm_genlist_item_selected_set(item, EINA_FALSE);
1944
1945         if (g_main_ad->ug) {
1946                 SETTING_TRACE
1947                     ("[ad->ug non-NULL]skip genlist click event!!");
1948
1949                 SETTING_TRACE_END;
1950                 return;
1951         }
1952
1953         if (NULL == data) {     /* pass NULL to ug_args when create setting.cfg. */
1954                 setting_create_simple_popup(g_main_ad,
1955                                           g_main_ad->win_main,
1956                                           NULL, NO_UG_FOUND_MSG);
1957                 SETTING_TRACE_END;
1958                 return;
1959         }
1960
1961         setting_main_appdata *ad = g_main_ad;
1962
1963         /*  if UG is created by Setting app, setting_main_click_list_ex_ug_cb is diabled. */
1964         if (ad->isInUGMode) {
1965                 SETTING_TRACE("isInUGMode : TRUE - another UG is running now.");
1966                 ad->isInUGMode = FALSE;
1967                 SETTING_TRACE_END;
1968                 return;
1969         } else {
1970                 SETTING_TRACE
1971                     ("isInUGMode : FALSE - another UG is NOT running now.")
1972         }
1973
1974         Setting_GenGroupItem_Data *selected_item_data =
1975             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1976         setting_main_click_list_item_reset_data(ad, obj);
1977         const char *item_name = _(selected_item_data->keyStr);
1978         ret_if(!item_name);
1979
1980         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1981         setting_retm_if(!cbs, "calloc failed");
1982         cbs->layout_cb = setting_main_layout_ug_cb;
1983         cbs->result_cb = setting_main_result_ug_cb;
1984         cbs->destroy_cb = setting_main_destroy_ug_cb;
1985         cbs->priv = (void *)ad;
1986
1987         char *path = get_ug_path_from_ug_args(data);
1988         service_h svc = get_bundle_from_ug_args(data);
1989         setting_main_click_list_item_ug_cb(ad, obj, path, svc, cbs);
1990         if (path)
1991                 FREE(path);
1992         if (cbs)
1993                 FREE(cbs);
1994         path = NULL;
1995         cbs = NULL;
1996         service_destroy(svc);
1997 }
1998 void
1999 setting_main_click_list_plugin_cb(void *data, Evas_Object *obj,
2000                                  void *event_info)
2001 {
2002         SETTING_TRACE_BEGIN;
2003         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2004         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2005         elm_genlist_item_selected_set(item, EINA_FALSE);
2006 #ifdef PLUGIN
2007         setting_plugin_load((const char *)data);
2008 #endif
2009 }
2010
2011 void setting_main_list_mouse_up_cb(void *data, Evas_Object *eo,
2012                                           void *event_info)
2013 {
2014         SETTING_TRACE_BEGIN;
2015         retm_if(data == NULL, "Data parameter is NULL");
2016         Setting_GenGroupItem_Data *list_item =
2017             (Setting_GenGroupItem_Data *) data;
2018         SETTING_TRACE("process item [%s]", list_item->keyStr);
2019         list_item->chk_status = elm_check_state_get(eo);        /* for update new state */
2020
2021         SETTING_TRACE("change radio[%s], status is:%d", _(list_item->keyStr),
2022                       list_item->chk_status);
2023         /*setting_main_appdata *ad = g_main_ad;*/
2024
2025         if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
2026                 int err;
2027                 if (elm_check_state_get(eo)) {
2028                         setting_set_bool_slp_key
2029                             (BOOL_SLP_SETTING_USE_PACKET_DATA,
2030                              SETTING_ON_OFF_BTN_ON, &err);
2031                 } else {
2032                         setting_set_bool_slp_key
2033                             (BOOL_SLP_SETTING_USE_PACKET_DATA,
2034                              SETTING_ON_OFF_BTN_OFF, &err);
2035                 }
2036
2037         } else if (!safeStrCmp(KeyStr_Landscape, list_item->keyStr)) {
2038                 vconf_set_bool(VCONFKEY_SETAPPL_ROTATE_LOCK_BOOL, ! list_item->chk_status);
2039         }
2040
2041         return;
2042 }
2043
2044 void setting_main_sel_list_mouse_up_cb(void *data, Evas_Object *eo,
2045                                               void *event_info)
2046 {
2047         SETTING_TRACE_BEGIN;
2048         setting_retm_if(data == NULL, "Data parameter is NULL");
2049
2050         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2051         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2052         elm_genlist_item_selected_set(item, 0);
2053         Setting_GenGroupItem_Data *list_item =
2054             (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2055
2056         list_item->chk_status = elm_check_state_get(list_item->eo_check);
2057         /* new status */
2058
2059         /*setting_main_appdata *ad = (setting_main_appdata *) data;*/
2060
2061         if (!safeStrCmp(KeyStr_UsePacketData, list_item->keyStr)) {
2062                 /* setting_reset_slp_key_by_status(eo, BOOL_SLP_SETTING_USE_PACKET_DATA); */
2063                 int err;
2064                 setting_set_bool_slp_key(BOOL_SLP_SETTING_USE_PACKET_DATA,
2065                                          list_item->chk_status, &err);
2066
2067         } else if (!safeStrCmp(KeyStr_Landscape, list_item->keyStr)) {
2068                 vconf_set_bool(VCONFKEY_SETAPPL_ROTATE_LOCK_BOOL, (list_item->chk_status));
2069         }
2070
2071         return;
2072 }
2073
2074 void __alternate_flight_mode(Evas_Object *check)
2075 {
2076         SETTING_TRACE_BEGIN;
2077         int ret;
2078         Eina_Bool status =  elm_check_state_get(check);
2079         SETTING_TRACE("flight mode status : %d", status);
2080         setting_main_appdata *ad = g_main_ad;
2081
2082         //Check whether some requestion is processing by TAPI
2083         if (ad->b_fm_requesting)
2084         {
2085                 //Do nothing, just mark the lastest operation..
2086                 SETTING_TRACE("Some requestion is processing by TAPI, wait to process");
2087                 ad->fm_waiting_op = status ? FM_ENTER : FM_LEAVE;
2088                 return;
2089         }
2090
2091         //otherwise, invalid waiting operation and send requsetion to TAPI:
2092         ad->fm_waiting_op = FM_INVALID;
2093         if (status) {
2094                 ret = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_ENTER,setting_main_tapi_event_cb,ad);
2095                 setting_retm_if(ret != TAPI_API_SUCCESS,
2096                                 "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_ENTER) ***");
2097         } else {
2098                 ret = tel_set_flight_mode(ad->handle, TAPI_POWER_FLIGHT_MODE_LEAVE,setting_main_tapi_event_cb,ad);
2099                 setting_retm_if(ret != TAPI_API_SUCCESS,
2100                                 "*** [ERR] tel_set_flight_mode(TAPI_POWER_FLIGHT_MODE_LEAVE) ***");
2101         }
2102
2103         //sucessfully sent,
2104         ad->b_fm_requesting = TRUE;
2105         SETTING_TRACE_END;
2106 }
2107
2108 void
2109 setting_main_click_list_network_ug_cb(void *data, Evas_Object *obj,
2110                                       void *event_info)
2111 {
2112         SETTING_TRACE_BEGIN;
2113         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2114         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2115
2116         elm_genlist_item_selected_set(item, EINA_FALSE);
2117
2118         if (g_main_ad->ug) {
2119                 SETTING_TRACE
2120                     ("[ad->ug non-NULL]skip genlist click event!!");
2121
2122                 SETTING_TRACE_END;
2123                 return;
2124         }
2125
2126         setting_main_appdata *ad = g_main_ad;
2127         setting_main_click_list_item_reset_data(ad, obj);
2128
2129         int err = 0;
2130         int value;
2131         setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
2132         SETTING_TRACE("value:%d", value);
2133         switch (value) {
2134         case VCONFKEY_TELEPHONY_SIM_INSERTED:
2135                 {
2136                         struct ug_cbs *cbs =
2137                             (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
2138                         setting_retm_if(!cbs, "calloc failed");
2139                         cbs->layout_cb = setting_main_layout_ug_cb;
2140                         cbs->result_cb = setting_main_result_ug_cb;
2141                         cbs->destroy_cb = setting_main_destroy_ug_cb;
2142                         cbs->priv = (void *)ad;
2143                         setting_main_click_list_item_ug_cb(data, obj,
2144                                                            "setting-network-efl",
2145                                                            NULL, cbs);
2146                         FREE(cbs);
2147                         break;
2148                 }
2149         case VCONFKEY_TELEPHONY_SIM_NOT_PRESENT:
2150                 setting_create_simple_popup(NULL, ad->win_main,
2151                                             NULL, _("IDS_ST_HEADER_INSERT_SIM_CARD_ABB"));
2152                 SETTING_TRACE("%s*** [ERR] No SIM. sim_slot_type=%d ***%s",
2153                               SETTING_FONT_RED, value, SETTING_FONT_BLACK);
2154                 return;
2155                 break;
2156         case VCONFKEY_TELEPHONY_SIM_CARD_ERROR:
2157         case VCONFKEY_TELEPHONY_SIM_UNKNOWN:
2158                 setting_create_simple_popup(NULL, ad->win_main,
2159                                             NULL,_("IDS_COM_BODY_INVALID_SIM_CARD"));
2160                 SETTING_TRACE("%s*** [ERR] Invalid SIM. sim_slot_type=%d ***%s",
2161                               SETTING_FONT_RED, value, SETTING_FONT_BLACK);
2162                 return;
2163                 break;
2164         default:
2165                 break;
2166         }
2167
2168 }
2169
2170 static void
2171 setting_main_click_Gendial_list_flight_mode_cb(void *data, Evas_Object *obj,
2172                                                void *event_info)
2173 {
2174     /* error check */
2175     setting_retm_if(data == NULL, "Data parameter is NULL");
2176
2177     retm_if(event_info == NULL, "Invalid argument: event info is NULL");
2178     Elm_Object_Item *item = (Elm_Object_Item *) event_info;
2179     elm_genlist_item_selected_set(item, 0);
2180     Setting_GenGroupItem_Data *list_item =
2181         (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
2182     int old_status = elm_check_state_get(list_item->eo_check);
2183     /* new status */
2184     list_item->chk_status = !old_status;
2185     elm_check_state_set(list_item->eo_check, list_item->chk_status);
2186
2187     __alternate_flight_mode(list_item->eo_check);
2188     SETTING_TRACE_END;
2189 }
2190
2191 void
2192 setting_main_click_list_flight_mode_cb(void *data, Evas_Object *obj,
2193                                        void *event_info)
2194 {
2195         SETTING_TRACE_BEGIN;
2196         retm_if(data == NULL, "Data parameter is NULL");
2197         Setting_GenGroupItem_Data *list_item =
2198             (Setting_GenGroupItem_Data *) data;
2199         list_item->chk_status = elm_check_state_get(obj);       /* for update new state */
2200         SETTING_TRACE("process item [%s], status:%d", _(list_item->keyStr),
2201                       list_item->chk_status);
2202
2203         __alternate_flight_mode(obj);
2204         SETTING_TRACE_END;
2205 }
2206
2207
2208 /**
2209  * store current selection in setting.cfg
2210  */
2211 void setting_try_save_check_list(void *data)
2212 {
2213         SETTING_TRACE_BEGIN;
2214         setting_main_appdata *ad = (setting_main_appdata *) data;
2215
2216         Eina_List *check_list = ad->item_check_list;
2217         Setting_GenGroupItem_Data *list_item = NULL;
2218         int update_count = 0;
2219
2220         while (check_list) {
2221                 list_item = (Setting_GenGroupItem_Data *) eina_list_data_get(check_list);
2222                 if (NULL == list_item) continue;
2223
2224                 update_count++;
2225                 if (list_item->chk_status) {
2226                         /* to update config file */
2227                         setting_cfg_set_pos(list_item->keyStr, Cfg_Item_Pos_Level0);
2228                 } else {
2229                         /* to update config file */
2230                         setting_cfg_set_pos(list_item->keyStr, Cfg_Item_Pos_Level1);
2231                 }
2232                 check_list = eina_list_next(check_list);
2233         }
2234
2235         if (update_count == 0) {
2236                 /* to popup tips notify */
2237         } else {
2238                 setting_cfg_file_update();
2239         }
2240         SETTING_TRACE_END;
2241 }
2242
2243 void
2244 setting_main_click_edit_preferred_cb(void *data, Evas_Object *obj, void *event_info)
2245 {
2246         SETTING_TRACE_BEGIN;
2247
2248         setting_main_appdata *ad = (setting_main_appdata *) data;
2249         ad->view_type = SETTING_VIEW_ALL_CHECK;
2250         __setting_create_prefered_view(ad);
2251         __load_check_list(ad, &(ad->edit_preferred_genlist), NULL);
2252
2253         SETTING_TRACE_END;
2254 }