tizen 2.4 release
[apps/home/settings.git] / setting-about / src / setting-about-main.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <setting-about-main.h>
23 #include <aul.h>
24 #include <sys/types.h>
25 #include <sys/stat.h>
26 #include <system_info.h>
27 #include <fcntl.h>
28
29 #include <bluetooth.h>
30 #include <wifi.h>
31
32 #include <app_manager.h>
33 #include <efl_extension.h>
34 #include <ITapiModem.h>
35 #include <utilX.h>
36
37
38 #define MAX_DEVICE_NAME_LEN             32
39
40 #define DEVICED_BUS_NAME                        "org.tizen.system.deviced"
41 #define DEVICED_OBJECT_PATH                     "/Org/Tizen/System/DeviceD"
42 #define DEVICED_INTERFACE_NAME          DEVICED_BUS_NAME
43 #define DEVICED_PATH_BOARD                      DEVICED_OBJECT_PATH"/Board"
44 #define DEVICED_INTERFACE_BOARD         DEVICED_INTERFACE_NAME".Board"
45 #define METHOD_GET_SERIAL                       "GetSerial"
46
47
48 /** @todo : need to handle unicode encoded input characters */
49
50 #define DEVICE_NAME                                     "IDS_ST_HEADER_DEVICE_NAME"
51 #define DEVICE_NAME_EXCEED_STR  "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
52
53
54 #define EMPTY_LIMITATION_STR            "IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
55 #define SOFTWARE_UPDATE_STR             "IDS_ST_MBODY_SOFTWARE_UPDATE"
56 #define DEVICE_NAME_UNALLOWED_SPACE_KEY_STR "Device name cannot contain spaces"
57 #define DEVICE_NAME_DEFAULE     "Redwood"
58
59 #define APP_NAME "Settings"
60
61 static int setting_about_main_create(void *cb);
62 static int setting_about_main_destroy(void *cb);
63 static int setting_about_main_update(void *cb);
64 static int setting_about_main_cleanup(void *cb);
65
66 setting_view setting_view_about_main = {
67         .create = setting_about_main_create,
68         .destroy = setting_about_main_destroy,
69         .update = setting_about_main_update,
70         .cleanup = setting_about_main_cleanup,
71 };
72
73 void __setting_about_gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
74 {
75         /*SETTING_TRACE_BEGIN; */
76         setting_retm_if(event_info == NULL, "invalid parameter: event_info is NULL");
77         Elm_Object_Item *item = (Elm_Object_Item *)event_info;
78         /*Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item); */
79
80
81 }
82
83
84 /**
85  * @brief popup response callback fuc.
86  *
87  * @param data application context
88  * @param obj Evas Object
89  * @param event_info even type
90  *
91  * @return no return
92  */
93 static void __setting_about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
94 {
95
96         SETTING_TRACE_BEGIN;
97         setting_retm_if(obj == NULL, "obj parameter is NULL");
98         setting_retm_if(data == NULL, "Data parameter is NULL");
99         SettingAboutUG *ad = (SettingAboutUG *) data;
100         /*Evas_Object *popup = data; */
101         switch (btn_type(obj)) {
102                 case POPUP_RESPONSE_OK: {
103                                 if (ad->popup) {
104                                         ad->popup_showed_flag = FALSE;
105
106                                         evas_object_del(ad->popup);
107                                         ad->popup = NULL;
108                                 }
109                                 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
110                                         char *name_value = NULL;
111                                         name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
112                                         if (NULL == name_value) {
113                                                 /*use the defaule name if get vconf failed*/
114                                                 name_value = (char *)g_strdup(DEVICE_NAME_DEFAULE);
115                                         }
116                                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
117                                         /*for genlist update */
118                                         elm_entry_entry_set(ad->item_dev_name->eo_check, name_value);
119                                         elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
120                                         G_FREE(ad->item_dev_name->sub_desc);/*release first */
121                                         ad->item_dev_name->sub_desc = (char *)g_strdup(name_value);
122                                         FREE(name_value);
123                                         SETTING_TRACE("ad->item_dev_name->sub_desc:%s", ad->item_dev_name->sub_desc);
124                                         Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
125                                         if (imf_context) {
126                                                 ecore_imf_context_input_panel_show(imf_context);
127                                         }
128                                 }
129                                 break;
130                         }
131                 default: {
132                                 break;
133                         }
134         }
135
136 }
137
138 /**
139  * @brief callback run for idler task to destroy an popup.
140  *
141  * @param data application context
142  *
143  * @return FALSE for call it once, TRUE for call once the CPU is in idler
144  */
145 static Eina_Bool __setting_about_popup_remove_delay(void *data)
146 {
147         SETTING_TRACE_BEGIN;
148         SettingAboutUG *ad = data;
149         if (ad->popup_space) {
150                 evas_object_del(ad->popup_space);
151                 ad->popup_space = NULL;
152                 ad->popup_showed_flag = FALSE;
153         }
154         return FALSE;
155 }
156
157 /**
158  * @brief callback for popup destory.
159  *
160  * @param data application context
161  * @param e Evas handler
162  * @param obj Evas object
163  * @param event_info event type
164  */
165 static void __setting_about_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
166
167 {
168         SETTING_TRACE_BEGIN;
169         retm_if(data == NULL, "Data parameter is NULL");
170         SettingAboutUG *ad = (SettingAboutUG *)data;
171         ad->popup = NULL;
172         ad->popup_showed_flag = FALSE;
173 }
174
175 /**
176  * @brief callback run for idler task to show an popup.
177  *
178  * @param data application context
179  */
180 static Eina_Bool __setting_about_popup_show_delay(void *data)
181 {
182         SETTING_TRACE_BEGIN;
183         retvm_if(data == NULL, FALSE, "Data parameter is NULL");
184         SettingAboutUG *ad = (SettingAboutUG *)data;
185
186         /*popup the message and display the original name if the input is empty*/
187         SETTING_TRACE("POP UP again");
188
189         if (NULL == ad->popup) {
190                 ad->popup_showed_flag = true;
191                 ad->popup = setting_create_popup(ad, ad->win_get, "IDS_ST_HEADER_ENTER_VALID_DEVICE_NAME_ABB",
192                                                                                  "IDS_ST_POP_YOU_MUST_ENTER_A_DEVICE_NAME",
193                                                                                  __setting_about_popup_rsp_cb, 0, FALSE, FALSE,
194                                                                                  1, "IDS_ST_BUTTON_OK_ABB");
195                 evas_object_event_callback_add(ad->popup, EVAS_CALLBACK_DEL, __setting_about_popup_del_cb, ad);
196         }
197
198         return FALSE;
199 }
200
201 /**
202  * @brief callback run for idler task to destroy an popup.
203  *
204  * @param data application context
205  *
206  * @return FALSE for call it once, TRUE for call once the CPU is in idler
207  */
208 static void __setting_about_popup_mobile_ap_turn_off_ask_resp_cb(void *data,
209                                                                  Evas_Object *obj,
210                                                                  void *event_info)
211 {
212         SETTING_TRACE_BEGIN;
213         setting_retm_if(data == NULL, "Data parameter is NULL");
214         SettingAboutUG *ad = (SettingAboutUG *)data;
215         int response_type = btn_type(obj);
216
217         if (POPUP_RESPONSE_OK == response_type) {
218                 /* disable tehering*/
219                 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
220                         elm_object_focus_allow_set(ad->item_dev_name->eo_check, EINA_TRUE);
221                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
222                         elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
223
224                         Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
225                         if (imf_context) {
226                                 ecore_imf_context_input_panel_show(imf_context);
227                         }
228                 }
229         } else if (POPUP_RESPONSE_CANCEL == response_type) {
230
231                 /* do nothing */
232
233         }
234
235         if (ad->popup) {
236                 evas_object_del(ad->popup);
237                 ad->popup = NULL;
238         }
239
240
241 }
242
243 /**
244  * @brief regulatory popup response cp.
245  *
246  * @param data application context
247  * @param obj evas object
248  * @param event_info event type
249  */
250
251 static void __setting_about_popup_regulatory_info_rsp_cb(void *data, Evas_Object *obj, void *event_info)
252 {
253         retm_if(data == NULL, "Data parameter is NULL");
254         evas_object_del(data);
255 }
256
257
258 /**
259  * @brief show regulatory info popup.
260  *
261  * @param data application context
262  */
263 static void __setting_about_popup_regulatory_info(void *data)
264 {
265         SETTING_TRACE_BEGIN;
266
267         Evas_Object *popup;
268         SettingAboutUG *ad;
269         Evas_Object *layout;
270         Evas_Object *icon;
271         Evas_Object *btn1;
272         char buf[4096];
273
274         ad = (SettingAboutUG *) data;
275         popup = elm_popup_add(ad->win_main_layout);
276         eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
277
278         elm_object_part_text_set(popup, "title,text", _(KeyStr_Regulatory_Info));
279         layout = elm_layout_add(popup);
280         elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "popup_center_image");
281         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
282
283         icon = elm_image_add(layout);
284         snprintf(buf, sizeof(buf), "%s/00_popup_regulatory_info.png", SETTING_ICON_PATH);
285         elm_image_file_set(icon, buf, NULL);
286         elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
287         elm_object_part_content_set(layout, "elm.swallow.content", icon);
288
289         evas_object_show(layout);
290         elm_object_content_set(popup, layout);
291
292         btn1 = elm_button_add(popup);
293         elm_object_style_set(btn1, "popup");
294         elm_object_text_set(btn1, _("IDS_ST_BUTTON_OK"));
295         elm_object_part_content_set(popup, "button1", btn1);
296         evas_object_smart_callback_add(btn1, "clicked", __setting_about_popup_regulatory_info_rsp_cb, popup);
297         evas_object_show(popup);
298
299         SETTING_TRACE_END;
300 }
301
302 /**
303  * @brief get Model Name.
304  *              - No ini: Unavailable
305  *              - I9500 @ target: GT-I9500
306  *              - I9500 @ emul: SDK
307  *              - SLP   @ target: GT-SLP
308  *              - SLP   @ emul: SDK
309  *
310  * @param szStr the buffer for store the model name
311  * @param nSize buffer size
312  */
313 void setting_about_main_get_phone_model_name(char *szStr, int nSize)
314 {
315         retm_if(szStr == NULL, "szStr parameter is NULL");
316
317         char *value = NULL;
318         int ret = system_info_get_platform_string("http://tizen.org/system/model_name", &value);
319         SETTING_TRACE("value : %s", value);
320         if (ret != SYSTEM_INFO_ERROR_NONE) {
321                 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
322                 FREE(value);
323                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
324                 return;
325         }
326
327         if (value) {
328                 snprintf(szStr, nSize, "%s", value);
329         } else {
330                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
331         }
332
333         FREE(value);
334 }
335
336 /**
337  * @brief get software version.
338  *
339  * @param szStr the buffer for store SW version
340  * @param nSize buffer size
341  */
342 void setting_about_main_get_sw_version(char *szStr, int nSize)
343 {
344         retm_if(szStr == NULL, "szStr parameter is NULL");
345
346         char *version = NULL;
347         int ret = system_info_get_platform_string("http://tizen.org/feature/platform.version", &version);
348         if (ret != SYSTEM_INFO_ERROR_NONE) {
349                 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
350                 FREE(version);
351                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
352                 return;
353         }
354
355         char *build_info = NULL;
356         ret = system_info_get_platform_string("http://tizen.org/system/build.string", &build_info);
357         if (ret != SYSTEM_INFO_ERROR_NONE) {
358                 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
359                 FREE(version);
360                 FREE(build_info);
361                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
362                 return;
363         }
364
365 #if 0
366         snprintf(szStr, nSize, "TIZEN %s (%s)", version, build_info);
367 #else
368         snprintf(szStr, nSize, "TIZEN %s", version);
369 #endif
370         FREE(version);
371         FREE(build_info);
372 }
373
374 /**
375  * @brief get software version.
376  *
377  * @param szStr the buffer for store SW version
378  * @param nSize buffer size
379  */
380 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
381 {
382         SETTING_TRACE_BEGIN;
383         setting_retm_if(str == NULL, "str parameter is NULL");
384         setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN + 1, "size parameter is wrong");
385
386         char *mac_addr = NULL;
387         int status = wifi_get_mac_address(&mac_addr);
388         if (WIFI_ERROR_NONE != status) {
389                 SETTING_TRACE_ERROR("Failed to call wifi_get_mac_address()");
390         } else {
391                 SETTING_TRACE_ERROR("Success to call wifi_get_mac_address()");
392         }
393
394         if (mac_addr) {
395                 safeCopyStr(str, mac_addr, SETTING_ABOUT_WIFI_MAC_STR_LEN);
396                 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", mac_addr);
397                 free(mac_addr);
398         }
399
400         SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
401
402         int state = 0;
403         int ret = vconf_get_int(VCONFKEY_WIFI_STATE, &state);
404         if ( 0 != ret) {
405                 SETTING_TRACE_ERROR("Failed to get wifi state");
406         } else {
407                 SETTING_TRACE("get wifi state: %d", state);
408         }
409
410         if ((status != WIFI_ERROR_NONE) || (safeStrLen(str) == 0) || 0 == state) {
411                 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
412         }
413 }
414
415 static DBusMessage *dbus_method_sync_with_reply(const char *dest, const char *path,
416                                                 const char *interface, const char *method,
417                                                 const char *sig, char *param[])
418 {
419         DBusConnection *conn;
420         DBusMessage *msg;
421         DBusMessageIter iter;
422         DBusMessage *reply;
423         DBusError err;
424
425         conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
426         if (!conn) {
427                 return NULL;
428         }
429
430         msg = dbus_message_new_method_call(dest, path, interface, method);
431         if (!msg) {
432                 return NULL;
433         }
434
435         dbus_message_iter_init_append(msg, &iter);
436
437         dbus_error_init(&err);
438
439         reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
440         if (!reply) {
441         }
442
443         if (dbus_error_is_set(&err)) {
444                 SETTING_TRACE_ERROR("dbus_connection_send error(%s:%s)", err.name, err.message);
445                 dbus_error_free(&err);
446                 reply = NULL;
447         }
448
449         dbus_message_unref(msg);
450         return reply;
451 }
452
453 /**
454  * @brief get serial number.
455  *
456  * @param szStr the buffer for store SN
457  * @param nSize buffer size
458  */
459 void setting_about_main_get_sn(char *szStr, int nSize)
460 {
461         retm_if(szStr == NULL, "szStr parameter is NULL");
462
463         DBusError err;
464         DBusMessage *msg;
465         int ret, len;
466         char *serial_num;
467
468         msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME, DEVICED_PATH_BOARD,
469                                           DEVICED_INTERFACE_BOARD, METHOD_GET_SERIAL, NULL, NULL);
470         if (!msg) {
471                 SETTING_TRACE_ERROR("fail send message");
472                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
473                 return;
474         }
475
476         dbus_error_init(&err);
477
478
479         ret = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &serial_num, DBUS_TYPE_INT32, &len, DBUS_TYPE_INVALID);
480         if (!ret) {
481                 SETTING_TRACE_ERROR("no message : [%s:%s]", err.name, err.message);
482                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
483                 return;
484         }
485
486         dbus_message_unref(msg);
487         dbus_error_free(&err);
488
489         if (serial_num && strlen(serial_num)) {
490                 snprintf(szStr, nSize, "%s", serial_num);
491         } else {
492                 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
493         }
494 }
495
496
497 /**
498  * @brief get current battery percentage.
499  *
500  * @param szStr the buffer for store battery percentage
501  * @param nSize buffer size
502  */
503 void setting_about_main_get_battery_string(char *str, int size)
504 {
505         setting_retm_if(str == NULL, "str parameter is NULL");
506
507         int val = -1;
508         char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
509         snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
510                  "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
511
512         char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
513         int fd = 0;
514         int r = 0;
515
516         fd = open(file, O_RDONLY);
517         if (fd != -1) {
518                 r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
519                 if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
520                         buf[r] = '\0';
521                         val = atoi(buf);
522                         snprintf(str, size, "%d%s", val, "\%");
523                 } else {
524                         SETTING_TRACE_ERROR("read file fail");
525                         snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
526                 }
527
528                 close(fd);
529         } else {
530                 SETTING_TRACE_ERROR("open file fail");
531                 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
532         }
533 }
534
535 /**
536  * @brief get bluetooth address.
537  *
538  * @param szStr the buffer for store bluetooth address
539  * @param nSize buffer size
540  */
541 void setting_about_main_get_bluetooth_address_string(char *str, int size)
542 {
543         setting_retm_if(str == NULL, "str parameter is NULL");
544
545         int ret = 0;
546
547         ret = bt_initialize();
548         setting_retm_if(ret != 0, "bluetooth initialization failed");
549
550         char *local_address = NULL;
551         ret = bt_adapter_get_address(&local_address);
552
553         bt_adapter_state_e state;
554         ret = bt_adapter_get_state(&state);
555
556         bt_deinitialize();
557
558         if (ret < 0 || BT_ADAPTER_DISABLED == state) {
559                 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
560                 SETTING_TRACE_DEBUG("bt address : %s failed get bt address with error code:%d", str, ret);
561         } else {
562                 SETTING_TRACE_DEBUG("bt address : %s", local_address);
563                 snprintf(str, size, "%s", local_address);
564         }
565
566         if (local_address) {
567                 free(local_address);
568         }
569 }
570
571 /**
572  * @brief get CPU usage.
573  *
574  * @param szStr the buffer for store CPU usage
575  * @param nSize buffer size
576  *
577  * @return -ENOENT means failed to get CPU info, otherwise ok.
578  */
579 int setting_about_main_stat_get_cpuinfo(float *usr_pct, float *sys_pct)
580 {
581         setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
582         setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
583
584         /*  default value */
585         *usr_pct = 0.0;
586         *sys_pct = 0.0;
587         static unsigned long long usr_time = 0, /*nice_time = 0,*/ sys_time = 0;
588         static unsigned long long old_usr = 0, /*old_nice = 0,*/ old_sys = 0;
589         static struct timeval old_tv, cur_tv;
590         unsigned long long elapsed_tick;
591         long tick_per_sec;
592         long cpu_num;
593         FILE *fp = NULL;
594         int ret = 0;
595
596         tick_per_sec = sysconf(_SC_CLK_TCK);
597         cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
598
599         if (cpu_num < 1) {
600                 cpu_num = 1;
601         }
602
603         gettimeofday(&cur_tv, NULL);
604         fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
605         if (fp == NULL) {
606                 SETTING_TRACE_ERROR("fp == NULL");
607                 return -ENOENT;
608         }
609
610         char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
611         char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
612
613         if (cpu_info_p == NULL) {
614                 SETTING_TRACE_ERROR("fgets failed");
615                 fclose(fp);   /* free - code */
616                 return -ENOENT;
617         }
618
619         char *substr = NULL;
620         unsigned long long tmp_long = 0;
621         int i = 0;
622         /* split cpu_info, get 3 numbers headmost*/
623         while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
624                 char *endptr = NULL;
625                 tmp_long = strtoull(substr, &endptr, 10);
626                 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
627                         switch (i) {
628                                 case 0:
629                                         usr_time = tmp_long;
630                                         break;
631                                 case 1:
632                                         /*nice_time = tmp_long;*/
633                                         break;
634                                 case 2:
635                                         sys_time = tmp_long;
636                                         break;
637                                 default:
638                                         break;
639                         }
640                         i++;
641                 }
642                 if (i >= 3) {
643                         break;
644                 }
645         }
646
647         fclose(fp);
648         fp = NULL;
649         if (old_usr == 0) {
650                 ret = -EAGAIN;
651                 SETTING_TRACE_ERROR("old_usr == 0");
652                 goto out;
653         }
654
655         elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
656                        ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
657
658         /* REMOVE BS */
659         if (elapsed_tick != 0) {
660                 *usr_pct =
661                     ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
662                     cpu_num;
663         } else {
664                 *usr_pct = 0;
665         }
666         /* REMOVE BS */
667         if (elapsed_tick != 0) {
668                 *sys_pct =
669                     ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
670                     cpu_num;
671         } else {
672                 *sys_pct = 0;
673         }
674
675 out:
676         old_usr = usr_time;
677         /*old_nice = nice_time; */
678         old_sys = sys_time;
679         old_tv = cur_tv;
680
681         return ret;
682 }
683
684 #if 0
685 /**
686  * @brief get device root status.
687  *
688  * @param szStr the buffer for store device root status
689  * @param nSize buffer size
690  */
691 static void setting_about_main_get_status_string(char *str, int size)
692 {
693         SETTING_TRACE_BEGIN;
694         setting_retm_if(str == NULL, "str parameter is NULL");
695
696         struct_cordon_status *cordon_status = NULL;
697         cordon_status = (struct_cordon_status *)malloc(sizeof(struct_cordon_status));
698         if (NULL == cordon_status) {
699                 SETTING_TRACE_ERROR("Memory allocation failed");
700                 return ;
701         }
702         memset(cordon_status, 0, sizeof(struct_cordon_status));
703
704         SETTING_TRACE("cordon_get_previous_root_status_before");
705         int ret = cordon_get_previous_root_status(cordon_status);
706         SETTING_TRACE("cordon_get_previous_root_status_end");
707         if (0 == ret) {
708                 if (cordon_status->is_device_rooted) {
709                         snprintf(str, size, "%s", SETTING_ABOUT_STATUS_ROOT_STR);
710                 } else {
711                         snprintf(str, size, "%s", SETTING_ABOUT_STATUS_UNROOT_STR);
712                 }
713         } else {
714                 SETTING_TRACE_ERROR("Failed to call cordon_get_previous_root_status() with error code %d", ret);
715                 snprintf(str, size, "%s", "IDS_ST_HEADER_UNAVAILABLE");
716         }
717         free(cordon_status);
718 }
719 #endif
720
721 /**
722  * @brief create button on naviframe tile part.
723  *
724  * @param parent the new created button's parent layout
725  * @param text button text
726  * @param func callback for button click
727  * @param data application data for button click callback.
728  *
729  * @return new created button
730  */
731 static Evas_Object *setting_about_naviframe_btn_create(Evas_Object *parent, const char *text, Evas_Smart_Cb func, void *data)
732 {
733         Evas_Object *btn = elm_button_add(parent);
734         if (!btn) {
735                 return NULL;
736         }
737         elm_object_style_set(btn, "naviframe/title_text");
738         elm_object_text_set(btn, text);
739         evas_object_smart_callback_add(btn, "clicked", func, data);
740         return btn;
741 }
742
743 /**
744  * @brief button done response callback.
745  *
746  * @param data application data
747  * @param obj the button evas object
748  * @param event_info event type
749  */
750 static void setting_about_naviframe_btn_done_cb(void *data, Evas_Object *obj, void *event_info)
751 {
752         SETTING_TRACE_BEGIN;
753         setting_retm_if(data == NULL, "data is NULL");
754         SettingAboutUG *ad = (SettingAboutUG *)data;
755         if (ad->item_dev_name && ad->item_dev_name->eo_check) {
756                 const char *entry_str = NULL;
757                 char *entry_str_utf8 = NULL;
758                 char *name_value = NULL;
759
760                 entry_str = elm_entry_entry_get(ad->item_dev_name->eo_check);
761                 if (entry_str) {
762                         entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
763                 }
764                 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
765
766                 if (!ad->empty_flag && safeStrCmp(name_value, entry_str_utf8) != 0) {
767                         if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
768                                 SETTING_TRACE_ERROR("Set vconf[%s] failed", VCONFKEY_SETAPPL_DEVICE_NAME_STR);
769                         }
770                 }
771                 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
772                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
773                 }
774                 FREE(entry_str_utf8);
775         }
776         elm_naviframe_item_pop(ad->navi_bar);
777         SETTING_TRACE_END;
778 }
779
780 /**
781  * @brief button cancel response callback.
782  *
783  * @param data application data
784  * @param obj the button evas object
785  * @param event_info event type
786  */
787 static void setting_about_naviframe_btn_cancel_cb(void *data, Evas_Object *obj, void *event_info)
788 {
789         SETTING_TRACE_BEGIN;
790         setting_retm_if(data == NULL, "data is NULL");
791         SettingAboutUG *ad = (SettingAboutUG *)data;
792         if (ad->item_dev_name && ad->item_dev_name->eo_check) {
793                 char *name = NULL;
794                 char *pa_sub_desc = NULL;
795                 name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
796                 if (name) {
797                         pa_sub_desc = elm_entry_utf8_to_markup(name);
798                 }
799                 if (pa_sub_desc) {
800                         elm_entry_entry_set(ad->item_dev_name->eo_check, pa_sub_desc);
801                         G_FREE(ad->item_dev_name->sub_desc);/*release first */
802                         ad->item_dev_name->sub_desc = (char *)g_strdup(pa_sub_desc);
803                 }
804                 FREE(pa_sub_desc);
805
806                 if (isSpaceStr(ad->item_dev_name->sub_desc)) {
807                         ad->empty_flag = TRUE;
808                 } else {
809                         ad->empty_flag = FALSE;
810                 }
811
812                 SETTING_TRACE("ad->item_dev_name->sub_desc:%s", ad->item_dev_name->sub_desc);
813                 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
814                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
815                 }
816         }
817         elm_naviframe_item_pop(ad->navi_bar);
818         SETTING_TRACE_END;
819 }
820 static void __setting_about_main_popup_cb(void *data, Evas_Object *obj, void *event_info)
821 {
822         SETTING_TRACE_BEGIN;
823         setting_retm_if(obj == NULL, "obj parameter is NULL");
824         setting_retm_if(data == NULL, "Data parameter is NULL");
825         SettingAboutUG *ad = (SettingAboutUG *) data;
826
827         switch (btn_type(obj)) {
828                 case POPUP_RESPONSE_OK: {
829                                 if (ad->popup_space) {
830                                         ad->popup_showed_flag = FALSE;
831                                         evas_object_del(ad->popup_space);
832                                         ad->popup_space = NULL;
833                                 }
834                                 break;
835                         }
836                 default: {
837                                 break;
838                         }
839         }
840 }
841
842
843 /**
844  * @brief device name entry input handing
845  *      - get the current entry text
846  *      - check if the current input text is reached to max length
847  *    and show messge to user
848  *
849  * @param data application data
850  * @param obj the entry evas object
851  */
852 static void __setting_about_entry_changed_cb(void *data, Evas_Object *obj)
853 {
854         retm_if(!data || !obj, "Data parameter is NULL");
855         /*return if entry is not focused too */
856
857         Setting_GenGroupItem_Data *list_item =
858             (Setting_GenGroupItem_Data *) data;
859         SettingAboutUG *ad = list_item->userdata;
860         retm_if(ad == NULL, "Data parameter is NULL");
861
862         const char *entry_str = elm_entry_entry_get(obj);
863         int entry_len = safeStrLen(entry_str);
864         SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
865
866         SETTING_TRACE("maxLengthReachFlag:[%d], enterKeyPressFlag:%d", list_item->maxLengthReachFlag, list_item->enterKeyPressFlag);
867
868         /*fix PLM P131106-02776
869         after keyboard popup cut the entry text, the entry text don't reach max length, so need to delete popup */
870         if (ad->popup_showed_flag && ad->popup_space && !list_item->maxLengthReachFlag) {
871                 evas_object_del(ad->popup_space);
872                 ad->popup_space = NULL;
873                 ad->popup_showed_flag = FALSE;
874
875         }
876
877         list_item->maxLengthReachFlag = FALSE;
878         list_item->enterKeyPressFlag = FALSE;
879         list_item->spaceKeyPressFlag = FALSE;
880
881         /*for genlist update */
882         G_FREE(list_item->sub_desc);/*release first */
883         list_item->sub_desc = (char *)g_strdup(entry_str);
884
885         if (isSpaceStr(entry_str)) {
886                 if (!ad->empty_flag) ad->empty_flag = TRUE;
887         } else {
888                 if (ad->empty_flag) ad->empty_flag = FALSE;
889         }
890 }
891
892 /**
893  * @brief device name entry changed callback.
894  *
895  * @param data application data
896  * @param obj the entry evas object
897  * @param event_info event type
898  */
899 static void
900 __setting_about_entry_device_name_changed_cb(void *data, Evas_Object *obj,
901                                              void *event_info)
902 {
903         /*SETTING_TRACE_BEGIN; */
904         setting_retm_if(obj == NULL, "obj is NULL");
905         setting_retm_if(data == NULL, "data is NULL");
906         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
907         SettingAboutUG *ad = list_item->userdata;
908         retm_if(ad == NULL, "Data parameter is NULL");
909
910         /* 1. entry is empty */
911         /* 2. entry is not empty */
912         if (list_item->item) {
913                 if (elm_entry_is_empty(obj)) {
914                         elm_object_item_signal_emit(list_item->item, "elm,state,eraser,hide", "");
915                 } else {
916                         Eina_Bool device_focus_status = elm_object_focus_get(ad->item_dev_name->eo_check);
917                         if (device_focus_status) {
918                                 /*SETTING_TRACE("name is NOT empty, but focus"); */
919                                 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,show", "");
920                         }
921                 }
922                 elm_object_item_signal_emit(list_item->item, "elm,state,guidetext,hide", "");
923         }
924
925         __setting_about_entry_changed_cb(data, obj);
926         /*SETTING_TRACE_END; */
927 }
928
929 /**
930  * @brief device name entry focus callback.
931  *
932  * @param data application data
933  * @param obj the entry evas object
934  * @param event_info event type
935  */
936 static void __setting_about_entry_focused(void *data, Evas_Object *obj, void *event_info) /* Focused callback will show X marked button and hide guidetext. */
937 {
938         SETTING_TRACE_BEGIN;
939         retm_if(!data || !obj, "Data parameter is NULL");
940         Setting_GenGroupItem_Data *item_dev_name = data;
941
942
943         /* accessibiliy */
944         elm_entry_cursor_end_set(obj);
945         const char *txt = elm_entry_entry_get(obj);
946         if (!txt || 0 == strlen(txt)) {
947                 txt = elm_object_part_text_get(obj, "elm.guide");
948         }
949
950         /* Say entry focused */
951         Eina_Stringshare *str = eina_stringshare_printf("%s, Edit Field, Keyboard opened", txt);
952         elm_access_say((char *)str);
953         eina_stringshare_del(str);
954
955         SettingAboutUG *ad = item_dev_name->userdata;
956         retm_if(!ad, "ad parameter is NULL");
957         Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(item_dev_name->eo_check);
958         if (imf_context) {
959                 ecore_imf_context_input_panel_show(imf_context);
960         }
961 }
962
963 /**
964  * @brief device name entry unfocus callback.
965  *
966  * @param data application data
967  * @param obj the entry evas object
968  * @param event_info event type
969  */
970 static void __setting_about_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
971 {
972         SETTING_TRACE_BEGIN;
973         retm_if(!data || !obj, "Data parameter is NULL");
974
975
976         const char *entry_str = elm_entry_entry_get(obj);
977         char *entry_str_utf8 = NULL;
978         entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
979         SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
980
981         Setting_GenGroupItem_Data *item_dev_name = data;
982         SettingAboutUG *ad = item_dev_name->userdata;
983
984         if (isSpaceStr(entry_str)) {
985                 if (!ad->empty_flag) {
986                         ad->empty_flag = TRUE;
987                 }
988         } else {
989                 if (ad->empty_flag) {
990                         ad->empty_flag = FALSE;
991                 }
992         }
993
994         if (item_dev_name->enterKeyPressFlag == TRUE)
995         {
996                 char* name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
997                 if (!ad->empty_flag && safeStrCmp(name_value, entry_str_utf8) != 0) {
998                         if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
999                                 SETTING_TRACE_ERROR("Set vconf[%s] failed", VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1000                         }
1001                 }
1002                 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
1003                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1004                 }
1005                 FREE(name_value);
1006         }
1007         setting_hide_input_pannel_cb(item_dev_name->eo_check);
1008
1009         FREE(entry_str_utf8);
1010         elm_entry_select_none(obj);
1011         SETTING_TRACE_END;
1012 }
1013
1014
1015 /**
1016  * @brief device name entry max length reached callback.
1017  *
1018  * @param data application data
1019  * @param obj the entry evas object
1020  * @param event_info event type
1021  */
1022 static void __setting_about_entry_max_len_reached(void *data, Evas_Object *obj, void *event_info)
1023 {
1024         SETTING_TRACE_BEGIN;
1025         retm_if(data == NULL, "Data parameter is NULL");
1026         retm_if(!elm_object_focus_get(obj), "Entry is not focused"); /*notify only when entry is being focused on. */
1027
1028         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1029         list_item->maxLengthReachFlag = true;
1030
1031         SettingAboutUG *ad = list_item->userdata;
1032         if (list_item->maxLengthReachFlag && list_item->enterKeyPressFlag == FALSE) {
1033
1034                 if (!ad->popup_showed_flag && NULL == ad->popup_space) {
1035                         ad->popup_showed_flag = TRUE;/*workaroud to fix popup blink issue. */
1036                         char strMax[BUF_SIZE] = {0,};
1037                         snprintf(strMax, BUF_SIZE, _("IDS_ST_POP_THE_MAXIMUM_NUMBERS_OF_CHARACTERS_FOR_YOUR_DEVICE_NAME_HPD_HAS_BEEN_EXCEEDED"),
1038                                  MAX_DEVICE_NAME_LEN);
1039
1040                         ad->popup_space = setting_create_popup(ad, ad->win_get, "IDS_ST_HEADER_ENTER_VALID_DEVICE_NAME_ABB",
1041                                                                                                    strMax, __setting_about_main_popup_cb, 0, FALSE, FALSE,
1042                                                                                                    1, "IDS_ST_BUTTON_OK_ABB");
1043                 }
1044         }
1045 }
1046
1047 /**
1048  * @brief device name entry input panel state event call back
1049  *      - input panel state event:ECORE_IMF_INPUT_PANEL_STATE_EVENT
1050  *
1051  * @param data application data
1052  * @param obj the entry evas object
1053  * @param event_info event type
1054  */
1055 static void __setting_about_entry_input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1056 {
1057         SETTING_TRACE_BEGIN;
1058         retm_if(data == NULL, "Data parameter is NULL");
1059         retm_if(ctx == NULL, "obj parameter is NULL");
1060         SettingAboutUG *ad = (SettingAboutUG *)data;
1061
1062         if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
1063                 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1064         } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
1065                 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1066
1067                 if (ad->item_dev_name) {
1068
1069                         if (ad->empty_flag) {
1070                                 ad->idler_add_popup = ecore_idler_add(__setting_about_popup_show_delay, ad);
1071                         }
1072
1073                 }
1074                 /*if Setting is overlapped by other app,the entry will lost its focus,
1075                 the input pannel will be hided and any popup should be removed to fix blinking issue.*/
1076                 if (ad->pause_flag) {
1077                         ad->idler_remove_popup = ecore_idler_add(__setting_about_popup_remove_delay, ad);
1078                 }
1079                 elm_object_focus_set(ad->navi_bar, EINA_FALSE);
1080
1081         }
1082 }
1083
1084 /**
1085  * @brief aboutUG vconf changed callback
1086  *
1087  * @param key the changed vconf key node.
1088  * @param data application data
1089  * @param event_info event type
1090  */
1091 static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
1092 {
1093         SETTING_TRACE_BEGIN;
1094         setting_retm_if(NULL == key, "key is NULL");
1095         setting_retm_if(NULL == data, "data is NULL");
1096         SettingAboutUG *ad = (SettingAboutUG *)data;
1097
1098         int status = vconf_keynode_get_int(key);
1099         char *vconf_name = vconf_keynode_get_name(key);
1100
1101         if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
1102                 SETTING_TRACE("status:%d", status);
1103                 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
1104                 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
1105                 if (ad->item_data_wifi) {
1106                         G_FREE(ad->item_data_wifi->sub_desc);
1107                         ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
1108                         elm_object_item_data_set(ad->item_data_wifi->item, ad->item_data_wifi);
1109                         elm_genlist_item_update(ad->item_data_wifi->item);
1110                 }
1111         } else if (!safeStrCmp(vconf_name, VCONFKEY_BT_STATUS)) {
1112                 SETTING_TRACE("status:%d", status);
1113                 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
1114                 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
1115                 if (ad->item_data_bt) {
1116                         G_FREE(ad->item_data_bt->sub_desc);
1117                         ad->item_data_bt->sub_desc = (char *)g_strdup(str);
1118                         elm_object_item_data_set(ad->item_data_bt->item, ad->item_data_bt);
1119                         elm_genlist_item_update(ad->item_data_bt->item);
1120                 }
1121         } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DEVICE_NAME_STR)) {
1122                 char *name_value = NULL;
1123                 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1124                 if (NULL == name_value) {
1125                         /*use the defaule name if get vconf failed*/
1126                         name_value = (char *)g_strdup(DEVICE_NAME_DEFAULE);
1127                 }
1128                 SETTING_TRACE("name:%s", name_value);
1129                 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
1130                         /*for genlist update */
1131                         if (safeStrCmp(ad->item_dev_name->sub_desc, name_value) != 0) {
1132                                 char *str_name = elm_entry_utf8_to_markup(name_value);
1133                                 elm_entry_entry_set(ad->item_dev_name->eo_check, str_name);
1134                                 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
1135                                 G_FREE(ad->item_dev_name->sub_desc);/*release first */
1136                                 ad->item_dev_name->sub_desc = (char *)g_strdup(str_name);
1137                                 FREE(str_name);
1138                         }
1139                 }
1140                 if (ad->item_dev_name_main && ad->item_dev_name_main->sub_desc) {
1141                         if (safeStrCmp(ad->item_dev_name_main->sub_desc, name_value) != 0) {
1142                                 char *str_name = elm_entry_utf8_to_markup(name_value);
1143                                 char *tmp = ad->item_dev_name_main->sub_desc;
1144                                 ad->item_dev_name_main->sub_desc = (char *)g_strdup(str_name);
1145                                 elm_genlist_item_fields_update(ad->item_dev_name_main->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
1146                                 FREE(str_name);
1147                                 G_FREE(tmp);
1148
1149                         }
1150                 }
1151                 FREE(name_value);
1152         } else {
1153                 SETTING_TRACE_ERROR("vconf_name is error");
1154         }
1155 }
1156
1157 /**
1158  * @brief UG destroy callback
1159  *
1160  * @param ug the UG which is needed to be destoried
1161  * @param priv application data
1162  */
1163 static void __destroy_ug_cb(ui_gadget_h ug, void *priv)
1164 {
1165         SETTING_TRACE_BEGIN;
1166
1167         /* restore the '<-' button on the navigate bar */
1168         ret_if(!priv);
1169         SettingAboutUG *ad = (SettingAboutUG *) priv;   /* ad is point to priv */
1170
1171         if (ug) {
1172                 setting_ug_destroy(ug);
1173                 ad->ug_loading = NULL;
1174         }
1175         elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
1176 }
1177
1178 /**
1179  * @brief Lunch cetificates UG(setting-manage-certificates-efl)
1180  *
1181  * @param data application data
1182  */
1183 static void __setting_about_main_certificates_clicked(void *data)
1184 {
1185         SETTING_TRACE_BEGIN;
1186         retm_if(data == NULL, "Data parameter is NULL");
1187         SettingAboutUG *ad = (SettingAboutUG *)data;
1188
1189         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1190         if (!cbs) {
1191                 return;
1192         }
1193
1194         cbs->layout_cb = setting_about_layout_ug_cb;
1195         cbs->result_cb = NULL;
1196         cbs->destroy_cb = __destroy_ug_cb;
1197         cbs->priv = (void *)ad;
1198
1199         elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1200         ad->ug_loading =
1201             setting_ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1202
1203         if (NULL == ad->ug_loading) {   /* error handling */
1204                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1205         }
1206         FREE(cbs);
1207 }
1208
1209 /**
1210  * @brief Lunch UG setting-phone-efl
1211  *
1212  * @param data application context
1213  */
1214 static void __setting_about_main_licence_launch(void *data)
1215 {
1216         SETTING_TRACE_BEGIN;
1217         retm_if(data == NULL, "Data parameter is NULL");
1218         SettingAboutUG *ad = (SettingAboutUG *)data;
1219
1220         app_control_h svc;
1221         if (app_control_create(&svc)) {
1222                 return;
1223         }
1224
1225         app_control_add_extra_data(svc, "viewtype", "license");
1226
1227         struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1228         if (!cbs) {
1229                 app_control_destroy(svc);
1230                 return;
1231         }
1232
1233         cbs->layout_cb = setting_about_layout_ug_cb;
1234         cbs->result_cb = NULL;
1235         cbs->destroy_cb = __destroy_ug_cb;
1236         cbs->priv = (void *)ad;
1237
1238
1239         elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1240         ad->ug_loading =
1241             setting_ug_create(ad->ug, "setting-phone-efl", UG_MODE_FULLVIEW, svc, cbs);
1242
1243         if (NULL == ad->ug_loading) {   /* error handling */
1244                 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1245         }
1246         app_control_destroy(svc);
1247         FREE(cbs);
1248 }
1249
1250 /**
1251  * @brief expanlist sub-item selected callback
1252  *
1253  * @param data app context
1254  * @param obj evas object
1255  * @param event_info event type
1256  */
1257 static void __setting_about_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
1258 {
1259         SETTING_TRACE_BEGIN;
1260         /* error check */
1261         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1262         Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
1263         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
1264         elm_genlist_item_selected_set(subitem, 0);
1265         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
1266         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);  /* parent data */
1267         ret_if(NULL == data_subItem || NULL == data_parentItem);
1268
1269
1270         int err;
1271         setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
1272         setting_retm_if(0 != err, "Set vconf error[%d]", data_parentItem->int_slp_setting_binded);
1273
1274         data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
1275         elm_object_item_data_set(data_parentItem->item, data_parentItem);
1276         elm_genlist_item_update(data_parentItem->item);
1277         elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
1278 }
1279
1280 /**
1281  * @brief expanlist sub-item radio checked callback
1282  *
1283  * @param data app context
1284  * @param obj evas object
1285  * @param event_info event type
1286  */
1287
1288 static void __setting_about_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
1289 {
1290         SETTING_TRACE_BEGIN;
1291         retm_if(data == NULL, "Data parameter is NULL");
1292         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1293
1294         Elm_Object_Item *subItem = list_item->item;
1295         Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subItem);
1296
1297         Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subItem);     /* subItem data */
1298         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);  /* parent data */
1299         ret_if(NULL == data_subItem || NULL == data_parentItem);
1300
1301         int err;
1302         setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
1303
1304         ret_if(0 != err);
1305         data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
1306         elm_object_item_data_set(data_parentItem->item, data_parentItem);
1307         elm_genlist_item_update(data_parentItem->item);
1308         elm_radio_value_set(obj, data_subItem->chk_status);
1309 }
1310
1311 /**
1312  * @brief expanlist state changed callback
1313  *
1314  * @param data app context
1315  * @param obj evas object
1316  * @param event_info event type
1317  */
1318 void setting_about_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
1319 {
1320         SETTING_TRACE_BEGIN;
1321         setting_retm_if(data == NULL, "Data parameter is NULL");
1322         setting_retm_if(event_info == NULL, "event_info parameter is NULL");
1323
1324         SettingAboutUG *ad = (SettingAboutUG *) data;
1325         Elm_Object_Item *parentItem = event_info;        /* parent item */
1326         Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
1327         Evas_Object *scroller = elm_object_item_widget_get(parentItem);
1328
1329         Evas_Object *rgd = elm_radio_add(scroller);
1330         elm_radio_value_set(rgd, -1);
1331
1332         int err;
1333         char sel_num[SETTING_SIM_MSISDN_DIALING_NUMBER_LEN] = { 0, };
1334         setting_retm_if(NULL == data_parentItem, "data_parentItem is NULL");
1335         setting_get_string_slp_key(data_parentItem->int_slp_setting_binded, sel_num, &err);
1336         SETTING_TRACE("binded: %d, checked: %s, err: %d", data_parentItem->int_slp_setting_binded, sel_num, err);
1337
1338         int i = 0;
1339         int sel_idx = -1;
1340         Setting_GenGroupItem_Data *item_data = NULL;
1341
1342         /*for(; i < SETTING_ABOUT_MY_NUMBERS_LEN; i++) { */
1343         for (; i < ad->my_numbers.count; i++) {
1344                 if (ad->my_numbers.list[i].num[0] == '\0') {
1345                         break;
1346                 }
1347
1348                 if (sel_idx == -1 && 0 == safeStrCmp(sel_num, ad->my_numbers.list[i].num)) {
1349                         sel_idx = i;
1350                 }
1351                 item_data = setting_create_Gendial_exp_sub_field(scroller,
1352                                                                  &(ad->itc_1icon_1text_sub),
1353                                                                  __setting_about_sub_list_sel_cb, ad, parentItem,
1354                                                                  SWALLOW_Type_1RADIO, rgd,
1355                                                                  i,
1356                                                                  ad->my_numbers.list[i].num, __setting_about_sub_list_rd_change);
1357                 if (item_data) {
1358                         item_data->userdata = ad;
1359                 } else {
1360                         SETTING_TRACE_ERROR("item_data is NULL");
1361                 }
1362         }
1363
1364         elm_radio_value_set(rgd, sel_idx);
1365 }
1366
1367 /**
1368 * @brief Do process when clicking '<-' button
1369 *
1370 * @param data application context
1371 * @param obj evas object
1372 * @param event_info event type
1373 */
1374 static Eina_Bool
1375 setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
1376                                          void *event_info)
1377 {
1378         SETTING_TRACE_BEGIN;
1379         setting_retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
1380         SettingAboutUG *ad = (SettingAboutUG *) data;
1381         if (ad->empty_flag) {
1382                 return EINA_FALSE;
1383         }
1384
1385         /*imf must be hided before view is destroyed. */
1386         /*Following code is just to improve the hiding speed. If not add these code, */
1387         /*the input pannel will also be hided with the view destroyed,but it works too slow. */
1388         if (ad->item_dev_name) {
1389                 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1390                 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1391         }
1392
1393         /* Send destroy request */
1394         ug_destroy_me(ad->ug);
1395
1396         return EINA_FALSE;
1397 }
1398
1399 static Eina_Bool __setting_about_child_view_back_cb(void *data, Elm_Object_Item *it)
1400 {
1401         SETTING_TRACE_BEGIN;
1402         /* error check */
1403         retvm_if(data == NULL, EINA_TRUE, "Data parameter is NULL");
1404
1405         SettingAboutUG *ad =  data;
1406         if (ad->empty_flag) {
1407                 return EINA_FALSE;
1408         } else {
1409                 if (ad->event_handler) {
1410                         ecore_event_handler_del(ad->event_handler);
1411                         ad->event_handler = NULL;
1412                 }
1413                 if (ad->name_update_idler) {
1414                         ecore_idler_del(ad->name_update_idler);
1415                         ad->name_update_idler = NULL;
1416                 }
1417                 return EINA_TRUE;
1418         }
1419 }
1420
1421 static Eina_Bool __setting_about_name_view_key_down(void *data, int type, void *event)
1422 {
1423         SETTING_TRACE_BEGIN;
1424         Evas_Event_Key_Down *ev = event;
1425
1426         if (!ev || !data) {
1427                 return ECORE_CALLBACK_RENEW;
1428         }
1429
1430         SettingAboutUG *ad = data;
1431         if (!strcmp(ev->keyname, "XF86Back")) {
1432                 setting_about_naviframe_btn_cancel_cb(ad, NULL, NULL);
1433         }
1434         return ECORE_CALLBACK_RENEW;
1435 }
1436 static Eina_Bool setting_about_name_focus_update_cb(const void *data)
1437 {
1438         SETTING_TRACE_BEGIN;
1439         /* error check */
1440         setting_retvm_if(data == NULL, ECORE_CALLBACK_RENEW, "Data parameter is NULL");
1441         SettingAboutUG *ad = data;
1442         if (ad->item_dev_name && ad->item_dev_name->eo_check) {
1443                 evas_object_show(ad->item_dev_name->eo_check);
1444                 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1445
1446                 ad->name_update_idler = NULL;
1447                 return ECORE_CALLBACK_CANCEL;
1448         } else {
1449                 return ECORE_CALLBACK_RENEW;
1450         }
1451
1452 }
1453
1454
1455 /**
1456  * Setting > About > Device name > (new view) here
1457  */
1458 static void __setting_about_main_creat_name_view(data)
1459 {
1460         SETTING_TRACE_BEGIN;
1461         /* error check */
1462         setting_retm_if(data == NULL, "Data parameter is NULL");
1463         SettingAboutUG *ad =    data;
1464
1465         Evas_Object *scroller = NULL;
1466         scroller = elm_genlist_add(ad->navi_bar);
1467         setting_retm_if(scroller == NULL, "Cannot set scroller object  as contento of layout");
1468         elm_genlist_realization_mode_set(scroller, EINA_TRUE);
1469         elm_genlist_clear(scroller);    /* first to clear list */
1470         elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
1471         evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
1472
1473         /* Device name */
1474         char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1475         char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
1476         FREE(name_value);
1477
1478         ad->empty_flag = FALSE;
1479         if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0]) {
1480                 ad->empty_flag = TRUE;
1481         }
1482
1483         Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)calloc(1, sizeof(Setting_GenGroupItem_Data));
1484         if (!item_data) {
1485                 FREE(pa_sub_desc);
1486         }
1487         setting_retvm_if(!item_data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "calloc failed");
1488
1489         item_data->keyStr = (char *)g_strdup(SETTING_ABOUT_DEVICE_NAME_STR);
1490         item_data->sub_desc = (char *)g_strdup(pa_sub_desc);
1491         item_data->swallow_type = SWALLOW_Type_LAYOUT_EDITFIELD;
1492         item_data->chk_status = 0;
1493         item_data->chk_change_cb = __setting_about_entry_device_name_changed_cb;
1494         item_data->userdata = ad;
1495         //item_data->isSinglelineFlag = FALSE;
1496         item_data->isSinglelineFlag = TRUE;
1497         item_data->stop_change_cb = __setting_about_entry_unfocus_cb;
1498         item_data->maxlength_reached_cb = __setting_about_entry_max_len_reached;
1499         item_data->focus_cb = __setting_about_entry_focused;
1500         item_data->x_callback_cb = __setting_about_entry_input_panel_event_cb;
1501         item_data->guide_text = (char *)g_strdup(EMPTY_LIMITATION_STR);
1502         item_data->focus_unallowed = get_tethering_status();
1503         item_data->return_key_type = ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE;
1504
1505         item_data->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Limit_Size));
1506         if (item_data->limit_filter_data) {
1507                 /*max byte len is 32 -> MAX_DEVICE_NAME_LEN */
1508                 item_data->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
1509                 item_data->win_main = ad->win_get;
1510         } else {
1511                 SETTING_TRACE_ERROR("fail to calloc");
1512         }
1513
1514         item_data->digits_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
1515         if (item_data->digits_filter_data) {
1516                 item_data->digits_filter_data->accepted = NULL;
1517         } else {
1518                 SETTING_TRACE_ERROR("fail to calloc");
1519         }
1520
1521         item_data->input_panel_disable_flag = EINA_TRUE;
1522
1523         /* add genlist item here for the device name */
1524         item_data->item = elm_genlist_item_append(scroller, &(itc_editfield), item_data, NULL, ELM_GENLIST_ITEM_NONE,
1525                                                   NULL, ad);
1526
1527         ad->item_dev_name = item_data;
1528         if (ad->item_dev_name) {
1529                 __BACK_POINTER_SET(ad->item_dev_name);
1530                 elm_genlist_item_select_mode_set(ad->item_dev_name->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1531         } else {
1532                 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
1533         }
1534
1535         FREE(pa_sub_desc);
1536
1537         Elm_Object_Item *navi_it = setting_push_layout_navi_bar(_(DEVICE_NAME),
1538                                                                 NULL, NULL, NULL,
1539                                                                 NULL, NULL, NULL,
1540                                                                 ad, scroller, ad->navi_bar, NULL);
1541         elm_naviframe_item_pop_cb_set(navi_it, __setting_about_child_view_back_cb, ad);
1542
1543         Evas_Object *btn;
1544         /* Title Cancel Button */
1545         btn = elm_button_add(ad->navi_bar);
1546         elm_object_style_set(btn, "naviframe/title_cancel");
1547         evas_object_smart_callback_add(btn, "clicked", setting_about_naviframe_btn_cancel_cb, ad);
1548         elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
1549
1550         /* Title Done Button */
1551         btn = elm_button_add(ad->navi_bar);
1552         elm_object_style_set(btn, "naviframe/title_done");
1553         evas_object_smart_callback_add(btn, "clicked", setting_about_naviframe_btn_done_cb, ad);
1554         elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
1555
1556         ad->event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __setting_about_name_view_key_down, ad);
1557         ad->name_update_idler = ecore_idler_add(setting_about_name_focus_update_cb, ad);
1558 }
1559
1560 /**
1561  * @brief Do process when clicking on some genlist item
1562  *
1563  * @param data application context
1564  * @param obj evas object
1565  * @param event_info event type
1566  */
1567 static void
1568 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1569                                             void *event_info)
1570 {
1571         SETTING_TRACE_BEGIN;
1572         /* error check */
1573         setting_retm_if(data == NULL, "Data parameter is NULL");
1574
1575         retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1576         Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1577         elm_genlist_item_selected_set(item, 0);
1578         Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1579         retm_if(list_item == NULL, "return of elm_object_item_data_get is NULL");
1580
1581         SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1582         if (!safeStrCmp("IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB", list_item->keyStr)) {
1583                 __setting_about_main_certificates_clicked(data);
1584         } else if (!safeStrCmp(KeyStr_Regulatory_Info, list_item->keyStr)) {
1585                 __setting_about_popup_regulatory_info(data);
1586         } else if (!safeStrCmp("IDS_ST_MBODY_LEGAL_INFORMATION_ABB", list_item->keyStr)) {
1587                 __setting_about_main_licence_launch(data);
1588         } else if (!safeStrCmp("IDS_ST_MBODY_SOFTWARE_UPDATE", list_item->keyStr)) {
1589 #ifdef SUPPORT_FOTA
1590                 SettingAboutUG *ad = (SettingAboutUG *)list_item->userdata;
1591                 Evas_Object *back_btn = elm_object_item_part_content_get(ad->navi_item, "prev_btn");
1592                 if (back_btn) {
1593                         SETTING_TRACE_DEBUG("Change focus to back_btn");
1594                         elm_object_focus_set(back_btn, EINA_TRUE);
1595                 }
1596
1597                 app_launcher("org.tizen.oma-dm");
1598 #endif
1599         } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
1600                 __setting_about_main_creat_name_view(data);
1601         }
1602 }
1603
1604
1605
1606 /**
1607  * @brief callback function for genlist event "drag"
1608  *
1609  * @param data application context
1610  * @param obj evas object
1611  * @param event_info event type
1612  */
1613 static void setting_about_main_gl_drag(void *data, Evas_Object *obj, void *event)
1614 {
1615         ret_if(!data);
1616         retm_if(event == NULL, "Invalid argument: event info is NULL");
1617         SettingAboutUG *ad = (SettingAboutUG *) data;
1618         ad->drag_flag = TRUE;
1619 }
1620
1621
1622 /**
1623  * @brief callback function for EVAS_CALLBACK_MOUSE_UP
1624  *
1625  * @param data application context
1626  * @param e evas
1627  * @param obj evas object
1628  * @param event_info event type
1629  */
1630 static void
1631 setting_about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
1632 {
1633         /*SETTING_TRACE_BEGIN; */
1634         ret_if(!data);
1635         SettingAboutUG *ad = (SettingAboutUG *) data;
1636         retm_if(event == NULL, "Invalid argument: event info is NULL");
1637         Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
1638
1639         if (ad->drag_flag) {
1640                 ad->drag_flag = FALSE;
1641                 return;
1642         }
1643
1644         if (ad->item_dev_name) {
1645                 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
1646                 if (ad->item_dev_name->item == selected_item) {
1647                         if (elm_object_focus_get(ad->item_dev_name->eo_check)) {
1648                                 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
1649                                 if (imf_context) {
1650                                         ecore_imf_context_input_panel_show(imf_context);
1651                                 }
1652                                 return;
1653                         }
1654
1655                         if (get_tethering_status()) {
1656                                 if (ad->popup) {
1657                                         evas_object_del(ad->popup);
1658                                         ad->popup = NULL;
1659                                 }
1660
1661                                 ad->popup = setting_create_popup(ad, ad->win_get,
1662                                                                                                  NULL, SETTING_ABOUT_MOBILE_AP_TURNED_OFF,
1663                                                                                                  __setting_about_popup_mobile_ap_turn_off_ask_resp_cb, 0,
1664                                                                                                  FALSE, FALSE,
1665                                                                                                  2, "IDS_ST_BODY_TURN_OFF", "IDS_ST_BUTTON_CANCEL_ABB2");
1666                         } else {
1667                                 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1668                                 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
1669
1670                                 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
1671                                 if (imf_context) {
1672                                         ecore_imf_context_input_panel_show(imf_context);
1673                                 }
1674                         }
1675                 } else {
1676                         elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);/*to make inputing words input */
1677                 }
1678         }
1679         /*SETTING_TRACE_END; */
1680 }
1681
1682
1683 /**
1684  * @brief callback run for timer task to update CPU, Battery info
1685  *
1686  * @param data application context
1687  *
1688  * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
1689  */
1690 static Eina_Bool setting_about_main_timer_update_cb(const void *data)
1691 {
1692         retv_if(data == NULL, TRUE);
1693         SettingAboutUG *ad = (SettingAboutUG *) data;
1694
1695         char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
1696         if (ad->item_data_cpu) {
1697                 float usr, sys;
1698                 int ret = setting_about_main_stat_get_cpuinfo(&usr, &sys);
1699                 if (ret == -ENOENT) {
1700                         SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
1701                         snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
1702                 } else {
1703                         snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
1704                 }
1705
1706                 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
1707                 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
1708                 elm_genlist_item_update(ad->item_data_cpu->item);
1709         }
1710
1711         if (ad->item_data_battery) {
1712                 setting_about_main_get_battery_string(str, sizeof(str));
1713                 /*SETTING_TRACE("str:%s", str);*/
1714                 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
1715
1716                 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
1717                 elm_genlist_item_update(ad->item_data_battery->item);
1718         }
1719         if (ad->need_update) {
1720                 if (ad->item_data_my_phone_number) {
1721                         G_FREE(ad->item_data_my_phone_number->sub_desc);
1722                         ad->item_data_my_phone_number->sub_desc = (char *)g_strdup(SETTING_ABOUT_PUK_LOCKED);
1723                         elm_object_item_data_set(ad->item_data_my_phone_number->item, ad->item_data_my_phone_number);
1724                         elm_genlist_item_update(ad->item_data_my_phone_number->item);
1725                         ad->need_update = FALSE;
1726                 }
1727         }
1728         return TRUE;
1729 }
1730
1731 /**
1732  * @brief create main view genlist items
1733  *
1734  * @param data application data
1735  *
1736  * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
1737  */
1738 int setting_about_main_generate_genlist(void *data)
1739 {
1740         SETTING_TRACE_BEGIN;
1741         /* error check */
1742         retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1743
1744         SettingAboutUG *ad = (SettingAboutUG *) data;
1745         bool is_emul_bin = isEmulBin();
1746
1747         Evas_Object *scroller = ad->genlsit;
1748         Elm_Object_Item *item = NULL;
1749         Setting_GenGroupItem_Data *item_data = NULL;
1750         char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
1751         telephony_handle_list_s tapi_handle_list;
1752         int i = 0;
1753         int tapi_handle_count = 0;
1754         int ret_value = 0;
1755         int ret_get_app_info = 0;
1756         app_info_h app_info = NULL;
1757         ret_get_app_info = app_info_create("org.tizen.oma-dm", &app_info);
1758
1759         /* [UI] Software update */
1760         if (ret_get_app_info != APP_MANAGER_ERROR_NONE) {
1761                 SETTING_TRACE("No corresponding app_id for [%s]\n", "org.tizen.oma-dm");
1762         } else {
1763                 if (!is_emul_bin) {
1764                         item_data = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1765                                         setting_about_main_mouse_up_Gendial_list_cb,
1766                                         ad, SWALLOW_Type_INVALID, NULL, NULL,
1767                                         0, "IDS_ST_MBODY_SOFTWARE_UPDATE",
1768                                         NULL, NULL);
1769                         if (item_data) {
1770                                 item_data->userdata = ad;
1771                         } else {
1772                                 SETTING_TRACE_ERROR("item_data is NULL");
1773                         }
1774                 }
1775         }
1776
1777         /* [UI] Certificates */
1778         /* implementation is in progress. */
1779         item_data = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1780                         setting_about_main_mouse_up_Gendial_list_cb,
1781                         ad, SWALLOW_Type_INVALID, NULL, NULL,
1782                         0, "IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB", NULL, NULL);
1783         if (item_data) {
1784         } else {
1785                 SETTING_TRACE_ERROR("item_data is NULL");
1786         }
1787
1788         item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
1789                         ELM_GENLIST_ITEM_NONE, NULL, NULL);
1790         elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1791
1792         /* [UI] Legal Information */
1793         setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1794                         setting_about_main_mouse_up_Gendial_list_cb,
1795                         ad, SWALLOW_Type_INVALID, NULL, NULL,
1796                         0, "IDS_ST_MBODY_LEGAL_INFORMATION_ABB", NULL, NULL);
1797
1798         /*//////////////////////////////////////////////////////////////////// */
1799         /* [UI] separator */
1800         elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL),
1801                         ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1802         (void)setting_create_Gendial_field_titleItem(scroller,
1803                         &(ad->itc_group_item),
1804                         "IDS_ST_BODY_DEVICE_INFORMATION", NULL);
1805         /*//////////////////////////////////////////////////////////////////// */
1806
1807         /* 1. Name */
1808         /* Device name */
1809         char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1810         char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
1811         FREE(name_value);
1812
1813         ad->empty_flag = FALSE;
1814         if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0]) {
1815                 ad->empty_flag = TRUE;
1816         }
1817         /* [UI] Name */
1818         ad->item_dev_name_main = item_data =
1819                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), setting_about_main_mouse_up_Gendial_list_cb,
1820                                 ad, SWALLOW_Type_INVALID, NULL,
1821                                 NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc, NULL);
1822         if (item_data) {
1823                 __BACK_POINTER_SET(ad->item_dev_name_main);
1824         } else {
1825                 SETTING_TRACE_ERROR("item_data is NULL");
1826         }
1827         FREE(pa_sub_desc);
1828
1829
1830         /* 2. Phone number */
1831         /* Initialize telephony handle */
1832         int telephony_init_ret = telephony_init(&tapi_handle_list);
1833         if (telephony_init_ret != TELEPHONY_ERROR_NONE) {
1834                 tapi_handle_count = 0;
1835         } else {
1836                 tapi_handle_count = tapi_handle_list.count;
1837         }
1838         SETTING_TRACE_DEBUG("tapi_handle_list.count:%d", tapi_handle_list.count);
1839         /* my numbers(SIM1 and SIM2) */
1840         for (i = 0; i < tapi_handle_count; i++) {
1841                 memset(str, 0x00, sizeof(str));
1842                 char *my_number = NULL;
1843                 ret_value = telephony_sim_get_subscriber_number(tapi_handle_list.handle[i], &my_number);
1844                 if (ret_value != TELEPHONY_ERROR_NONE) {
1845                         SETTING_TRACE_ERROR("telephony_sim_get_subscriber_number() failed!!! [%d]", ret_value);
1846                         my_number = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1847                 } else if (isEmptyStr(my_number)) {
1848                         SETTING_TRACE_DEBUG("telephony_sim_get_subscriber_number() success, BUT return empty my number");
1849                         my_number = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1850                 }
1851                 /* [UI] Phone number */
1852                 item_data =
1853                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1854                                         NULL, SWALLOW_Type_INVALID, NULL,
1855                                         NULL, 0, "IDS_ST_BODY_PHONE_NUMBER", my_number, NULL);
1856                 if (item_data) {
1857                         elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1858                         elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1859                 } else {
1860                         SETTING_TRACE_ERROR("item_data is NULL");
1861                 }
1862                 FREE(my_number);
1863
1864         }
1865
1866         /* 3. [UI] Model number */
1867         memset(str, 0x00, sizeof(str));
1868         setting_about_main_get_phone_model_name(str, sizeof(str));
1869         item_data =
1870                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1871                                 NULL, SWALLOW_Type_INVALID, NULL,
1872                                 NULL, 0, "IDS_ST_BODY_MODEL_NUMBER", str, NULL);
1873         if (item_data) {
1874                 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1875                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1876         } else {
1877                 SETTING_TRACE_ERROR("item_data is NULL");
1878         }
1879         ad->item_model = item_data;
1880
1881         /* 4. [UI] Tizen version */
1882         memset(str, 0x00, sizeof(str));
1883         setting_about_main_get_sw_version(str, sizeof(str));
1884         item_data =
1885                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1886                                 NULL, SWALLOW_Type_INVALID, NULL,
1887                                 NULL, 0, "IDS_ST_MBODY_TIZEN_VERSION", str, NULL);
1888         if (item_data) {
1889                 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1890                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1891         } else {
1892                 SETTING_TRACE_ERROR("item_data is NULL");
1893         }
1894         ad->item_version = item_data;
1895
1896         /* 5. IMEI(IMEI 1 andd IMEI 2) */
1897         for (i = 0; i < tapi_handle_count; i++) {
1898                 memset(str, 0x00, sizeof(str));
1899                 /*setting_about_main_get_imei(str, sizeof(str),tapi_handle_list.handle[i]); */
1900                 char *imei = NULL;
1901                 ret_value = telephony_modem_get_imei(tapi_handle_list.handle[i], &imei);
1902                 if (ret_value != TELEPHONY_ERROR_NONE) {
1903                         SETTING_TRACE_ERROR("telephony_modem_get_imei() failed!!! [%d]", ret_value);
1904                         imei = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1905                 }
1906                 /* [UI] IMEI */
1907                 item_data =
1908                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1909                                         NULL, SWALLOW_Type_INVALID, NULL,
1910                                         NULL, 0, SETTING_ABOUT_IMEI_STR, imei, NULL);
1911                 if (item_data) {
1912                         elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1913                         elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1914                 } else {
1915                         SETTING_TRACE_ERROR("item_data is NULL");
1916                 }
1917                 FREE(imei);
1918
1919         }
1920         ret_value = telephony_deinit(&tapi_handle_list);
1921         if (ret_value != TELEPHONY_ERROR_NONE) {
1922                 SETTING_TRACE_ERROR("Deinitialize failed!!!");
1923         }
1924         /*ad->item_data_imei = item_data; */
1925
1926         /* 6. [UI] Bluetooth address */
1927         if (!is_emul_bin) {  /* requested by DI Kim due to BT BS on 11/26 */
1928                 memset(str, 0x00, sizeof(str));
1929                 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
1930                 ad->item_data_bt =
1931                         setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1932                                         NULL, SWALLOW_Type_INVALID, NULL,
1933                                         NULL, 0, "IDS_ST_MBODY_BLUETOOTH_ADDRESS", str, NULL); /*ad->itc_2text_2 */
1934                 if (ad->item_data_bt) {
1935                         elm_object_item_disabled_set(ad->item_data_bt->item, EINA_TRUE);
1936                         elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1937                         __BACK_POINTER_SET(ad->item_data_bt);
1938                 } else {
1939                         SETTING_TRACE_ERROR("item_data is NULL");
1940                 }
1941         }
1942
1943         /* 7. [UI] Wi-Fi MAC address */
1944         memset(str, 0x00, sizeof(str));
1945         setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
1946
1947         SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
1948
1949         ad->item_data_wifi =
1950                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1951                                 NULL, SWALLOW_Type_INVALID, NULL,
1952                                 NULL, 0, "IDS_ST_BODY_WI_FI_MAC_ADDRESS", str, NULL);
1953         if (ad->item_data_wifi) {
1954                 elm_object_item_disabled_set(ad->item_data_wifi->item, EINA_TRUE);
1955                 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1956                 __BACK_POINTER_SET(ad->item_data_wifi);
1957         } else {
1958                 SETTING_TRACE_ERROR("item_data is NULL");
1959         }
1960
1961         /* 8. [UI] Serial number */
1962         memset(str, 0x00, sizeof(str));
1963         setting_about_main_get_sn(str, sizeof(str));
1964         item_data =
1965                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1966                                 NULL, SWALLOW_Type_INVALID, NULL,
1967                                 NULL, 0, SETTING_ABOUT_SN_STR, str, NULL);
1968         if (item_data) {
1969                 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1970                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1971         } else {
1972                 SETTING_TRACE_ERROR("item_data is NULL");
1973         }
1974         ad->item_data_sn = item_data;
1975
1976         /* 9. [UI] Battery power */
1977         memset(str, 0x00, sizeof(str));
1978         setting_about_main_get_battery_string(str, sizeof(str));
1979         item_data =
1980                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1981                                 NULL, SWALLOW_Type_INVALID, NULL,
1982                                 NULL, 0, "IDS_ST_BUTTON_BATTERY_POWER_ABB", str, NULL);
1983         if (item_data) {
1984                 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1985                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1986                 ad->item_data_battery = item_data;
1987                 __BACK_POINTER_SET(ad->item_data_battery);
1988         } else {
1989                 SETTING_TRACE_ERROR("item_data is NULL");
1990         }
1991
1992         /* 10. [UI] CPU usage */
1993         memset(str, 0x00, sizeof(str));
1994         float usr, sys;
1995         int ret = setting_about_main_stat_get_cpuinfo(&usr, &sys);
1996         if (ret == -ENOENT) {
1997                 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
1998                 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
1999         } else {
2000                 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
2001         }
2002         ad->item_data_cpu = item_data =
2003                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2004                                 NULL, SWALLOW_Type_INVALID, NULL,
2005                                 NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
2006         if (ad->item_data_cpu) {
2007                 elm_object_item_disabled_set(ad->item_data_cpu->item, EINA_TRUE);
2008                 elm_genlist_item_select_mode_set(ad->item_data_cpu->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2009                 __BACK_POINTER_SET(ad->item_data_cpu);
2010         } else {
2011                 SETTING_TRACE_ERROR("item_data is NULL");
2012         }
2013
2014
2015         /* 12. Security status */
2016 #if 0
2017         app_info_h app_info2 = NULL;
2018         ret_get_app_info = app_info_create("org.tizen.smack-update-service", &app_info2);
2019         if (ret_get_app_info == APP_MANAGER_ERROR_NONE) {
2020                 char *security_status = NULL;
2021                 security_status = vconf_get_str(VCONFKEY_SECURITY_SPD_INSTALLED_POLICY_VERSION);
2022                 if (!security_status) {
2023                         SETTING_TRACE_ERROR("Failed to register into SPD server");
2024                         security_status = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
2025                 }
2026         }
2027 #else
2028         char *security_status = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
2029 #endif
2030         item_data =
2031                 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2032                                 NULL, SWALLOW_Type_INVALID, NULL,
2033                                 NULL, 0, "IDS_ST_TMBODY_SECURITY_STATUS", security_status, NULL);
2034         if (item_data) {
2035                 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
2036                 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2037         } else {
2038                 SETTING_TRACE_ERROR("item_data is NULL");
2039         }
2040         G_FREE(security_status);
2041
2042         if (app_info) {
2043                 app_info_destroy(app_info);
2044         }
2045
2046         ad->update_timer =
2047                 ecore_timer_add(1, (Ecore_Task_Cb) setting_about_main_timer_update_cb, ad);
2048
2049         return SETTING_RETURN_SUCCESS;
2050 }
2051
2052
2053 /**
2054  * @brief TAPI response callback,get the SIM LOCK data
2055  *
2056  * @param handle the changed vconf key node.
2057  * @param result application data
2058  * @param data it is struct TelSimLockInfo_t,store SIM lock info
2059  * @param user_data application data
2060  *
2061  * @see tel_get_sim_lock_info
2062  */
2063 static void __on_pin_getlock_info(TapiHandle *handle, int result, void *data, void *user_data)
2064 {
2065         SETTING_TRACE_BEGIN;
2066         ret_if(data == NULL || user_data == NULL);
2067         TelSimPinOperationResult_t sec_rt = result;
2068         TelSimLockInfo_t *lock = data;
2069         SettingAboutUG *ad = (SettingAboutUG *)user_data;
2070
2071         /*lock->lock_status = TAPI_SIM_LOCK_PERM_BLOCKED; //for UT */
2072         SETTING_TRACE_DEBUG("sec_ret[%d]", sec_rt);
2073         SETTING_TRACE_DEBUG("lock_status:%d", lock->lock_status);
2074         if (TAPI_SIM_LOCK_PERM_BLOCKED == lock->lock_status) {
2075                 /*update sub description with "PUK is locked" */
2076                 if (ad->item_data_my_phone_number) {
2077                         G_FREE(ad->item_data_my_phone_number->sub_desc);
2078                         ad->item_data_my_phone_number->sub_desc = (char *)g_strdup(SETTING_ABOUT_PUK_LOCKED);
2079                         elm_object_item_data_set(ad->item_data_my_phone_number->item, ad->item_data_my_phone_number);
2080                         elm_genlist_item_update(ad->item_data_my_phone_number->item);
2081                 } else {
2082                         ad->need_update = TRUE;
2083                 }
2084         }
2085 }
2086
2087 /**
2088  * @brief create aboutUG main view layout
2089  *
2090  * @param cb aboutUG data
2091  * @return 1 for success
2092  */
2093 static int setting_about_main_create(void *cb)
2094 {
2095         SETTING_TRACE_BEGIN;
2096         /* error check */
2097         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2098
2099         SettingAboutUG *ad = (SettingAboutUG *) cb;
2100
2101         Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
2102         retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
2103                         "Cannot set scroller object  as contento of layout");
2104         elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
2105         elm_genlist_realization_mode_set(scroller, EINA_TRUE);
2106         elm_genlist_clear(scroller);    /* first to clear list */
2107         ad->genlsit = scroller;
2108         evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
2109         evas_object_smart_callback_add(scroller, "realized", __setting_about_gl_realized_cb, NULL);
2110
2111         ad->ly_main =
2112                 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
2113                                 KeyStr_AboutDevice,
2114                                 NULL,
2115                                 (setting_call_back_func)setting_about_main_click_softkey_back_cb,
2116                                 ad, scroller,
2117                                 &ad->navi_bar, NULL);
2118
2119         ad->btn_done = setting_about_naviframe_btn_create(ad->navi_bar, _("IDS_SA_BUTTON_DONE_ABB"), setting_about_naviframe_btn_done_cb, ad);
2120         /*Title Text Right Button */
2121         ad->btn_cancel = setting_about_naviframe_btn_create(ad->navi_bar, _("IDS_ST_BUTTON_CANCEL_ABB"), setting_about_naviframe_btn_cancel_cb, ad);
2122         ad->genlsit = scroller;
2123
2124         evas_object_smart_callback_add(scroller, "drag", setting_about_main_gl_drag, ad);
2125
2126         evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, setting_about_main_gl_mouse_up, ad);
2127
2128         ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
2129
2130         setting_about_main_generate_genlist((void *)ad);
2131
2132         int ret = vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
2133                         __setting_about_main_vconf_change_cb, ad);
2134         if (ret != 0) {
2135                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2136         }
2137         ret = vconf_notify_key_changed(VCONFKEY_BT_STATUS,
2138                         __setting_about_main_vconf_change_cb, ad);
2139         if (ret != 0) {
2140                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2141         }
2142         ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
2143                         __setting_about_main_vconf_change_cb, ad);
2144         if (ret != 0) {
2145                 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2146         }
2147
2148         setting_view_about_main.is_create = 1;
2149         SETTING_TRACE_END;
2150         return SETTING_RETURN_SUCCESS;
2151 }
2152
2153 /**
2154  * @brief destroy aboutUG main view layout
2155  *
2156  * @param cb aboutUG data
2157  * @return 1 for success
2158  */
2159 static int setting_about_main_destroy(void *cb)
2160 {
2161         SETTING_TRACE_BEGIN;
2162         /* error check */
2163         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2164
2165         SettingAboutUG *ad = (SettingAboutUG *) cb;
2166
2167         evas_object_smart_callback_del(ad->genlsit, "realized", __gl_realized_cb);
2168
2169         int ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
2170                         __setting_about_main_vconf_change_cb);
2171         if (ret != 0) {
2172                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
2173         }
2174         ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
2175                         __setting_about_main_vconf_change_cb);
2176         if (ret != 0) {
2177                 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
2178         }
2179
2180         /*__setting_about_main_remove_noti(ad);*/
2181
2182
2183         if (ad->update_timer) {
2184                 ecore_timer_del(ad->update_timer);
2185                 ad->update_timer = NULL;
2186         }
2187         if (ad->update_idler) {
2188                 ecore_idler_del(ad->update_idler);
2189                 ad->update_idler = NULL;
2190         }
2191         if (ad->idler_add_popup) {
2192                 ecore_idler_del(ad->idler_add_popup);
2193                 ad->idler_add_popup = NULL;
2194         }
2195         if (ad->idler_remove_popup) {
2196                 ecore_idler_del(ad->idler_remove_popup);
2197                 ad->idler_remove_popup = NULL;
2198         }
2199         if (ad->idler_remove_space_popup) {
2200                 ecore_idler_del(ad->idler_remove_space_popup);
2201                 ad->idler_remove_space_popup = NULL;
2202         }
2203         if (ad->popup) {
2204                 evas_object_del(ad->popup);
2205                 ad->popup = NULL;
2206         }
2207         if (ad->popup_space) {
2208                 evas_object_del(ad->popup_space);
2209                 ad->popup_space = NULL;
2210         }
2211
2212         if (ad->ly_main != NULL) {
2213                 evas_object_del(ad->ly_main);
2214                 ad->ly_main = NULL;
2215         }
2216
2217         if (ad->event_handler) {
2218                 ecore_event_handler_del(ad->event_handler);
2219                 ad->event_handler = NULL;
2220         }
2221         if (ad->name_update_idler) {
2222                 ecore_idler_del(ad->name_update_idler);
2223                 ad->name_update_idler = NULL;
2224         }
2225         setting_view_about_main.is_create = 0;
2226         return SETTING_RETURN_SUCCESS;
2227 }
2228
2229 /**
2230  * @brief update aboutUG main view
2231  *
2232  * @param cb aboutUG data
2233  * @return 1 for success
2234  */
2235 static int setting_about_main_update(void *cb)
2236 {
2237         SETTING_TRACE_BEGIN;
2238         /* error check */
2239         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2240
2241         SettingAboutUG *ad = (SettingAboutUG *) cb;
2242
2243         if (ad->item_dev_name) {
2244                 ad->is_dev_name_focus = elm_object_focus_get(ad->item_dev_name->eo_check);
2245                 ad->cursor_pos = elm_entry_cursor_pos_get(ad->item_dev_name->eo_check);
2246
2247                 SETTING_TRACE("elm_object_focus_get(ad->item_dev_name->eo_check):%d", elm_object_focus_get(ad->item_dev_name->eo_check));
2248
2249                 SETTING_TRACE("ad->is_dev_name_focus:%d", ad->is_dev_name_focus);
2250                 /*elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
2251                   Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
2252                   if (imf_context) {
2253                   ecore_imf_context_input_panel_show(imf_context);
2254                   }*/
2255         }
2256
2257         if (ad->ly_main != NULL) {
2258                 evas_object_show(ad->ly_main);
2259         }
2260
2261         return SETTING_RETURN_SUCCESS;
2262 }
2263
2264 /**
2265  * @brief hide aboutUG main view
2266  *
2267  * @param cb aboutUG data
2268  * @return 1 for success
2269  */
2270 static int setting_about_main_cleanup(void *cb)
2271 {
2272         SETTING_TRACE_BEGIN;
2273         /* error check */
2274         retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2275
2276         SettingAboutUG *ad = (SettingAboutUG *) cb;
2277
2278         if (ad->ly_main != NULL) {
2279                 /*  evas_object_hide(ad->ly_main); */
2280         }
2281
2282         return SETTING_RETURN_SUCCESS;
2283 }
2284