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