tizen 2.3 release
[apps/home/settings.git] / setting-connectivity / src / setting-connectivity-usb.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 <setting-connectivity-usb.h>
23 #include <app_manager.h>
24
25
26 #define GROUP_MAX       30
27 #define USB_BTN_NO  0
28 #define SETTING_CPU_USAGE_PKG_NAME "org.tizen.dispcpuinfo"
29
30 #define DIAGNOSTICS_USAGE_STR                                           "IDS_ST_BODY_CRASH_VIEWER"
31 #define DEBUG_MODE_POPUP_TITLE                                  "IDS_ST_HEADER_ALLOW_USB_DEBUGGING_Q_ABB"
32 #define DEBUG_MODE_POPUP_TEXT                                   "IDS_ST_BODY_USB_DEBUGGING_IS_INTENDED_FOR_DEVELOPMENT_PURPOSES_ONLY_MSG"
33 #define DEFAULT_RENDERING_ENGINE_STR                            "IDS_ST_BODY_DEFAULT_RENDERING_ENGINE"
34 #define SOFTWARE_STR                                                            "IDS_ST_BODY_SOFTWARE"
35 #define HARDWARE_STR                                                            "IDS_ST_BODY_HARDWARE"
36 #define CONNECTTIVITY_SELECT_INFO_POPUP_STR             "IDS_COM_BODY_USB_DEBUGGING_CONNECTED"
37
38 static char* bgprocess_list[] = {
39     "IDS_ST_HEADER_STANDARD_LIMIT_ABB",
40     "IDS_ST_HEADER_NO_BACKGROUND_PROCESSES_ABB",
41     "IDS_ST_HEADER_1_PROCESS_AT_MOST_ABB",
42     "IDS_ST_HEADER_2_PROCESSES_AT_MOST_ABB",
43     "IDS_ST_HEADER_3_PROCESSES_AT_MOST_ABB",
44     "IDS_ST_HEADER_4_PROCESSES_AT_MOST_ABB",
45 };
46
47 static int setting_connectivity_usb_create(void *cb);
48 static int setting_connectivity_usb_destroy(void *cb);
49 static int setting_connectivity_usb_update(void *cb);
50 static int setting_connectivity_usb_cleanup(void *cb);
51
52 static void debug_mode_change_vconf_cb(keynode_t *key, void *data);
53 static void in_mode_change_vconf_cb(keynode_t *key, void *data);
54 static void unload_popup(void* data);
55 void load_usb_connection_popup(void* data);
56
57 /* This is pointer to indicate progressbars*/
58 //static button_status button[NUM_PROGRESSBAR];
59
60 /* These variables are for the popup */
61
62 setting_view setting_view_connectivity_usb = {
63         .create = setting_connectivity_usb_create,
64         .destroy = setting_connectivity_usb_destroy,
65         .update = setting_connectivity_usb_update,
66         .cleanup = setting_connectivity_usb_cleanup,
67 };
68
69 static void __setting_processes_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
70 {
71         SETTING_TRACE_BEGIN;
72         /* error check */
73         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
74         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
75         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
76         elm_genlist_item_selected_set(subitem, 0);
77         Setting_GenGroupItem_Data *data_subItem =
78             elm_object_item_data_get(subitem);
79         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
80         ret_if(NULL == data_subItem || NULL == data_parentItem);
81
82         elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
83         int err;
84         setting_set_int_slp_key(data_parentItem->int_slp_setting_binded,
85                                 data_subItem->chk_status, &err);
86         setting_retm_if(0 != err, "Set vconf error[%d]",data_parentItem->int_slp_setting_binded);
87
88         data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
89         elm_object_item_data_set(data_parentItem->item, data_parentItem);
90         elm_genlist_item_update(data_parentItem->item);
91         elm_object_item_signal_emit(data_parentItem->item, "elm,state,top", "");
92         data_parentItem->group_style = SETTING_GROUP_STYLE_TOP;
93         elm_genlist_item_expanded_set(parentItem, EINA_FALSE);
94 }
95
96 static void __setting_devoptions_main_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
97 {
98         SETTING_TRACE_BEGIN;
99         setting_retm_if(event_info == NULL, "Invalid argument: event info is NULL");
100
101         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
102         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
103         elm_genlist_item_selected_set(subitem, 0);
104         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
105         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);      /* parent data */
106         ret_if(NULL == data_subItem || NULL == data_parentItem);
107
108         elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
109
110         SETTING_TRACE("data_subItem->chk_status = %d", data_subItem->chk_status);
111         if (data_subItem->chk_status == 0) { // software
112                 elm_config_engine_set("software_x11");
113                 vconf_set_int(VCONFKEY_SETAPPL_DEFAULT_RENDERING_ENGINE_TYPE_INT, SETTING_RENDERING_ENGINE_SW);
114                 elm_config_save();
115         } else if (data_subItem->chk_status == 1) { // hardware
116                 elm_config_engine_set("opengl_x11");
117                 vconf_set_int(VCONFKEY_SETAPPL_DEFAULT_RENDERING_ENGINE_TYPE_INT, SETTING_RENDERING_ENGINE_HW);
118                 elm_config_save();
119         }
120
121         data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
122         elm_object_item_data_set(data_parentItem->item, data_parentItem);
123         elm_genlist_item_update(data_parentItem->item);
124         elm_object_item_signal_emit(data_parentItem->item, "elm,state,top", "");
125         data_parentItem->group_style = SETTING_GROUP_STYLE_TOP;
126         elm_genlist_item_expanded_set(parentItem, EINA_FALSE);
127 }
128
129 static void __setting_devoptions_main_exp_cb(void *data, Evas_Object * obj, void *event_info)
130 {
131         ret_if(NULL == data || NULL == event_info);
132         SETTING_TRACE_BEGIN;
133         SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
134
135         Elm_Object_Item *parentItem = event_info;   //parent item
136         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);  //parent data
137         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
138
139         Evas_Object *rgd;
140
141         if (data_parentItem == ad->bg_processes) {
142                 //elm_object_item_signal_emit(parentItem, "elm,state,top", "");
143                 rgd = elm_radio_add(scroller);
144                 elm_radio_value_set(rgd, -1);
145
146                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
147                                                         &itc_1text_1icon,
148                                                         __setting_processes_sub_list_sel_cb, ad, parentItem,
149                                                         SWALLOW_Type_1RADIO, rgd,
150                                                         0, _(bgprocess_list[0]),
151                                                         NULL, SETTING_GROUP_STYLE_CENTER);
152                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
153                                                         &itc_1text_1icon,
154                                                         __setting_processes_sub_list_sel_cb, ad, parentItem,
155                                                         SWALLOW_Type_1RADIO, rgd,
156                                                         1, _(bgprocess_list[1]),
157                                                         NULL, SETTING_GROUP_STYLE_CENTER);
158                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
159                                                         &itc_1text_1icon,
160                                                         __setting_processes_sub_list_sel_cb, ad, parentItem,
161                                                         SWALLOW_Type_1RADIO, rgd,
162                                                         2, _(bgprocess_list[2]),
163                                                         NULL, SETTING_GROUP_STYLE_CENTER);
164                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
165                                                         &itc_1text_1icon,
166                                                         __setting_processes_sub_list_sel_cb, ad, parentItem,
167                                                         SWALLOW_Type_1RADIO, rgd,
168                                                         3, _(bgprocess_list[3]),
169                                                         NULL, SETTING_GROUP_STYLE_CENTER);
170                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
171                                                         &itc_1text_1icon,
172                                                         __setting_processes_sub_list_sel_cb, ad, parentItem,
173                                                         SWALLOW_Type_1RADIO, rgd,
174                                                         4, _(bgprocess_list[4]),
175                                                         NULL, SETTING_GROUP_STYLE_CENTER);
176                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
177                                                      &itc_1text_1icon,
178                                                      __setting_processes_sub_list_sel_cb, ad, parentItem,
179                                                      SWALLOW_Type_1RADIO, rgd,
180                                                      5, _(bgprocess_list[5]),
181                                                      NULL, SETTING_GROUP_STYLE_BOTTOM);
182
183                 setting_update_chk_status(rgd, data_parentItem->int_slp_setting_binded);
184         } else if (data_parentItem == ad->gpu_render) {
185                 //elm_object_item_signal_emit(parentItem, "elm,state,top", "");
186                 rgd = elm_radio_add(scroller);
187                 elm_radio_value_set(rgd, -1);
188
189                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
190                                                         &itc_1text_1icon,
191                                                         __setting_devoptions_main_sub_list_sel_cb, ad, parentItem,
192                                                         SWALLOW_Type_1RADIO, rgd,
193                                                         0, _(SOFTWARE_STR),
194                                                         NULL, SETTING_GROUP_STYLE_CENTER);
195                 setting_create_Gendial_exp_sub_field_with_group_style(scroller,
196                                                     &itc_1text_1icon,
197                                                     __setting_devoptions_main_sub_list_sel_cb, ad, parentItem,
198                                                     SWALLOW_Type_1RADIO, rgd,
199                                                     1, _(HARDWARE_STR),
200                                                     NULL, SETTING_GROUP_STYLE_BOTTOM);
201
202                 setting_update_chk_status(rgd, data_parentItem->int_slp_setting_binded);
203                 const char* engine_str = NULL;
204                 engine_str = elm_config_engine_get();
205                 if (engine_str) {
206                         if (0 == safeStrCmp(engine_str, "software_x11")) {
207                                 elm_radio_value_set(rgd, 0);
208                         } else if (0 == safeStrCmp(engine_str, "opengl_x11")) {
209                                 elm_radio_value_set(rgd, 1);
210                         } else {
211                                 SETTING_TRACE_ERROR("engine_str is wrong");
212                         }
213                 } else {
214                         SETTING_TRACE_ERROR("engine_str is NULL");
215                 }
216         }
217 }
218
219 static int setting_connectivity_change_debug_mode_toggle(SettingConnectivityUG *ad)
220 {
221         SETTING_TRACE_BEGIN;
222         if(!ad) return -1;
223
224         int ret = -1;
225         int debugMode = 0;
226         ret = vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, &debugMode);
227         if (ret != 0) {
228                 SETTING_TRACE("FAIL: vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
229                 return -1;
230         }
231         SETTING_TRACE("debugMode: %d", debugMode);
232
233         setting_update_gl_item_chk_status(ad->debug_mode, EINA_FALSE);
234         if (debugMode == 0) {
235                 if (USB_CONNECTED == check_usb_jack_status()) {
236                         ret = vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, 1);
237                         if (ret != 0) {
238                                 SETTING_TRACE("FAIL: vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
239                                 return -1;
240                         }
241
242                         setting_create_select_info_popup(&ad->selectioninfo_popup, ad->view_layout, 3.0,
243                                         _(CONNECTTIVITY_SELECT_INFO_POPUP_STR), "center_text");
244                 } else {
245                         load_usb_connection_popup(ad);
246                 }
247         } else {
248                 ret = vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, 0);
249                 if (ret != 0) {
250                         SETTING_TRACE("FAIL: vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
251                         return -1;
252                 }
253
254                 if (ad->selectioninfo_popup) {
255                         evas_object_del(ad->selectioninfo_popup);
256                         ad->selectioninfo_popup = NULL;
257                 }
258         }
259
260         SETTING_TRACE_END;
261         return 0;
262 }
263
264 static void setting_connectivity_main_chk_usb_debug_cb(void *data,
265                                                 Evas_Object * obj, void *event_info)
266 {
267         SETTING_TRACE_BEGIN;
268         retm_if(data == NULL, "Data parameter is NULL");
269         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
270         SettingConnectivityUG *ad = list_item->userdata;
271
272         if (0 > setting_connectivity_change_debug_mode_toggle(ad)) {
273                 SETTING_TRACE("FAIL: setting_connectivity_change_debug_mode_toggle()");
274         }
275
276         SETTING_TRACE_END;
277 }
278
279 static void setting_connectivity_usb_mouse_up_Gendial_list_cb(void *data,
280                                                     Evas_Object *obj, void *event_info)
281 {
282         SETTING_TRACE_BEGIN;
283         retm_if(data == NULL, "Invalid argument: data is NULL");
284         retm_if(event_info == NULL, "Invalid argument: event_info is NULL");
285         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
286         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
287
288         elm_genlist_item_selected_set(item, 0);
289
290         if (0 > setting_connectivity_change_debug_mode_toggle(ad)) {
291                 SETTING_TRACE("FAIL: setting_connectivity_change_debug_mode_toggle()");
292         }
293
294         SETTING_TRACE_END;
295 }
296
297 static void setting_connectivity_main_chk_btn_cb(void *data, Evas_Object * obj, void *event_info)
298 {
299         SETTING_TRACE_BEGIN;
300         //error check
301         retm_if(data == NULL, "Data parameter is NULL");
302
303         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
304
305         list_item->chk_status = elm_check_state_get(obj);   // for genlist update status
306
307         int opposite  = (list_item->chk_status == 1) ? SETTING_ON_OFF_BTN_ON : SETTING_ON_OFF_BTN_OFF;
308
309         SETTING_TRACE("list_item->keyStr = %s", list_item->keyStr);
310         if (!safeStrCmp("IDS_ST_MBODY_SHOW_CPU_USAGE", list_item->keyStr)) {
311                 if (opposite) {
312                         app_launcher(SETTING_CPU_USAGE_PKG_NAME);
313                 } else {
314                         bool running_flag = FALSE;
315                         int ret = app_manager_is_running(SETTING_CPU_USAGE_PKG_NAME, &running_flag);
316                         setting_retm_if(ret != 0, "fail to call app_manager_is_running");
317                         if (running_flag) {
318                                 app_context_h context = NULL;
319                                 ret = app_manager_get_app_context(SETTING_CPU_USAGE_PKG_NAME, &context);
320                                 setting_retm_if(ret != 0, "fail to call app_manager_get_app_context");
321                                 int ret = app_manager_terminate_app(context);
322                                 if (ret == 0) {
323                                         SETTING_TRACE("===== app_manager_terminate_app successed.");
324                                 } else {
325                                         SETTING_TRACE_ERROR("===== app_manager_terminate_app fail.");
326                                 }
327                         }
328                 }
329         } else {
330                 /* do nothing */
331         }
332         //app_launcher("org.tizen.dispcpuinfo");
333 }
334
335 static void setting_connectivity_usb_mouse_up_Gendial_CPU_usage_cb(void* data, Evas_Object* obj, void* event_info)
336 {
337         SETTING_TRACE_BEGIN;
338
339         /* error check */
340         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
341         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
342         elm_genlist_item_selected_set(item, 0);
343         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
344
345         setting_retm_if(data == NULL, "Data parameter is NULL");
346         //SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
347
348         setting_update_gl_item_chk_status(list_item, !(list_item->chk_status));
349
350         if (list_item->chk_status) {
351                 vconf_set_bool("db/setting/show_cpu_info", 1);
352                 app_launcher(SETTING_CPU_USAGE_PKG_NAME);
353         } else {
354                 vconf_set_bool("db/setting/show_cpu_info", 0);
355         }
356         //setting_create_simple_popup(NULL, ad->win_get, NULL, "NOT IMPLMENTED YET");
357         //app_launcher("org.tizen.dispcpuinfo");
358         SETTING_TRACE_END;
359 }
360
361 static void __setting_connectivity_usb_dia_usage_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
362 {
363         SETTING_TRACE_BEGIN;
364         /* error check */
365         setting_retm_if(data == NULL, "Data parameter is NULL");
366
367         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
368         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
369         elm_genlist_item_selected_set(item, 0);
370         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
371
372         /* SettingAboutUG *ad = (SettingAboutUG *) data; */
373
374         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
375         app_launcher("org.tizen.crash-viewer");
376 }
377
378 char* get_bg_processes()
379 {
380         int value;
381         int err;
382     int ret = setting_get_int_slp_key(INT_SLP_SETTING_DEVOPTION_BGPROCESS, &value, &err);
383     if (ret != 0) {
384         SETTING_TRACE_ERROR("get vconf failed");
385     }
386
387         if (value >=0 && value < sizeof(bgprocess_list)/sizeof(bgprocess_list[0]) )
388                 return _(bgprocess_list[value]);
389         else
390         {
391                 return _(bgprocess_list[0]);            /* error proc */
392         }
393 }
394
395 /**
396  * To create the usb main view
397  *
398  *@param cb
399  *
400  *@return
401  */
402 static int setting_connectivity_usb_create(void *cb)
403 {
404         SETTING_TRACE_BEGIN;
405         SETTING_TRACE("Start USB utilities\n");
406         /* error check */
407         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
408
409         SettingConnectivityUG *ad = (SettingConnectivityUG *) cb;
410         Evas_Object *scroller = NULL;
411
412         int vconf_ret = -1;
413         int err = -1;
414
415         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
416         elm_layout_file_set(view_layout, SETTING_THEME_EDJ_NAME, "selinfo_bottom");
417         evas_object_size_hint_weight_set(view_layout, EVAS_HINT_EXPAND, 0.0);
418         ad->view_layout = view_layout;
419
420         /* win_main of the popup */
421 #ifdef HELP_UG_EXIST
422         ad->ly_usb =
423             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
424                                                    ad->win_get,
425                                                    KeyStr_DeveloperOption,
426                                                    dgettext("sys_string", "IDS_COM_BODY_BACK"),
427                                                    _("IDS_COM_BODY_HELP"),
428                                                    setting_connectivity_usb_click_softkey_cancel_cb,
429                                                    setting_connectivity_usb_click_softkey_set_cb,
430                                                    ad, &scroller,
431                                                    &ad->navi_bar);
432 #else
433         ad->ly_usb =
434                 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
435                                                    KeyStr_DeveloperOption,
436                                                    _("IDS_COM_BODY_BACK"), NULL, NULL,
437                                                    setting_connectivity_usb_click_softkey_cancel_cb,
438                                                    NULL, NULL, ad, view_layout,
439                                                    &ad->navi_bar, NULL);
440 #endif
441
442         SETTING_TRACE("before init\n");
443
444         scroller = elm_genlist_add(ad->win_main_layout);
445         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
446                  "Cannot set scroller object  as contento of layout");
447         elm_genlist_realization_mode_set(scroller, EINA_TRUE);
448         elm_object_style_set(scroller, "dialogue");
449         elm_genlist_clear(scroller);    /* first to clear list */
450         evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
451
452         elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
453
454         //button[SETTING_USB_DEBUG_MODE].item = NULL;
455         //button[SETTING_USB_DEBUG_MODE].pstate = STATE_NONE;
456         setting_enable_expandable_genlist(scroller, ad, __setting_devoptions_main_exp_cb, NULL);
457
458         Elm_Object_Item *item = NULL;;
459 #if 1
460         // [UI] separator
461         item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
462                                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
463         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
464
465         // [UI] USB debugging
466         int vconf_val;
467         int toggle_dbg = 0;
468
469         err = vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, &toggle_dbg);
470         if (err != 0) {
471                 SETTING_TRACE_ERROR("FAIL: vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
472                 /* set debug mode to true to find the problem*/
473                 toggle_dbg = 1;
474         }
475         SETTING_TRACE("toggle_dbg: %d", toggle_dbg);
476
477         ad->debug_mode =
478                 setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
479                         setting_connectivity_usb_mouse_up_Gendial_list_cb,
480                         ad, SWALLOW_Type_1ICON_1RADIO, NULL,
481                         NULL, toggle_dbg, "IDS_ST_BODY_USB_DEBUGGING",
482                         NULL, setting_connectivity_main_chk_usb_debug_cb);
483
484         if (ad->debug_mode) {
485                 ad->debug_mode->userdata = ad;
486                 __BACK_POINTER_SET(ad->debug_mode);
487                 //button[SETTING_USB_DEBUG_MODE].item = ad->debug_mode->item;
488         } else {
489                 SETTING_TRACE_ERROR("ad->debug_mode is NULL");
490                 return SETTING_RETURN_FAIL;
491         }
492
493         ADD_GL_HELP(scroller, SETTING_USB_DEBUGGING_DESC);
494 #endif
495
496         SETTING_TRACE("Second item of Second group is set\n");
497
498
499         if (!isEmulBin()) {
500                 // [UI] Show CPU Usage
501                 bool running_flag = FALSE;
502                 int ret = app_manager_is_running(SETTING_CPU_USAGE_PKG_NAME, &running_flag);
503                 setting_retvm_if(ret != 0, SETTING_RETURN_FAIL, "fail to call app_manager_is_running");
504                 if (running_flag) {
505                         vconf_val = 1;
506                 } else {
507                         vconf_val = 0;
508                 }
509
510                 ad->cpu_usage =
511                         setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
512                                  setting_connectivity_usb_mouse_up_Gendial_CPU_usage_cb,
513                                  ad, SWALLOW_Type_1ICON_1RADIO, NULL,
514                                  NULL, vconf_val, "IDS_ST_MBODY_SHOW_CPU_USAGE",
515                                  NULL, setting_connectivity_main_chk_btn_cb);
516                 if (ad->cpu_usage) {
517                         ad->cpu_usage->userdata = ad;
518                         __BACK_POINTER_SET(ad->cpu_usage);
519                         //setting_disable_genlist_item(ad->cpu_usage->item);
520                         } else {
521                                 SETTING_TRACE_ERROR("ad->cpu_usage is NULL");
522                                 return SETTING_RETURN_FAIL;
523                 }
524
525                 // [UI] help text
526                 ADD_GL_HELP(scroller, "IDS_ST_BODY_SCREEN_OVERLAY_SHOWING_CURRENT_CPU_USAGE_ABB");
527
528                 // Get GPU Rendering state
529                 const char* engine_str = NULL;
530                 engine_str = elm_config_engine_get();
531                 char *render_engine = NULL;
532                 if (engine_str) {
533                         SETTING_TRACE("engine_str is %s", engine_str);
534                         if ( 0 == safeStrCmp(engine_str, "opengl_x11")) {
535                                 render_engine = HARDWARE_STR;
536                         } else if ( 0 == safeStrCmp(engine_str, "software_x11")) {
537                                 render_engine = SOFTWARE_STR;
538                         } else {
539                                 SETTING_TRACE_ERROR("engine_str is wrong");
540                         }
541                 } else {
542                         SETTING_TRACE_ERROR("engine_str is NULL");
543                 }
544
545                 // [UI] Force GPU rendering
546                 ad->gpu_render = setting_create_Gendial_exp_parent_field(scroller,
547                                                 &(ad->itc_2text_3_parent),
548                                                 NULL, NULL, SWALLOW_Type_INVALID,
549                                                 DEFAULT_RENDERING_ENGINE_STR, _(render_engine),
550                                                 SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_NONE);
551                 if (ad->gpu_render) {
552                         __BACK_POINTER_SET(ad->gpu_render);
553                         ad->gpu_render->userdata = ad;
554                         //setting_disable_genlist_item(ad->gpu_render->item);
555                 } else {
556                         SETTING_TRACE_ERROR("ad->gpu_render is NULL");
557                         return SETTING_RETURN_FAIL;
558                 }
559
560                 // [UI] help text
561                 ADD_GL_HELP(scroller, "IDS_ST_POP_USE_2D_HARDWARE_OR_SOFTWARE_ACCELERATION_IN_APPLICATIONS");
562
563                 // NEWCODE:
564
565                 // [UI] expandble list - Automatic answering
566                 char *bgproc = get_bg_processes();
567                 ad->bg_processes =
568                         setting_create_Gendial_exp_parent_field(scroller,
569                                 &(ad->itc_2text_3_parent),
570                                 NULL, NULL,
571                                 SWALLOW_Type_INVALID,
572                                 "IDS_ST_BODY_LIMIT_BACKGROUND_PROCESSES",
573                                 bgproc,
574                                 SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_NONE);
575
576                 // [UI] Limit background processes
577                 if (ad->bg_processes) {
578                         __BACK_POINTER_SET(ad->bg_processes);
579                         ad->bg_processes->userdata = ad;
580                         ad->bg_processes->int_slp_setting_binded = INT_SLP_SETTING_DEVOPTION_BGPROCESS;
581                 } else {
582                         SETTING_TRACE_ERROR("ad->bg_processes is NULL");
583                         return SETTING_RETURN_FAIL;
584                 }
585
586                 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
587                                                         ELM_GENLIST_ITEM_NONE, NULL, NULL);
588                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
589
590                 // [UI] Diagnostics and Usage
591                 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
592                                          __setting_connectivity_usb_dia_usage_mouse_up_cb,
593                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
594                                          0, DIAGNOSTICS_USAGE_STR,
595                                          NULL, NULL);
596         }
597
598         item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
599                                                             ELM_GENLIST_ITEM_NONE, NULL, NULL);
600         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
601
602         //----------------------------------------------------------------------------------------------
603         /* Registering callback function for VCONFKEY_SETAPPL_USB_MODE_INT */
604         vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL,
605                                                 debug_mode_change_vconf_cb, ad);
606         if(vconf_ret != 0)
607         {
608                 SETTING_TRACE("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
609                 return SETTING_RETURN_FAIL;
610         }
611
612         /* Registering callback function for VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE */
613         vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE,
614                                                 in_mode_change_vconf_cb, ad);
615         if(vconf_ret != 0)
616         {
617                 SETTING_TRACE("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE)\n");
618                 return SETTING_RETURN_FAIL;
619         }
620
621         int val;
622         vconf_ret = vconf_get_int(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE, &val);
623         if (vconf_ret == 0 && val == IN_MODE_CHANGE)
624         {
625                 SETTING_TRACE("ad->blockUI: EINA_TRUE\n");
626                 ad->blockUI = EINA_TRUE;
627         }
628         else    /* val == CHANGE_COMPLETE */
629         {
630                 SETTING_TRACE("ad->blockUI: EINA_FALSE\n");
631                 ad->blockUI = EINA_FALSE;
632         }
633
634         setting_view_connectivity_usb.is_create = 1;
635         setting_view_update(&setting_view_connectivity_usb, ad);
636
637         SETTING_TRACE_END;
638         return SETTING_RETURN_SUCCESS;
639 }
640
641 /**
642  * This callback function is called when USB-setting changes VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE
643  *
644  *@param data
645  */
646 static void in_mode_change_vconf_cb(keynode_t *key, void *data)
647 {
648         SETTING_TRACE_BEGIN;
649         setting_retm_if(NULL == data, "ERROR:The parameter(data) is NULL\n");
650         SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
651         SETTING_TRACE("ad->blockUI: %d\n", ad->blockUI);
652
653         int in_mode_change;
654         int ret = -1;
655
656         ret = vconf_get_int(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE, &in_mode_change);
657         setting_retm_if (ret != 0, "vconf_get_int(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE\n");
658
659         if (CHANGE_COMPLETE == in_mode_change) {
660                 SETTING_TRACE("ad->blockUI: EINA_FALSE\n");
661                 ad->blockUI = EINA_FALSE;
662         } else if (IN_MODE_CHANGE == in_mode_change) {
663                 SETTING_TRACE("ad->blockUI: EINA_TRUE\n");
664                 ad->blockUI = EINA_TRUE;
665         } else {
666                 SETTING_TRACE("Getting in_mode_change failed\n");
667         }
668
669         SETTING_TRACE_END;
670 }
671
672 /**
673  * When VCONFKEY_SETAPPL_USB_MODE_INT is changed, all buttons are enabled
674  *
675  *@param key
676  *@param data
677  */
678 static void debug_mode_change_vconf_cb(keynode_t *key, void *data)
679 {
680         SETTING_TRACE_BEGIN;
681         setting_retm_if (NULL == data, "ERROR:The parameter(data) is NULL\n");
682         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
683
684         int ret = -1;
685         int debugMode = 0;
686
687         ret = vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, &debugMode);
688         setting_retm_if (ret != 0, "ERROR: vconf_get_int(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
689         SETTING_TRACE("debugMode: %d", debugMode);
690
691         if (debugMode == 1) {
692                 setting_update_gl_item_chk_status(ad->debug_mode, EINA_TRUE);
693         } else if (debugMode == 0) {
694                 setting_update_gl_item_chk_status(ad->debug_mode, EINA_FALSE);
695         } else {
696                 SETTING_TRACE("ERROR: debugMode value is improper");
697         }
698
699         /* Unblock setting UI */
700         SETTING_TRACE("ad->blockUI: EINA_FALSE\n");
701         ad->blockUI = EINA_FALSE;
702
703         SETTING_TRACE_END;
704 }
705
706 /**
707  * To destory the view of usb
708  *
709  *@param cb
710  *
711  *@return
712  */
713 static int setting_connectivity_usb_destroy(void *cb)
714 {
715         SETTING_TRACE_BEGIN;
716         /* error check */
717         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
718
719         SettingConnectivityUG *ad = (SettingConnectivityUG *) cb;
720         if (!setting_view_connectivity_usb.is_create)
721                 return SETTING_RETURN_SUCCESS;
722
723         setting_view_connectivity_usb.is_create = 0;
724         int vconf_ret = -1;
725         int num_err = 0;
726
727         /* Removing the popup if the popup is loaded */
728         unload_popup(ad);
729
730         /*if (ad->selectioninfo_popup) {
731                 evas_object_del(ad->selectioninfo_popup);
732                 ad->selectioninfo_popup = NULL;
733         }*/
734
735
736         /* Closing vconf trace */
737         vconf_ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL,
738                                                 debug_mode_change_vconf_cb);
739
740         if (vconf_ret != 0)
741         {
742                 SETTING_TRACE("FAIL: vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
743                 num_err++;
744         }
745
746         vconf_ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE, in_mode_change_vconf_cb);
747
748         if (vconf_ret != 0)
749         {
750                 SETTING_TRACE("FAIL: vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_MODE_INT)\n");
751                 num_err++;
752         }
753
754
755         if (ad->ly_usb != NULL) {
756                 evas_object_del(ad->ly_usb);
757         }
758
759         SETTING_TRACE_END;
760         if (num_err > 0)
761         {
762                 SETTING_TRACE("ERROR: the number of errors to destroy is %d\n", num_err);
763                 return SETTING_RETURN_FAIL;
764         }
765         else
766         {
767                 return SETTING_RETURN_SUCCESS;
768         }
769
770 }
771
772 /**
773  * To update the view of usb
774  *
775  *@param cb
776  *
777  *@return
778  */
779 static int setting_connectivity_usb_update(void *cb)
780 {
781         SETTING_TRACE_BEGIN;
782         /* error check */
783         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
784         SettingConnectivityUG *ad = (SettingConnectivityUG *) cb;
785
786         if (ad->ly_usb != NULL) {
787                 evas_object_show(ad->ly_usb);
788         }
789
790         SETTING_TRACE_END;
791         return SETTING_RETURN_SUCCESS;
792 }
793
794 /**
795  * To cleanup the view of usb
796  *
797  *@param cb
798  *
799  *@return
800  */
801 static int setting_connectivity_usb_cleanup(void *cb)
802 {
803         SETTING_TRACE_BEGIN;
804         SETTING_TRACE_END;
805         return SETTING_RETURN_SUCCESS;
806 }
807
808 /**
809  * Do process when clicking '<-' button
810  *
811  *@param data
812  *@param obj
813  *@param event_info
814  */
815 static void
816 setting_connectivity_usb_click_softkey_cancel_cb(void *data, Evas_Object *obj,
817                                                  void *event_info)
818 {
819         SETTING_TRACE_BEGIN;
820         /* error check */
821         setting_retm_if(data == NULL, "Data parameter is NULL");
822
823         SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
824
825         /* Not to block back(->) button */
826         /* Send destroy request */
827         ug_destroy_me(ad->ug);
828
829         SETTING_TRACE_END;
830 }
831
832 /**
833  * Do process when clicking 'Help' button
834  *
835  *@param data
836  *@param obj
837  *@param event_info
838  */
839 #ifdef HELP_UG_EXIST
840 static void
841 setting_connectivity_usb_click_softkey_set_cb(void *data, Evas_Object *obj,
842                                               void *event_info)
843 {
844         SETTING_TRACE_BEGIN;
845         /* error check */
846         setting_retm_if(data == NULL, "Data parameter is NULL");
847
848         SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
849
850         /* Send destroy request */
851         setting_view_change(&setting_view_connectivity_usb,
852                             &setting_view_connectivity_usb_help, ad);
853         SETTING_TRACE_END;
854 }
855 #endif
856
857
858 /**
859  * Here is for loading popup
860  */
861
862 /**
863  * unload popup
864  */
865 static void unload_popup(void* data)
866 {
867         SETTING_TRACE_BEGIN;
868         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
869
870         //ad->pop
871         if (ad->pop)
872         {
873                 evas_object_del(ad->pop);
874                 ad->pop = NULL;
875         } else {
876                 SETTING_TRACE("ad->pop == NULL\n");
877         }
878
879
880         SETTING_TRACE_END;
881 }
882
883 /**
884  * Callback function to respond pushing cancel button of the usb connection popup
885  */
886 static void debug_mode_resp_cb(void *data, Evas_Object *obj, void *event_info)
887 {
888         SETTING_TRACE_BEGIN;
889         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
890
891         int resp_type = btn_type(obj);
892         if (resp_type == POPUP_RESPONSE_OK) {
893                 /* do nothing */
894                 int ret = vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, 1);
895                 if (ret != 0) {
896                         SETTING_TRACE("FAIL: vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
897                         return;
898                 }
899
900                 setting_create_select_info_popup(&ad->selectioninfo_popup, ad->view_layout, 3.0,
901                                         _(CONNECTTIVITY_SELECT_INFO_POPUP_STR), "center_text");
902         }
903         else if (resp_type == POPUP_RESPONSE_CANCEL) {
904                 /* rollback */
905                 //setting_update_gl_item_chk_status(ad->debug_mode, 0);
906                 if (ad->debug_mode)
907                 {
908                         ad->debug_mode->chk_status = 0;
909                         elm_genlist_item_fields_update(ad->debug_mode->item, "*", ELM_GENLIST_ITEM_FIELD_CONTENT);
910                 }
911         }
912
913         unload_popup(ad);
914         SETTING_TRACE_END;
915 }
916
917 /**
918  * When a button on USB utilities is pushed,
919  * this function makes a popup if USB cable is not connected
920  */
921 void load_usb_connection_popup(void* data)
922 {
923         SETTING_TRACE_BEGIN;
924         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
925
926         unload_popup(ad);
927         ad->pop = setting_create_popup_with_label_and_reverse_btn( ad,
928                                         ad->win_get,
929                                         NULL,
930                                         _(DEBUG_MODE_POPUP_TEXT),
931                                         debug_mode_resp_cb,
932                                         0, 2,
933                                         _("IDS_COM_SK_CANCEL"), _("IDS_ST_BUTTON_ENABLE") );
934
935         if (!(ad->pop)) SETTING_TRACE("FAIL: setting_create_popup_with_btn()");
936
937         SETTING_TRACE_END;
938 }