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.
22 #include <setting-about-main.h>
24 #include <sys/types.h>
26 #include <system_info.h>
29 #include <bluetooth.h>
32 #include <app_manager.h>
33 #include <efl_assist_events.h>
34 #include <ITapiModem.h>
38 #define KEY_BACK "X86Back_MOCK"
42 #define MAX_DEVICE_NAME_LEN 32
44 #define DEVICED_BUS_NAME "org.tizen.system.deviced"
45 #define DEVICED_OBJECT_PATH "/Org/Tizen/System/DeviceD"
46 #define DEVICED_INTERFACE_NAME DEVICED_BUS_NAME
47 #define DEVICED_PATH_BOARD DEVICED_OBJECT_PATH"/Board"
48 #define DEVICED_INTERFACE_BOARD DEVICED_INTERFACE_NAME".Board"
49 #define METHOD_GET_SERIAL "GetSerial"
52 /** @todo : need to handle unicode encoded input characters */
54 #define DEVICE_NAME "IDS_ST_HEADER_DEVICE_NAME"
55 #define DEVICE_NAME_EXCEED_STR "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
58 #define EMPTY_LIMITATION_STR "IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
59 #define SOFTWARE_UPDATE_STR "IDS_ST_MBODY_SOFTWARE_UPDATE"
60 #define DEVICE_NAME_UNALLOWED_SPACE_KEY_STR "Device name cannot contain spaces"
61 #define DEVICE_NAME_DEFAULE "Redwood"
63 #define APP_NAME "Settings"
65 static int setting_about_main_create(void *cb);
66 static int setting_about_main_destroy(void *cb);
67 static int setting_about_main_update(void *cb);
68 static int setting_about_main_cleanup(void *cb);
70 setting_view setting_view_about_main = {
71 .create = setting_about_main_create,
72 .destroy = setting_about_main_destroy,
73 .update = setting_about_main_update,
74 .cleanup = setting_about_main_cleanup,
77 void __setting_about_gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
79 /*SETTING_TRACE_BEGIN; */
80 setting_retm_if(event_info == NULL, "invalid parameter: event_info is NULL");
81 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
82 /*Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item); */
85 if (elm_config_access_get()) {
86 /* ===== Accessibility ==== */
87 const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
88 if (itc && itc->item_style && !safeStrCmp(itc->item_style, "dialogue/editfield/title")) {
89 /* Register bg_dialogue image instead whole item */
90 Evas_Object *acc = elm_object_item_part_access_register(item, "bg_dialogue");
98 static void __setting_about_main_remove_noti(void *data)
101 setting_retm_if(data == NULL, "Invalid argument: data is NULL");
102 SettingAboutUG *ad = (SettingAboutUG *) data;
103 notification_h noti = NULL;
104 notification_error_e ret = NOTIFICATION_ERROR_NONE;
107 noti = notification_load(APP_NAME, ad->noti_id);
109 SETTING_TRACE("Notification can be deleted already");
111 ret = notification_delete(noti);
112 if (ret != NOTIFICATION_ERROR_NONE) {
113 SETTING_TRACE_ERROR("Fail to notification_delete [%d]", ret);
115 ret = notification_free(noti);
116 if (ret != NOTIFICATION_ERROR_NONE) {
117 SETTING_TRACE_ERROR("Fail to notification_free [%d]", ret);
122 ret = notification_free(noti);
123 if (ret != NOTIFICATION_ERROR_NONE) {
124 SETTING_TRACE_ERROR("Fail to notification_free [%d]", ret);
134 * @brief popup response callback fuc.
136 * @param data application context
137 * @param obj Evas Object
138 * @param event_info even type
142 static void __setting_about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
146 setting_retm_if(obj == NULL, "obj parameter is NULL");
147 setting_retm_if(data == NULL, "Data parameter is NULL");
148 SettingAboutUG *ad = (SettingAboutUG *) data;
149 /*Evas_Object *popup = data; */
150 switch (btn_type(obj)) {
151 case POPUP_RESPONSE_OK: {
153 ad->popup_showed_flag = FALSE;
155 evas_object_del(ad->popup);
158 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
159 char *name_value = NULL;
160 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
161 if (NULL == name_value) {
162 /*use the defaule name if get vconf failed*/
163 name_value = (char *)g_strdup(DEVICE_NAME_DEFAULE);
165 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
166 /*for genlist update */
167 elm_entry_entry_set(ad->item_dev_name->eo_check, name_value);
168 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
169 G_FREE(ad->item_dev_name->sub_desc);/*release first */
170 ad->item_dev_name->sub_desc = (char *)g_strdup(name_value);
172 SETTING_TRACE("ad->item_dev_name->sub_desc:%s", ad->item_dev_name->sub_desc);
173 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
175 ecore_imf_context_input_panel_show(imf_context);
188 * @brief callback run for idler task to destroy an popup.
190 * @param data application context
192 * @return FALSE for call it once, TRUE for call once the CPU is in idler
194 static Eina_Bool __setting_about_popup_remove_delay(void *data)
197 SettingAboutUG *ad = data;
198 if (ad->popup_space) {
199 evas_object_del(ad->popup_space);
200 ad->popup_space = NULL;
201 ad->popup_showed_flag = FALSE;
207 * @brief callback for popup destory.
209 * @param data application context
210 * @param e Evas handler
211 * @param obj Evas object
212 * @param event_info event type
214 static void __setting_about_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
218 retm_if(data == NULL, "Data parameter is NULL");
219 SettingAboutUG *ad = (SettingAboutUG *)data;
221 ad->popup_showed_flag = FALSE;
225 * @brief callback run for idler task to show an popup.
227 * @param data application context
229 static Eina_Bool __setting_about_popup_show_delay(void *data)
232 retvm_if(data == NULL, FALSE, "Data parameter is NULL");
233 SettingAboutUG *ad = (SettingAboutUG *)data;
235 /*popup the message and display the original name if the input is empty*/
236 SETTING_TRACE("POP UP again");
238 if (NULL == ad->popup) {
239 ad->popup_showed_flag = true;
240 ad->popup = setting_create_popup_with_btn(ad, ad->win_get, "IDS_ST_HEADER_ENTER_VALID_DEVICE_NAME_ABB",
241 _("IDS_ST_POP_YOU_MUST_ENTER_A_DEVICE_NAME"),
242 __setting_about_popup_rsp_cb, 0,
243 1, _("IDS_ST_BUTTON_OK_ABB"));
244 evas_object_event_callback_add(ad->popup, EVAS_CALLBACK_DEL, __setting_about_popup_del_cb, ad);
251 * @brief callback run for idler task to destroy an popup.
253 * @param data application context
255 * @return FALSE for call it once, TRUE for call once the CPU is in idler
257 static void __setting_about_popup_mobile_ap_turn_off_ask_resp_cb(void *data,
262 setting_retm_if(data == NULL, "Data parameter is NULL");
263 SettingAboutUG *ad = (SettingAboutUG *)data;
264 int response_type = btn_type(obj);
266 if (POPUP_RESPONSE_OK == response_type) {
267 /* disable tehering*/
268 #if SUPPORT_TETHERING
269 tethering_h th = NULL;
270 tethering_error_e ret = TETHERING_ERROR_NONE;
272 ret = tethering_create(&th);
273 if (ret != TETHERING_ERROR_NONE) {
276 if (tethering_is_enabled(NULL, TETHERING_TYPE_WIFI) == TRUE) {
277 tethering_disable(th, TETHERING_TYPE_WIFI);
279 tethering_destroy(th);
281 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
282 elm_object_focus_allow_set(ad->item_dev_name->eo_check, EINA_TRUE);
283 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
284 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
286 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
288 ecore_imf_context_input_panel_show(imf_context);
291 } else if (POPUP_RESPONSE_CANCEL == response_type) {
298 evas_object_del(ad->popup);
306 * @brief regulatory popup response cp.
308 * @param data application context
309 * @param obj evas object
310 * @param event_info event type
313 static void __setting_about_popup_regulatory_info_rsp_cb(void *data, Evas_Object *obj, void *event_info)
315 retm_if(data == NULL, "Data parameter is NULL");
316 evas_object_del(data);
321 * @brief show regulatory info popup.
323 * @param data application context
325 static void __setting_about_popup_regulatory_info(void *data)
336 ad = (SettingAboutUG *) data;
337 popup = elm_popup_add(ad->win_main_layout);
338 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
340 elm_object_part_text_set(popup, "title,text", _(KeyStr_Regulatory_Info));
341 layout = elm_layout_add(popup);
342 elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "popup_center_image");
343 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
345 icon = elm_image_add(layout);
346 snprintf(buf, sizeof(buf), "%s/00_popup_regulatory_info.png", SETTING_ICON_PATH);
347 elm_image_file_set(icon, buf, NULL);
348 elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
349 elm_object_part_content_set(layout, "elm.swallow.content", icon);
351 evas_object_show(layout);
352 elm_object_content_set(popup, layout);
354 btn1 = elm_button_add(popup);
355 elm_object_style_set(btn1, "popup");
356 elm_object_text_set(btn1, _("IDS_ST_BUTTON_OK"));
357 elm_object_part_content_set(popup, "button1", btn1);
358 evas_object_smart_callback_add(btn1, "clicked", __setting_about_popup_regulatory_info_rsp_cb, popup);
359 evas_object_show(popup);
365 * @brief get Model Name.
366 * - No ini: Unavailable
367 * - I9500 @ target: GT-I9500
368 * - I9500 @ emul: SDK
369 * - SLP @ target: GT-SLP
372 * @param szStr the buffer for store the model name
373 * @param nSize buffer size
375 void setting_about_main_get_phone_model_name(char *szStr, int nSize)
377 retm_if(szStr == NULL, "szStr parameter is NULL");
380 int ret = system_info_get_platform_string("http://tizen.org/system/model_name", &value);
381 SETTING_TRACE("value : %s", value);
382 if (ret != SYSTEM_INFO_ERROR_NONE) {
383 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
385 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
390 snprintf(szStr, nSize, "%s", value);
392 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
399 * @brief get software version.
401 * @param szStr the buffer for store SW version
402 * @param nSize buffer size
404 void setting_about_main_get_sw_version(char *szStr, int nSize)
406 retm_if(szStr == NULL, "szStr parameter is NULL");
408 char *version = NULL;
409 int ret = system_info_get_platform_string("http://tizen.org/feature/platform.version", &version);
410 if (ret != SYSTEM_INFO_ERROR_NONE) {
411 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
413 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
417 char *build_info = NULL;
418 ret = system_info_get_platform_string("http://tizen.org/system/build.string", &build_info);
419 if (ret != SYSTEM_INFO_ERROR_NONE) {
420 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
423 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
427 snprintf(szStr, nSize, "TIZEN %s (%s)", version, build_info);
434 * @brief get software version.
436 * @param szStr the buffer for store SW version
437 * @param nSize buffer size
439 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
442 setting_retm_if(str == NULL, "str parameter is NULL");
443 setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN + 1, "size parameter is wrong");
445 char *mac_addr = NULL;
446 int status = wifi_get_mac_address(&mac_addr);
447 if (WIFI_ERROR_NONE != status) {
448 SETTING_TRACE_ERROR("Failed to call wifi_get_mac_address()");
450 SETTING_TRACE_ERROR("Success to call wifi_get_mac_address()");
454 safeCopyStr(str, mac_addr, SETTING_ABOUT_WIFI_MAC_STR_LEN);
455 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", mac_addr);
460 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
462 if ((status != WIFI_ERROR_NONE) || (safeStrLen(str) == 0)) {
463 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
467 static DBusMessage *dbus_method_sync_with_reply(const char *dest, const char *path,
468 const char *interface, const char *method,
469 const char *sig, char *param[])
471 DBusConnection *conn;
473 DBusMessageIter iter;
477 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
482 msg = dbus_message_new_method_call(dest, path, interface, method);
487 dbus_message_iter_init_append(msg, &iter);
489 dbus_error_init(&err);
491 reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
495 if (dbus_error_is_set(&err)) {
496 SETTING_TRACE_ERROR("dbus_connection_send error(%s:%s)", err.name, err.message);
497 dbus_error_free(&err);
501 dbus_message_unref(msg);
506 * @brief get serial number.
508 * @param szStr the buffer for store SN
509 * @param nSize buffer size
511 void setting_about_main_get_sn(char *szStr, int nSize)
513 retm_if(szStr == NULL, "szStr parameter is NULL");
520 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME, DEVICED_PATH_BOARD,
521 DEVICED_INTERFACE_BOARD, METHOD_GET_SERIAL, NULL, NULL);
523 SETTING_TRACE_ERROR("fail send message");
524 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
528 dbus_error_init(&err);
531 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &serial_num, DBUS_TYPE_INT32, &len, DBUS_TYPE_INVALID);
533 SETTING_TRACE_ERROR("no message : [%s:%s]", err.name, err.message);
534 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
538 dbus_message_unref(msg);
539 dbus_error_free(&err);
541 if (serial_num && strlen(serial_num)) {
542 snprintf(szStr, nSize, "%s", serial_num);
544 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
550 * @brief get current battery percentage.
552 * @param szStr the buffer for store battery percentage
553 * @param nSize buffer size
555 void setting_about_main_get_battery_string(char *str, int size)
557 setting_retm_if(str == NULL, "str parameter is NULL");
560 char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
561 snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
562 "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
564 char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
568 fd = open(file, O_RDONLY);
570 r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
571 if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
574 snprintf(str, size, "%d%s", val, "\%");
576 SETTING_TRACE_ERROR("read file fail");
577 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
582 SETTING_TRACE_ERROR("open file fail");
583 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
588 * @brief get bluetooth address.
590 * @param szStr the buffer for store bluetooth address
591 * @param nSize buffer size
593 void setting_about_main_get_bluetooth_address_string(char *str, int size)
595 setting_retm_if(str == NULL, "str parameter is NULL");
599 ret = bt_initialize();
600 setting_retm_if(ret != 0, "bluetooth initialization failed");
602 char *local_address = NULL;
603 ret = bt_adapter_get_address(&local_address);
608 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
609 SETTING_TRACE_DEBUG("bt address : %s failed get bt address with error code:%d", str, ret);
611 SETTING_TRACE_DEBUG("bt address : %s", local_address);
612 snprintf(str, size, "%s", local_address);
621 * @brief get CPU usage.
623 * @param szStr the buffer for store CPU usage
624 * @param nSize buffer size
626 * @return -ENOENT means failed to get CPU info, otherwise ok.
628 int setting_about_main_stat_get_cpuinfo(float *usr_pct, float *sys_pct)
630 setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
631 setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
636 static unsigned long long usr_time = 0, /*nice_time = 0,*/ sys_time = 0;
637 static unsigned long long old_usr = 0, /*old_nice = 0,*/ old_sys = 0;
638 static struct timeval old_tv, cur_tv;
639 unsigned long long elapsed_tick;
645 tick_per_sec = sysconf(_SC_CLK_TCK);
646 cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
652 gettimeofday(&cur_tv, NULL);
653 fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
655 SETTING_TRACE_ERROR("fp == NULL");
659 char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
660 char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
662 if (cpu_info_p == NULL) {
663 SETTING_TRACE_ERROR("fgets failed");
664 fclose(fp); /* free - code */
669 unsigned long long tmp_long = 0;
671 /* split cpu_info, get 3 numbers headmost*/
672 while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
674 tmp_long = strtoull(substr, &endptr, 10);
675 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
681 /*nice_time = tmp_long;*/
700 SETTING_TRACE_ERROR("old_usr == 0");
704 elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
705 ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
708 if (elapsed_tick != 0) {
710 ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
716 if (elapsed_tick != 0) {
718 ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
726 /*old_nice = nice_time; */
735 * @brief get device root status.
737 * @param szStr the buffer for store device root status
738 * @param nSize buffer size
740 static void setting_about_main_get_status_string(char *str, int size)
743 setting_retm_if(str == NULL, "str parameter is NULL");
745 struct_cordon_status *cordon_status = NULL;
746 cordon_status = (struct_cordon_status *)malloc(sizeof(struct_cordon_status));
747 if (NULL == cordon_status) {
748 SETTING_TRACE_ERROR("Memory allocation failed");
751 memset(cordon_status, 0, sizeof(struct_cordon_status));
753 SETTING_TRACE("cordon_get_previous_root_status_before");
754 int ret = cordon_get_previous_root_status(cordon_status);
755 SETTING_TRACE("cordon_get_previous_root_status_end");
757 if (cordon_status->is_device_rooted) {
758 snprintf(str, size, "%s", SETTING_ABOUT_STATUS_ROOT_STR);
760 snprintf(str, size, "%s", SETTING_ABOUT_STATUS_UNROOT_STR);
763 SETTING_TRACE_ERROR("Failed to call cordon_get_previous_root_status() with error code %d", ret);
764 snprintf(str, size, "%s", "IDS_ST_HEADER_UNAVAILABLE");
771 * @brief create button on naviframe tile part.
773 * @param parent the new created button's parent layout
774 * @param text button text
775 * @param func callback for button click
776 * @param data application data for button click callback.
778 * @return new created button
780 static Evas_Object *setting_about_naviframe_btn_create(Evas_Object *parent, const char *text, Evas_Smart_Cb func, void *data)
782 Evas_Object *btn = elm_button_add(parent);
786 elm_object_style_set(btn, "naviframe/title_text");
787 elm_object_text_set(btn, text);
788 evas_object_smart_callback_add(btn, "clicked", func, data);
793 * @brief button done response callback.
795 * @param data application data
796 * @param obj the button evas object
797 * @param event_info event type
799 static void setting_about_naviframe_btn_done_cb(void *data, Evas_Object *obj, void *event_info)
802 setting_retm_if(data == NULL, "data is NULL");
803 SettingAboutUG *ad = (SettingAboutUG *)data;
804 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
805 const char *entry_str = NULL;
806 char *entry_str_utf8 = NULL;
807 char *name_value = NULL;
809 entry_str = elm_entry_entry_get(ad->item_dev_name->eo_check);
811 entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
813 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
815 if (!ad->empty_flag && safeStrCmp(name_value, entry_str_utf8) != 0) {
816 if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
817 SETTING_TRACE_ERROR("Set vconf[%s] failed", VCONFKEY_SETAPPL_DEVICE_NAME_STR);
820 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
821 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
823 FREE(entry_str_utf8);
825 elm_naviframe_item_pop(ad->navi_bar);
830 * @brief button cancel response callback.
832 * @param data application data
833 * @param obj the button evas object
834 * @param event_info event type
836 static void setting_about_naviframe_btn_cancel_cb(void *data, Evas_Object *obj, void *event_info)
839 setting_retm_if(data == NULL, "data is NULL");
840 SettingAboutUG *ad = (SettingAboutUG *)data;
841 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
843 char *pa_sub_desc = NULL;
844 name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
846 pa_sub_desc = elm_entry_utf8_to_markup(name);
849 elm_entry_entry_set(ad->item_dev_name->eo_check, pa_sub_desc);
850 G_FREE(ad->item_dev_name->sub_desc);/*release first */
851 ad->item_dev_name->sub_desc = (char *)g_strdup(pa_sub_desc);
855 if (isSpaceStr(ad->item_dev_name->sub_desc)) {
856 ad->empty_flag = TRUE;
858 ad->empty_flag = FALSE;
861 SETTING_TRACE("ad->item_dev_name->sub_desc:%s", ad->item_dev_name->sub_desc);
862 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
863 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
866 elm_naviframe_item_pop(ad->navi_bar);
869 static void __setting_about_main_popup_cb(void *data, Evas_Object *obj, void *event_info)
872 setting_retm_if(obj == NULL, "obj parameter is NULL");
873 setting_retm_if(data == NULL, "Data parameter is NULL");
874 SettingAboutUG *ad = (SettingAboutUG *) data;
876 switch (btn_type(obj)) {
877 case POPUP_RESPONSE_OK: {
878 if (ad->popup_space) {
879 ad->popup_showed_flag = FALSE;
880 evas_object_del(ad->popup_space);
881 ad->popup_space = NULL;
893 * @brief device name entry input handing
894 * - get the current entry text
895 * - check if the current input text is reached to max length
896 * and show messge to user
898 * @param data application data
899 * @param obj the entry evas object
901 static void __setting_about_entry_changed_cb(void *data, Evas_Object *obj)
903 retm_if(!data || !obj, "Data parameter is NULL");
904 /*return if entry is not focused too */
906 Setting_GenGroupItem_Data *list_item =
907 (Setting_GenGroupItem_Data *) data;
908 SettingAboutUG *ad = list_item->userdata;
909 retm_if(ad == NULL, "Data parameter is NULL");
911 const char *entry_str = elm_entry_entry_get(obj);
912 int entry_len = safeStrLen(entry_str);
913 SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
915 SETTING_TRACE("maxLengthReachFlag:[%d], enterKeyPressFlag:%d", list_item->maxLengthReachFlag, list_item->enterKeyPressFlag);
917 /*fix PLM P131106-02776
918 after keyboard popup cut the entry text, the entry text don't reach max length, so need to delete popup */
919 if (ad->popup_showed_flag && ad->popup_space && !list_item->maxLengthReachFlag) {
920 evas_object_del(ad->popup_space);
921 ad->popup_space = NULL;
922 ad->popup_showed_flag = FALSE;
926 list_item->maxLengthReachFlag = FALSE;
927 list_item->enterKeyPressFlag = FALSE;
928 list_item->spaceKeyPressFlag = FALSE;
930 /*for genlist update */
931 G_FREE(list_item->sub_desc);/*release first */
932 list_item->sub_desc = (char *)g_strdup(entry_str);
934 if (isSpaceStr(entry_str)) {
935 if (!ad->empty_flag) ad->empty_flag = TRUE;
937 if (ad->empty_flag) ad->empty_flag = FALSE;
942 * @brief device name entry changed callback.
944 * @param data application data
945 * @param obj the entry evas object
946 * @param event_info event type
949 __setting_about_entry_device_name_changed_cb(void *data, Evas_Object *obj,
952 /*SETTING_TRACE_BEGIN; */
953 setting_retm_if(obj == NULL, "obj is NULL");
954 setting_retm_if(data == NULL, "data is NULL");
955 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
956 SettingAboutUG *ad = list_item->userdata;
957 retm_if(ad == NULL, "Data parameter is NULL");
959 /* 1. entry is empty */
960 /* 2. entry is not empty */
961 if (list_item->item) {
962 if (elm_entry_is_empty(obj)) {
963 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,hide", "");
965 Eina_Bool device_focus_status = elm_object_focus_get(ad->item_dev_name->eo_check);
966 if (device_focus_status) {
967 /*SETTING_TRACE("name is NOT empty, but focus"); */
968 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,show", "");
971 elm_object_item_signal_emit(list_item->item, "elm,state,guidetext,hide", "");
974 __setting_about_entry_changed_cb(data, obj);
975 /*SETTING_TRACE_END; */
979 * @brief device name entry focus callback.
981 * @param data application data
982 * @param obj the entry evas object
983 * @param event_info event type
985 static void __setting_about_entry_focused(void *data, Evas_Object *obj, void *event_info) /* Focused callback will show X marked button and hide guidetext. */
988 retm_if(!data || !obj, "Data parameter is NULL");
989 Setting_GenGroupItem_Data *item_dev_name = data;
993 elm_entry_cursor_end_set(obj);
994 const char *txt = elm_entry_entry_get(obj);
995 if (!txt || 0 == strlen(txt)) {
996 txt = elm_object_part_text_get(obj, "elm.guide");
999 /* Say entry focused */
1000 Eina_Stringshare *str = eina_stringshare_printf("%s, Edit Field, Keyboard opened", txt);
1001 elm_access_say((char *)str);
1002 eina_stringshare_del(str);
1004 SettingAboutUG *ad = item_dev_name->userdata;
1005 retm_if(!ad, "ad parameter is NULL");
1006 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(item_dev_name->eo_check);
1008 ecore_imf_context_input_panel_show(imf_context);
1013 * @brief device name entry unfocus callback.
1015 * @param data application data
1016 * @param obj the entry evas object
1017 * @param event_info event type
1019 static void __setting_about_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
1021 SETTING_TRACE_BEGIN;
1022 retm_if(!data || !obj, "Data parameter is NULL");
1025 const char *entry_str = elm_entry_entry_get(obj);
1026 char *entry_str_utf8 = NULL;
1027 entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
1028 SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1030 Setting_GenGroupItem_Data *item_dev_name = data;
1031 SettingAboutUG *ad = item_dev_name->userdata;
1035 if (isSpaceStr(entry_str)) {
1036 if (!ad->empty_flag) {
1037 ad->empty_flag = TRUE;
1040 if (ad->empty_flag) {
1041 ad->empty_flag = FALSE;
1045 setting_hide_input_pannel_cb(item_dev_name->eo_check);
1049 FREE(entry_str_utf8);
1050 elm_entry_select_none(obj);
1058 * @brief device name entry max length reached callback.
1060 * @param data application data
1061 * @param obj the entry evas object
1062 * @param event_info event type
1064 static void __setting_about_entry_max_len_reached(void *data, Evas_Object *obj, void *event_info)
1066 SETTING_TRACE_BEGIN;
1067 retm_if(data == NULL, "Data parameter is NULL");
1068 retm_if(!elm_object_focus_get(obj), "Entry is not focused"); /*notify only when entry is being focused on. */
1070 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1071 list_item->maxLengthReachFlag = true;
1073 SettingAboutUG *ad = list_item->userdata;
1074 if (list_item->maxLengthReachFlag && list_item->enterKeyPressFlag == FALSE) {
1076 if (!ad->popup_showed_flag && NULL == ad->popup_space) {
1077 ad->popup_showed_flag = TRUE;/*workaroud to fix popup blink issue. */
1078 char strMax[BUF_SIZE] = {0,};
1079 snprintf(strMax, BUF_SIZE, _("IDS_ST_POP_THE_MAXIMUM_NUMBERS_OF_CHARACTERS_FOR_YOUR_DEVICE_NAME_HPD_HAS_BEEN_EXCEEDED"),
1080 MAX_DEVICE_NAME_LEN);
1082 ad->popup_space = setting_create_popup_with_btn(ad, ad->win_get, "IDS_ST_HEADER_ENTER_VALID_DEVICE_NAME_ABB",
1083 strMax, __setting_about_main_popup_cb, 0, 1, _("IDS_ST_BUTTON_OK_ABB"));
1089 * @brief device name entry input panel state event call back
1090 * - input panel state event:ECORE_IMF_INPUT_PANEL_STATE_EVENT
1092 * @param data application data
1093 * @param obj the entry evas object
1094 * @param event_info event type
1096 static void __setting_about_entry_input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1098 SETTING_TRACE_BEGIN;
1099 retm_if(data == NULL, "Data parameter is NULL");
1100 retm_if(ctx == NULL, "obj parameter is NULL");
1101 SettingAboutUG *ad = (SettingAboutUG *)data;
1103 if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
1104 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1105 } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
1106 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1108 if (ad->item_dev_name) {
1110 if (ad->empty_flag) {
1111 ad->idler_add_popup = ecore_idler_add(__setting_about_popup_show_delay, ad);
1115 /*if Setting is overlapped by other app,the entry will lost its focus,
1116 the input pannel will be hided and any popup should be removed to fix blinking issue.*/
1117 if (ad->pause_flag) {
1118 ad->idler_remove_popup = ecore_idler_add(__setting_about_popup_remove_delay, ad);
1120 elm_object_focus_set(ad->navi_bar, EINA_FALSE);
1126 * @brief aboutUG vconf changed callback
1128 * @param key the changed vconf key node.
1129 * @param data application data
1130 * @param event_info event type
1132 static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
1134 SETTING_TRACE_BEGIN;
1135 setting_retm_if(NULL == key, "key is NULL");
1136 setting_retm_if(NULL == data, "data is NULL");
1137 SettingAboutUG *ad = (SettingAboutUG *)data;
1139 int status = vconf_keynode_get_int(key);
1140 char *vconf_name = vconf_keynode_get_name(key);
1142 if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
1143 SETTING_TRACE("status:%d", status);
1144 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
1145 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
1146 if (ad->item_data_wifi) {
1147 G_FREE(ad->item_data_wifi->sub_desc);
1148 ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
1149 elm_object_item_data_set(ad->item_data_wifi->item, ad->item_data_wifi);
1150 elm_genlist_item_update(ad->item_data_wifi->item);
1152 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DEVICE_NAME_STR)) {
1153 char *name_value = NULL;
1154 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1155 if (NULL == name_value) {
1156 /*use the defaule name if get vconf failed*/
1157 name_value = (char *)g_strdup(DEVICE_NAME_DEFAULE);
1159 SETTING_TRACE("name:%s", name_value);
1160 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
1161 /*for genlist update */
1162 if (safeStrCmp(ad->item_dev_name->sub_desc, name_value) != 0) {
1163 char *str_name = elm_entry_utf8_to_markup(name_value);
1164 elm_entry_entry_set(ad->item_dev_name->eo_check, str_name);
1165 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
1166 G_FREE(ad->item_dev_name->sub_desc);/*release first */
1167 ad->item_dev_name->sub_desc = (char *)g_strdup(str_name);
1171 if (ad->item_dev_name_main && ad->item_dev_name_main->sub_desc) {
1172 if (safeStrCmp(ad->item_dev_name_main->sub_desc, name_value) != 0) {
1173 char *str_name = elm_entry_utf8_to_markup(name_value);
1174 char *tmp = ad->item_dev_name_main->sub_desc;
1175 ad->item_dev_name_main->sub_desc = (char *)g_strdup(str_name);
1176 elm_genlist_item_fields_update(ad->item_dev_name_main->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
1184 SETTING_TRACE_ERROR("vconf_name is error");
1189 * @brief UG destroy callback
1191 * @param ug the UG which is needed to be destoried
1192 * @param priv application data
1194 static void __destroy_ug_cb(ui_gadget_h ug, void *priv)
1196 SETTING_TRACE_BEGIN;
1198 /* restore the '<-' button on the navigate bar */
1200 SettingAboutUG *ad = (SettingAboutUG *) priv; /* ad is point to priv */
1203 setting_ug_destroy(ug);
1204 ad->ug_loading = NULL;
1206 elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
1210 * @brief Lunch cetificates UG(setting-manage-certificates-efl)
1212 * @param data application data
1214 static void __setting_about_main_certificates_clicked(void *data)
1216 SETTING_TRACE_BEGIN;
1217 retm_if(data == NULL, "Data parameter is NULL");
1218 SettingAboutUG *ad = (SettingAboutUG *)data;
1220 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1225 cbs->layout_cb = setting_about_layout_ug_cb;
1226 cbs->result_cb = NULL;
1227 cbs->destroy_cb = __destroy_ug_cb;
1228 cbs->priv = (void *)ad;
1230 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1232 setting_ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1234 if (NULL == ad->ug_loading) { /* error handling */
1235 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1241 * @brief Lunch UG setting-phone-efl
1243 * @param data application context
1245 static void __setting_about_main_licence_launch(void *data)
1247 SETTING_TRACE_BEGIN;
1248 retm_if(data == NULL, "Data parameter is NULL");
1249 SettingAboutUG *ad = (SettingAboutUG *)data;
1252 if (app_control_create(&svc)) {
1256 app_control_add_extra_data(svc, "viewtype", "license");
1258 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1260 app_control_destroy(svc);
1264 cbs->layout_cb = setting_about_layout_ug_cb;
1265 cbs->result_cb = NULL;
1266 cbs->destroy_cb = __destroy_ug_cb;
1267 cbs->priv = (void *)ad;
1270 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1272 setting_ug_create(ad->ug, "setting-phone-efl", UG_MODE_FULLVIEW, svc, cbs);
1274 if (NULL == ad->ug_loading) { /* error handling */
1275 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1277 app_control_destroy(svc);
1282 * @brief expanlist sub-item selected callback
1284 * @param data app context
1285 * @param obj evas object
1286 * @param event_info event type
1288 static void __setting_about_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
1290 SETTING_TRACE_BEGIN;
1292 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1293 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
1294 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
1295 elm_genlist_item_selected_set(subitem, 0);
1296 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
1297 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
1298 ret_if(NULL == data_subItem || NULL == data_parentItem);
1302 setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
1303 setting_retm_if(0 != err, "Set vconf error[%d]", data_parentItem->int_slp_setting_binded);
1305 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
1306 elm_object_item_data_set(data_parentItem->item, data_parentItem);
1307 elm_genlist_item_update(data_parentItem->item);
1308 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
1312 * @brief expanlist sub-item radio checked callback
1314 * @param data app context
1315 * @param obj evas object
1316 * @param event_info event type
1319 static void __setting_about_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
1321 SETTING_TRACE_BEGIN;
1322 retm_if(data == NULL, "Data parameter is NULL");
1323 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1325 Elm_Object_Item *subItem = list_item->item;
1326 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subItem);
1328 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subItem); /* subItem data */
1329 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
1330 ret_if(NULL == data_subItem || NULL == data_parentItem);
1333 setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
1336 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
1337 elm_object_item_data_set(data_parentItem->item, data_parentItem);
1338 elm_genlist_item_update(data_parentItem->item);
1339 elm_radio_value_set(obj, data_subItem->chk_status);
1343 * @brief expanlist state changed callback
1345 * @param data app context
1346 * @param obj evas object
1347 * @param event_info event type
1349 void setting_about_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
1351 SETTING_TRACE_BEGIN;
1352 setting_retm_if(data == NULL, "Data parameter is NULL");
1353 setting_retm_if(event_info == NULL, "event_info parameter is NULL");
1355 SettingAboutUG *ad = (SettingAboutUG *) data;
1356 Elm_Object_Item *parentItem = event_info; /* parent item */
1357 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
1358 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
1360 Evas_Object *rgd = elm_radio_add(scroller);
1361 elm_radio_value_set(rgd, -1);
1364 char sel_num[SETTING_SIM_MSISDN_DIALING_NUMBER_LEN] = { 0, };
1365 setting_retm_if(NULL == data_parentItem, "data_parentItem is NULL");
1366 setting_get_string_slp_key(data_parentItem->int_slp_setting_binded, sel_num, &err);
1367 SETTING_TRACE("binded: %d, checked: %s, err: %d", data_parentItem->int_slp_setting_binded, sel_num, err);
1371 Setting_GenGroupItem_Data *item_data = NULL;
1373 /*for(; i < SETTING_ABOUT_MY_NUMBERS_LEN; i++) { */
1374 for (; i < ad->my_numbers.count; i++) {
1375 if (ad->my_numbers.list[i].num[0] == '\0') {
1379 if (sel_idx == -1 && 0 == safeStrCmp(sel_num, ad->my_numbers.list[i].num)) {
1382 item_data = setting_create_Gendial_exp_sub_field(scroller,
1383 &(ad->itc_1icon_1text_sub),
1384 __setting_about_sub_list_sel_cb, ad, parentItem,
1385 SWALLOW_Type_1RADIO, rgd,
1387 ad->my_numbers.list[i].num, __setting_about_sub_list_rd_change);
1389 item_data->userdata = ad;
1391 SETTING_TRACE_ERROR("item_data is NULL");
1395 elm_radio_value_set(rgd, sel_idx);
1399 * @brief Do process when clicking '<-' button
1401 * @param data application context
1402 * @param obj evas object
1403 * @param event_info event type
1406 setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
1409 SETTING_TRACE_BEGIN;
1410 setting_retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
1411 SettingAboutUG *ad = (SettingAboutUG *) data;
1412 if (ad->empty_flag) {
1415 evas_object_del(ad->popup);
1418 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
1419 __setting_about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
1420 if (ad->item_dev_name) {
1421 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1427 /*imf must be hided before view is destroyed. */
1428 /*Following code is just to improve the hiding speed. If not add these code, */
1429 /*the input pannel will also be hided with the view destroyed,but it works too slow. */
1430 if (ad->item_dev_name) {
1431 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1432 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1435 /* Send destroy request */
1436 ug_destroy_me(ad->ug);
1441 static Eina_Bool __setting_about_child_view_back_cb(void *data, Elm_Object_Item *it)
1443 SETTING_TRACE_BEGIN;
1445 retvm_if(data == NULL, EINA_TRUE, "Data parameter is NULL");
1447 SettingAboutUG *ad = data;
1448 if (ad->empty_flag) {
1451 evas_object_del(ad->popup);
1454 ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
1455 __setting_about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
1456 if (ad->item_dev_name) {
1457 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1462 if (ad->event_handler) {
1463 ecore_event_handler_del(ad->event_handler);
1464 ad->event_handler = NULL;
1466 if (ad->name_update_idler) {
1467 ecore_idler_del(ad->name_update_idler);
1468 ad->name_update_idler = NULL;
1474 static Eina_Bool __setting_about_name_view_key_down(void *data, int type, void *event)
1476 SETTING_TRACE_BEGIN;
1477 Evas_Event_Key_Down *ev = event;
1480 return ECORE_CALLBACK_RENEW;
1484 SettingAboutUG *ad = data;
1485 if (!strcmp(ev->keyname, KEY_BACK)) {
1486 setting_about_naviframe_btn_cancel_cb(ad, NULL, NULL);
1488 return ECORE_CALLBACK_RENEW;
1491 static Eina_Bool setting_about_name_focus_update_cb(const void *data)
1493 SETTING_TRACE_BEGIN;
1495 setting_retvm_if(data == NULL, ECORE_CALLBACK_RENEW, "Data parameter is NULL");
1496 SettingAboutUG *ad = data;
1497 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
1498 evas_object_show(ad->item_dev_name->eo_check);
1499 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1501 ad->name_update_idler = NULL;
1502 return ECORE_CALLBACK_CANCEL;
1504 return ECORE_CALLBACK_RENEW;
1511 * Setting > About > Device name > (new view) here
1513 static void __setting_about_main_creat_name_view(data)
1515 SETTING_TRACE_BEGIN;
1517 setting_retm_if(data == NULL, "Data parameter is NULL");
1518 SettingAboutUG *ad = data;
1520 Evas_Object *scroller = NULL;
1521 scroller = elm_genlist_add(ad->navi_bar);
1522 setting_retm_if(scroller == NULL, "Cannot set scroller object as contento of layout");
1523 //elm_genlist_realization_mode_set(scroller, EINA_TRUE);
1524 /*elm_object_style_set(scroller, "dialogue"); */
1525 elm_genlist_clear(scroller); /* first to clear list */
1526 elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
1527 evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
1530 char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1531 char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
1534 ad->empty_flag = FALSE;
1535 if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0]) {
1536 ad->empty_flag = TRUE;
1539 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)calloc(1, sizeof(Setting_GenGroupItem_Data));
1543 setting_retvm_if(!item_data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "calloc failed");
1545 item_data->keyStr = (char *)g_strdup(SETTING_ABOUT_DEVICE_NAME_STR);
1546 item_data->sub_desc = (char *)g_strdup(pa_sub_desc);
1547 item_data->swallow_type = SWALLOW_Type_LAYOUT_EDITFIELD;
1548 item_data->chk_status = 0;
1549 item_data->chk_change_cb = __setting_about_entry_device_name_changed_cb;
1550 item_data->userdata = ad;
1551 item_data->isSinglelineFlag = FALSE;
1552 item_data->stop_change_cb = __setting_about_entry_unfocus_cb;
1553 item_data->maxlength_reached_cb = __setting_about_entry_max_len_reached;
1554 item_data->focus_cb = __setting_about_entry_focused;
1555 item_data->x_callback_cb = __setting_about_entry_input_panel_event_cb;
1556 item_data->guide_text = (char *)g_strdup(EMPTY_LIMITATION_STR);
1557 item_data->isGroupStyleTOP = TRUE;
1558 item_data->focus_unallowed = get_tethering_status();
1559 /*item_data->entry_auto_focus = TRUE; */
1561 item_data->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Limit_Size));
1562 if (item_data->limit_filter_data) {
1563 /*max byte len is 32 -> MAX_DEVICE_NAME_LEN */
1564 item_data->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
1565 item_data->win_main = ad->win_get;
1567 SETTING_TRACE_ERROR("fail to calloc");
1570 item_data->digits_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
1571 if (item_data->digits_filter_data) {
1572 item_data->digits_filter_data->accepted = NULL;
1574 SETTING_TRACE_ERROR("fail to calloc");
1577 item_data->input_panel_disable_flag = EINA_TRUE;
1579 /* add genlist item here for the device name */
1580 item_data->item = elm_genlist_item_append(scroller, &(itc_editfield), item_data, NULL, ELM_GENLIST_ITEM_NONE,
1583 ad->item_dev_name = item_data;
1584 if (ad->item_dev_name) {
1585 __BACK_POINTER_SET(ad->item_dev_name);
1586 elm_genlist_item_select_mode_set(ad->item_dev_name->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1587 /*ad->item_dev_name->group_style = SETTING_GROUP_STYLE_TOP; */
1588 /*setting_genlist_item_groupstyle_set(ad->item_dev_name, SETTING_GROUP_STYLE_TOP); */
1590 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
1595 Elm_Object_Item *navi_it = setting_push_layout_navi_bar(_(DEVICE_NAME),
1598 ad, scroller, ad->navi_bar, NULL);
1599 elm_naviframe_item_pop_cb_set(navi_it, __setting_about_child_view_back_cb, ad);
1602 /* Title Cancel Button */
1603 btn = elm_button_add(ad->navi_bar);
1604 elm_object_style_set(btn, "naviframe/title_cancel");
1605 evas_object_smart_callback_add(btn, "clicked", setting_about_naviframe_btn_cancel_cb, ad);
1606 elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
1608 /* Title Done Button */
1609 btn = elm_button_add(ad->navi_bar);
1610 elm_object_style_set(btn, "naviframe/title_done");
1611 evas_object_smart_callback_add(btn, "clicked", setting_about_naviframe_btn_done_cb, ad);
1612 elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
1614 ad->event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __setting_about_name_view_key_down, ad);
1615 ad->name_update_idler = ecore_idler_add(setting_about_name_focus_update_cb, ad);
1619 * @brief Do process when clicking on some genlist item
1621 * @param data application context
1622 * @param obj evas object
1623 * @param event_info event type
1626 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1629 SETTING_TRACE_BEGIN;
1631 setting_retm_if(data == NULL, "Data parameter is NULL");
1633 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1634 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1635 elm_genlist_item_selected_set(item, 0);
1636 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1637 retm_if(list_item == NULL, "return of elm_object_item_data_get is NULL");
1639 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1640 if (!safeStrCmp("IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB", list_item->keyStr)) {
1641 __setting_about_main_certificates_clicked(data);
1642 } else if (!safeStrCmp(KeyStr_Regulatory_Info, list_item->keyStr)) {
1643 __setting_about_popup_regulatory_info(data);
1644 } else if (!safeStrCmp("IDS_ST_MBODY_LEGAL_INFORMATION_ABB", list_item->keyStr)) {
1645 __setting_about_main_licence_launch(data);
1646 } else if (!safeStrCmp("IDS_ST_MBODY_SOFTWARE_UPDATE", list_item->keyStr)) {
1648 SettingAboutUG *ad = (SettingAboutUG *)list_item->userdata;
1649 Evas_Object *back_btn = elm_object_item_part_content_get(ad->navi_item, "prev_btn");
1651 SETTING_TRACE_DEBUG("Change focus to back_btn");
1652 elm_object_focus_set(back_btn, EINA_TRUE);
1655 app_launcher("org.tizen.oma-dm");
1657 } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
1658 __setting_about_main_creat_name_view(data);
1665 * @brief callback function for genlist event "drag"
1667 * @param data application context
1668 * @param obj evas object
1669 * @param event_info event type
1671 static void setting_about_main_gl_drag(void *data, Evas_Object *obj, void *event)
1674 retm_if(event == NULL, "Invalid argument: event info is NULL");
1675 SettingAboutUG *ad = (SettingAboutUG *) data;
1676 ad->drag_flag = TRUE;
1681 * @brief callback function for EVAS_CALLBACK_MOUSE_UP
1683 * @param data application context
1685 * @param obj evas object
1686 * @param event_info event type
1689 setting_about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
1691 /*SETTING_TRACE_BEGIN; */
1693 SettingAboutUG *ad = (SettingAboutUG *) data;
1694 retm_if(event == NULL, "Invalid argument: event info is NULL");
1695 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
1697 if (ad->drag_flag) {
1698 ad->drag_flag = FALSE;
1702 if (ad->item_dev_name) {
1703 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
1704 if (ad->item_dev_name->item == selected_item) {
1705 if (elm_object_focus_get(ad->item_dev_name->eo_check)) {
1706 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
1708 ecore_imf_context_input_panel_show(imf_context);
1713 if (get_tethering_status()) {
1715 evas_object_del(ad->popup);
1719 ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
1720 NULL, _(SETTING_ABOUT_MOBILE_AP_TURNED_OFF),
1721 __setting_about_popup_mobile_ap_turn_off_ask_resp_cb, 0,
1722 2, _("IDS_ST_BODY_TURN_OFF"), _("IDS_ST_BUTTON_CANCEL_ABB2"));
1724 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1725 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
1727 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
1729 ecore_imf_context_input_panel_show(imf_context);
1733 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);/*to make inputing words input */
1736 /*SETTING_TRACE_END; */
1741 * @brief callback run for timer task to update CPU, Battery info
1743 * @param data application context
1745 * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
1747 static Eina_Bool setting_about_main_timer_update_cb(const void *data)
1749 retv_if(data == NULL, TRUE);
1750 SettingAboutUG *ad = (SettingAboutUG *) data;
1752 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
1753 if (ad->item_data_cpu) {
1755 int ret = setting_about_main_stat_get_cpuinfo(&usr, &sys);
1756 if (ret == -ENOENT) {
1757 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
1758 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
1760 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
1763 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
1764 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
1765 elm_genlist_item_update(ad->item_data_cpu->item);
1768 if (ad->item_data_battery) {
1769 setting_about_main_get_battery_string(str, sizeof(str));
1770 /*SETTING_TRACE("str:%s", str);*/
1771 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
1773 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
1774 elm_genlist_item_update(ad->item_data_battery->item);
1776 if (ad->need_update) {
1777 if (ad->item_data_my_phone_number) {
1778 G_FREE(ad->item_data_my_phone_number->sub_desc);
1779 ad->item_data_my_phone_number->sub_desc = (char *)g_strdup(SETTING_ABOUT_PUK_LOCKED);
1780 elm_object_item_data_set(ad->item_data_my_phone_number->item, ad->item_data_my_phone_number);
1781 elm_genlist_item_update(ad->item_data_my_phone_number->item);
1782 ad->need_update = FALSE;
1789 * @brief create main view genlist items
1791 * @param data application data
1793 * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
1795 int setting_about_main_generate_genlist(void *data)
1797 SETTING_TRACE_BEGIN;
1799 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1801 SettingAboutUG *ad = (SettingAboutUG *) data;
1802 bool is_emul_bin = isEmulBin();
1804 Evas_Object *scroller = ad->genlsit;
1805 Elm_Object_Item *item = NULL;
1806 Setting_GenGroupItem_Data *item_data = NULL;
1807 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
1808 telephony_handle_list_s tapi_handle_list;
1810 int tapi_handle_count = 0;
1812 int ret_get_app_info = 0;
1813 app_info_h app_info = NULL;
1814 ret_get_app_info = app_info_create("org.tizen.oma-dm", &app_info);
1816 /* [UI] Software update */
1817 if (ret_get_app_info != APP_MANAGER_ERROR_NONE) {
1818 SETTING_TRACE("No corresponding app_id for [%s]\n", "org.tizen.oma-dm");
1821 item_data = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1822 setting_about_main_mouse_up_Gendial_list_cb,
1823 ad, SWALLOW_Type_INVALID, NULL, NULL,
1824 0, "IDS_ST_MBODY_SOFTWARE_UPDATE",
1827 item_data->userdata = ad;
1828 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_TOP);
1830 SETTING_TRACE_ERROR("item_data is NULL");
1835 /* [UI] Certificates */
1836 /* implementation is in progress. */
1837 item_data = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1838 setting_about_main_mouse_up_Gendial_list_cb,
1839 ad, SWALLOW_Type_INVALID, NULL, NULL,
1840 0, "IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB", NULL, NULL);
1842 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_BOTTOM);
1844 SETTING_TRACE_ERROR("item_data is NULL");
1847 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
1848 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1849 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1852 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1853 setting_about_main_mouse_up_Gendial_list_cb,
1854 ad, SWALLOW_Type_INVALID, NULL, NULL,
1855 0, "IDS_ST_MBODY_LEGAL_INFORMATION_ABB", NULL, NULL);
1857 /*//////////////////////////////////////////////////////////////////// */
1858 /* [UI] separator */
1859 elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL),
1860 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1861 (void)setting_create_Gendial_field_titleItem(scroller,
1862 &(ad->itc_group_item),
1863 "IDS_ST_BODY_DEVICE_INFORMATION", NULL);
1864 /*//////////////////////////////////////////////////////////////////// */
1868 char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1869 char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
1872 ad->empty_flag = FALSE;
1873 if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0]) {
1874 ad->empty_flag = TRUE;
1877 ad->item_dev_name_main = item_data =
1878 setting_create_Gendial_field_def(scroller, &(itc_2text_2), setting_about_main_mouse_up_Gendial_list_cb,
1879 ad, SWALLOW_Type_INVALID, NULL,
1880 NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc, NULL);
1882 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_TOP);
1883 __BACK_POINTER_SET(ad->item_dev_name_main);
1885 SETTING_TRACE_ERROR("item_data is NULL");
1890 /* 2. Phone number */
1891 /* Initialize telephony handle */
1892 int telephony_init_ret = telephony_init(&tapi_handle_list);
1893 if (telephony_init_ret != TELEPHONY_ERROR_NONE) {
1894 tapi_handle_count = 0;
1896 tapi_handle_count = tapi_handle_list.count;
1898 SETTING_TRACE_DEBUG("tapi_handle_list.count:%d", tapi_handle_list.count);
1899 /* my numbers(SIM1 and SIM2) */
1900 for (i = 0; i < tapi_handle_count; i++) {
1901 memset(str, 0x00, sizeof(str));
1902 char *my_number = NULL;
1903 ret_value = telephony_sim_get_subscriber_number(tapi_handle_list.handle[i], &my_number);
1904 if (ret_value != TELEPHONY_ERROR_NONE) {
1905 SETTING_TRACE_ERROR("telephony_sim_get_subscriber_number() failed!!! [%d]", ret_value);
1906 my_number = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1907 } else if (isEmptyStr(my_number)) {
1908 SETTING_TRACE_DEBUG("telephony_sim_get_subscriber_number() success, BUT return empty my number");
1909 my_number = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1911 /* [UI] Phone number */
1913 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1914 NULL, SWALLOW_Type_INVALID, NULL,
1915 NULL, 0, "IDS_ST_BODY_PHONE_NUMBER", my_number, NULL);
1917 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1918 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1919 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
1921 SETTING_TRACE_ERROR("item_data is NULL");
1927 /* 3. [UI] Model number */
1928 memset(str, 0x00, sizeof(str));
1929 setting_about_main_get_phone_model_name(str, sizeof(str));
1931 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1932 NULL, SWALLOW_Type_INVALID, NULL,
1933 NULL, 0, "IDS_ST_BODY_MODEL_NUMBER", str, NULL);
1935 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1936 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1937 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
1939 SETTING_TRACE_ERROR("item_data is NULL");
1941 ad->item_model = item_data;
1943 /* 4. [UI] Tizen version */
1944 memset(str, 0x00, sizeof(str));
1945 setting_about_main_get_sw_version(str, sizeof(str));
1947 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1948 NULL, SWALLOW_Type_INVALID, NULL,
1949 NULL, 0, "IDS_ST_MBODY_TIZEN_VERSION", str, NULL);
1951 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1952 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1953 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
1955 SETTING_TRACE_ERROR("item_data is NULL");
1957 ad->item_version = item_data;
1959 /* 5. IMEI(IMEI 1 andd IMEI 2) */
1960 for (i = 0; i < tapi_handle_count; i++) {
1961 memset(str, 0x00, sizeof(str));
1962 /*setting_about_main_get_imei(str, sizeof(str),tapi_handle_list.handle[i]); */
1964 ret_value = telephony_modem_get_imei(tapi_handle_list.handle[i], &imei);
1965 if (ret_value != TELEPHONY_ERROR_NONE) {
1966 SETTING_TRACE_ERROR("telephony_modem_get_imei() failed!!! [%d]", ret_value);
1967 imei = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1971 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1972 NULL, SWALLOW_Type_INVALID, NULL,
1973 NULL, 0, SETTING_ABOUT_IMEI_STR, imei, NULL);
1975 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1976 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1977 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
1979 SETTING_TRACE_ERROR("item_data is NULL");
1984 ret_value = telephony_deinit(&tapi_handle_list);
1985 if (ret_value != TELEPHONY_ERROR_NONE) {
1986 SETTING_TRACE_ERROR("Deinitialize failed!!!");
1988 /*ad->item_data_imei = item_data; */
1990 /* 6. [UI] Bluetooth address */
1991 if (!is_emul_bin) { /* requested by DI Kim due to BT BS on 11/26 */
1992 memset(str, 0x00, sizeof(str));
1993 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
1995 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1996 NULL, SWALLOW_Type_INVALID, NULL,
1997 NULL, 0, "IDS_ST_MBODY_BLUETOOTH_ADDRESS", str, NULL); /*ad->itc_2text_2 */
1998 if (ad->item_data_bt) {
1999 elm_object_item_disabled_set(ad->item_data_bt->item, EINA_TRUE);
2000 elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2001 setting_genlist_item_groupstyle_set(ad->item_data_bt, SETTING_GROUP_STYLE_CENTER);
2002 __BACK_POINTER_SET(ad->item_data_bt);
2004 SETTING_TRACE_ERROR("item_data is NULL");
2008 /* 7. [UI] Wi-Fi MAC address */
2009 memset(str, 0x00, sizeof(str));
2010 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
2012 SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
2014 ad->item_data_wifi =
2015 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2016 NULL, SWALLOW_Type_INVALID, NULL,
2017 NULL, 0, "IDS_ST_BODY_WI_FI_MAC_ADDRESS", str, NULL);
2018 if (ad->item_data_wifi) {
2019 elm_object_item_disabled_set(ad->item_data_wifi->item, EINA_TRUE);
2020 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2021 setting_genlist_item_groupstyle_set(ad->item_data_wifi, SETTING_GROUP_STYLE_CENTER);
2022 __BACK_POINTER_SET(ad->item_data_wifi);
2024 SETTING_TRACE_ERROR("item_data is NULL");
2027 /* 8. [UI] Serial number */
2028 memset(str, 0x00, sizeof(str));
2029 setting_about_main_get_sn(str, sizeof(str));
2031 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2032 NULL, SWALLOW_Type_INVALID, NULL,
2033 NULL, 0, SETTING_ABOUT_SN_STR, str, NULL);
2035 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
2036 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2037 setting_genlist_item_groupstyle_set(item_data, SETTING_GROUP_STYLE_CENTER);
2039 SETTING_TRACE_ERROR("item_data is NULL");
2041 ad->item_data_sn = item_data;
2043 /* 9. [UI] Battery power */
2044 memset(str, 0x00, sizeof(str));
2045 setting_about_main_get_battery_string(str, sizeof(str));
2047 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2048 NULL, SWALLOW_Type_INVALID, NULL,
2049 NULL, 0, "IDS_ST_BUTTON_BATTERY_POWER_ABB", str, NULL);
2051 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
2052 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2053 ad->item_data_battery = item_data;
2054 setting_genlist_item_groupstyle_set(ad->item_data_battery, SETTING_GROUP_STYLE_CENTER);
2055 __BACK_POINTER_SET(ad->item_data_battery);
2057 SETTING_TRACE_ERROR("item_data is NULL");
2060 /* 10. [UI] CPU usage */
2061 memset(str, 0x00, sizeof(str));
2063 int ret = setting_about_main_stat_get_cpuinfo(&usr, &sys);
2064 if (ret == -ENOENT) {
2065 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
2066 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
2068 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
2070 ad->item_data_cpu = item_data =
2071 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2072 NULL, SWALLOW_Type_INVALID, NULL,
2073 NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
2074 if (ad->item_data_cpu) {
2075 elm_object_item_disabled_set(ad->item_data_cpu->item, EINA_TRUE);
2076 elm_genlist_item_select_mode_set(ad->item_data_cpu->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2077 setting_genlist_item_groupstyle_set(ad->item_data_cpu, SETTING_GROUP_STYLE_BOTTOM);
2078 __BACK_POINTER_SET(ad->item_data_cpu);
2080 SETTING_TRACE_ERROR("item_data is NULL");
2084 /* 12. Security status */
2086 app_info_h app_info2 = NULL;
2087 ret_get_app_info = app_info_create("org.tizen.smack-update-service", &app_info2);
2088 if (ret_get_app_info == APP_MANAGER_ERROR_NONE) {
2089 char *security_status = NULL;
2090 security_status = vconf_get_str(VCONFKEY_SECURITY_SPD_INSTALLED_POLICY_VERSION);
2091 if (!security_status) {
2092 SETTING_TRACE_ERROR("Failed to register into SPD server");
2093 security_status = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
2097 char *security_status = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
2100 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2101 NULL, SWALLOW_Type_INVALID, NULL,
2102 NULL, 0, "IDS_ST_TMBODY_SECURITY_STATUS", security_status, NULL);
2104 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
2105 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2107 SETTING_TRACE_ERROR("item_data is NULL");
2109 G_FREE(security_status);
2112 app_info_destroy(app_info);
2116 ecore_timer_add(1, (Ecore_Task_Cb) setting_about_main_timer_update_cb, ad);
2118 return SETTING_RETURN_SUCCESS;
2123 * @brief TAPI response callback,get the SIM LOCK data
2125 * @param handle the changed vconf key node.
2126 * @param result application data
2127 * @param data it is struct TelSimLockInfo_t,store SIM lock info
2128 * @param user_data application data
2130 * @see tel_get_sim_lock_info
2132 static void __on_pin_getlock_info(TapiHandle *handle, int result, void *data, void *user_data)
2134 SETTING_TRACE_BEGIN;
2135 ret_if(data == NULL || user_data == NULL);
2136 TelSimPinOperationResult_t sec_rt = result;
2137 TelSimLockInfo_t *lock = data;
2138 SettingAboutUG *ad = (SettingAboutUG *)user_data;
2140 /*lock->lock_status = TAPI_SIM_LOCK_PERM_BLOCKED; //for UT */
2141 SETTING_TRACE_DEBUG("sec_ret[%d]", sec_rt);
2142 SETTING_TRACE_DEBUG("lock_status:%d", lock->lock_status);
2143 if (TAPI_SIM_LOCK_PERM_BLOCKED == lock->lock_status) {
2144 /*update sub description with "PUK is locked" */
2145 if (ad->item_data_my_phone_number) {
2146 G_FREE(ad->item_data_my_phone_number->sub_desc);
2147 ad->item_data_my_phone_number->sub_desc = (char *)g_strdup(SETTING_ABOUT_PUK_LOCKED);
2148 elm_object_item_data_set(ad->item_data_my_phone_number->item, ad->item_data_my_phone_number);
2149 elm_genlist_item_update(ad->item_data_my_phone_number->item);
2151 ad->need_update = TRUE;
2157 * @brief create aboutUG main view layout
2159 * @param cb aboutUG data
2160 * @return 1 for success
2162 static int setting_about_main_create(void *cb)
2164 SETTING_TRACE_BEGIN;
2166 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2168 SettingAboutUG *ad = (SettingAboutUG *) cb;
2170 Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
2171 retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
2172 "Cannot set scroller object as contento of layout");
2173 //elm_genlist_realization_mode_set(scroller, EINA_TRUE);
2174 elm_object_style_set(scroller, "dialogue");
2175 elm_genlist_clear(scroller); /* first to clear list */
2176 ad->genlsit = scroller;
2177 evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
2178 evas_object_smart_callback_add(scroller, "realized", __setting_about_gl_realized_cb, NULL);
2181 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
2183 _("IDS_ST_BUTTON_BACK"), NULL, NULL,
2184 (setting_call_back_func)setting_about_main_click_softkey_back_cb,
2185 NULL, NULL, ad, scroller,
2186 &ad->navi_bar, NULL);
2188 ad->btn_done = setting_about_naviframe_btn_create(ad->navi_bar, _("IDS_SA_BUTTON_DONE_ABB"), setting_about_naviframe_btn_done_cb, ad);
2189 /*Title Text Right Button */
2190 ad->btn_cancel = setting_about_naviframe_btn_create(ad->navi_bar, _("IDS_ST_BUTTON_CANCEL_ABB"), setting_about_naviframe_btn_cancel_cb, ad);
2191 ad->genlsit = scroller;
2193 evas_object_smart_callback_add(scroller, "drag", setting_about_main_gl_drag, ad);
2195 evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, setting_about_main_gl_mouse_up, ad);
2197 ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
2199 setting_about_main_generate_genlist((void *)ad);
2201 int ret = vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
2202 __setting_about_main_vconf_change_cb, ad);
2204 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2206 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
2207 __setting_about_main_vconf_change_cb, ad);
2209 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2212 setting_view_about_main.is_create = 1;
2214 return SETTING_RETURN_SUCCESS;
2218 * @brief destroy aboutUG main view layout
2220 * @param cb aboutUG data
2221 * @return 1 for success
2223 static int setting_about_main_destroy(void *cb)
2225 SETTING_TRACE_BEGIN;
2227 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2229 SettingAboutUG *ad = (SettingAboutUG *) cb;
2231 evas_object_smart_callback_del(ad->genlsit, "realized", __gl_realized_cb);
2233 int ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
2234 __setting_about_main_vconf_change_cb);
2236 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
2238 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
2239 __setting_about_main_vconf_change_cb);
2241 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
2244 //__setting_about_main_remove_noti(ad);
2247 if (ad->update_timer) {
2248 ecore_timer_del(ad->update_timer);
2249 ad->update_timer = NULL;
2251 if (ad->update_idler) {
2252 ecore_idler_del(ad->update_idler);
2253 ad->update_idler = NULL;
2255 if (ad->idler_add_popup) {
2256 ecore_idler_del(ad->idler_add_popup);
2257 ad->idler_add_popup = NULL;
2259 if (ad->idler_remove_popup) {
2260 ecore_idler_del(ad->idler_remove_popup);
2261 ad->idler_remove_popup = NULL;
2263 if (ad->idler_remove_space_popup) {
2264 ecore_idler_del(ad->idler_remove_space_popup);
2265 ad->idler_remove_space_popup = NULL;
2268 evas_object_del(ad->popup);
2271 if (ad->popup_space) {
2272 evas_object_del(ad->popup_space);
2273 ad->popup_space = NULL;
2276 if (ad->ly_main != NULL) {
2277 evas_object_del(ad->ly_main);
2281 if (ad->event_handler) {
2282 ecore_event_handler_del(ad->event_handler);
2283 ad->event_handler = NULL;
2285 if (ad->name_update_idler) {
2286 ecore_idler_del(ad->name_update_idler);
2287 ad->name_update_idler = NULL;
2289 setting_view_about_main.is_create = 0;
2290 return SETTING_RETURN_SUCCESS;
2294 * @brief update aboutUG main view
2296 * @param cb aboutUG data
2297 * @return 1 for success
2299 static int setting_about_main_update(void *cb)
2301 SETTING_TRACE_BEGIN;
2303 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2305 SettingAboutUG *ad = (SettingAboutUG *) cb;
2307 if (ad->item_dev_name) {
2308 ad->is_dev_name_focus = elm_object_focus_get(ad->item_dev_name->eo_check);
2309 ad->cursor_pos = elm_entry_cursor_pos_get(ad->item_dev_name->eo_check);
2311 SETTING_TRACE("elm_object_focus_get(ad->item_dev_name->eo_check):%d", elm_object_focus_get(ad->item_dev_name->eo_check));
2313 SETTING_TRACE("ad->is_dev_name_focus:%d", ad->is_dev_name_focus);
2314 /*elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
2315 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
2317 ecore_imf_context_input_panel_show(imf_context);
2322 if (ad->ly_main != NULL) {
2323 evas_object_show(ad->ly_main);
2326 return SETTING_RETURN_SUCCESS;
2330 * @brief hide aboutUG main view
2332 * @param cb aboutUG data
2333 * @return 1 for success
2335 static int setting_about_main_cleanup(void *cb)
2337 SETTING_TRACE_BEGIN;
2339 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2341 SettingAboutUG *ad = (SettingAboutUG *) cb;
2343 if (ad->ly_main != NULL) {
2344 /* evas_object_hide(ad->ly_main); */
2347 return SETTING_RETURN_SUCCESS;