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