4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <setting-cfg.h>
22 #include <setting-about-main.h>
24 #include <sys/types.h>
27 //#include <bluetooth-api.h>
29 #include <bluetooth.h>
31 #include <app_manager.h>
32 #include <system_info.h>
34 #define DEVNAME_BLOCK_SPACE 0
36 /** @todo : need to handle unicode encoded input characters */
38 #define MAX_DEVICE_NAME_LEN 24
39 #define EMPTY_LIMITATION_STR "The Name cannot be empty or composited by spaces"//"IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
41 static int setting_about_main_create(void *cb);
42 static int setting_about_main_destroy(void *cb);
43 static int setting_about_main_update(void *cb);
44 static int setting_about_main_cleanup(void *cb);
46 setting_view setting_view_about_main = {
47 .create = setting_about_main_create,
48 .destroy = setting_about_main_destroy,
49 .update = setting_about_main_update,
50 .cleanup = setting_about_main_cleanup,
53 * Do process when clicking '<-' button
59 static void setting_about_main_click_softkey_back_cb(void *data,
64 * Do process when clicking on some genlist item
70 static void setting_about_main_mouse_up_Gendial_list_cb(void *data,
74 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
75 static void __setting_about_main_certificates_clicked(void *data);
76 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj);
77 /* ***************************************************
81 ***************************************************/
83 static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
85 SettingAboutUG *ad = data;
93 static void __error_popup_response_cb(void *data, Evas_Object *obj,
97 retm_if(data == NULL, "Data parameter is NULL");
98 Setting_GenGroupItem_Data *list_item = data;
99 if (list_item->notify) {
100 evas_object_del(list_item->notify);
101 list_item->notify = NULL;
105 static void __device_name_changed_cb(void *data, Evas_Object *obj)
107 retm_if(!data || !obj, "Data parameter is NULL");
108 //return if entry is not focused too
110 Setting_GenGroupItem_Data *list_item =
111 (Setting_GenGroupItem_Data *) data;
112 SettingAboutUG *ad = list_item->userdata;
113 retm_if(ad == NULL, "Data parameter is NULL");
115 const char *entry_str = elm_entry_entry_get(obj);
116 int entry_len = safeStrLen(entry_str);
117 SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
119 SETTING_TRACE("maxLengthReachFlag:[%d], enterKeyPressFlag:%d", list_item->maxLengthReachFlag, list_item->enterKeyPressFlag);
120 /* show the popup if the text already reaches max length and the input character is not the enter key */
121 if (list_item->maxLengthReachFlag && list_item->enterKeyPressFlag == FALSE) {
122 if (!list_item->notify) {
123 list_item->notify = setting_create_popup_without_btn(list_item, list_item->win_main,
124 NULL, _(EXCEED_LIMITATION_STR),
125 __error_popup_response_cb,
126 POPUP_INTERVAL, FALSE, FALSE);
127 elm_object_focus_set(list_item->eo_check, EINA_FALSE);
129 //postpone 2 seconds again
130 elm_popup_timeout_set(list_item->notify, POPUP_INTERVAL);
133 list_item->maxLengthReachFlag = false;
134 list_item->enterKeyPressFlag = false;
136 #if DEVNAME_BLOCK_SPACE
138 if (entry_len > 0 && NULL != strstr(entry_str, " ")) {//cancel the effect of input 'space character'
139 SETTING_TRACE("Cannot input the 'space' key or 'enter' key");
143 char *tmp = (char *)g_strdup(entry_str);
146 for (j = i; tmp[j]; j++) {
153 G_FREE(list_item->sub_desc);
154 list_item->sub_desc = (char *)g_strdup(tmp);
156 SETTING_TRACE("sub_desc:[%s]", list_item->sub_desc);
158 elm_entry_entry_set(obj, list_item->sub_desc);
159 elm_entry_cursor_end_set(obj);
163 G_FREE(list_item->sub_desc);//release first
164 list_item->sub_desc = (char *)g_strdup(entry_str);
166 if (isSpaceStr(entry_str)) {
169 ad->empty_flag = TRUE;
170 //elm_entry_context_menu_disabled_set(obj, TRUE); //disable the copy&paste&search popup
171 //elm_entry_magnifier_disabled_set(obj, TRUE);
173 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
176 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
179 setting_disable_evas_object(back_btn);
180 setting_dim_evas_object(back_btn, TRUE);
183 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
186 setting_disable_evas_object(top_r_btn);
187 setting_dim_evas_object(top_r_btn, TRUE);
195 ad->empty_flag = FALSE;
196 //elm_entry_context_menu_disabled_set(obj, FALSE); //enable the copy&paste&search popup
197 //elm_entry_magnifier_disabled_set(obj, FALSE);
199 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
202 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
205 setting_enable_evas_object(back_btn);
206 setting_undo_dim_evas_object(back_btn, TRUE);
209 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
212 setting_enable_evas_object(top_r_btn);
213 setting_undo_dim_evas_object(top_r_btn, TRUE);
223 __setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
226 __device_name_changed_cb(data, obj);
232 * - No ini: Unavailable
233 * - I9500 @ target: GT-I9500
234 * - I9500 @ emul: SDK
235 * - SLP @ target: GT-SLP
238 void setting_about_main_get_phone_model_name(char* szStr, int nSize)
240 retm_if(szStr == NULL, "szStr parameter is NULL");
243 int ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value);
244 SETTING_TRACE("value : %s", value);
245 if (ret != SYSTEM_INFO_ERROR_NONE) {
246 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
248 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
253 snprintf(szStr, nSize, "%s", value);
255 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
261 void setting_about_main_get_sw_version(char* szStr, int nSize)
263 retm_if(szStr == NULL, "szStr parameter is NULL");
265 char *version = NULL;
266 int ret = system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &version);
267 if (ret != SYSTEM_INFO_ERROR_NONE) {
268 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
270 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
274 char *build_info = NULL;
275 ret = system_info_get_value_string(SYSTEM_INFO_KEY_BUILD_STRING, &build_info);
276 if (ret != SYSTEM_INFO_ERROR_NONE) {
277 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
280 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
284 snprintf(szStr, nSize, "TIZEN %s (%s)", version, build_info);
290 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
292 setting_retm_if(str == NULL, "str parameter is NULL");
293 setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN+1, "size parameter is wrong");
295 FILE *p = fopen(SETTING_ABOUT_MACINFO_PATH, "r");
298 int size = fread(str, sizeof(char), SETTING_ABOUT_WIFI_MAC_STR_LEN, p);
299 if (size != SETTING_ABOUT_WIFI_MAC_STR_LEN) {
300 SETTING_TRACE_ERROR("fail to call fread");
305 perror("open failed!");
308 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
310 int wifi_state = VCONFKEY_WIFI_OFF;
311 vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
313 if((safeStrLen(str) == 0) || (wifi_state == VCONFKEY_WIFI_OFF))
314 snprintf(str, size, "%s (%s)", _("IDS_ST_HEADER_UNAVAILABLE"), _(SETTING_ABOUT_NEVER_TURN_WIFI_ON_STR));
317 void setting_about_main_get_battery_string(char *str, int size)
319 setting_retm_if(str == NULL, "str parameter is NULL");
322 char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
323 snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
324 "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
326 char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
330 fd = open(file, O_RDONLY);
332 r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
333 if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
336 snprintf(str, size, "%d%s", val, "\%");
338 SETTING_TRACE_ERROR("read file fail");
339 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
344 SETTING_TRACE_ERROR("open file fail");
345 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
349 void setting_about_main_get_bluetooth_address_string(char *str, int size)
351 setting_retm_if(str == NULL, "str parameter is NULL");
355 ret = bt_initialize();
356 setting_retm_if(ret != 0, "bluetooth initialization failed");
358 char *local_address = NULL;
359 ret = bt_adapter_get_address(&local_address);
364 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
365 SETTING_TRACE_DEBUG("bt address : %s", str);
367 SETTING_TRACE_DEBUG("bt address : %s", local_address);
368 snprintf(str, size, "%s", local_address);
376 int __stat_get_cpuinfo(float *usr_pct, float *sys_pct)
378 setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
379 setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
384 static unsigned long long usr_time = 0, nice_time = 0, sys_time = 0;
385 static unsigned long long old_usr = 0, old_nice = 0, old_sys = 0;
386 static struct timeval old_tv, cur_tv;
387 unsigned long long elapsed_tick;
393 tick_per_sec = sysconf(_SC_CLK_TCK);
394 cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
399 gettimeofday(&cur_tv, NULL);
400 fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
402 SETTING_TRACE_ERROR("fp == NULL");
406 char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
407 char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
409 if(cpu_info_p == NULL) {
410 SETTING_TRACE_ERROR("fgets failed");
411 fclose(fp); // free - code
416 unsigned long long tmp_long = 0;
418 /* split cpu_info, get 3 numbers headmost*/
419 while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
421 tmp_long = strtoull(substr, &endptr, 10);
422 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
428 nice_time = tmp_long;
447 SETTING_TRACE_ERROR("old_usr == 0");
451 elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
452 ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
455 if (elapsed_tick != 0)
457 ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
462 if (elapsed_tick != 0)
464 ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
471 old_nice = nice_time;
478 static Eina_Bool __timer_update_cb(const void *data)
480 retv_if(data == NULL, TRUE);
481 SettingAboutUG *ad = (SettingAboutUG *) data;
483 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
484 if (ad->item_data_cpu) {
486 int ret = __stat_get_cpuinfo(&usr, &sys);
487 if (ret == -ENOENT) {
488 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
489 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
491 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
494 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
495 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
496 elm_genlist_item_update(ad->item_data_cpu->item);
499 if (ad->item_data_battery) {
500 setting_about_main_get_battery_string(str, sizeof(str));
501 /*SETTING_TRACE("str:%s", str);*/
502 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
503 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
504 elm_genlist_item_update(ad->item_data_battery->item);
510 __about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
513 SettingAboutUG *ad = (SettingAboutUG *) data;
514 retm_if(event == NULL, "Invalid argument: event info is NULL");
515 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
517 if (ad->item_dev_name) {
518 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
519 if (ad->item_dev_name->item == selected_item)//do nothing..
522 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);//to make inputing words input
526 static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
529 retm_if(!data || !obj, "Data parameter is NULL");
531 Evas_Object *entry_container = elm_object_parent_widget_get(obj);
532 if (entry_container) {
533 //whe entry unfocused, its guidetext will becomes "Input here"
534 elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
535 if (elm_entry_is_empty(obj))
536 elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
537 elm_object_signal_emit(entry_container, "elm,state,eraser,hide", "elm");
540 //Setting_GenGroupItem_Data *list_item = data;
541 const char *entry_str = elm_entry_entry_get(obj);
542 char *entry_str_utf8 = NULL;
543 entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
544 SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
546 //ecore_idler_add(__check_on_idler, ad);
547 Setting_GenGroupItem_Data *item_dev_name = data;
548 SettingAboutUG *ad = item_dev_name->userdata;
549 __device_name_changed_cb(item_dev_name, item_dev_name->eo_check);
551 //after unfocus,need updating..
552 elm_object_item_data_set(item_dev_name->item, item_dev_name);
553 elm_genlist_item_update(item_dev_name->item);
557 && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
558 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
559 evas_object_del(btn);
561 setting_hide_input_pannel_cb(item_dev_name->eo_check);
563 if (ad->empty_flag) {
565 evas_object_del(ad->popup);
568 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
569 __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
576 if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
577 SETTING_TRACE_ERROR("Set vconf[%s] failed",
578 VCONFKEY_SETAPPL_DEVICE_NAME_STR);
581 FREE(entry_str_utf8);
585 static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
587 ret_if(data == NULL);
588 SettingAboutUG *ad = (SettingAboutUG*)data;
589 Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
590 SETTING_TRACE_DEBUG("ev->key : %s", ev->key);
591 if(safeStrCmp(ev->key, "KP_Enter") == 0 //it is for Japanese keyboard to fix N_SE-10719
592 || safeStrCmp(ev->key, "Return") == 0)
594 // if entry has 1 char at list, hide ime.
595 if(isSpaceStr(elm_entry_entry_get(obj)))
598 evas_object_del(ad->popup);
601 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
602 __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
607 static void __max_len_reached(void *data, Evas_Object *obj, void *event_info)
610 retm_if(data == NULL, "Data parameter is NULL");
611 retm_if(!elm_object_focus_get(obj), "Entry is not focused");//notify only when entry is being focused on.
613 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
614 list_item->maxLengthReachFlag = true;
617 static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
620 setting_retm_if(NULL == key, "key is NULL");
621 setting_retm_if(NULL == data, "data is NULL");
622 SettingAboutUG *ad = (SettingAboutUG *)data;
624 int status = vconf_keynode_get_int(key);
625 char *vconf_name = vconf_keynode_get_name(key);
627 if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
628 SETTING_TRACE("status:%d", status);
629 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
630 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
631 if (ad->item_data_wifi) {
632 G_FREE(ad->item_data_wifi->sub_desc);
633 ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
634 elm_object_item_data_set(ad->item_data_wifi->item, ad->item_data_wifi);
635 elm_genlist_item_update(ad->item_data_wifi->item);
638 SETTING_TRACE_ERROR("vconf_name is error");
642 int setting_about_generate_genlist(void *data)
646 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
648 SettingAboutUG *ad = (SettingAboutUG *) data;
649 bool is_emul_bin = isEmulBin();
651 Evas_Object *scroller = ad->genlsit;
652 Elm_Object_Item *item = NULL;
653 Setting_GenGroupItem_Data *item_data = NULL;
654 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
655 (void)setting_create_Gendial_field_titleItem(scroller,
656 &(ad->itc_group_item),
657 SETTING_ABOUT_DEVICE_INFO_STR, NULL);
659 char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
660 char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
663 ad->empty_flag = FALSE;
664 if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0])
666 ad->empty_flag = TRUE;
667 /* Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
670 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
671 setting_disable_evas_object(back_btn);
672 setting_dim_evas_object(back_btn, TRUE);
679 char *app_name = NULL;
680 int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm", &app_name);
681 if (ret_get_app_name == APP_MANAGER_ERROR_INVALID_PACKAGE )
683 SETTING_TRACE(">>>>>>>>>>>>>>>>>> UNINSTALLED PACKAGE");
684 ad->item_dev_name = NULL;
688 setting_create_Gendial_field_def(scroller, &(itc_1icon),
689 setting_about_main_mouse_up_Gendial_list_cb,
690 ad, SWALLOW_Type_LAYOUT_ENTRY,
691 NULL, NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc,
692 __setting_about_device_name_changed_cb);
693 if (ad->item_dev_name) {
694 ad->item_dev_name->userdata = ad;
695 ad->item_dev_name->isSinglelineFlag = TRUE;
696 ad->item_dev_name->start_change_cb = (setting_call_back_func)__entry_key_down_cb;
697 ad->item_dev_name->stop_change_cb = __entry_unfocus_cb;
698 ad->item_dev_name->maxlength_reached_cb = __max_len_reached;
699 ad->item_dev_name->x_callback_cb = _input_panel_event_cb;
700 ad->item_dev_name->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
702 if (ad->item_dev_name->limit_filter_data) {
703 //max byte len is 31 not 31+1
704 //ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN + OFFESET_ENTRY_FILTER;
705 ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
706 ad->item_dev_name->win_main = ad->win_get;
708 //ad->item_dev_name->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBER;
709 ad->item_dev_name->input_panel_disable_flag = EINA_TRUE;
711 elm_genlist_item_select_mode_set(ad->item_dev_name->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
713 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
720 char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
721 setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
723 SETTING_TRACE("ad->my_numbers.count[%d]", ad->my_numbers.count);
724 if (ad->my_numbers.count == 1) {
726 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
728 ad, SWALLOW_Type_INVALID, NULL,
729 NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
732 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
734 SETTING_TRACE_ERROR("item_data is NULL");
736 } else if (ad->my_numbers.count > 1){
737 setting_enable_expandable_genlist(scroller, ad,
738 setting_about_main_exp_cb, NULL);
739 item_data = setting_create_Gendial_exp_parent_field(scroller,
740 &(ad->itc_2text_3_parent),
742 SWALLOW_Type_INVALID,
743 SETTING_ABOUT_MY_NUMBER_STR,
746 item_data->int_slp_setting_binded = STR_SLP_SETTING_SELECT_NUM;
748 SETTING_TRACE_ERROR("ad->data_wap is NULL");
750 } else if (ad->my_numbers.count == 0 ){
751 // _("IDS_ST_HEADER_UNAVAILABLE")
752 SETTING_TRACE_ERROR("don't have my number");
754 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
756 ad, SWALLOW_Type_INVALID, NULL,
757 NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
758 _("IDS_ST_HEADER_UNAVAILABLE"), NULL);
760 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
762 SETTING_TRACE_ERROR("item_data is NULL");
767 memset(str, 0x00, sizeof(str));
768 setting_about_main_get_phone_model_name(str, sizeof(str));
770 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
771 NULL, SWALLOW_Type_INVALID, NULL,
772 NULL, 0, SETTING_ABOUT_MODEL_STR, str, NULL);
774 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
776 SETTING_TRACE_ERROR("item_data is NULL");
780 memset(str, 0x00, sizeof(str));
781 setting_about_main_get_sw_version(str, sizeof(str));
783 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
784 NULL, SWALLOW_Type_INVALID, NULL,
785 NULL, 0, SETTING_ABOUT_VERSION_STR, str, NULL);
787 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
789 SETTING_TRACE_ERROR("item_data is NULL");
792 // [UI] Bluetooth address
793 if ( ! is_emul_bin) { // requested by DI Kim due to BT BS on 11/26
794 memset(str, 0x00, sizeof(str));
795 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
797 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
798 NULL, SWALLOW_Type_INVALID, NULL,
799 NULL, 0, SETTING_ABOUT_BLUETOOTH_STR, str, NULL);
800 if (ad->item_data_bt) {
801 elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
803 SETTING_TRACE_ERROR("item_data is NULL");
808 memset(str, 0x00, sizeof(str));
809 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
811 SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
814 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
815 NULL, SWALLOW_Type_INVALID, NULL,
816 NULL, 0, SETTING_ABOUT_WIFI_STR, str, NULL);
817 if (ad->item_data_wifi) {
818 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
820 SETTING_TRACE_ERROR("item_data is NULL");
824 memset(str, 0x00, sizeof(str));
825 setting_about_main_get_battery_string(str, sizeof(str));
827 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
828 NULL, SWALLOW_Type_INVALID, NULL,
829 NULL, 0, SETTING_ABOUT_BATTERY_STR, str, NULL);
831 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
832 ad->item_data_battery = item_data;
834 SETTING_TRACE_ERROR("item_data is NULL");
838 memset(str, 0x00, sizeof(str));
840 int ret = __stat_get_cpuinfo(&usr, &sys);
841 if (ret == -ENOENT) {
842 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
843 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
845 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
848 ad->item_data_cpu = item_data =
849 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
850 NULL, SWALLOW_Type_INVALID, NULL,
851 NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
853 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
855 SETTING_TRACE_ERROR("item_data is NULL");
860 elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
861 ELM_GENLIST_ITEM_NONE, NULL, NULL);
862 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
865 // implementation is in progress.
866 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
867 setting_about_main_mouse_up_Gendial_list_cb,
868 ad, SWALLOW_Type_INVALID, NULL, NULL,
869 0, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
871 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
872 ELM_GENLIST_ITEM_NONE, NULL, NULL);
873 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
876 ecore_timer_add(2, (Ecore_Task_Cb) __timer_update_cb, ad);
878 return SETTING_RETURN_SUCCESS;
881 static int setting_about_main_create(void *cb)
885 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
887 SettingAboutUG *ad = (SettingAboutUG *) cb;
889 Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
890 retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
891 "Cannot set scroller object as contento of layout");
892 elm_object_style_set(scroller, "dialogue");
893 elm_genlist_clear(scroller); /* first to clear list */
895 ad->genlsit = scroller;
898 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
899 _(KeyStr_AboutPhone),
900 _("IDS_COM_BODY_BACK"), NULL, NULL,
901 setting_about_main_click_softkey_back_cb,
902 NULL, NULL, ad, scroller,
903 &ad->navi_bar, NULL);
905 evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
906 __about_main_gl_mouse_up, ad);
908 ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
911 setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
912 if (VCONFKEY_TELEPHONY_SIM_INSERTED != value) {
913 setting_about_generate_genlist((void *)ad);
916 int ret = vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
917 __setting_about_main_vconf_change_cb, ad);
919 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
922 setting_view_about_main.is_create = 1;
924 return SETTING_RETURN_SUCCESS;
927 static int setting_about_main_destroy(void *cb)
931 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
933 SettingAboutUG *ad = (SettingAboutUG *) cb;
935 int ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
936 __setting_about_main_vconf_change_cb);
938 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
942 if (ad->update_timer) {
943 ecore_timer_del(ad->update_timer);
944 ad->update_timer = NULL;
947 evas_object_del(ad->popup);
951 if (ad->ly_main != NULL) {
952 evas_object_del(ad->ly_main);
956 setting_view_about_main.is_create = 0;
957 return SETTING_RETURN_SUCCESS;
960 static int setting_about_main_update(void *cb)
964 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
966 SettingAboutUG *ad = (SettingAboutUG *) cb;
968 if (ad->ly_main != NULL) {
969 evas_object_show(ad->ly_main);
972 return SETTING_RETURN_SUCCESS;
975 static int setting_about_main_cleanup(void *cb)
979 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
981 SettingAboutUG *ad = (SettingAboutUG *) cb;
983 if (ad->ly_main != NULL) {
984 /* evas_object_hide(ad->ly_main); */
987 return SETTING_RETURN_SUCCESS;
990 /* ***************************************************
994 ***************************************************/
996 /* ***************************************************
1000 ***************************************************/
1003 setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
1006 SETTING_TRACE_BEGIN;
1008 setting_retm_if(data == NULL, "Data parameter is NULL");
1010 SettingAboutUG *ad = (SettingAboutUG *) data;
1011 if (ad->empty_flag) {
1013 evas_object_del(ad->popup);
1016 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
1017 __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
1018 if (ad->item_dev_name) {
1019 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1024 //imf must be hided before view is destroyed.
1025 //Following code is just to improve the hiding speed. If not add these code,
1026 //the input pannel will also be hided with the view destroyed,but it works too slow.
1027 if (ad->item_dev_name) {
1028 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1029 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1032 /* Send destroy request */
1033 ug_destroy_me(ad->ug);
1046 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1049 SETTING_TRACE_BEGIN;
1051 setting_retm_if(data == NULL, "Data parameter is NULL");
1053 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1054 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1055 elm_genlist_item_selected_set(item, 0);
1056 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1058 /* SettingAboutUG *ad = (SettingAboutUG *) data; */
1060 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1061 if (!safeStrCmp("IDS_ST_BODY_OPEN_SOURCE_LICENCES", list_item->keyStr)) {
1063 //setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
1065 } else if (!safeStrCmp("IDS_COM_BODY_CERTIFICATES", list_item->keyStr)) {
1066 __setting_about_main_certificates_clicked(data);
1067 } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
1068 __setting_about_main_device_name_clicked(data, list_item->eo_check);
1072 static void __destroy_certificates_ug_cb(ui_gadget_h ug, void *priv)
1074 SETTING_TRACE_BEGIN;
1076 /* restore the '<-' button on the navigate bar */
1078 SettingAboutUG *ad = (SettingAboutUG *) priv; /* ad is point to priv */
1082 ad->ug_loading = NULL;
1087 static void __setting_about_main_certificates_clicked(void *data)
1089 SETTING_TRACE_BEGIN;
1090 retm_if(data == NULL, "Data parameter is NULL");
1091 SettingAboutUG *ad = (SettingAboutUG *)data;
1093 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1098 cbs->layout_cb = setting_about_layout_ug_cb;
1099 cbs->result_cb = NULL;
1100 cbs->destroy_cb = __destroy_certificates_ug_cb;
1101 cbs->priv = (void *)ad;
1104 ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1106 if (NULL == ad->ug_loading) { /* error handling */
1107 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1112 static void __top_back_cb(void *data, Evas_Object *obj,
1115 SETTING_TRACE_BEGIN;
1117 setting_retm_if(data == NULL, "Data parameter is NULL");
1119 SettingAboutUG *ad = (SettingAboutUG *) data;
1121 if (ad->item_dev_name)
1122 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1127 static Eina_Bool __delay_remove(void *data)
1129 SETTING_TRACE_BEGIN;
1130 SettingAboutUG *ad = data;
1133 evas_object_del(ad->popup);
1138 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1140 SETTING_TRACE_BEGIN;
1141 retm_if(data == NULL, "Data parameter is NULL");
1142 retm_if(ctx == NULL, "obj parameter is NULL");
1143 SettingAboutUG *ad = (SettingAboutUG *)data;
1145 if(value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
1147 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1148 if(ad->navi_item && !elm_object_item_part_content_get(ad->navi_item, "title_right_btn"))
1150 Evas_Object *r_button = setting_create_button(ad->navi_bar,
1151 dgettext("sys_string", "IDS_COM_BODY_BACK"),
1152 NAVI_BACK_BUTTON_STYLE,
1156 elm_object_item_part_content_set(ad->navi_item, "title_right_btn", r_button);
1160 setting_disable_evas_object(r_button);
1161 setting_dim_evas_object(r_button, TRUE);
1166 else if(value == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
1168 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1169 if(ad->navi_item && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
1171 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
1172 evas_object_del(btn);
1175 if (ad->item_dev_name) {
1176 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1178 //if Setting is overlapped by other app,the entry will lost its focus,
1179 //the input pannel will be hided and any popup should be removed to fix blinking issue.
1181 ecore_idler_add(__delay_remove, ad);
1185 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj)
1187 SETTING_TRACE_BEGIN;
1188 retm_if(data == NULL, "Data parameter is NULL");
1189 retm_if(obj == NULL, "obj parameter is NULL");
1190 SettingAboutUG *ad = (SettingAboutUG *)data;
1192 if (!elm_object_focus_get(obj)) {
1193 elm_object_focus_set(obj, EINA_TRUE);