c5d3ba6c5242434d45b56a3707aaeaf99ebc39f9
[apps/core/preloaded/settings.git] / setting-about / src / setting-about-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 #include <setting-cfg.h>
22 #include <setting-about-main.h>
23 #include <aul.h>
24 #include <sys/types.h>
25 #include <sys/stat.h>
26 #include <fcntl.h>
27 //#include <bluetooth-api.h>
28
29 #include <bluetooth.h>
30
31
32 #include <app_manager.h>
33 #include <system_info.h>
34
35 #define DEVNAME_BLOCK_SPACE     0
36 // #define SUPPORT_DIAG_USAGE
37
38 /** @todo : need to handle unicode encoded input characters */
39
40 #define MAX_DEVICE_NAME_LEN                     24
41 #define EMPTY_LIMITATION_STR            "IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
42 #define DIAGNOSTICS_USAGE_STR       "Diagnostics and Usage"
43 #define SOFTWARE_UPDATE_STR                     "IDS_ST_MBODY_SOFTWARE_UPDATE"
44
45
46 static int setting_about_main_create(void *cb);
47 static int setting_about_main_destroy(void *cb);
48 static int setting_about_main_update(void *cb);
49 static int setting_about_main_cleanup(void *cb);
50
51 setting_view setting_view_about_main = {
52         .create = setting_about_main_create,
53         .destroy = setting_about_main_destroy,
54         .update = setting_about_main_update,
55         .cleanup = setting_about_main_cleanup,
56 };
57 /**
58 * Do process when clicking '<-' button
59 *
60 * @param data
61 * @param obj
62 * @param event_info
63 */
64 static void setting_about_main_click_softkey_back_cb(void *data,
65                                                      Evas_Object *obj,
66                                                      void *event_info);
67
68 /**
69 * Do process when clicking on some genlist item
70 *
71 * @param data
72 * @param obj
73 * @param event_info
74 */
75 static void setting_about_main_mouse_up_Gendial_list_cb(void *data,
76                                                         Evas_Object *obj,
77                                                         void *event_info);
78
79 static void __setting_about_main_certificates_clicked(void *data);
80 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj);
81 static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj);
82 /* ***************************************************
83  *
84  *basic func
85  *
86  ***************************************************/
87 static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
88 {
89         SettingAboutUG *ad = data;
90         if (obj) {
91                 evas_object_del(obj);
92                 obj = NULL;
93         }
94         ad->popup = NULL;
95 }
96 static void __device_name_changed_cb(void *data, Evas_Object *obj)
97 {
98         retm_if(!data || !obj, "Data parameter is NULL");
99         //return if entry is not focused too
100
101         Setting_GenGroupItem_Data *list_item =
102             (Setting_GenGroupItem_Data *) data;
103         SettingAboutUG *ad = list_item->userdata;
104         retm_if(ad == NULL, "Data parameter is NULL");
105
106         const char *entry_str = elm_entry_entry_get(obj);
107         int entry_len = safeStrLen(entry_str);
108         SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
109
110 #if DEVNAME_BLOCK_SPACE
111         //block 'Space' key
112         if (entry_len > 0 && NULL != strstr(entry_str, " ")) {//cancel the effect of input 'space character'
113                 SETTING_TRACE("Cannot input the 'space' key or 'enter' key");
114
115                 int i = 0;
116                 int j = 0;
117                 char *tmp = (char *)g_strdup(entry_str);
118                 for (; tmp[i];) {
119                         if (tmp[i] == ' ') {
120                                 for (j = i; tmp[j]; j++) {
121                                         tmp[j] = tmp[j + 1];
122                                 }
123                         } else {
124                                 i++;
125                         }
126                 }
127                 G_FREE(list_item->sub_desc);
128                 list_item->sub_desc = (char *)g_strdup(tmp);
129                 G_FREE(tmp);
130                 SETTING_TRACE("sub_desc:[%s]", list_item->sub_desc);
131
132                 elm_entry_entry_set(obj, list_item->sub_desc);
133                 elm_entry_cursor_end_set(obj);
134         }
135 #endif
136         //for genlist update
137         G_FREE(list_item->sub_desc);//release first
138         list_item->sub_desc = (char *)g_strdup(entry_str);
139
140         if (NULL == entry_str || 0 == entry_len) {
141                 if (!ad->empty_flag)
142                 {
143                         ad->empty_flag = TRUE;
144                         //elm_entry_context_menu_disabled_set(obj, TRUE); //disable the copy&paste&search popup
145                         //elm_entry_magnifier_disabled_set(obj, TRUE);
146                         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
147                         if (navi_it)
148                         {
149                                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
150                                 setting_disable_evas_object(back_btn);
151                                 setting_dim_evas_object(back_btn, TRUE);
152
153                                 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
154                                 if(top_r_btn)
155                                 {
156                                         setting_disable_evas_object(top_r_btn);
157                                         setting_dim_evas_object(top_r_btn, TRUE);
158                                 }
159                         }
160                 }
161         } else {
162                 if (ad->empty_flag)
163                 {
164                         ad->empty_flag = FALSE;
165                         //elm_entry_context_menu_disabled_set(obj, FALSE); //enable the copy&paste&search popup
166                         //elm_entry_magnifier_disabled_set(obj, FALSE);
167                         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
168                         if (navi_it)
169                         {
170                                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
171                                 setting_enable_evas_object(back_btn);
172                                 setting_undo_dim_evas_object(back_btn, TRUE);
173
174                                 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
175                                 if(top_r_btn)
176                                 {
177                                         setting_enable_evas_object(top_r_btn);
178                                         setting_undo_dim_evas_object(top_r_btn, TRUE);
179                                 }
180                         }
181                 }
182         }
183
184 }
185
186 static void
187 __setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
188                                        void *event_info)
189 {
190         __device_name_changed_cb(data, obj);
191 }
192
193
194 /**
195  *      Model Name:
196  *              - No ini: Unavailable
197  *              - I9500 @ target: GT-I9500
198  *              - I9500 @ emul: SDK
199  *              - SLP   @ target: GT-SLP
200  *              - SLP   @ emul: SDK
201  */
202 void setting_about_main_get_phone_model_name(char* szStr, int nSize)
203 {
204         retm_if(szStr == NULL, "szStr parameter is NULL");
205
206         char *value = NULL;
207         int ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value);
208         SETTING_TRACE("value : %s", value);
209         if (ret != SYSTEM_INFO_ERROR_NONE) {
210                 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
211                 FREE(value);
212                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
213                 return;
214         }
215
216         if (value) {
217                 snprintf(szStr, nSize, "%s", value);
218         } else {
219                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
220         }
221
222         FREE(value);
223 }
224
225 void setting_about_main_get_sw_version(char* szStr, int nSize)
226 {
227         retm_if(szStr == NULL, "szStr parameter is NULL");
228
229         // ex) TIZEN
230         char *platform = NULL;
231         int ret = system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &platform);
232         if (ret != SYSTEM_INFO_ERROR_NONE) {
233                 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
234                 FREE(platform);
235                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
236                 return;
237         }
238
239         // ex) 2.0.0b
240         char *version = NULL;
241         ret = system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &version);
242         if (ret != SYSTEM_INFO_ERROR_NONE) {
243                 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
244
245                 FREE(platform);
246                 FREE(version);
247
248                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
249                 return;
250         }
251         snprintf(szStr, nSize, "%s %s", platform, version);
252
253         FREE(platform);
254         FREE(version);
255 }
256
257 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
258 {
259         setting_retm_if(str == NULL, "str parameter is NULL");
260         setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN+1, "size parameter is wrong");
261
262         FILE *p = fopen(SETTING_ABOUT_MACINFO_PATH, "r");
263
264         if (p) {
265                 int size = fread(str, sizeof(char), SETTING_ABOUT_WIFI_MAC_STR_LEN, p);
266                 if (size != SETTING_ABOUT_WIFI_MAC_STR_LEN) {
267                         SETTING_TRACE_ERROR("fail to call fread");
268                 }
269                 fclose(p);
270                 p = NULL;
271         } else {
272                 perror("open failed!");
273         }
274
275         SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
276
277         int wifi_state = VCONFKEY_WIFI_OFF;
278         vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
279
280         if((safeStrLen(str) == 0) || (wifi_state == VCONFKEY_WIFI_OFF))
281                 snprintf(str, size, "%s  (%s)", _("IDS_ST_HEADER_UNAVAILABLE"), _(SETTING_ABOUT_NEVER_TURN_WIFI_ON_STR));
282 }
283
284 void setting_about_main_get_battery_string(char *str, int size)
285 {
286         setting_retm_if(str == NULL, "str parameter is NULL");
287
288         int bat_level = -1;
289
290         /* Read battery level from vconf, as system-server sets that key using a 
291           device-specific plugin. Reading directly from /sys fails on different
292           devices */
293         if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &bat_level) == 0) {
294                 snprintf(str, size, "%d%s", bat_level, "\%");
295         }
296         else {
297                 SETTING_TRACE_ERROR("Reading VCONFKEY_SYSMAN_BATTERY_CAPACITY failed.");
298                 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
299         }
300 }
301
302 void setting_about_main_get_bluetooth_address_string(char *str, int size)
303 {
304         setting_retm_if(str == NULL, "str parameter is NULL");
305
306         int ret = 0;
307
308         ret = bt_initialize();
309         setting_retm_if(ret != 0, "bluetooth initialization failed");
310
311         char *local_address = NULL;
312         ret = bt_adapter_get_address(&local_address);
313
314         bt_deinitialize();
315
316         if (ret < 0) {
317                 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
318                 SETTING_TRACE_DEBUG("bt address : %s", str);
319         } else {
320                 SETTING_TRACE_DEBUG("bt address : %s", local_address);
321                 snprintf(str, size, "%s", local_address);
322         }
323
324         if (local_address) {
325                 free(local_address);
326         }
327 }
328
329 int __stat_get_cpuinfo(float *usr_pct, float *sys_pct)
330 {
331         setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
332         setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
333
334         /*  default value */
335         *usr_pct = 0.0;
336         *sys_pct = 0.0;
337         static unsigned long long usr_time = 0, nice_time = 0, sys_time = 0;
338         static unsigned long long old_usr = 0, old_nice = 0, old_sys = 0;
339         static struct timeval old_tv, cur_tv;
340         unsigned long long elapsed_tick;
341         long tick_per_sec;
342         long cpu_num;
343         FILE *fp = NULL;
344         int ret = 0;
345
346         tick_per_sec = sysconf(_SC_CLK_TCK);
347         cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
348
349         if (cpu_num < 1)
350                 cpu_num = 1;
351
352         gettimeofday(&cur_tv, NULL);
353         fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
354         if (fp == NULL) {
355                 SETTING_TRACE_ERROR("fp == NULL");
356                 return -ENOENT;
357         }
358
359         char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
360         char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
361
362                 if(cpu_info_p == NULL) {
363                         SETTING_TRACE_ERROR("fgets failed");
364                         fclose(fp);   // free - code
365                         return -ENOENT;
366                 }
367
368         char *substr = NULL;
369         unsigned long long tmp_long = 0;
370         int i = 0;
371         /* split cpu_info, get 3 numbers headmost*/
372         while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
373                 char* endptr = NULL;
374                 tmp_long = strtoull(substr, &endptr, 10);
375                 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
376                         switch (i) {
377                         case 0:
378                                 usr_time = tmp_long;
379                                 break;
380                         case 1:
381                                 nice_time = tmp_long;
382                                 break;
383                         case 2:
384                                 sys_time = tmp_long;
385                                 break;
386                         default:
387                                 break;
388                         }
389                         i++;
390                 }
391                 if (i >= 3) {
392                         break;
393                 }
394         }
395
396         fclose(fp);
397         fp = NULL;
398         if (old_usr == 0) {
399                 ret = -EAGAIN;
400                 SETTING_TRACE_ERROR("old_usr == 0");
401                 goto out;
402         }
403
404         elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
405             ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
406
407         /* REMOVE BS */
408         if (elapsed_tick != 0)
409                 *usr_pct =
410                     ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
411                     cpu_num;
412         else
413                 *usr_pct = 0;
414         /* REMOVE BS */
415         if (elapsed_tick != 0)
416                 *sys_pct =
417                     ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
418                     cpu_num;
419         else
420                 *sys_pct = 0;
421
422  out:
423         old_usr = usr_time;
424         old_nice = nice_time;
425         old_sys = sys_time;
426         old_tv = cur_tv;
427
428         return ret;
429 }
430
431 static Eina_Bool __timer_update_cb(const void *data)
432 {
433         retv_if(data == NULL, TRUE);
434         SettingAboutUG *ad = (SettingAboutUG *) data;
435
436         char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
437         if (ad->item_data_cpu) {
438                 float usr, sys;
439                 int ret = __stat_get_cpuinfo(&usr, &sys);
440                 if (ret == -ENOENT) {
441                         SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
442                         snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
443                 } else {
444                         snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
445                 }
446
447                 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
448                 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
449                 elm_genlist_item_update(ad->item_data_cpu->item);
450         }
451
452         if (ad->item_data_battery) {
453                 setting_about_main_get_battery_string(str, sizeof(str));
454                 /*SETTING_TRACE("str:%s", str);*/
455                 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
456                 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
457                 elm_genlist_item_update(ad->item_data_battery->item);
458         }
459         return TRUE;
460 }
461
462 static void
463 __about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
464 {
465         ret_if(!data);
466         SettingAboutUG *ad = (SettingAboutUG *) data;
467         retm_if(event == NULL, "Invalid argument: event info is NULL");
468         Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
469
470         if (ad->item_dev_name) {
471                 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
472                 if (ad->item_dev_name->item == selected_item)//do nothing..
473                         return;
474
475                 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);//to make inputing words input
476         }
477 }
478
479 static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
480 {
481         SETTING_TRACE_BEGIN;
482         retm_if(!data || !obj, "Data parameter is NULL");
483
484         Evas_Object *entry_container = elm_object_parent_widget_get(obj);
485         if (entry_container) {
486                 //whe entry unfocused, its guidetext will becomes "Input here"
487                 elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
488                 if (elm_entry_is_empty(obj))
489                         elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
490                 elm_object_signal_emit(entry_container, "elm,state,eraser,hide", "elm");
491         }
492
493         //Setting_GenGroupItem_Data *list_item = data;
494         const char *entry_str = elm_entry_entry_get(obj);
495         char *entry_str_utf8 = NULL;
496         entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
497         //int len = safeStrLen(entry_str_utf8);
498         SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
499
500         //ecore_idler_add(__check_on_idler, ad);
501         Setting_GenGroupItem_Data *item_dev_name = data;
502         SettingAboutUG *ad = item_dev_name->userdata;
503         __device_name_changed_cb(item_dev_name, item_dev_name->eo_check);
504 #if 0
505         //after unfocus,need updating..
506         elm_object_item_data_set(item_dev_name->item, item_dev_name);
507         elm_genlist_item_update(item_dev_name->item);
508 #endif
509
510         if(ad->navi_item
511            && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
512                 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
513                 evas_object_del(btn);
514         }
515         setting_hide_input_pannel_cb(item_dev_name->eo_check);
516         if (item_dev_name) {
517                 if (ad->empty_flag) {
518                         if (ad->popup) {
519                                 evas_object_del(ad->popup);
520                                 ad->popup = NULL;
521                         }
522                         ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
523                                              __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
524                         return;
525                 } else {
526                 }
527         }
528
529
530         if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
531                 SETTING_TRACE_ERROR("Set vconf[%s] failed",
532                                     VCONFKEY_SETAPPL_DEVICE_NAME_STR);
533         }
534
535         FREE(entry_str_utf8);
536
537 }
538
539 static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
540 {
541         ret_if(data == NULL);
542         SettingAboutUG *ad = (SettingAboutUG*)data;
543         Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
544         SETTING_TRACE_DEBUG("ev->key : %s", ev->key);
545         if(safeStrCmp(ev->key, "KP_Enter") == 0 //it is for Japanese keyboard to fix N_SE-10719
546            || safeStrCmp(ev->key, "Return") == 0)
547         {
548                 // if entry has 1 char at list, hide ime.
549                 if(safeStrLen(elm_entry_entry_get(obj)) == 0)
550                 {
551                         if (ad->popup) {
552                                 evas_object_del(ad->popup);
553                                 ad->popup = NULL;
554                         }
555                         ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
556                                              __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
557                 }
558         }
559 }
560
561 int setting_about_generate_genlist(void *data)
562 {
563         SETTING_TRACE_BEGIN;
564         /* error check */
565         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
566
567         SettingAboutUG *ad = (SettingAboutUG *) data;
568         bool is_emul_bin = isEmulBin();
569
570         Evas_Object *scroller = ad->genlsit;
571         Elm_Object_Item *item = NULL;
572         Setting_GenGroupItem_Data *item_data = NULL;
573         char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
574         (void)setting_create_Gendial_field_titleItem(scroller,
575                                                      &(ad->itc_group_item),
576                                                      SETTING_ABOUT_DEVICE_INFO_STR, NULL);
577         /* Device name */
578         char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
579         char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
580         FREE(name_value);
581
582         ad->empty_flag = FALSE;
583         if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0])
584         {
585                 ad->empty_flag = TRUE;
586                 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
587                 if (navi_it)
588                 {
589                         Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
590                         setting_disable_evas_object(back_btn);
591                         setting_dim_evas_object(back_btn, TRUE);
592                 }
593         }
594
595
596         // [UI] Device name
597         char *app_name = NULL;
598         int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm-ui", &app_name);
599         if (ret_get_app_name == APP_MANAGER_ERROR_INVALID_PACKAGE )
600         {
601                 SETTING_TRACE(">>>>>>>>>>>>>>>>>> UNINSTALLED PACKAGE");
602                 ad->item_dev_name = NULL;
603         } else {
604
605                 ad->item_dev_name =
606                         setting_create_Gendial_field_def(scroller, &(ad->itc_1icon),
607                                                                  setting_about_main_mouse_up_Gendial_list_cb,
608                                                          ad, SWALLOW_Type_LAYOUT_ENTRY,
609                                                          NULL, NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc,
610                                                          __setting_about_device_name_changed_cb);
611                 if (ad->item_dev_name) {
612                         ad->item_dev_name->userdata = ad;
613                         ad->item_dev_name->isSinglelineFlag = 0;
614                         ad->item_dev_name->start_change_cb = (setting_call_back_func)__entry_key_down_cb;
615                         ad->item_dev_name->stop_change_cb = __entry_unfocus_cb;
616                         ad->item_dev_name->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
617
618                         if (ad->item_dev_name->limit_filter_data) {
619                                 //max byte len is 31 not 31+1
620                                 //ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN + OFFESET_ENTRY_FILTER;
621                                 ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
622                                 ad->item_dev_name->win_main = ad->win_get;
623                         }
624                         //ad->item_dev_name->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBER;
625                         ad->item_dev_name->input_panel_disable_flag = EINA_TRUE;
626                 } else {
627                                 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
628                 }
629                 FREE(pa_sub_desc);
630         }
631
632         // [UI] My number
633         int err;
634         char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
635         setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
636
637         if (ad->my_numbers.count == 1) {
638                 item_data =
639                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
640                                              NULL,
641                                              ad, SWALLOW_Type_INVALID, NULL,
642                                              NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
643                                              sel_num, NULL);
644                 if (item_data) {
645                         elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
646                 } else {
647                         SETTING_TRACE_ERROR("item_data is NULL");
648                 }
649         } else if (ad->my_numbers.count > 1){
650                 setting_enable_expandable_genlist(scroller, ad,
651                                           setting_about_main_exp_cb, NULL);
652                 item_data = setting_create_Gendial_exp_parent_field(scroller,
653                                                     &(ad->itc_2text_3_parent),
654                                                     NULL, NULL,
655                                                     SWALLOW_Type_INVALID,
656                                                     SETTING_ABOUT_MY_NUMBER_STR,
657                                                     sel_num);
658                 if (item_data) {
659                         item_data->int_slp_setting_binded = STR_SLP_SETTING_SELECT_NUM;
660                 } else {
661                         SETTING_TRACE_ERROR("ad->data_wap is NULL");
662                 }
663
664         } else if (ad->my_numbers.count == 0) {
665                 // _("IDS_ST_HEADER_UNAVAILABLE")
666                 SETTING_TRACE_ERROR("don't have my number");
667                 item_data =
668                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
669                                         NULL,
670                                         ad, SWALLOW_Type_INVALID, NULL,
671                                         NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
672                                         _("IDS_ST_HEADER_UNAVAILABLE"), NULL);
673                 if (item_data) {
674                         elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
675                 } else {
676                         SETTING_TRACE_ERROR("item_data is NULL");
677                 }
678         }
679
680         // [UI] Phone model
681         memset(str, 0x00, sizeof(str));
682         setting_about_main_get_phone_model_name(str, sizeof(str));
683         item_data =
684             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
685                                              NULL, SWALLOW_Type_INVALID, NULL,
686                                              NULL, 0, SETTING_ABOUT_MODEL_STR, str, NULL);
687         if (item_data) {
688                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
689         } else {
690                 SETTING_TRACE_ERROR("item_data is NULL");
691         }
692
693         // [UI] SW version
694         memset(str, 0x00, sizeof(str));
695         setting_about_main_get_sw_version(str, sizeof(str));
696         item_data =
697             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
698                                              NULL, SWALLOW_Type_INVALID, NULL,
699                                              NULL, 0, SETTING_ABOUT_VERSION_STR, str, NULL);
700         if (item_data) {
701                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
702         } else {
703                 SETTING_TRACE_ERROR("item_data is NULL");
704         }
705
706         // [UI] Bluetooth address
707         if ( ! is_emul_bin) { // requested by DI Kim due to BT BS on 11/26
708                 memset(str, 0x00, sizeof(str));
709                 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
710                 ad->item_data_bt =
711                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
712                                                          NULL, SWALLOW_Type_INVALID, NULL,
713                                                          NULL, 0, SETTING_ABOUT_BLUETOOTH_STR, str, NULL);
714                 if (ad->item_data_bt) {
715                         elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
716                 } else {
717                                 SETTING_TRACE_ERROR("item_data is NULL");
718                 }
719         }
720
721         // [UI] MAC address
722         memset(str, 0x00, sizeof(str));
723         setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
724
725         SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
726
727         ad->item_data_wifi =
728             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
729                                              NULL, SWALLOW_Type_INVALID, NULL,
730                                              NULL, 0, SETTING_ABOUT_WIFI_STR, str, NULL);
731         if (ad->item_data_wifi) {
732                 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
733         } else {
734                 SETTING_TRACE_ERROR("item_data is NULL");
735         }
736
737         // [UI] Battery
738         memset(str, 0x00, sizeof(str));
739         setting_about_main_get_battery_string(str, sizeof(str));
740         item_data =
741             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
742                                              NULL, SWALLOW_Type_INVALID, NULL,
743                                              NULL, 0, SETTING_ABOUT_BATTERY_STR, str, NULL);
744         if (item_data) {
745                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
746                 ad->item_data_battery = item_data;
747         } else {
748                 SETTING_TRACE_ERROR("item_data is NULL");
749         }
750
751         // [UI] CPU Info
752         memset(str, 0x00, sizeof(str));
753         float usr, sys;
754         int ret = __stat_get_cpuinfo(&usr, &sys);
755         if (ret == -ENOENT) {
756                 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
757                 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
758         } else {
759                 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
760         }
761
762         ad->item_data_cpu = item_data =
763             setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
764                                              NULL, SWALLOW_Type_INVALID, NULL,
765                                              NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
766         if (item_data) {
767                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
768         } else {
769                 SETTING_TRACE_ERROR("item_data is NULL");
770         }
771
772         // [UI] separator
773         item =
774             elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
775                                     ELM_GENLIST_ITEM_NONE, NULL, NULL);
776         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
777
778 #ifdef SUPPORT_DIAG_USAGE
779         // [UI] Diagnostics and Usage
780         if (!is_emul_bin) {
781                 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
782                                          setting_about_main_mouse_up_Gendial_list_cb,
783                                          ad, SWALLOW_Type_INVALID, NULL, NULL,
784                                          0, DIAGNOSTICS_USAGE_STR,
785                                          NULL, NULL);
786         }
787 #endif
788
789         // [UI] Certificates
790         // implementation is in progress.
791         if (is_ug_installed_by_ug_args("setting-manage-applications-efl"))
792         {
793                 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
794                                                  setting_about_main_mouse_up_Gendial_list_cb,
795                                                  ad, SWALLOW_Type_INVALID, NULL, NULL,
796                                                  0, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
797
798                 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
799                                                 ELM_GENLIST_ITEM_NONE, NULL, NULL);
800                 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
801         }
802
803
804         ad->update_timer =
805             ecore_timer_add(2, (Ecore_Task_Cb) __timer_update_cb, ad);
806
807         return SETTING_RETURN_SUCCESS;
808 }
809
810 static int setting_about_main_create(void *cb)
811 {
812         SETTING_TRACE_BEGIN;
813         /* error check */
814         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
815
816         SettingAboutUG *ad = (SettingAboutUG *) cb;
817
818         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
819         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
820                  "Cannot set scroller object  as contento of layout");
821         elm_object_style_set(scroller, "dialogue");
822         elm_genlist_clear(scroller);    /* first to clear list */
823
824         /*  Enabling illume notification property for window */
825         elm_win_conformant_set(ad->win_main_layout, 1);
826         Evas_Object *conformant = elm_conformant_add(ad->win_main_layout);
827         elm_object_style_set(conformant, "internal_layout");    /*  By Kollus. 2011-01-04 */
828         evas_object_show(conformant);
829         elm_object_content_set(conformant, scroller);
830         ad->genlsit = scroller;
831
832         ad->ly_main =
833             setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
834                                            _(KeyStr_AboutPhone),
835                                            _("IDS_COM_BODY_BACK"), NULL, NULL,
836                                            setting_about_main_click_softkey_back_cb,
837                                            NULL, NULL, ad, conformant,
838                                            &ad->navi_bar, NULL);
839
840         evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
841                                        __about_main_gl_mouse_up, ad);
842
843         ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
844
845         setting_about_generate_genlist((void *)ad);
846
847         setting_view_about_main.is_create = 1;
848         SETTING_TRACE_END;
849         return SETTING_RETURN_SUCCESS;
850 }
851
852 static int setting_about_main_destroy(void *cb)
853 {
854         SETTING_TRACE_BEGIN;
855         /* error check */
856         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
857
858         SettingAboutUG *ad = (SettingAboutUG *) cb;
859
860         if (ad->update_timer) {
861                 ecore_timer_del(ad->update_timer);
862                 ad->update_timer = NULL;
863         }
864         if (ad->popup) {
865                 evas_object_del(ad->popup);
866                 ad->popup = NULL;
867         }
868
869         if (ad->ly_main != NULL) {
870                 evas_object_del(ad->ly_main);
871                 ad->ly_main = NULL;
872         }
873
874         setting_view_about_main.is_create = 0;
875         return SETTING_RETURN_SUCCESS;
876 }
877
878 static int setting_about_main_update(void *cb)
879 {
880         SETTING_TRACE_BEGIN;
881         /* error check */
882         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
883
884         SettingAboutUG *ad = (SettingAboutUG *) cb;
885
886         if (ad->ly_main != NULL) {
887                 evas_object_show(ad->ly_main);
888         }
889
890         return SETTING_RETURN_SUCCESS;
891 }
892
893 static int setting_about_main_cleanup(void *cb)
894 {
895         SETTING_TRACE_BEGIN;
896         /* error check */
897         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
898
899         SettingAboutUG *ad = (SettingAboutUG *) cb;
900
901         if (ad->ly_main != NULL) {
902                 /*  evas_object_hide(ad->ly_main); */
903         }
904
905         return SETTING_RETURN_SUCCESS;
906 }
907
908 /* ***************************************************
909  *
910  *general func
911  *
912  ***************************************************/
913
914 /* ***************************************************
915  *
916  *call back func
917  *
918  ***************************************************/
919
920 static void
921 setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
922                                          void *event_info)
923 {
924         SETTING_TRACE_BEGIN;
925         /* error check */
926         setting_retm_if(data == NULL, "Data parameter is NULL");
927
928         SettingAboutUG *ad = (SettingAboutUG *) data;
929         if (ad->empty_flag) {
930                 if (ad->popup) {
931                         evas_object_del(ad->popup);
932                         ad->popup = NULL;
933                 }
934                 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
935                                      __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
936                 if (ad->item_dev_name) {
937                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
938                 }
939                 return;
940         }
941
942         /* Send destroy request */
943         ug_destroy_me(ad->ug);
944         //imf must be hided before view is destroyed.
945         //Following code is just to improve the hiding speed. If not add these code,
946         //the input pannel will also be hided with the view destroyed,but it works too slow.
947         if (ad->item_dev_name) {
948                 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
949                 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
950         }
951
952         SETTING_TRACE_END;
953 }
954
955 /**
956 * @brief
957 *
958 * @param data
959 * @param obj
960 * @param event_info
961 */
962 static void
963 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
964                                             void *event_info)
965 {
966         SETTING_TRACE_BEGIN;
967         /* error check */
968         setting_retm_if(data == NULL, "Data parameter is NULL");
969
970         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
971         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
972         elm_genlist_item_selected_set(item, 0);
973         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
974
975         /* SettingAboutUG *ad = (SettingAboutUG *) data; */
976
977         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
978         if (!safeStrCmp("IDS_ST_BODY_OPEN_SOURCE_LICENCES", list_item->keyStr)) {
979
980                 //setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
981
982         } else if (!safeStrCmp("IDS_COM_BODY_CERTIFICATES", list_item->keyStr)) {
983                 __setting_about_main_certificates_clicked(data);
984         } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
985                 __setting_about_main_device_name_clicked(data, list_item->eo_check);
986         } else if (!safeStrCmp(DIAGNOSTICS_USAGE_STR, list_item->keyStr)) {
987                 __setting_about_main_diagnostics_usage_clicked(data, list_item->eo_check);
988         }
989 }
990
991 static void __destroy_certificates_ug_cb(ui_gadget_h ug, void *priv)
992 {
993         SETTING_TRACE_BEGIN;
994
995         /* restore the '<-' button on the navigate bar */
996         ret_if(!priv);
997         SettingAboutUG *ad = (SettingAboutUG *) priv;   /* ad is point to priv */
998
999         if (ug) {
1000                 ug_destroy(ug);
1001                 ad->ug_loading = NULL;
1002         }
1003
1004 }
1005
1006 static void __setting_about_main_certificates_clicked(void *data)
1007 {
1008         SETTING_TRACE_BEGIN;
1009         retm_if(data == NULL, "Data parameter is NULL");
1010         SettingAboutUG *ad = (SettingAboutUG *)data;
1011
1012         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1013         if (!cbs) {
1014                 return;
1015         }
1016
1017         cbs->layout_cb = setting_about_layout_ug_cb;
1018         cbs->result_cb = NULL;
1019         cbs->destroy_cb = __destroy_certificates_ug_cb;
1020         cbs->priv = (void *)ad;
1021
1022         ad->ug_loading =
1023             ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1024
1025         if (NULL == ad->ug_loading) {   /* error handling */
1026                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1027         }
1028         FREE(cbs);
1029 }
1030
1031 static void __top_back_cb(void *data, Evas_Object *obj,
1032                                          void *event_info)
1033 {
1034         SETTING_TRACE_BEGIN;
1035         /* error check */
1036         setting_retm_if(data == NULL, "Data parameter is NULL");
1037
1038         SettingAboutUG *ad = (SettingAboutUG *) data;
1039
1040         if (ad->item_dev_name)
1041                 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1042
1043         SETTING_TRACE_END;
1044 }
1045
1046 static Eina_Bool __delay_remove(void *data)
1047 {
1048         SETTING_TRACE_BEGIN;
1049         SettingAboutUG *ad = data;
1050         if (ad->popup)
1051         {
1052                 evas_object_del(ad->popup);
1053                 ad->popup = NULL;
1054         }
1055         return FALSE;
1056 }
1057 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1058 {
1059         SETTING_TRACE_BEGIN;
1060         retm_if(data == NULL, "Data parameter is NULL");
1061         retm_if(ctx == NULL, "obj parameter is NULL");
1062
1063         SettingAboutUG *ad = (SettingAboutUG *)data;
1064
1065         if(value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
1066         {
1067                 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1068                 if(ad->navi_item && !elm_object_item_part_content_get(ad->navi_item, "title_right_btn"))
1069                 {
1070                         Evas_Object *r_button = setting_create_button(ad->navi_bar,
1071                                                                         dgettext("sys_string", "IDS_COM_BODY_BACK"),
1072                                                                         NAVI_BACK_BUTTON_STYLE,
1073                                                                         __top_back_cb,
1074                                                                         ad);
1075                         elm_object_item_part_content_set(ad->navi_item, "title_right_btn", r_button);
1076                 }
1077         }
1078         else if(value == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
1079         {
1080                 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1081                 if(ad->navi_item && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
1082                         Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
1083                         evas_object_del(btn);
1084                 }
1085
1086                 if (ad->item_dev_name) {
1087                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1088                 }//if Setting is overlapped by other app,the entry will lost its focus,
1089                 //the input pannel will be hided and any popup should be removed to fix blinking issue.
1090                 if (ad->pause_flag)
1091                         ecore_idler_add(__delay_remove, ad);
1092         }
1093 }
1094
1095 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj)
1096 {
1097         SETTING_TRACE_BEGIN;
1098         retm_if(data == NULL, "Data parameter is NULL");
1099         retm_if(obj == NULL, "obj parameter is NULL");
1100         SettingAboutUG *ad = (SettingAboutUG *)data;
1101
1102         if (!elm_object_focus_get(obj)) {
1103                 elm_object_focus_set(obj, EINA_TRUE);
1104         }
1105
1106         Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(obj);
1107         setting_retm_if(imf_context == NULL, "imf_context is NULL");
1108         ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_cb, ad);
1109         ecore_imf_context_input_panel_show(imf_context);
1110 }
1111
1112
1113 static void __destroy_diagnostics_usage_ug_cb(ui_gadget_h ug, void *priv)
1114 {
1115         SETTING_TRACE_BEGIN;
1116
1117         /* restore the '<-' button on the navigate bar */
1118         ret_if(!priv);
1119         SettingAboutUG *ad = (SettingAboutUG *) priv;   /* ad is point to priv */
1120
1121         if (ug) {
1122                 ug_destroy(ug);
1123                 ad->ug_loading = NULL;
1124         }
1125
1126         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1127         ret_if(!navi_it);
1128         Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1129
1130         if (back_btn != NULL) {
1131                 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1132         }
1133 }
1134
1135 static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj)
1136 {
1137         SETTING_TRACE_BEGIN;
1138         retm_if(data == NULL, "Data parameter is NULL");
1139         SettingAboutUG *ad = (SettingAboutUG *)data;
1140
1141         // create UG
1142         if (!ad)
1143                 return;         /*  do nothing if ad is NULL */
1144
1145         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1146         if (!cbs) {
1147                 return;
1148         }
1149
1150         cbs->layout_cb = setting_about_layout_ug_cb;
1151         cbs->result_cb = NULL;
1152         cbs->destroy_cb = __destroy_diagnostics_usage_ug_cb;
1153         cbs->priv = (void *)ad;
1154
1155         ad->ug_loading =
1156             ug_create(ad->ug, "setting-crash-efl", UG_MODE_FULLVIEW, NULL, cbs);
1157
1158         if (NULL == ad->ug_loading) {   /* error handling */
1159                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1160                 setting_create_simple_popup(ad, ad->win_get, NULL, _(UNSUPPORTED_FUNCTION));
1161         }
1162         FREE(cbs);
1163 }