3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.1 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 #include <setting-cfg.h>
18 #include <setting-about-main.h>
20 #include <sys/types.h>
23 //#include <bluetooth-api.h>
25 #include <bluetooth.h>
28 #include <app_manager.h>
29 #include <system_info.h>
31 #define DEVNAME_BLOCK_SPACE 0
33 /** @todo : need to handle unicode encoded input characters */
35 #define MAX_DEVICE_NAME_LEN 24
36 #define EMPTY_LIMITATION_STR "The Name cannot be empty or composited by spaces"//"IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
38 static int setting_about_main_create(void *cb);
39 static int setting_about_main_destroy(void *cb);
40 static int setting_about_main_update(void *cb);
41 static int setting_about_main_cleanup(void *cb);
43 setting_view setting_view_about_main = {
44 .create = setting_about_main_create,
45 .destroy = setting_about_main_destroy,
46 .update = setting_about_main_update,
47 .cleanup = setting_about_main_cleanup,
50 * Do process when clicking '<-' button
56 static void setting_about_main_click_softkey_back_cb(void *data,
61 * Do process when clicking on some genlist item
67 static void setting_about_main_mouse_up_Gendial_list_cb(void *data,
71 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
72 static void __setting_about_main_certificates_clicked(void *data);
73 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj);
74 /* ***************************************************
78 ***************************************************/
80 static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
82 SettingAboutUG *ad = data;
90 static void __error_popup_response_cb(void *data, Evas_Object *obj,
94 retm_if(data == NULL, "Data parameter is NULL");
95 Setting_GenGroupItem_Data *list_item = data;
96 if (list_item->notify) {
97 evas_object_del(list_item->notify);
98 list_item->notify = NULL;
102 static void __device_name_changed_cb(void *data, Evas_Object *obj)
104 retm_if(!data || !obj, "Data parameter is NULL");
105 //return if entry is not focused too
107 Setting_GenGroupItem_Data *list_item =
108 (Setting_GenGroupItem_Data *) data;
109 SettingAboutUG *ad = list_item->userdata;
110 retm_if(ad == NULL, "Data parameter is NULL");
112 const char *entry_str = elm_entry_entry_get(obj);
113 int entry_len = safeStrLen(entry_str);
114 SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
116 SETTING_TRACE("maxLengthReachFlag:[%d], enterKeyPressFlag:%d", list_item->maxLengthReachFlag, list_item->enterKeyPressFlag);
117 /* show the popup if the text already reaches max length and the input character is not the enter key */
118 if (list_item->maxLengthReachFlag && list_item->enterKeyPressFlag == FALSE) {
119 if (!list_item->notify) {
120 list_item->notify = setting_create_popup_without_btn(list_item, list_item->win_main,
121 NULL, _(EXCEED_LIMITATION_STR),
122 __error_popup_response_cb,
123 POPUP_INTERVAL, FALSE, FALSE);
124 elm_object_focus_set(list_item->eo_check, EINA_FALSE);
126 //postpone 2 seconds again
127 elm_popup_timeout_set(list_item->notify, POPUP_INTERVAL);
130 list_item->maxLengthReachFlag = false;
131 list_item->enterKeyPressFlag = false;
133 #if DEVNAME_BLOCK_SPACE
135 if (entry_len > 0 && NULL != strstr(entry_str, " ")) {//cancel the effect of input 'space character'
136 SETTING_TRACE("Cannot input the 'space' key or 'enter' key");
140 char *tmp = (char *)g_strdup(entry_str);
143 for (j = i; tmp[j]; j++) {
150 G_FREE(list_item->sub_desc);
151 list_item->sub_desc = (char *)g_strdup(tmp);
153 SETTING_TRACE("sub_desc:[%s]", list_item->sub_desc);
155 elm_entry_entry_set(obj, list_item->sub_desc);
156 elm_entry_cursor_end_set(obj);
160 G_FREE(list_item->sub_desc);//release first
161 list_item->sub_desc = (char *)g_strdup(entry_str);
163 if (isSpaceStr(entry_str)) {
166 ad->empty_flag = TRUE;
167 //elm_entry_context_menu_disabled_set(obj, TRUE); //disable the copy&paste&search popup
168 //elm_entry_magnifier_disabled_set(obj, TRUE);
170 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
173 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
176 setting_disable_evas_object(back_btn);
177 setting_dim_evas_object(back_btn, TRUE);
180 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
183 setting_disable_evas_object(top_r_btn);
184 setting_dim_evas_object(top_r_btn, TRUE);
192 ad->empty_flag = FALSE;
193 //elm_entry_context_menu_disabled_set(obj, FALSE); //enable the copy&paste&search popup
194 //elm_entry_magnifier_disabled_set(obj, FALSE);
196 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
199 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
202 setting_enable_evas_object(back_btn);
203 setting_undo_dim_evas_object(back_btn, TRUE);
206 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
209 setting_enable_evas_object(top_r_btn);
210 setting_undo_dim_evas_object(top_r_btn, TRUE);
220 __setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
223 __device_name_changed_cb(data, obj);
229 * - No ini: Unavailable
230 * - I9500 @ target: GT-I9500
231 * - I9500 @ emul: SDK
232 * - SLP @ target: GT-SLP
235 void setting_about_main_get_phone_model_name(char* szStr, int nSize)
237 retm_if(szStr == NULL, "szStr parameter is NULL");
240 int ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value);
241 SETTING_TRACE("value : %s", value);
242 if (ret != SYSTEM_INFO_ERROR_NONE) {
243 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
245 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
250 snprintf(szStr, nSize, "%s", value);
252 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
258 void setting_about_main_get_sw_version(char* szStr, int nSize)
260 retm_if(szStr == NULL, "szStr parameter is NULL");
262 char *version = NULL;
263 int ret = system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &version);
264 if (ret != SYSTEM_INFO_ERROR_NONE) {
265 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
267 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
271 char *build_info = NULL;
272 ret = system_info_get_value_string(SYSTEM_INFO_KEY_BUILD_STRING, &build_info);
273 if (ret != SYSTEM_INFO_ERROR_NONE) {
274 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
277 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
281 snprintf(szStr, nSize, "TIZEN %s (%s)", version, build_info);
287 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
289 setting_retm_if(str == NULL, "str parameter is NULL");
290 setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN+1, "size parameter is wrong");
292 char* mac_addr = NULL;
293 int status = wifi_get_mac_address(&mac_addr);
296 safeCopyStr(str, mac_addr, SETTING_ABOUT_WIFI_MAC_STR_LEN);
300 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
302 if ((status != WIFI_ERROR_NONE) || (safeStrLen(str) == 0))
303 snprintf(str, size, "%s (%s)", _("IDS_ST_HEADER_UNAVAILABLE"), _(SETTING_ABOUT_NEVER_TURN_WIFI_ON_STR));
306 void setting_about_main_get_battery_string(char *str, int size)
308 setting_retm_if(str == NULL, "str parameter is NULL");
309 struct stat fileAttrs;
312 char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
313 snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
314 "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
316 /* If Samsung battery not found, check if this is PR3 */
317 if (stat(file, &fileAttrs) < 0)
318 snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
319 "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "max170xx_battery", "capacity");
321 char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
325 fd = open(file, O_RDONLY);
327 r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
328 if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
331 snprintf(str, size, "%d%s", val, "\%");
333 SETTING_TRACE_ERROR("read file fail");
334 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
339 SETTING_TRACE_ERROR("open file fail");
340 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
344 void setting_about_main_get_bluetooth_address_string(char *str, int size)
346 setting_retm_if(str == NULL, "str parameter is NULL");
350 ret = bt_initialize();
351 setting_retm_if(ret != 0, "bluetooth initialization failed");
353 char *local_address = NULL;
354 ret = bt_adapter_get_address(&local_address);
359 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
360 SETTING_TRACE_DEBUG("bt address : %s", str);
362 SETTING_TRACE_DEBUG("bt address : %s", local_address);
363 snprintf(str, size, "%s", local_address);
371 int __stat_get_cpuinfo(float *usr_pct, float *sys_pct)
373 setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
374 setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
379 static unsigned long long usr_time = 0, nice_time = 0, sys_time = 0;
380 static unsigned long long old_usr = 0, old_nice = 0, old_sys = 0;
381 static struct timeval old_tv, cur_tv;
382 unsigned long long elapsed_tick;
388 tick_per_sec = sysconf(_SC_CLK_TCK);
389 cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
394 gettimeofday(&cur_tv, NULL);
395 fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
397 SETTING_TRACE_ERROR("fp == NULL");
401 char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
402 char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
404 if(cpu_info_p == NULL) {
405 SETTING_TRACE_ERROR("fgets failed");
406 fclose(fp); // free - code
411 unsigned long long tmp_long = 0;
413 /* split cpu_info, get 3 numbers headmost*/
414 while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
416 tmp_long = strtoull(substr, &endptr, 10);
417 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
423 nice_time = tmp_long;
442 SETTING_TRACE_ERROR("old_usr == 0");
446 elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
447 ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
450 if (elapsed_tick != 0)
452 ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
457 if (elapsed_tick != 0)
459 ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
466 old_nice = nice_time;
473 static Eina_Bool __timer_update_cb(const void *data)
475 retv_if(data == NULL, TRUE);
476 SettingAboutUG *ad = (SettingAboutUG *) data;
478 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
479 if (ad->item_data_cpu) {
481 int ret = __stat_get_cpuinfo(&usr, &sys);
482 if (ret == -ENOENT) {
483 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
484 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
486 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
489 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
490 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
491 elm_genlist_item_update(ad->item_data_cpu->item);
494 if (ad->item_data_battery) {
495 setting_about_main_get_battery_string(str, sizeof(str));
496 /*SETTING_TRACE("str:%s", str);*/
497 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
498 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
499 elm_genlist_item_update(ad->item_data_battery->item);
505 __about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
509 SettingAboutUG *ad = (SettingAboutUG *) data;
510 retm_if(event == NULL, "Invalid argument: event info is NULL");
511 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
513 if (ad->item_dev_name) {
514 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
515 if (ad->item_dev_name->item == selected_item) {
516 if (elm_object_focus_get(ad->item_dev_name->eo_check)) {
517 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
519 ecore_imf_context_input_panel_show(imf_context);
525 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);//to make inputing words input
529 static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
532 retm_if(!data || !obj, "Data parameter is NULL");
534 Evas_Object *entry_container = elm_object_parent_widget_get(obj);
535 if (entry_container) {
536 //whe entry unfocused, its guidetext will becomes "Input here"
537 elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
538 if (elm_entry_is_empty(obj))
539 elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
540 elm_object_signal_emit(entry_container, "elm,state,eraser,hide", "elm");
543 //Setting_GenGroupItem_Data *list_item = data;
544 const char *entry_str = elm_entry_entry_get(obj);
545 char *entry_str_utf8 = NULL;
546 entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
547 SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
549 //ecore_idler_add(__check_on_idler, ad);
550 Setting_GenGroupItem_Data *item_dev_name = data;
551 SettingAboutUG *ad = item_dev_name->userdata;
552 __device_name_changed_cb(item_dev_name, item_dev_name->eo_check);
554 //after unfocus,need updating..
555 elm_object_item_data_set(item_dev_name->item, item_dev_name);
556 elm_genlist_item_update(item_dev_name->item);
560 && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
561 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
562 evas_object_del(btn);
564 setting_hide_input_pannel_cb(item_dev_name->eo_check);
566 if (ad->empty_flag) {
567 FREE(entry_str_utf8);
574 if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
575 SETTING_TRACE_ERROR("Set vconf[%s] failed",
576 VCONFKEY_SETAPPL_DEVICE_NAME_STR);
579 FREE(entry_str_utf8);
583 static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
585 ret_if(data == NULL);
586 SettingAboutUG *ad = (SettingAboutUG*)data;
587 Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
588 SETTING_TRACE_DEBUG("ev->key : %s", ev->key);
589 if(safeStrCmp(ev->key, "KP_Enter") == 0 //it is for Japanese keyboard to fix N_SE-10719
590 || safeStrCmp(ev->key, "Return") == 0)
592 // if entry has 1 char at list, hide ime.
593 if(isSpaceStr(elm_entry_entry_get(obj)))
596 evas_object_del(ad->popup);
599 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
600 __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
605 static void __max_len_reached(void *data, Evas_Object *obj, void *event_info)
608 retm_if(data == NULL, "Data parameter is NULL");
609 retm_if(!elm_object_focus_get(obj), "Entry is not focused");//notify only when entry is being focused on.
611 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
612 list_item->maxLengthReachFlag = true;
615 static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
618 setting_retm_if(NULL == key, "key is NULL");
619 setting_retm_if(NULL == data, "data is NULL");
620 SettingAboutUG *ad = (SettingAboutUG *)data;
622 int status = vconf_keynode_get_int(key);
623 char *vconf_name = vconf_keynode_get_name(key);
625 if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
626 SETTING_TRACE("status:%d", status);
627 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
628 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
629 if (ad->item_data_wifi) {
630 G_FREE(ad->item_data_wifi->sub_desc);
631 ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
632 elm_object_item_data_set(ad->item_data_wifi->item, ad->item_data_wifi);
633 elm_genlist_item_update(ad->item_data_wifi->item);
636 SETTING_TRACE_ERROR("vconf_name is error");
640 int setting_about_generate_genlist(void *data)
644 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
646 SettingAboutUG *ad = (SettingAboutUG *) data;
647 bool is_emul_bin = isEmulBin();
649 Evas_Object *scroller = ad->genlsit;
650 Elm_Object_Item *item = NULL;
651 Setting_GenGroupItem_Data *item_data = NULL;
652 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
653 (void)setting_create_Gendial_field_titleItem(scroller,
654 &(ad->itc_group_item),
655 SETTING_ABOUT_DEVICE_INFO_STR, NULL);
657 char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
658 char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
661 ad->empty_flag = FALSE;
662 if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0])
664 ad->empty_flag = TRUE;
665 /* Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
668 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
669 setting_disable_evas_object(back_btn);
670 setting_dim_evas_object(back_btn, TRUE);
677 char *app_name = NULL;
678 int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm", &app_name);
679 if (ret_get_app_name == APP_MANAGER_ERROR_INVALID_PACKAGE )
681 SETTING_TRACE(">>>>>>>>>>>>>>>>>> UNINSTALLED PACKAGE");
682 ad->item_dev_name = NULL;
684 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)calloc(1, sizeof(Setting_GenGroupItem_Data));
688 setting_retvm_if(!item_data, NULL, "calloc failed");
690 item_data->keyStr = (char *)g_strdup(SETTING_ABOUT_DEVICE_NAME_STR);
691 item_data->sub_desc = (char *)g_strdup(pa_sub_desc);
692 item_data->swallow_type = SWALLOW_Type_LAYOUT_ENTRY;
693 item_data->chk_status = 0;
694 item_data->chk_change_cb = __setting_about_device_name_changed_cb;
695 item_data->userdata = ad;
696 item_data->isSinglelineFlag = TRUE;
697 item_data->maxlength_reached_cb = __max_len_reached;
698 item_data->start_change_cb = (setting_call_back_func)__entry_key_down_cb;
699 item_data->stop_change_cb = __entry_unfocus_cb;
700 item_data->x_callback_cb = _input_panel_event_cb;
702 item_data->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Limit_Size));
703 if (item_data->limit_filter_data) {
704 //max byte len is 31 not 31+1
705 //ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN + OFFESET_ENTRY_FILTER;
706 item_data->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
707 item_data->win_main = ad->win_get;
710 item_data->input_panel_disable_flag = EINA_TRUE;
712 item_data->item = elm_genlist_item_append(scroller, &(itc_1icon), item_data, NULL, ELM_GENLIST_ITEM_NONE,
713 setting_about_main_mouse_up_Gendial_list_cb, ad);
715 ad->item_dev_name = item_data;
716 if (ad->item_dev_name) {
717 elm_genlist_item_select_mode_set(ad->item_dev_name->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
719 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
726 char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
727 setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
729 SETTING_TRACE("ad->my_numbers.count[%d]", ad->my_numbers.count);
730 if (ad->my_numbers.count == 1) {
732 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
734 ad, SWALLOW_Type_INVALID, NULL,
735 NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
738 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
740 SETTING_TRACE_ERROR("item_data is NULL");
742 } else if (ad->my_numbers.count > 1){
743 setting_enable_expandable_genlist(scroller, ad,
744 setting_about_main_exp_cb, NULL);
745 item_data = setting_create_Gendial_exp_parent_field(scroller,
746 &(ad->itc_2text_3_parent),
748 SWALLOW_Type_INVALID,
749 SETTING_ABOUT_MY_NUMBER_STR,
752 item_data->int_slp_setting_binded = STR_SLP_SETTING_SELECT_NUM;
754 SETTING_TRACE_ERROR("ad->data_wap is NULL");
756 } else if (ad->my_numbers.count == 0 ){
757 // _("IDS_ST_HEADER_UNAVAILABLE")
758 SETTING_TRACE_ERROR("don't have my number");
760 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
762 ad, SWALLOW_Type_INVALID, NULL,
763 NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
764 _("IDS_ST_HEADER_UNAVAILABLE"), NULL);
766 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
768 SETTING_TRACE_ERROR("item_data is NULL");
773 memset(str, 0x00, sizeof(str));
774 setting_about_main_get_phone_model_name(str, sizeof(str));
776 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
777 NULL, SWALLOW_Type_INVALID, NULL,
778 NULL, 0, SETTING_ABOUT_MODEL_STR, str, NULL);
780 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
782 SETTING_TRACE_ERROR("item_data is NULL");
786 memset(str, 0x00, sizeof(str));
787 setting_about_main_get_sw_version(str, sizeof(str));
789 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
790 NULL, SWALLOW_Type_INVALID, NULL,
791 NULL, 0, SETTING_ABOUT_VERSION_STR, str, NULL);
793 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
795 SETTING_TRACE_ERROR("item_data is NULL");
798 // [UI] Bluetooth address
799 if ( ! is_emul_bin) { // requested by DI Kim due to BT BS on 11/26
800 memset(str, 0x00, sizeof(str));
801 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
803 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
804 NULL, SWALLOW_Type_INVALID, NULL,
805 NULL, 0, SETTING_ABOUT_BLUETOOTH_STR, str, NULL);
806 if (ad->item_data_bt) {
807 elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
809 SETTING_TRACE_ERROR("item_data is NULL");
814 memset(str, 0x00, sizeof(str));
815 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
817 SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
820 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
821 NULL, SWALLOW_Type_INVALID, NULL,
822 NULL, 0, SETTING_ABOUT_WIFI_STR, str, NULL);
823 if (ad->item_data_wifi) {
824 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
826 SETTING_TRACE_ERROR("item_data is NULL");
830 memset(str, 0x00, sizeof(str));
831 setting_about_main_get_battery_string(str, sizeof(str));
833 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
834 NULL, SWALLOW_Type_INVALID, NULL,
835 NULL, 0, SETTING_ABOUT_BATTERY_STR, str, NULL);
837 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
838 ad->item_data_battery = item_data;
840 SETTING_TRACE_ERROR("item_data is NULL");
844 memset(str, 0x00, sizeof(str));
846 int ret = __stat_get_cpuinfo(&usr, &sys);
847 if (ret == -ENOENT) {
848 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
849 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
851 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
854 ad->item_data_cpu = item_data =
855 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
856 NULL, SWALLOW_Type_INVALID, NULL,
857 NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
859 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
861 SETTING_TRACE_ERROR("item_data is NULL");
866 elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
867 ELM_GENLIST_ITEM_NONE, NULL, NULL);
868 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
871 // implementation is in progress.
872 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
873 setting_about_main_mouse_up_Gendial_list_cb,
874 ad, SWALLOW_Type_INVALID, NULL, NULL,
875 0, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
877 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
878 ELM_GENLIST_ITEM_NONE, NULL, NULL);
879 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
882 ecore_timer_add(2, (Ecore_Task_Cb) __timer_update_cb, ad);
884 return SETTING_RETURN_SUCCESS;
887 static int setting_about_main_create(void *cb)
891 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
893 SettingAboutUG *ad = (SettingAboutUG *) cb;
895 Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
896 retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
897 "Cannot set scroller object as contento of layout");
898 elm_object_style_set(scroller, "dialogue");
899 elm_genlist_clear(scroller); /* first to clear list */
901 ad->genlsit = scroller;
904 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
905 _(KeyStr_AboutPhone),
906 _("IDS_COM_BODY_BACK"), NULL, NULL,
907 setting_about_main_click_softkey_back_cb,
908 NULL, NULL, ad, scroller,
909 &ad->navi_bar, NULL);
911 evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
912 __about_main_gl_mouse_up, ad);
914 ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
917 setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
918 if (VCONFKEY_TELEPHONY_SIM_INSERTED != value) {
919 setting_about_generate_genlist((void *)ad);
922 int ret = vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
923 __setting_about_main_vconf_change_cb, ad);
925 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
928 setting_view_about_main.is_create = 1;
930 return SETTING_RETURN_SUCCESS;
933 static int setting_about_main_destroy(void *cb)
937 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
939 SettingAboutUG *ad = (SettingAboutUG *) cb;
941 int ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
942 __setting_about_main_vconf_change_cb);
944 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
948 if (ad->update_timer) {
949 ecore_timer_del(ad->update_timer);
950 ad->update_timer = NULL;
953 evas_object_del(ad->popup);
957 if (ad->ly_main != NULL) {
958 evas_object_del(ad->ly_main);
962 setting_view_about_main.is_create = 0;
963 return SETTING_RETURN_SUCCESS;
966 static int setting_about_main_update(void *cb)
970 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
972 SettingAboutUG *ad = (SettingAboutUG *) cb;
974 if (ad->ly_main != NULL) {
975 evas_object_show(ad->ly_main);
978 return SETTING_RETURN_SUCCESS;
981 static int setting_about_main_cleanup(void *cb)
985 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
987 SettingAboutUG *ad = (SettingAboutUG *) cb;
989 if (ad->ly_main != NULL) {
990 /* evas_object_hide(ad->ly_main); */
993 return SETTING_RETURN_SUCCESS;
996 /* ***************************************************
1000 ***************************************************/
1002 /* ***************************************************
1006 ***************************************************/
1009 setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
1012 SETTING_TRACE_BEGIN;
1014 setting_retm_if(data == NULL, "Data parameter is NULL");
1016 SettingAboutUG *ad = (SettingAboutUG *) data;
1017 if (ad->empty_flag) {
1019 evas_object_del(ad->popup);
1022 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
1023 __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
1024 if (ad->item_dev_name) {
1025 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1030 //imf must be hided before view is destroyed.
1031 //Following code is just to improve the hiding speed. If not add these code,
1032 //the input pannel will also be hided with the view destroyed,but it works too slow.
1033 if (ad->item_dev_name) {
1034 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1035 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1038 /* Send destroy request */
1039 ug_destroy_me(ad->ug);
1052 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1055 SETTING_TRACE_BEGIN;
1057 setting_retm_if(data == NULL, "Data parameter is NULL");
1059 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1060 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1061 elm_genlist_item_selected_set(item, 0);
1062 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1064 SettingAboutUG *ad = (SettingAboutUG *) data;
1066 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1067 if (!safeStrCmp("IDS_ST_BODY_OPEN_SOURCE_LICENCES", list_item->keyStr)) {
1069 //setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
1071 } else if (!safeStrCmp("IDS_COM_BODY_CERTIFICATES", list_item->keyStr)) {
1072 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1074 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1075 elm_object_focus_set(back_btn, TRUE);
1077 __setting_about_main_certificates_clicked(data);
1078 } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
1079 __setting_about_main_device_name_clicked(data, list_item->eo_check);
1083 static void __destroy_certificates_ug_cb(ui_gadget_h ug, void *priv)
1085 SETTING_TRACE_BEGIN;
1087 /* restore the '<-' button on the navigate bar */
1089 SettingAboutUG *ad = (SettingAboutUG *) priv; /* ad is point to priv */
1093 ad->ug_loading = NULL;
1098 static void __setting_about_main_certificates_clicked(void *data)
1100 SETTING_TRACE_BEGIN;
1101 retm_if(data == NULL, "Data parameter is NULL");
1102 SettingAboutUG *ad = (SettingAboutUG *)data;
1104 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1109 cbs->layout_cb = setting_about_layout_ug_cb;
1110 cbs->result_cb = NULL;
1111 cbs->destroy_cb = __destroy_certificates_ug_cb;
1112 cbs->priv = (void *)ad;
1115 ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1117 if (NULL == ad->ug_loading) { /* error handling */
1118 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1123 static void __top_back_cb(void *data, Evas_Object *obj,
1126 SETTING_TRACE_BEGIN;
1128 setting_retm_if(data == NULL, "Data parameter is NULL");
1130 SettingAboutUG *ad = (SettingAboutUG *) data;
1132 if (ad->item_dev_name)
1133 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1138 static Eina_Bool __delay_remove(void *data)
1140 SETTING_TRACE_BEGIN;
1141 SettingAboutUG *ad = data;
1144 evas_object_del(ad->popup);
1149 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1151 SETTING_TRACE_BEGIN;
1152 retm_if(data == NULL, "Data parameter is NULL");
1153 retm_if(ctx == NULL, "obj parameter is NULL");
1154 SettingAboutUG *ad = (SettingAboutUG *)data;
1156 if(value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
1158 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1159 if(ad->navi_item && !elm_object_item_part_content_get(ad->navi_item, "title_right_btn"))
1161 //Apply new SIP concept
1163 Evas_Object *r_button = setting_create_button(ad->navi_bar,
1164 dgettext("sys_string", "IDS_COM_BODY_BACK"),
1165 NAVI_BACK_BUTTON_STYLE,
1169 elm_object_item_part_content_set(ad->navi_item, "title_right_btn", r_button);*/
1173 setting_disable_evas_object(r_button);
1174 setting_dim_evas_object(r_button, TRUE);
1179 else if(value == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
1181 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1182 //Apply new SIP concept
1184 if(ad->navi_item && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
1186 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
1187 evas_object_del(btn);
1190 if (ad->item_dev_name) {
1191 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1193 //if Setting is overlapped by other app,the entry will lost its focus,
1194 //the input pannel will be hided and any popup should be removed to fix blinking issue.
1196 ecore_idler_add(__delay_remove, ad);
1200 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj)
1202 SETTING_TRACE_BEGIN;
1203 retm_if(data == NULL, "Data parameter is NULL");
1204 retm_if(obj == NULL, "obj parameter is NULL");
1205 SettingAboutUG *ad = (SettingAboutUG *)data;
1207 if (!elm_object_focus_get(obj)) {
1208 elm_object_focus_set(obj, EINA_TRUE);