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