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