tizen 2.3.1 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                 return _(bgprocess_list[0]);            /* error proc */
391         }
392 }
393
394 /**
395  * To create the usb main view
396  *
397  *@param cb
398  *
399  *@return
400  */
401 static int setting_connectivity_usb_create(void *cb)
402 {
403         SETTING_TRACE_BEGIN;
404         SETTING_TRACE("Start USB utilities\n");
405         /* error check */
406         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
407
408         SettingConnectivityUG *ad = (SettingConnectivityUG *) cb;
409         Evas_Object *scroller = NULL;
410
411         int vconf_ret = -1;
412         int err = -1;
413
414         Evas_Object *view_layout = elm_layout_add(ad->win_main_layout);
415         elm_layout_file_set(view_layout, SETTING_THEME_EDJ_NAME, "selinfo_bottom");
416         evas_object_size_hint_weight_set(view_layout, EVAS_HINT_EXPAND, 0.0);
417         ad->view_layout = view_layout;
418
419         /* win_main of the popup */
420 #ifdef HELP_UG_EXIST
421         ad->ly_usb =
422             setting_create_layout_navi_bar_genlist(ad->win_main_layout,
423                                                    ad->win_get,
424                                                    KeyStr_DeveloperOption,
425                                                    dgettext("sys_string", "IDS_COM_BODY_BACK"),
426                                                    _("IDS_COM_BODY_HELP"),
427                                                    setting_connectivity_usb_click_softkey_cancel_cb,
428                                                    setting_connectivity_usb_click_softkey_set_cb,
429                                                    ad, &scroller,
430                                                    &ad->navi_bar);
431 #else
432         ad->ly_usb =
433             setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
434                                            KeyStr_DeveloperOption,
435                                            _("IDS_COM_BODY_BACK"), NULL, NULL,
436                                            setting_connectivity_usb_click_softkey_cancel_cb,
437                                            NULL, NULL, ad, view_layout,
438                                            &ad->navi_bar, NULL);
439 #endif
440
441         SETTING_TRACE("before init\n");
442
443         scroller = elm_genlist_add(ad->win_main_layout);
444         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
445                  "Cannot set scroller object  as contento of layout");
446         elm_genlist_realization_mode_set(scroller, EINA_TRUE);
447         elm_object_style_set(scroller, "dialogue");
448         elm_genlist_clear(scroller);    /* first to clear list */
449         evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
450
451         elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
452
453         /*button[SETTING_USB_DEBUG_MODE].item = NULL; */
454         /*button[SETTING_USB_DEBUG_MODE].pstate = STATE_NONE; */
455         setting_enable_expandable_genlist(scroller, ad, __setting_devoptions_main_exp_cb, NULL);
456
457         Elm_Object_Item *item = NULL;;
458 #if 1
459         /* [UI] separator */
460         item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
461                                        ELM_GENLIST_ITEM_NONE, NULL, NULL);
462         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
463
464         /* [UI] USB debugging */
465         int vconf_val;
466         int toggle_dbg = 0;
467
468         err = vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, &toggle_dbg);
469         if (err != 0) {
470                 SETTING_TRACE_ERROR("FAIL: vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
471                 /* set debug mode to true to find the problem*/
472                 toggle_dbg = 1;
473         }
474         SETTING_TRACE("toggle_dbg: %d", toggle_dbg);
475
476         ad->debug_mode =
477             setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
478                                              setting_connectivity_usb_mouse_up_Gendial_list_cb,
479                                              ad, SWALLOW_Type_1ICON_1RADIO, NULL,
480                                              NULL, toggle_dbg, "IDS_ST_BODY_USB_DEBUGGING",
481                                              NULL, setting_connectivity_main_chk_usb_debug_cb);
482
483         if (ad->debug_mode) {
484                 ad->debug_mode->userdata = ad;
485                 __BACK_POINTER_SET(ad->debug_mode);
486                 /*button[SETTING_USB_DEBUG_MODE].item = ad->debug_mode->item; */
487         } else {
488                 SETTING_TRACE_ERROR("ad->debug_mode is NULL");
489                 return SETTING_RETURN_FAIL;
490         }
491
492         ADD_GL_HELP(scroller, SETTING_USB_DEBUGGING_DESC);
493 #endif
494
495         SETTING_TRACE("Second item of Second group is set\n");
496
497
498         if (!isEmulBin()) {
499                 /* [UI] Show CPU Usage */
500                 bool running_flag = FALSE;
501                 int ret = app_manager_is_running(SETTING_CPU_USAGE_PKG_NAME, &running_flag);
502                 setting_retvm_if(ret != 0, SETTING_RETURN_FAIL, "fail to call app_manager_is_running");
503                 if (running_flag) {
504                         vconf_val = 1;
505                 } else {
506                         vconf_val = 0;
507                 }
508
509                 ad->cpu_usage =
510                     setting_create_Gendial_field_def(scroller, &itc_1text_1icon,
511                                                      setting_connectivity_usb_mouse_up_Gendial_CPU_usage_cb,
512                                                      ad, SWALLOW_Type_1ICON_1RADIO, NULL,
513                                                      NULL, vconf_val, "IDS_ST_MBODY_SHOW_CPU_USAGE",
514                                                      NULL, setting_connectivity_main_chk_btn_cb);
515                 if (ad->cpu_usage) {
516                         ad->cpu_usage->userdata = ad;
517                         __BACK_POINTER_SET(ad->cpu_usage);
518                         /*setting_disable_genlist_item(ad->cpu_usage->item); */
519                 } else {
520                         SETTING_TRACE_ERROR("ad->cpu_usage is NULL");
521                         return SETTING_RETURN_FAIL;
522                 }
523
524                 /* [UI] help text */
525                 ADD_GL_HELP(scroller, "IDS_ST_BODY_SCREEN_OVERLAY_SHOWING_CURRENT_CPU_USAGE_ABB");
526
527                 /* Get GPU Rendering state */
528                 const char *engine_str = NULL;
529                 engine_str = elm_config_engine_get();
530                 char *render_engine = NULL;
531                 if (engine_str) {
532                         SETTING_TRACE("engine_str is %s", engine_str);
533                         if (0 == safeStrCmp(engine_str, "opengl_x11")) {
534                                 render_engine = HARDWARE_STR;
535                         } else if (0 == safeStrCmp(engine_str, "software_x11")) {
536                                 render_engine = SOFTWARE_STR;
537                         } else {
538                                 SETTING_TRACE_ERROR("engine_str is wrong");
539                         }
540                 } else {
541                         SETTING_TRACE_ERROR("engine_str is NULL");
542                 }
543
544                 /* [UI] Force GPU rendering */
545                 ad->gpu_render = setting_create_Gendial_exp_parent_field(scroller,
546                                                                          &(ad->itc_2text_3_parent),
547                                                                          NULL, NULL, SWALLOW_Type_INVALID,
548                                                                          DEFAULT_RENDERING_ENGINE_STR, _(render_engine),
549                                                                          SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_NONE);
550                 if (ad->gpu_render) {
551                         __BACK_POINTER_SET(ad->gpu_render);
552                         ad->gpu_render->userdata = ad;
553                         /*setting_disable_genlist_item(ad->gpu_render->item); */
554                 } else {
555                         SETTING_TRACE_ERROR("ad->gpu_render is NULL");
556                         return SETTING_RETURN_FAIL;
557                 }
558
559                 /* [UI] help text */
560                 ADD_GL_HELP(scroller, "IDS_ST_POP_USE_2D_HARDWARE_OR_SOFTWARE_ACCELERATION_IN_APPLICATIONS");
561
562                 /* NEWCODE: */
563
564                 /* [UI] expandble list - Automatic answering */
565                 char *bgproc = get_bg_processes();
566                 ad->bg_processes =
567                     setting_create_Gendial_exp_parent_field(scroller,
568                                                             &(ad->itc_2text_3_parent),
569                                                             NULL, NULL,
570                                                             SWALLOW_Type_INVALID,
571                                                             "IDS_ST_BODY_LIMIT_BACKGROUND_PROCESSES",
572                                                             bgproc,
573                                                             SETTING_GROUP_STYLE_TOP, SETTING_GROUP_STYLE_NONE);
574
575                 /* [UI] Limit background processes */
576                 if (ad->bg_processes) {
577                         __BACK_POINTER_SET(ad->bg_processes);
578                         ad->bg_processes->userdata = ad;
579                         ad->bg_processes->int_slp_setting_binded = INT_SLP_SETTING_DEVOPTION_BGPROCESS;
580                 } else {
581                         SETTING_TRACE_ERROR("ad->bg_processes is NULL");
582                         return SETTING_RETURN_FAIL;
583                 }
584
585                 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
586                                                ELM_GENLIST_ITEM_NONE, NULL, NULL);
587                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
588
589                 /* [UI] Diagnostics and Usage */
590                 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
591                                                  __setting_connectivity_usb_dia_usage_mouse_up_cb,
592                                                  ad, SWALLOW_Type_INVALID, NULL, NULL,
593                                                  0, DIAGNOSTICS_USAGE_STR,
594                                                  NULL, NULL);
595         }
596
597         item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
598                                        ELM_GENLIST_ITEM_NONE, NULL, NULL);
599         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
600
601         /*---------------------------------------------------------------------------------------------- */
602         /* Registering callback function for VCONFKEY_SETAPPL_USB_MODE_INT */
603         vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL,
604                                              debug_mode_change_vconf_cb, ad);
605         if (vconf_ret != 0) {
606                 SETTING_TRACE("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
607                 return SETTING_RETURN_FAIL;
608         }
609
610         /* Registering callback function for VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE */
611         vconf_ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE,
612                                              in_mode_change_vconf_cb, ad);
613         if (vconf_ret != 0) {
614                 SETTING_TRACE("FAIL: vconf_notify_key_changed(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE)\n");
615                 return SETTING_RETURN_FAIL;
616         }
617
618         int val;
619         vconf_ret = vconf_get_int(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE, &val);
620         if (vconf_ret == 0 && val == IN_MODE_CHANGE) {
621                 SETTING_TRACE("ad->blockUI: EINA_TRUE\n");
622                 ad->blockUI = EINA_TRUE;
623         } else {        /* val == CHANGE_COMPLETE */
624                 SETTING_TRACE("ad->blockUI: EINA_FALSE\n");
625                 ad->blockUI = EINA_FALSE;
626         }
627
628         setting_view_connectivity_usb.is_create = 1;
629         setting_view_update(&setting_view_connectivity_usb, ad);
630
631         SETTING_TRACE_END;
632         return SETTING_RETURN_SUCCESS;
633 }
634
635 /**
636  * This callback function is called when USB-setting changes VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE
637  *
638  *@param data
639  */
640 static void in_mode_change_vconf_cb(keynode_t *key, void *data)
641 {
642         SETTING_TRACE_BEGIN;
643         setting_retm_if(NULL == data, "ERROR:The parameter(data) is NULL\n");
644         SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
645         SETTING_TRACE("ad->blockUI: %d\n", ad->blockUI);
646
647         int in_mode_change;
648         int ret = -1;
649
650         ret = vconf_get_int(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE, &in_mode_change);
651         setting_retm_if(ret != 0, "vconf_get_int(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE\n");
652
653         if (CHANGE_COMPLETE == in_mode_change) {
654                 SETTING_TRACE("ad->blockUI: EINA_FALSE\n");
655                 ad->blockUI = EINA_FALSE;
656         } else if (IN_MODE_CHANGE == in_mode_change) {
657                 SETTING_TRACE("ad->blockUI: EINA_TRUE\n");
658                 ad->blockUI = EINA_TRUE;
659         } else {
660                 SETTING_TRACE("Getting in_mode_change failed\n");
661         }
662
663         SETTING_TRACE_END;
664 }
665
666 /**
667  * When VCONFKEY_SETAPPL_USB_MODE_INT is changed, all buttons are enabled
668  *
669  *@param key
670  *@param data
671  */
672 static void debug_mode_change_vconf_cb(keynode_t *key, void *data)
673 {
674         SETTING_TRACE_BEGIN;
675         setting_retm_if(NULL == data, "ERROR:The parameter(data) is NULL\n");
676         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
677
678         int ret = -1;
679         int debugMode = 0;
680
681         ret = vconf_get_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, &debugMode);
682         setting_retm_if(ret != 0, "ERROR: vconf_get_int(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
683         SETTING_TRACE("debugMode: %d", debugMode);
684
685         if (debugMode == 1) {
686                 setting_update_gl_item_chk_status(ad->debug_mode, EINA_TRUE);
687         } else if (debugMode == 0) {
688                 setting_update_gl_item_chk_status(ad->debug_mode, EINA_FALSE);
689         } else {
690                 SETTING_TRACE("ERROR: debugMode value is improper");
691         }
692
693         /* Unblock setting UI */
694         SETTING_TRACE("ad->blockUI: EINA_FALSE\n");
695         ad->blockUI = EINA_FALSE;
696
697         SETTING_TRACE_END;
698 }
699
700 /**
701  * To destory the view of usb
702  *
703  *@param cb
704  *
705  *@return
706  */
707 static int setting_connectivity_usb_destroy(void *cb)
708 {
709         SETTING_TRACE_BEGIN;
710         /* error check */
711         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
712
713         SettingConnectivityUG *ad = (SettingConnectivityUG *) cb;
714         if (!setting_view_connectivity_usb.is_create)
715                 return SETTING_RETURN_SUCCESS;
716
717         setting_view_connectivity_usb.is_create = 0;
718         int vconf_ret = -1;
719         int num_err = 0;
720
721         /* Removing the popup if the popup is loaded */
722         unload_popup(ad);
723
724         /*if (ad->selectioninfo_popup) {
725                 evas_object_del(ad->selectioninfo_popup);
726                 ad->selectioninfo_popup = NULL;
727         }*/
728
729
730         /* Closing vconf trace */
731         vconf_ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL,
732                                              debug_mode_change_vconf_cb);
733
734         if (vconf_ret != 0) {
735                 SETTING_TRACE("FAIL: vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
736                 num_err++;
737         }
738
739         vconf_ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_IN_MODE_CHANGE, in_mode_change_vconf_cb);
740
741         if (vconf_ret != 0) {
742                 SETTING_TRACE("FAIL: vconf_ignore_key_changed(VCONFKEY_SETAPPL_USB_MODE_INT)\n");
743                 num_err++;
744         }
745
746
747         if (ad->ly_usb != NULL) {
748                 evas_object_del(ad->ly_usb);
749         }
750
751         SETTING_TRACE_END;
752         if (num_err > 0) {
753                 SETTING_TRACE("ERROR: the number of errors to destroy is %d\n", num_err);
754                 return SETTING_RETURN_FAIL;
755         } else {
756                 return SETTING_RETURN_SUCCESS;
757         }
758
759 }
760
761 /**
762  * To update the view of usb
763  *
764  *@param cb
765  *
766  *@return
767  */
768 static int setting_connectivity_usb_update(void *cb)
769 {
770         SETTING_TRACE_BEGIN;
771         /* error check */
772         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
773         SettingConnectivityUG *ad = (SettingConnectivityUG *) cb;
774
775         if (ad->ly_usb != NULL) {
776                 evas_object_show(ad->ly_usb);
777         }
778
779         SETTING_TRACE_END;
780         return SETTING_RETURN_SUCCESS;
781 }
782
783 /**
784  * To cleanup the view of usb
785  *
786  *@param cb
787  *
788  *@return
789  */
790 static int setting_connectivity_usb_cleanup(void *cb)
791 {
792         SETTING_TRACE_BEGIN;
793         SETTING_TRACE_END;
794         return SETTING_RETURN_SUCCESS;
795 }
796
797 /**
798  * Do process when clicking '<-' button
799  *
800  *@param data
801  *@param obj
802  *@param event_info
803  */
804 static void
805 setting_connectivity_usb_click_softkey_cancel_cb(void *data, Evas_Object *obj,
806                                                  void *event_info)
807 {
808         SETTING_TRACE_BEGIN;
809         /* error check */
810         setting_retm_if(data == NULL, "Data parameter is NULL");
811
812         SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
813
814         /* Not to block back(->) button */
815         /* Send destroy request */
816         ug_destroy_me(ad->ug);
817
818         SETTING_TRACE_END;
819 }
820
821 /**
822  * Do process when clicking 'Help' button
823  *
824  *@param data
825  *@param obj
826  *@param event_info
827  */
828 #ifdef HELP_UG_EXIST
829 static void
830 setting_connectivity_usb_click_softkey_set_cb(void *data, Evas_Object *obj,
831                                               void *event_info)
832 {
833         SETTING_TRACE_BEGIN;
834         /* error check */
835         setting_retm_if(data == NULL, "Data parameter is NULL");
836
837         SettingConnectivityUG *ad = (SettingConnectivityUG *) data;
838
839         /* Send destroy request */
840         setting_view_change(&setting_view_connectivity_usb,
841                             &setting_view_connectivity_usb_help, ad);
842         SETTING_TRACE_END;
843 }
844 #endif
845
846
847 /**
848  * Here is for loading popup
849  */
850
851 /**
852  * unload popup
853  */
854 static void unload_popup(void *data)
855 {
856         SETTING_TRACE_BEGIN;
857         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
858
859         /*ad->pop */
860         if (ad->pop) {
861                 evas_object_del(ad->pop);
862                 ad->pop = NULL;
863         } else {
864                 SETTING_TRACE("ad->pop == NULL\n");
865         }
866
867
868         SETTING_TRACE_END;
869 }
870
871 /**
872  * Callback function to respond pushing cancel button of the usb connection popup
873  */
874 static void debug_mode_resp_cb(void *data, Evas_Object *obj, void *event_info)
875 {
876         SETTING_TRACE_BEGIN;
877         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
878
879         int resp_type = btn_type(obj);
880         if (resp_type == POPUP_RESPONSE_OK) {
881                 /* do nothing */
882                 int ret = vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL, 1);
883                 if (ret != 0) {
884                         SETTING_TRACE("FAIL: vconf_set_bool(VCONFKEY_SETAPPL_USB_DEBUG_MODE_BOOL)");
885                         return;
886                 }
887
888                 setting_create_select_info_popup(&ad->selectioninfo_popup, ad->view_layout, 3.0,
889                                                  _(CONNECTTIVITY_SELECT_INFO_POPUP_STR), "center_text");
890         } else if (resp_type == POPUP_RESPONSE_CANCEL) {
891                 /* rollback */
892                 /*setting_update_gl_item_chk_status(ad->debug_mode, 0); */
893                 if (ad->debug_mode) {
894                         ad->debug_mode->chk_status = 0;
895                         elm_genlist_item_fields_update(ad->debug_mode->item, "*", ELM_GENLIST_ITEM_FIELD_CONTENT);
896                 }
897         }
898
899         unload_popup(ad);
900         SETTING_TRACE_END;
901 }
902
903 /**
904  * When a button on USB utilities is pushed,
905  * this function makes a popup if USB cable is not connected
906  */
907 void load_usb_connection_popup(void *data)
908 {
909         SETTING_TRACE_BEGIN;
910         SettingConnectivityUG *ad = (SettingConnectivityUG *)data;
911
912         unload_popup(ad);
913         ad->pop = setting_create_popup_with_label_and_reverse_btn(ad,
914                                                                   ad->win_get,
915                                                                   NULL,
916                                                                   _(DEBUG_MODE_POPUP_TEXT),
917                                                                   debug_mode_resp_cb,
918                                                                   0, 2,
919                                                                   _("IDS_COM_SK_CANCEL"), _("IDS_ST_BUTTON_ENABLE"));
920
921         if (!(ad->pop)) SETTING_TRACE("FAIL: setting_create_popup_with_btn()");
922
923         SETTING_TRACE_END;
924 }