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