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