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