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>
32 #include <app_manager.h>
33 #include <system_info.h>
35 #define DEVNAME_BLOCK_SPACE 0
36 // #define SUPPORT_DIAG_USAGE
38 /** @todo : need to handle unicode encoded input characters */
40 #define MAX_DEVICE_NAME_LEN 24
41 #define EMPTY_LIMITATION_STR "The Name cannot be empty or composited by spaces"//"IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
42 #define DIAGNOSTICS_USAGE_STR "Diagnostics and Usage"
43 #define SOFTWARE_UPDATE_STR "IDS_ST_MBODY_SOFTWARE_UPDATE"
46 static int setting_about_main_create(void *cb);
47 static int setting_about_main_destroy(void *cb);
48 static int setting_about_main_update(void *cb);
49 static int setting_about_main_cleanup(void *cb);
51 setting_view setting_view_about_main = {
52 .create = setting_about_main_create,
53 .destroy = setting_about_main_destroy,
54 .update = setting_about_main_update,
55 .cleanup = setting_about_main_cleanup,
58 * Do process when clicking '<-' button
64 static void setting_about_main_click_softkey_back_cb(void *data,
69 * Do process when clicking on some genlist item
75 static void setting_about_main_mouse_up_Gendial_list_cb(void *data,
79 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
80 static void __setting_about_main_certificates_clicked(void *data);
81 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj);
82 static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj);
83 /* ***************************************************
87 ***************************************************/
88 static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
90 SettingAboutUG *ad = data;
98 static void __error_popup_response_cb(void *data, Evas_Object *obj,
102 retm_if(data == NULL, "Data parameter is NULL");
103 Setting_GenGroupItem_Data *list_item = data;
104 if (list_item->notify) {
105 evas_object_del(list_item->notify);
106 list_item->notify = NULL;
110 static void __device_name_changed_cb(void *data, Evas_Object *obj)
112 retm_if(!data || !obj, "Data parameter is NULL");
113 //return if entry is not focused too
115 Setting_GenGroupItem_Data *list_item =
116 (Setting_GenGroupItem_Data *) data;
117 SettingAboutUG *ad = list_item->userdata;
118 retm_if(ad == NULL, "Data parameter is NULL");
120 const char *entry_str = elm_entry_entry_get(obj);
121 int entry_len = safeStrLen(entry_str);
122 SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
124 SETTING_TRACE("maxLengthReachFlag:[%d], enterKeyPressFlag:%d", list_item->maxLengthReachFlag, list_item->enterKeyPressFlag);
125 /* show the popup if the text already reaches max length and the input character is not the enter key */
126 if (list_item->maxLengthReachFlag && list_item->enterKeyPressFlag == FALSE) {
127 if (!list_item->notify) {
128 list_item->notify = setting_create_popup_without_btn(list_item, list_item->win_main,
129 NULL, _(EXCEED_LIMITATION_STR),
130 __error_popup_response_cb,
131 POPUP_INTERVAL, FALSE, FALSE);
132 elm_object_focus_set(list_item->eo_check, EINA_FALSE);
134 //postpone 2 seconds again
135 elm_popup_timeout_set(list_item->notify, POPUP_INTERVAL);
139 if (list_item->enterKeyPressFlag == TRUE) {
140 SETTING_TRACE("ad->pre_name:[%s]", ad->pre_name);
141 elm_entry_entry_set(obj, ad->pre_name);
143 G_FREE(ad->pre_name);
144 ad->pre_name = (char *)g_strdup(entry_str);
145 SETTING_TRACE("ad->pre_name:[%s]", ad->pre_name);
148 list_item->maxLengthReachFlag = FALSE;
149 list_item->enterKeyPressFlag = FALSE;
151 #if DEVNAME_BLOCK_SPACE
153 if (entry_len > 0 && NULL != strstr(entry_str, " ")) {//cancel the effect of input 'space character'
154 SETTING_TRACE("Cannot input the 'space' key or 'enter' key");
158 char *tmp = (char *)g_strdup(entry_str);
161 for (j = i; tmp[j]; j++) {
168 G_FREE(list_item->sub_desc);
169 list_item->sub_desc = (char *)g_strdup(tmp);
171 SETTING_TRACE("sub_desc:[%s]", list_item->sub_desc);
173 elm_entry_entry_set(obj, list_item->sub_desc);
174 elm_entry_cursor_end_set(obj);
178 G_FREE(list_item->sub_desc);//release first
179 list_item->sub_desc = (char *)g_strdup(ad->pre_name);
181 if (isSpaceStr(ad->pre_name)) {
184 ad->empty_flag = TRUE;
185 //elm_entry_context_menu_disabled_set(obj, TRUE); //disable the copy&paste&search popup
186 //elm_entry_magnifier_disabled_set(obj, TRUE);
188 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
191 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
194 setting_disable_evas_object(back_btn);
195 setting_dim_evas_object(back_btn, TRUE);
198 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
201 setting_disable_evas_object(top_r_btn);
202 setting_dim_evas_object(top_r_btn, TRUE);
210 ad->empty_flag = FALSE;
211 //elm_entry_context_menu_disabled_set(obj, FALSE); //enable the copy&paste&search popup
212 //elm_entry_magnifier_disabled_set(obj, FALSE);
214 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
217 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
220 setting_enable_evas_object(back_btn);
221 setting_undo_dim_evas_object(back_btn, TRUE);
224 Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
227 setting_enable_evas_object(top_r_btn);
228 setting_undo_dim_evas_object(top_r_btn, TRUE);
238 __setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
241 __device_name_changed_cb(data, obj);
247 * - No ini: Unavailable
248 * - I9500 @ target: GT-I9500
249 * - I9500 @ emul: SDK
250 * - SLP @ target: GT-SLP
253 void setting_about_main_get_phone_model_name(char* szStr, int nSize)
255 retm_if(szStr == NULL, "szStr parameter is NULL");
258 int ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value);
259 SETTING_TRACE("value : %s", value);
260 if (ret != SYSTEM_INFO_ERROR_NONE) {
261 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
263 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
268 snprintf(szStr, nSize, "%s", value);
270 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
276 void setting_about_main_get_sw_version(char* szStr, int nSize)
278 retm_if(szStr == NULL, "szStr parameter is NULL");
281 char *platform = NULL;
282 int ret = system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &platform);
283 if (ret != SYSTEM_INFO_ERROR_NONE) {
284 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
286 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
291 char *version = NULL;
292 ret = system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &version);
293 if (ret != SYSTEM_INFO_ERROR_NONE) {
294 SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
299 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
302 snprintf(szStr, nSize, "%s %s", platform, version);
308 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
310 setting_retm_if(str == NULL, "str parameter is NULL");
311 setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN+1, "size parameter is wrong");
313 FILE *p = fopen(SETTING_ABOUT_MACINFO_PATH, "r");
316 int size = fread(str, sizeof(char), SETTING_ABOUT_WIFI_MAC_STR_LEN, p);
317 if (size != SETTING_ABOUT_WIFI_MAC_STR_LEN) {
318 SETTING_TRACE_ERROR("fail to call fread");
323 perror("open failed!");
326 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
328 int wifi_state = VCONFKEY_WIFI_OFF;
329 vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
331 if((safeStrLen(str) == 0) || (wifi_state == VCONFKEY_WIFI_OFF))
332 snprintf(str, size, "%s (%s)", _("IDS_ST_HEADER_UNAVAILABLE"), _(SETTING_ABOUT_NEVER_TURN_WIFI_ON_STR));
335 void setting_about_main_get_battery_string(char *str, int size)
337 setting_retm_if(str == NULL, "str parameter is NULL");
341 /* Read battery level from vconf, as system-server sets that key using a
342 device-specific plugin. Reading directly from /sys fails on different
344 if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &bat_level) == 0) {
345 snprintf(str, size, "%d%s", bat_level, "\%");
348 SETTING_TRACE_ERROR("Reading VCONFKEY_SYSMAN_BATTERY_CAPACITY failed.");
349 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
353 void setting_about_main_get_bluetooth_address_string(char *str, int size)
355 setting_retm_if(str == NULL, "str parameter is NULL");
359 ret = bt_initialize();
360 setting_retm_if(ret != 0, "bluetooth initialization failed");
362 char *local_address = NULL;
363 ret = bt_adapter_get_address(&local_address);
368 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
369 SETTING_TRACE_DEBUG("bt address : %s", str);
371 SETTING_TRACE_DEBUG("bt address : %s", local_address);
372 snprintf(str, size, "%s", local_address);
380 int __stat_get_cpuinfo(float *usr_pct, float *sys_pct)
382 setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
383 setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
388 static unsigned long long usr_time = 0, nice_time = 0, sys_time = 0;
389 static unsigned long long old_usr = 0, old_nice = 0, old_sys = 0;
390 static struct timeval old_tv, cur_tv;
391 unsigned long long elapsed_tick;
397 tick_per_sec = sysconf(_SC_CLK_TCK);
398 cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
403 gettimeofday(&cur_tv, NULL);
404 fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
406 SETTING_TRACE_ERROR("fp == NULL");
410 char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
411 char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
413 if(cpu_info_p == NULL) {
414 SETTING_TRACE_ERROR("fgets failed");
415 fclose(fp); // free - code
420 unsigned long long tmp_long = 0;
422 /* split cpu_info, get 3 numbers headmost*/
423 while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
425 tmp_long = strtoull(substr, &endptr, 10);
426 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
432 nice_time = tmp_long;
451 SETTING_TRACE_ERROR("old_usr == 0");
455 elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
456 ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
459 if (elapsed_tick != 0)
461 ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
466 if (elapsed_tick != 0)
468 ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
475 old_nice = nice_time;
482 static Eina_Bool __timer_update_cb(const void *data)
484 retv_if(data == NULL, TRUE);
485 SettingAboutUG *ad = (SettingAboutUG *) data;
487 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
488 if (ad->item_data_cpu) {
490 int ret = __stat_get_cpuinfo(&usr, &sys);
491 if (ret == -ENOENT) {
492 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
493 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
495 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
498 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
499 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
500 elm_genlist_item_update(ad->item_data_cpu->item);
503 if (ad->item_data_battery) {
504 setting_about_main_get_battery_string(str, sizeof(str));
505 /*SETTING_TRACE("str:%s", str);*/
506 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
507 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
508 elm_genlist_item_update(ad->item_data_battery->item);
513 static void __about_main_gl_drag(void *data, Evas_Object *obj, void *event)
515 //SETTING_TRACE_BEGIN;
517 retm_if(event == NULL, "Invalid argument: event info is NULL");
518 SettingAboutUG *ad = (SettingAboutUG *) data;
519 ad->mouse_move_flag = TRUE;
522 static void __about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
526 SettingAboutUG *ad = (SettingAboutUG *) data;
527 retm_if(event == NULL, "Invalid argument: event info is NULL");
528 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
530 if (ad->mouse_move_flag) {
531 ad->mouse_move_flag = FALSE;
535 if (ad->item_dev_name) {
536 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
537 if (ad->item_dev_name->item == selected_item)//do nothing..
540 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);//to make inputing words input
544 static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
547 retm_if(!data || !obj, "Data parameter is NULL");
549 Evas_Object *entry_container = elm_object_parent_widget_get(obj);
550 if (entry_container) {
551 //whe entry unfocused, its guidetext will becomes "Input here"
552 elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
553 if (elm_entry_is_empty(obj))
554 elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
555 elm_object_signal_emit(entry_container, "elm,state,eraser,hide", "elm");
558 //Setting_GenGroupItem_Data *list_item = data;
559 const char *entry_str = elm_entry_entry_get(obj);
560 char *entry_str_utf8 = NULL;
561 entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
562 SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
564 //ecore_idler_add(__check_on_idler, ad);
565 Setting_GenGroupItem_Data *item_dev_name = data;
566 SettingAboutUG *ad = item_dev_name->userdata;
567 __device_name_changed_cb(item_dev_name, item_dev_name->eo_check);
569 //after unfocus,need updating..
570 elm_object_item_data_set(item_dev_name->item, item_dev_name);
571 elm_genlist_item_update(item_dev_name->item);
575 && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
576 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
577 evas_object_del(btn);
579 setting_hide_input_pannel_cb(item_dev_name->eo_check);
581 if (ad->empty_flag) {
583 evas_object_del(ad->popup);
586 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
587 __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
588 FREE(entry_str_utf8);
594 if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
595 SETTING_TRACE_ERROR("Set vconf[%s] failed",
596 VCONFKEY_SETAPPL_DEVICE_NAME_STR);
599 FREE(entry_str_utf8);
601 elm_entry_select_none(obj);
604 static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
606 ret_if(data == NULL);
607 SettingAboutUG *ad = (SettingAboutUG*)data;
608 Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
609 SETTING_TRACE_DEBUG("ev->key : %s", ev->key);
610 if(safeStrCmp(ev->key, "KP_Enter") == 0 //it is for Japanese keyboard to fix N_SE-10719
611 || safeStrCmp(ev->key, "Return") == 0)
613 // if entry has 1 char at list, hide ime.
614 /*if(isSpaceStr(elm_entry_entry_get(obj)))
617 evas_object_del(ad->popup);
620 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
621 __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
626 static void __max_len_reached(void *data, Evas_Object *obj, void *event_info)
629 retm_if(data == NULL, "Data parameter is NULL");
630 retm_if(!elm_object_focus_get(obj), "Entry is not focused");//notify only when entry is being focused on.
632 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
633 list_item->maxLengthReachFlag = true;
636 int setting_about_generate_genlist(void *data)
640 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
642 SettingAboutUG *ad = (SettingAboutUG *) data;
643 bool is_emul_bin = isEmulBin();
645 Evas_Object *scroller = ad->genlsit;
646 Elm_Object_Item *item = NULL;
647 Setting_GenGroupItem_Data *item_data = NULL;
648 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
649 (void)setting_create_Gendial_field_titleItem(scroller,
650 &(ad->itc_group_item),
651 SETTING_ABOUT_DEVICE_INFO_STR, NULL);
653 char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
654 char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
657 ad->empty_flag = FALSE;
658 if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0])
660 ad->empty_flag = TRUE;
662 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
665 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
666 setting_disable_evas_object(back_btn);
667 setting_dim_evas_object(back_btn, TRUE);
674 char *app_name = NULL;
675 int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm-ui", &app_name);
676 if (ret_get_app_name == APP_MANAGER_ERROR_INVALID_PACKAGE )
678 SETTING_TRACE(">>>>>>>>>>>>>>>>>> UNINSTALLED PACKAGE");
679 ad->item_dev_name = NULL;
683 setting_create_Gendial_field_def(scroller, &(ad->itc_1icon),
684 setting_about_main_mouse_up_Gendial_list_cb,
685 ad, SWALLOW_Type_LAYOUT_ENTRY,
686 NULL, NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc,
687 __setting_about_device_name_changed_cb);
688 if (ad->item_dev_name) {
689 ad->item_dev_name->userdata = ad;
690 ad->item_dev_name->isSinglelineFlag = 0;
691 ad->item_dev_name->start_change_cb = (setting_call_back_func)__entry_key_down_cb;
692 ad->item_dev_name->stop_change_cb = __entry_unfocus_cb;
693 ad->item_dev_name->maxlength_reached_cb = __max_len_reached;
694 ad->item_dev_name->x_callback_cb = _input_panel_event_cb;
695 ad->item_dev_name->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
697 if (ad->item_dev_name->limit_filter_data) {
698 //max byte len is 31 not 31+1
699 //ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN + OFFESET_ENTRY_FILTER;
700 ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
701 ad->item_dev_name->win_main = ad->win_get;
703 //ad->item_dev_name->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBER;
704 ad->item_dev_name->input_panel_disable_flag = EINA_TRUE;
706 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
713 char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
714 setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
716 SETTING_TRACE("ad->my_numbers.count[%d]", ad->my_numbers.count);
717 if (ad->my_numbers.count == 1) {
719 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
721 ad, SWALLOW_Type_INVALID, NULL,
722 NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
725 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
727 SETTING_TRACE_ERROR("item_data is NULL");
729 } else if (ad->my_numbers.count > 1){
730 setting_enable_expandable_genlist(scroller, ad,
731 setting_about_main_exp_cb, NULL);
732 item_data = setting_create_Gendial_exp_parent_field(scroller,
733 &(ad->itc_2text_3_parent),
735 SWALLOW_Type_INVALID,
736 SETTING_ABOUT_MY_NUMBER_STR,
739 item_data->int_slp_setting_binded = STR_SLP_SETTING_SELECT_NUM;
741 SETTING_TRACE_ERROR("ad->data_wap is NULL");
744 } else if (ad->my_numbers.count == 0) {
745 // _("IDS_ST_HEADER_UNAVAILABLE")
746 SETTING_TRACE_ERROR("don't have my number");
748 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
750 ad, SWALLOW_Type_INVALID, NULL,
751 NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
752 _("IDS_ST_HEADER_UNAVAILABLE"), NULL);
754 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
756 SETTING_TRACE_ERROR("item_data is NULL");
761 memset(str, 0x00, sizeof(str));
762 setting_about_main_get_phone_model_name(str, sizeof(str));
764 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
765 NULL, SWALLOW_Type_INVALID, NULL,
766 NULL, 0, SETTING_ABOUT_MODEL_STR, str, NULL);
768 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
770 SETTING_TRACE_ERROR("item_data is NULL");
774 memset(str, 0x00, sizeof(str));
775 setting_about_main_get_sw_version(str, sizeof(str));
777 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
778 NULL, SWALLOW_Type_INVALID, NULL,
779 NULL, 0, SETTING_ABOUT_VERSION_STR, str, NULL);
781 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
783 SETTING_TRACE_ERROR("item_data is NULL");
786 // [UI] Bluetooth address
787 if ( ! is_emul_bin) { // requested by DI Kim due to BT BS on 11/26
788 memset(str, 0x00, sizeof(str));
789 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
791 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
792 NULL, SWALLOW_Type_INVALID, NULL,
793 NULL, 0, SETTING_ABOUT_BLUETOOTH_STR, str, NULL);
794 if (ad->item_data_bt) {
795 elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
797 SETTING_TRACE_ERROR("item_data is NULL");
802 memset(str, 0x00, sizeof(str));
803 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
805 SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
808 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
809 NULL, SWALLOW_Type_INVALID, NULL,
810 NULL, 0, SETTING_ABOUT_WIFI_STR, str, NULL);
811 if (ad->item_data_wifi) {
812 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
814 SETTING_TRACE_ERROR("item_data is NULL");
818 memset(str, 0x00, sizeof(str));
819 setting_about_main_get_battery_string(str, sizeof(str));
821 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
822 NULL, SWALLOW_Type_INVALID, NULL,
823 NULL, 0, SETTING_ABOUT_BATTERY_STR, str, NULL);
825 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
826 ad->item_data_battery = item_data;
828 SETTING_TRACE_ERROR("item_data is NULL");
832 memset(str, 0x00, sizeof(str));
834 int ret = __stat_get_cpuinfo(&usr, &sys);
835 if (ret == -ENOENT) {
836 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
837 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
839 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
842 ad->item_data_cpu = item_data =
843 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
844 NULL, SWALLOW_Type_INVALID, NULL,
845 NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
847 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
849 SETTING_TRACE_ERROR("item_data is NULL");
854 elm_genlist_item_append(scroller, &(ad->itc_seperator), NULL, NULL,
855 ELM_GENLIST_ITEM_NONE, NULL, NULL);
856 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
858 #ifdef SUPPORT_DIAG_USAGE
859 // [UI] Diagnostics and Usage
861 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
862 setting_about_main_mouse_up_Gendial_list_cb,
863 ad, SWALLOW_Type_INVALID, NULL, NULL,
864 0, DIAGNOSTICS_USAGE_STR,
870 // implementation is in progress.
871 if (is_ug_installed_by_ug_args("setting-manage-applications-efl"))
873 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
874 setting_about_main_mouse_up_Gendial_list_cb,
875 ad, SWALLOW_Type_INVALID, NULL, NULL,
876 0, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
878 item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
879 ELM_GENLIST_ITEM_NONE, NULL, NULL);
880 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
885 ecore_timer_add(2, (Ecore_Task_Cb) __timer_update_cb, ad);
887 return SETTING_RETURN_SUCCESS;
890 static int setting_about_main_create(void *cb)
894 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
896 SettingAboutUG *ad = (SettingAboutUG *) cb;
898 Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
899 retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
900 "Cannot set scroller object as contento of layout");
901 elm_object_style_set(scroller, "dialogue");
902 elm_genlist_clear(scroller); /* first to clear list */
904 /* Enabling illume notification property for window */
905 elm_win_conformant_set(ad->win_main_layout, 1);
906 Evas_Object *conformant = elm_conformant_add(ad->win_main_layout);
907 elm_object_style_set(conformant, "internal_layout"); /* By Kollus. 2011-01-04 */
908 evas_object_show(conformant);
909 elm_object_content_set(conformant, scroller);
910 ad->genlsit = scroller;
913 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
914 _(KeyStr_AboutPhone),
915 _("IDS_COM_BODY_BACK"), NULL, NULL,
916 setting_about_main_click_softkey_back_cb,
917 NULL, NULL, ad, conformant,
918 &ad->navi_bar, NULL);
920 evas_object_smart_callback_add(scroller, "drag", __about_main_gl_drag, ad);
922 evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
923 __about_main_gl_mouse_up, ad);
925 ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
928 setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
929 if (VCONFKEY_TELEPHONY_SIM_INSERTED != value) {
930 setting_about_generate_genlist((void *)ad);
933 setting_view_about_main.is_create = 1;
935 return SETTING_RETURN_SUCCESS;
938 static int setting_about_main_destroy(void *cb)
942 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
944 SettingAboutUG *ad = (SettingAboutUG *) cb;
946 if (ad->update_timer) {
947 ecore_timer_del(ad->update_timer);
948 ad->update_timer = NULL;
951 evas_object_del(ad->popup);
955 if (ad->ly_main != NULL) {
956 evas_object_del(ad->ly_main);
960 G_FREE(ad->pre_name);
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 /* Send destroy request */
1031 ug_destroy_me(ad->ug);
1032 //imf must be hided before view is destroyed.
1033 //Following code is just to improve the hiding speed. If not add these code,
1034 //the input pannel will also be hided with the view destroyed,but it works too slow.
1035 if (ad->item_dev_name) {
1036 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1037 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1051 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1054 SETTING_TRACE_BEGIN;
1056 setting_retm_if(data == NULL, "Data parameter is NULL");
1058 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1059 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1060 elm_genlist_item_selected_set(item, 0);
1061 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1063 /* SettingAboutUG *ad = (SettingAboutUG *) data; */
1065 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1066 if (!safeStrCmp("IDS_ST_BODY_OPEN_SOURCE_LICENCES", list_item->keyStr)) {
1068 //setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
1070 } else if (!safeStrCmp("IDS_COM_BODY_CERTIFICATES", list_item->keyStr)) {
1071 __setting_about_main_certificates_clicked(data);
1072 } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
1073 __setting_about_main_device_name_clicked(data, list_item->eo_check);
1074 } else if (!safeStrCmp(DIAGNOSTICS_USAGE_STR, list_item->keyStr)) {
1075 __setting_about_main_diagnostics_usage_clicked(data, list_item->eo_check);
1079 static void __destroy_certificates_ug_cb(ui_gadget_h ug, void *priv)
1081 SETTING_TRACE_BEGIN;
1083 /* restore the '<-' button on the navigate bar */
1085 SettingAboutUG *ad = (SettingAboutUG *) priv; /* ad is point to priv */
1089 ad->ug_loading = NULL;
1094 static void __setting_about_main_certificates_clicked(void *data)
1096 SETTING_TRACE_BEGIN;
1097 retm_if(data == NULL, "Data parameter is NULL");
1098 SettingAboutUG *ad = (SettingAboutUG *)data;
1100 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1105 cbs->layout_cb = setting_about_layout_ug_cb;
1106 cbs->result_cb = NULL;
1107 cbs->destroy_cb = __destroy_certificates_ug_cb;
1108 cbs->priv = (void *)ad;
1111 ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1113 if (NULL == ad->ug_loading) { /* error handling */
1114 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1119 static void __top_back_cb(void *data, Evas_Object *obj,
1122 SETTING_TRACE_BEGIN;
1124 setting_retm_if(data == NULL, "Data parameter is NULL");
1126 SettingAboutUG *ad = (SettingAboutUG *) data;
1128 if (ad->item_dev_name)
1129 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1134 static Eina_Bool __delay_remove(void *data)
1136 SETTING_TRACE_BEGIN;
1137 SettingAboutUG *ad = data;
1140 evas_object_del(ad->popup);
1145 static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1147 SETTING_TRACE_BEGIN;
1148 retm_if(data == NULL, "Data parameter is NULL");
1149 retm_if(ctx == NULL, "obj parameter is NULL");
1151 SettingAboutUG *ad = (SettingAboutUG *)data;
1153 if(value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
1155 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1156 if(ad->navi_item && !elm_object_item_part_content_get(ad->navi_item, "title_right_btn"))
1158 Evas_Object *r_button = setting_create_button(ad->navi_bar,
1159 dgettext("sys_string", "IDS_COM_BODY_BACK"),
1160 NAVI_BACK_BUTTON_STYLE,
1163 elm_object_item_part_content_set(ad->navi_item, "title_right_btn", r_button);
1167 setting_disable_evas_object(r_button);
1168 setting_dim_evas_object(r_button, TRUE);
1173 else if(value == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
1175 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1176 if(ad->navi_item && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
1177 Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
1178 evas_object_del(btn);
1181 if (ad->item_dev_name) {
1182 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1184 //if Setting is overlapped by other app,the entry will lost its focus,
1185 //the input pannel will be hided and any popup should be removed to fix blinking issue.
1187 ecore_idler_add(__delay_remove, ad);
1191 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj)
1193 SETTING_TRACE_BEGIN;
1194 retm_if(data == NULL, "Data parameter is NULL");
1195 retm_if(obj == NULL, "obj parameter is NULL");
1196 SettingAboutUG *ad = (SettingAboutUG *)data;
1198 if (!elm_object_focus_get(obj)) {
1199 elm_object_focus_set(obj, EINA_TRUE);
1200 elm_entry_cursor_end_set(obj);
1203 //Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(obj);
1204 //setting_retm_if(imf_context == NULL, "imf_context is NULL");
1205 //ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_cb, ad);
1206 //ecore_imf_context_input_panel_show(imf_context);
1210 static void __destroy_diagnostics_usage_ug_cb(ui_gadget_h ug, void *priv)
1212 SETTING_TRACE_BEGIN;
1214 /* restore the '<-' button on the navigate bar */
1216 SettingAboutUG *ad = (SettingAboutUG *) priv; /* ad is point to priv */
1220 ad->ug_loading = NULL;
1223 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
1225 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
1227 if (back_btn != NULL) {
1228 elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
1232 static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj)
1234 SETTING_TRACE_BEGIN;
1235 retm_if(data == NULL, "Data parameter is NULL");
1236 SettingAboutUG *ad = (SettingAboutUG *)data;
1240 return; /* do nothing if ad is NULL */
1242 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1247 cbs->layout_cb = setting_about_layout_ug_cb;
1248 cbs->result_cb = NULL;
1249 cbs->destroy_cb = __destroy_diagnostics_usage_ug_cb;
1250 cbs->priv = (void *)ad;
1253 ug_create(ad->ug, "setting-crash-efl", UG_MODE_FULLVIEW, NULL, cbs);
1255 if (NULL == ad->ug_loading) { /* error handling */
1256 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1257 setting_create_simple_popup(ad, ad->win_get, NULL, _(UNSUPPORTED_FUNCTION));