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_extension.h>
34 #include <ITapiModem.h>
38 #define MAX_DEVICE_NAME_LEN 32
40 #define DEVICED_BUS_NAME "org.tizen.system.deviced"
41 #define DEVICED_OBJECT_PATH "/Org/Tizen/System/DeviceD"
42 #define DEVICED_INTERFACE_NAME DEVICED_BUS_NAME
43 #define DEVICED_PATH_BOARD DEVICED_OBJECT_PATH"/Board"
44 #define DEVICED_INTERFACE_BOARD DEVICED_INTERFACE_NAME".Board"
45 #define METHOD_GET_SERIAL "GetSerial"
48 /** @todo : need to handle unicode encoded input characters */
50 #define DEVICE_NAME "IDS_ST_HEADER_DEVICE_NAME"
51 #define DEVICE_NAME_EXCEED_STR "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
54 #define EMPTY_LIMITATION_STR "IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
55 #define SOFTWARE_UPDATE_STR "IDS_ST_MBODY_SOFTWARE_UPDATE"
56 #define DEVICE_NAME_UNALLOWED_SPACE_KEY_STR "Device name cannot contain spaces"
57 #define DEVICE_NAME_DEFAULE "Redwood"
59 #define APP_NAME "Settings"
61 static int setting_about_main_create(void *cb);
62 static int setting_about_main_destroy(void *cb);
63 static int setting_about_main_update(void *cb);
64 static int setting_about_main_cleanup(void *cb);
66 setting_view setting_view_about_main = {
67 .create = setting_about_main_create,
68 .destroy = setting_about_main_destroy,
69 .update = setting_about_main_update,
70 .cleanup = setting_about_main_cleanup,
73 void __setting_about_gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
75 /*SETTING_TRACE_BEGIN; */
76 setting_retm_if(event_info == NULL, "invalid parameter: event_info is NULL");
77 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
78 /*Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *)elm_object_item_data_get(item); */
85 * @brief popup response callback fuc.
87 * @param data application context
88 * @param obj Evas Object
89 * @param event_info even type
93 static void __setting_about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
97 setting_retm_if(obj == NULL, "obj parameter is NULL");
98 setting_retm_if(data == NULL, "Data parameter is NULL");
99 SettingAboutUG *ad = (SettingAboutUG *) data;
100 /*Evas_Object *popup = data; */
101 switch (btn_type(obj)) {
102 case POPUP_RESPONSE_OK: {
104 ad->popup_showed_flag = FALSE;
106 evas_object_del(ad->popup);
109 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
110 char *name_value = NULL;
111 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
112 if (NULL == name_value) {
113 /*use the defaule name if get vconf failed*/
114 name_value = (char *)g_strdup(DEVICE_NAME_DEFAULE);
116 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
117 /*for genlist update */
118 elm_entry_entry_set(ad->item_dev_name->eo_check, name_value);
119 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
120 G_FREE(ad->item_dev_name->sub_desc);/*release first */
121 ad->item_dev_name->sub_desc = (char *)g_strdup(name_value);
123 SETTING_TRACE("ad->item_dev_name->sub_desc:%s", ad->item_dev_name->sub_desc);
124 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
126 ecore_imf_context_input_panel_show(imf_context);
139 * @brief callback run for idler task to destroy an popup.
141 * @param data application context
143 * @return FALSE for call it once, TRUE for call once the CPU is in idler
145 static Eina_Bool __setting_about_popup_remove_delay(void *data)
148 SettingAboutUG *ad = data;
149 if (ad->popup_space) {
150 evas_object_del(ad->popup_space);
151 ad->popup_space = NULL;
152 ad->popup_showed_flag = FALSE;
158 * @brief callback for popup destory.
160 * @param data application context
161 * @param e Evas handler
162 * @param obj Evas object
163 * @param event_info event type
165 static void __setting_about_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
169 retm_if(data == NULL, "Data parameter is NULL");
170 SettingAboutUG *ad = (SettingAboutUG *)data;
172 ad->popup_showed_flag = FALSE;
176 * @brief callback run for idler task to show an popup.
178 * @param data application context
180 static Eina_Bool __setting_about_popup_show_delay(void *data)
183 retvm_if(data == NULL, FALSE, "Data parameter is NULL");
184 SettingAboutUG *ad = (SettingAboutUG *)data;
186 /*popup the message and display the original name if the input is empty*/
187 SETTING_TRACE("POP UP again");
189 if (NULL == ad->popup) {
190 ad->popup_showed_flag = true;
191 ad->popup = setting_create_popup(ad, ad->win_get, "IDS_ST_HEADER_ENTER_VALID_DEVICE_NAME_ABB",
192 "IDS_ST_POP_YOU_MUST_ENTER_A_DEVICE_NAME",
193 __setting_about_popup_rsp_cb, 0, FALSE, FALSE,
194 1, "IDS_ST_BUTTON_OK_ABB");
195 evas_object_event_callback_add(ad->popup, EVAS_CALLBACK_DEL, __setting_about_popup_del_cb, ad);
202 * @brief callback run for idler task to destroy an popup.
204 * @param data application context
206 * @return FALSE for call it once, TRUE for call once the CPU is in idler
208 static void __setting_about_popup_mobile_ap_turn_off_ask_resp_cb(void *data,
213 setting_retm_if(data == NULL, "Data parameter is NULL");
214 SettingAboutUG *ad = (SettingAboutUG *)data;
215 int response_type = btn_type(obj);
217 if (POPUP_RESPONSE_OK == response_type) {
218 /* disable tehering*/
219 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
220 elm_object_focus_allow_set(ad->item_dev_name->eo_check, EINA_TRUE);
221 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
222 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
224 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
226 ecore_imf_context_input_panel_show(imf_context);
229 } else if (POPUP_RESPONSE_CANCEL == response_type) {
236 evas_object_del(ad->popup);
244 * @brief regulatory popup response cp.
246 * @param data application context
247 * @param obj evas object
248 * @param event_info event type
251 static void __setting_about_popup_regulatory_info_rsp_cb(void *data, Evas_Object *obj, void *event_info)
253 retm_if(data == NULL, "Data parameter is NULL");
254 evas_object_del(data);
259 * @brief show regulatory info popup.
261 * @param data application context
263 static void __setting_about_popup_regulatory_info(void *data)
274 ad = (SettingAboutUG *) data;
275 popup = elm_popup_add(ad->win_main_layout);
276 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK, eext_popup_back_cb, NULL);
278 elm_object_part_text_set(popup, "title,text", _(KeyStr_Regulatory_Info));
279 layout = elm_layout_add(popup);
280 elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "popup_center_image");
281 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
283 icon = elm_image_add(layout);
284 snprintf(buf, sizeof(buf), "%s/00_popup_regulatory_info.png", SETTING_ICON_PATH);
285 elm_image_file_set(icon, buf, NULL);
286 elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
287 elm_object_part_content_set(layout, "elm.swallow.content", icon);
289 evas_object_show(layout);
290 elm_object_content_set(popup, layout);
292 btn1 = elm_button_add(popup);
293 elm_object_style_set(btn1, "popup");
294 elm_object_text_set(btn1, _("IDS_ST_BUTTON_OK"));
295 elm_object_part_content_set(popup, "button1", btn1);
296 evas_object_smart_callback_add(btn1, "clicked", __setting_about_popup_regulatory_info_rsp_cb, popup);
297 evas_object_show(popup);
303 * @brief get Model Name.
304 * - No ini: Unavailable
305 * - I9500 @ target: GT-I9500
306 * - I9500 @ emul: SDK
307 * - SLP @ target: GT-SLP
310 * @param szStr the buffer for store the model name
311 * @param nSize buffer size
313 void setting_about_main_get_phone_model_name(char *szStr, int nSize)
315 retm_if(szStr == NULL, "szStr parameter is NULL");
318 int ret = system_info_get_platform_string("http://tizen.org/system/model_name", &value);
319 SETTING_TRACE("value : %s", value);
320 if (ret != SYSTEM_INFO_ERROR_NONE) {
321 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
323 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
328 snprintf(szStr, nSize, "%s", value);
330 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
337 * @brief get software version.
339 * @param szStr the buffer for store SW version
340 * @param nSize buffer size
342 void setting_about_main_get_sw_version(char *szStr, int nSize)
344 retm_if(szStr == NULL, "szStr parameter is NULL");
346 char *version = NULL;
347 int ret = system_info_get_platform_string("http://tizen.org/feature/platform.version", &version);
348 if (ret != SYSTEM_INFO_ERROR_NONE) {
349 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
351 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
355 char *build_info = NULL;
356 ret = system_info_get_platform_string("http://tizen.org/system/build.string", &build_info);
357 if (ret != SYSTEM_INFO_ERROR_NONE) {
358 SETTING_TRACE_ERROR("fail to call system_info_get_platform_string");
361 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
366 snprintf(szStr, nSize, "TIZEN %s (%s)", version, build_info);
368 snprintf(szStr, nSize, "TIZEN %s", version);
375 * @brief get software version.
377 * @param szStr the buffer for store SW version
378 * @param nSize buffer size
380 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
383 setting_retm_if(str == NULL, "str parameter is NULL");
384 setting_retm_if(size < SETTING_ABOUT_WIFI_MAC_STR_LEN + 1, "size parameter is wrong");
386 char *mac_addr = NULL;
387 int status = wifi_get_mac_address(&mac_addr);
388 if (WIFI_ERROR_NONE != status) {
389 SETTING_TRACE_ERROR("Failed to call wifi_get_mac_address()");
391 SETTING_TRACE_ERROR("Success to call wifi_get_mac_address()");
395 safeCopyStr(str, mac_addr, SETTING_ABOUT_WIFI_MAC_STR_LEN);
396 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", mac_addr);
400 SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
403 int ret = vconf_get_int(VCONFKEY_WIFI_STATE, &state);
405 SETTING_TRACE_ERROR("Failed to get wifi state");
407 SETTING_TRACE("get wifi state: %d", state);
410 if ((status != WIFI_ERROR_NONE) || (safeStrLen(str) == 0) || 0 == state) {
411 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
415 static DBusMessage *dbus_method_sync_with_reply(const char *dest, const char *path,
416 const char *interface, const char *method,
417 const char *sig, char *param[])
419 DBusConnection *conn;
421 DBusMessageIter iter;
425 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
430 msg = dbus_message_new_method_call(dest, path, interface, method);
435 dbus_message_iter_init_append(msg, &iter);
437 dbus_error_init(&err);
439 reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &err);
443 if (dbus_error_is_set(&err)) {
444 SETTING_TRACE_ERROR("dbus_connection_send error(%s:%s)", err.name, err.message);
445 dbus_error_free(&err);
449 dbus_message_unref(msg);
454 * @brief get serial number.
456 * @param szStr the buffer for store SN
457 * @param nSize buffer size
459 void setting_about_main_get_sn(char *szStr, int nSize)
461 retm_if(szStr == NULL, "szStr parameter is NULL");
468 msg = dbus_method_sync_with_reply(DEVICED_BUS_NAME, DEVICED_PATH_BOARD,
469 DEVICED_INTERFACE_BOARD, METHOD_GET_SERIAL, NULL, NULL);
471 SETTING_TRACE_ERROR("fail send message");
472 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
476 dbus_error_init(&err);
479 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_STRING, &serial_num, DBUS_TYPE_INT32, &len, DBUS_TYPE_INVALID);
481 SETTING_TRACE_ERROR("no message : [%s:%s]", err.name, err.message);
482 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
486 dbus_message_unref(msg);
487 dbus_error_free(&err);
489 if (serial_num && strlen(serial_num)) {
490 snprintf(szStr, nSize, "%s", serial_num);
492 snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
498 * @brief get current battery percentage.
500 * @param szStr the buffer for store battery percentage
501 * @param nSize buffer size
503 void setting_about_main_get_battery_string(char *str, int size)
505 setting_retm_if(str == NULL, "str parameter is NULL");
508 char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
509 snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
510 "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
512 char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
516 fd = open(file, O_RDONLY);
518 r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
519 if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
522 snprintf(str, size, "%d%s", val, "\%");
524 SETTING_TRACE_ERROR("read file fail");
525 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
530 SETTING_TRACE_ERROR("open file fail");
531 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
536 * @brief get bluetooth address.
538 * @param szStr the buffer for store bluetooth address
539 * @param nSize buffer size
541 void setting_about_main_get_bluetooth_address_string(char *str, int size)
543 setting_retm_if(str == NULL, "str parameter is NULL");
547 ret = bt_initialize();
548 setting_retm_if(ret != 0, "bluetooth initialization failed");
550 char *local_address = NULL;
551 ret = bt_adapter_get_address(&local_address);
553 bt_adapter_state_e state;
554 ret = bt_adapter_get_state(&state);
558 if (ret < 0 || BT_ADAPTER_DISABLED == state) {
559 snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
560 SETTING_TRACE_DEBUG("bt address : %s failed get bt address with error code:%d", str, ret);
562 SETTING_TRACE_DEBUG("bt address : %s", local_address);
563 snprintf(str, size, "%s", local_address);
572 * @brief get CPU usage.
574 * @param szStr the buffer for store CPU usage
575 * @param nSize buffer size
577 * @return -ENOENT means failed to get CPU info, otherwise ok.
579 int setting_about_main_stat_get_cpuinfo(float *usr_pct, float *sys_pct)
581 setting_retvm_if(usr_pct == NULL, -ENOENT, "param usr_pct is null");
582 setting_retvm_if(sys_pct == NULL, -ENOENT, "param sys_pct is null");
587 static unsigned long long usr_time = 0, /*nice_time = 0,*/ sys_time = 0;
588 static unsigned long long old_usr = 0, /*old_nice = 0,*/ old_sys = 0;
589 static struct timeval old_tv, cur_tv;
590 unsigned long long elapsed_tick;
596 tick_per_sec = sysconf(_SC_CLK_TCK);
597 cpu_num = sysconf(_SC_NPROCESSORS_ONLN);
603 gettimeofday(&cur_tv, NULL);
604 fp = fopen(SETTING_ABOUT_STAT_PATH, "r");
606 SETTING_TRACE_ERROR("fp == NULL");
610 char cpu_info[MAX_COMMON_BUFFER_LEN] = {0,};
611 char *cpu_info_p = fgets(cpu_info, MAX_COMMON_BUFFER_LEN, fp);
613 if (cpu_info_p == NULL) {
614 SETTING_TRACE_ERROR("fgets failed");
615 fclose(fp); /* free - code */
620 unsigned long long tmp_long = 0;
622 /* split cpu_info, get 3 numbers headmost*/
623 while ((substr = strsep(&cpu_info_p, " \t")) != NULL) {
625 tmp_long = strtoull(substr, &endptr, 10);
626 if (tmp_long != 0 && tmp_long != ULLONG_MAX) {
632 /*nice_time = tmp_long;*/
651 SETTING_TRACE_ERROR("old_usr == 0");
655 elapsed_tick = (cur_tv.tv_sec - old_tv.tv_sec) * tick_per_sec +
656 ((cur_tv.tv_usec - old_tv.tv_usec) * tick_per_sec) / 1000000;
659 if (elapsed_tick != 0) {
661 ((float)(usr_time - old_usr) * 100 / elapsed_tick) /
667 if (elapsed_tick != 0) {
669 ((float)(sys_time - old_sys) * 100 / elapsed_tick) /
677 /*old_nice = nice_time; */
686 * @brief get device root status.
688 * @param szStr the buffer for store device root status
689 * @param nSize buffer size
691 static void setting_about_main_get_status_string(char *str, int size)
694 setting_retm_if(str == NULL, "str parameter is NULL");
696 struct_cordon_status *cordon_status = NULL;
697 cordon_status = (struct_cordon_status *)malloc(sizeof(struct_cordon_status));
698 if (NULL == cordon_status) {
699 SETTING_TRACE_ERROR("Memory allocation failed");
702 memset(cordon_status, 0, sizeof(struct_cordon_status));
704 SETTING_TRACE("cordon_get_previous_root_status_before");
705 int ret = cordon_get_previous_root_status(cordon_status);
706 SETTING_TRACE("cordon_get_previous_root_status_end");
708 if (cordon_status->is_device_rooted) {
709 snprintf(str, size, "%s", SETTING_ABOUT_STATUS_ROOT_STR);
711 snprintf(str, size, "%s", SETTING_ABOUT_STATUS_UNROOT_STR);
714 SETTING_TRACE_ERROR("Failed to call cordon_get_previous_root_status() with error code %d", ret);
715 snprintf(str, size, "%s", "IDS_ST_HEADER_UNAVAILABLE");
722 * @brief create button on naviframe tile part.
724 * @param parent the new created button's parent layout
725 * @param text button text
726 * @param func callback for button click
727 * @param data application data for button click callback.
729 * @return new created button
731 static Evas_Object *setting_about_naviframe_btn_create(Evas_Object *parent, const char *text, Evas_Smart_Cb func, void *data)
733 Evas_Object *btn = elm_button_add(parent);
737 elm_object_style_set(btn, "naviframe/title_text");
738 elm_object_text_set(btn, text);
739 evas_object_smart_callback_add(btn, "clicked", func, data);
744 * @brief button done response callback.
746 * @param data application data
747 * @param obj the button evas object
748 * @param event_info event type
750 static void setting_about_naviframe_btn_done_cb(void *data, Evas_Object *obj, void *event_info)
753 setting_retm_if(data == NULL, "data is NULL");
754 SettingAboutUG *ad = (SettingAboutUG *)data;
755 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
756 const char *entry_str = NULL;
757 char *entry_str_utf8 = NULL;
758 char *name_value = NULL;
760 entry_str = elm_entry_entry_get(ad->item_dev_name->eo_check);
762 entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
764 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
766 if (!ad->empty_flag && safeStrCmp(name_value, entry_str_utf8) != 0) {
767 if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
768 SETTING_TRACE_ERROR("Set vconf[%s] failed", VCONFKEY_SETAPPL_DEVICE_NAME_STR);
771 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
772 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
774 FREE(entry_str_utf8);
776 elm_naviframe_item_pop(ad->navi_bar);
781 * @brief button cancel response callback.
783 * @param data application data
784 * @param obj the button evas object
785 * @param event_info event type
787 static void setting_about_naviframe_btn_cancel_cb(void *data, Evas_Object *obj, void *event_info)
790 setting_retm_if(data == NULL, "data is NULL");
791 SettingAboutUG *ad = (SettingAboutUG *)data;
792 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
794 char *pa_sub_desc = NULL;
795 name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
797 pa_sub_desc = elm_entry_utf8_to_markup(name);
800 elm_entry_entry_set(ad->item_dev_name->eo_check, pa_sub_desc);
801 G_FREE(ad->item_dev_name->sub_desc);/*release first */
802 ad->item_dev_name->sub_desc = (char *)g_strdup(pa_sub_desc);
806 if (isSpaceStr(ad->item_dev_name->sub_desc)) {
807 ad->empty_flag = TRUE;
809 ad->empty_flag = FALSE;
812 SETTING_TRACE("ad->item_dev_name->sub_desc:%s", ad->item_dev_name->sub_desc);
813 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
814 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
817 elm_naviframe_item_pop(ad->navi_bar);
820 static void __setting_about_main_popup_cb(void *data, Evas_Object *obj, void *event_info)
823 setting_retm_if(obj == NULL, "obj parameter is NULL");
824 setting_retm_if(data == NULL, "Data parameter is NULL");
825 SettingAboutUG *ad = (SettingAboutUG *) data;
827 switch (btn_type(obj)) {
828 case POPUP_RESPONSE_OK: {
829 if (ad->popup_space) {
830 ad->popup_showed_flag = FALSE;
831 evas_object_del(ad->popup_space);
832 ad->popup_space = NULL;
844 * @brief device name entry input handing
845 * - get the current entry text
846 * - check if the current input text is reached to max length
847 * and show messge to user
849 * @param data application data
850 * @param obj the entry evas object
852 static void __setting_about_entry_changed_cb(void *data, Evas_Object *obj)
854 retm_if(!data || !obj, "Data parameter is NULL");
855 /*return if entry is not focused too */
857 Setting_GenGroupItem_Data *list_item =
858 (Setting_GenGroupItem_Data *) data;
859 SettingAboutUG *ad = list_item->userdata;
860 retm_if(ad == NULL, "Data parameter is NULL");
862 const char *entry_str = elm_entry_entry_get(obj);
863 int entry_len = safeStrLen(entry_str);
864 SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
866 SETTING_TRACE("maxLengthReachFlag:[%d], enterKeyPressFlag:%d", list_item->maxLengthReachFlag, list_item->enterKeyPressFlag);
868 /*fix PLM P131106-02776
869 after keyboard popup cut the entry text, the entry text don't reach max length, so need to delete popup */
870 if (ad->popup_showed_flag && ad->popup_space && !list_item->maxLengthReachFlag) {
871 evas_object_del(ad->popup_space);
872 ad->popup_space = NULL;
873 ad->popup_showed_flag = FALSE;
877 list_item->maxLengthReachFlag = FALSE;
878 list_item->enterKeyPressFlag = FALSE;
879 list_item->spaceKeyPressFlag = FALSE;
881 /*for genlist update */
882 G_FREE(list_item->sub_desc);/*release first */
883 list_item->sub_desc = (char *)g_strdup(entry_str);
885 if (isSpaceStr(entry_str)) {
886 if (!ad->empty_flag) ad->empty_flag = TRUE;
888 if (ad->empty_flag) ad->empty_flag = FALSE;
893 * @brief device name entry changed callback.
895 * @param data application data
896 * @param obj the entry evas object
897 * @param event_info event type
900 __setting_about_entry_device_name_changed_cb(void *data, Evas_Object *obj,
903 /*SETTING_TRACE_BEGIN; */
904 setting_retm_if(obj == NULL, "obj is NULL");
905 setting_retm_if(data == NULL, "data is NULL");
906 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
907 SettingAboutUG *ad = list_item->userdata;
908 retm_if(ad == NULL, "Data parameter is NULL");
910 /* 1. entry is empty */
911 /* 2. entry is not empty */
912 if (list_item->item) {
913 if (elm_entry_is_empty(obj)) {
914 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,hide", "");
916 Eina_Bool device_focus_status = elm_object_focus_get(ad->item_dev_name->eo_check);
917 if (device_focus_status) {
918 /*SETTING_TRACE("name is NOT empty, but focus"); */
919 elm_object_item_signal_emit(list_item->item, "elm,state,eraser,show", "");
922 elm_object_item_signal_emit(list_item->item, "elm,state,guidetext,hide", "");
925 __setting_about_entry_changed_cb(data, obj);
926 /*SETTING_TRACE_END; */
930 * @brief device name entry focus callback.
932 * @param data application data
933 * @param obj the entry evas object
934 * @param event_info event type
936 static void __setting_about_entry_focused(void *data, Evas_Object *obj, void *event_info) /* Focused callback will show X marked button and hide guidetext. */
939 retm_if(!data || !obj, "Data parameter is NULL");
940 Setting_GenGroupItem_Data *item_dev_name = data;
944 elm_entry_cursor_end_set(obj);
945 const char *txt = elm_entry_entry_get(obj);
946 if (!txt || 0 == strlen(txt)) {
947 txt = elm_object_part_text_get(obj, "elm.guide");
950 /* Say entry focused */
951 Eina_Stringshare *str = eina_stringshare_printf("%s, Edit Field, Keyboard opened", txt);
952 elm_access_say((char *)str);
953 eina_stringshare_del(str);
955 SettingAboutUG *ad = item_dev_name->userdata;
956 retm_if(!ad, "ad parameter is NULL");
957 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(item_dev_name->eo_check);
959 ecore_imf_context_input_panel_show(imf_context);
964 * @brief device name entry unfocus callback.
966 * @param data application data
967 * @param obj the entry evas object
968 * @param event_info event type
970 static void __setting_about_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
973 retm_if(!data || !obj, "Data parameter is NULL");
976 const char *entry_str = elm_entry_entry_get(obj);
977 char *entry_str_utf8 = NULL;
978 entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
979 SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
981 Setting_GenGroupItem_Data *item_dev_name = data;
982 SettingAboutUG *ad = item_dev_name->userdata;
984 if (isSpaceStr(entry_str)) {
985 if (!ad->empty_flag) {
986 ad->empty_flag = TRUE;
989 if (ad->empty_flag) {
990 ad->empty_flag = FALSE;
994 if (item_dev_name->enterKeyPressFlag == TRUE)
996 char* name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
997 if (!ad->empty_flag && safeStrCmp(name_value, entry_str_utf8) != 0) {
998 if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
999 SETTING_TRACE_ERROR("Set vconf[%s] failed", VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1002 if (EINA_TRUE == elm_object_focus_get(ad->item_dev_name->eo_check)) {
1003 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1007 setting_hide_input_pannel_cb(item_dev_name->eo_check);
1009 FREE(entry_str_utf8);
1010 elm_entry_select_none(obj);
1016 * @brief device name entry max length reached callback.
1018 * @param data application data
1019 * @param obj the entry evas object
1020 * @param event_info event type
1022 static void __setting_about_entry_max_len_reached(void *data, Evas_Object *obj, void *event_info)
1024 SETTING_TRACE_BEGIN;
1025 retm_if(data == NULL, "Data parameter is NULL");
1026 retm_if(!elm_object_focus_get(obj), "Entry is not focused"); /*notify only when entry is being focused on. */
1028 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1029 list_item->maxLengthReachFlag = true;
1031 SettingAboutUG *ad = list_item->userdata;
1032 if (list_item->maxLengthReachFlag && list_item->enterKeyPressFlag == FALSE) {
1034 if (!ad->popup_showed_flag && NULL == ad->popup_space) {
1035 ad->popup_showed_flag = TRUE;/*workaroud to fix popup blink issue. */
1036 char strMax[BUF_SIZE] = {0,};
1037 snprintf(strMax, BUF_SIZE, _("IDS_ST_POP_THE_MAXIMUM_NUMBERS_OF_CHARACTERS_FOR_YOUR_DEVICE_NAME_HPD_HAS_BEEN_EXCEEDED"),
1038 MAX_DEVICE_NAME_LEN);
1040 ad->popup_space = setting_create_popup(ad, ad->win_get, "IDS_ST_HEADER_ENTER_VALID_DEVICE_NAME_ABB",
1041 strMax, __setting_about_main_popup_cb, 0, FALSE, FALSE,
1042 1, "IDS_ST_BUTTON_OK_ABB");
1048 * @brief device name entry input panel state event call back
1049 * - input panel state event:ECORE_IMF_INPUT_PANEL_STATE_EVENT
1051 * @param data application data
1052 * @param obj the entry evas object
1053 * @param event_info event type
1055 static void __setting_about_entry_input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
1057 SETTING_TRACE_BEGIN;
1058 retm_if(data == NULL, "Data parameter is NULL");
1059 retm_if(ctx == NULL, "obj parameter is NULL");
1060 SettingAboutUG *ad = (SettingAboutUG *)data;
1062 if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
1063 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
1064 } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
1065 SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
1067 if (ad->item_dev_name) {
1069 if (ad->empty_flag) {
1070 ad->idler_add_popup = ecore_idler_add(__setting_about_popup_show_delay, ad);
1074 /*if Setting is overlapped by other app,the entry will lost its focus,
1075 the input pannel will be hided and any popup should be removed to fix blinking issue.*/
1076 if (ad->pause_flag) {
1077 ad->idler_remove_popup = ecore_idler_add(__setting_about_popup_remove_delay, ad);
1079 elm_object_focus_set(ad->navi_bar, EINA_FALSE);
1085 * @brief aboutUG vconf changed callback
1087 * @param key the changed vconf key node.
1088 * @param data application data
1089 * @param event_info event type
1091 static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
1093 SETTING_TRACE_BEGIN;
1094 setting_retm_if(NULL == key, "key is NULL");
1095 setting_retm_if(NULL == data, "data is NULL");
1096 SettingAboutUG *ad = (SettingAboutUG *)data;
1098 int status = vconf_keynode_get_int(key);
1099 char *vconf_name = vconf_keynode_get_name(key);
1101 if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
1102 SETTING_TRACE("status:%d", status);
1103 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
1104 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
1105 if (ad->item_data_wifi) {
1106 G_FREE(ad->item_data_wifi->sub_desc);
1107 ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
1108 elm_object_item_data_set(ad->item_data_wifi->item, ad->item_data_wifi);
1109 elm_genlist_item_update(ad->item_data_wifi->item);
1111 } else if (!safeStrCmp(vconf_name, VCONFKEY_BT_STATUS)) {
1112 SETTING_TRACE("status:%d", status);
1113 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
1114 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
1115 if (ad->item_data_bt) {
1116 G_FREE(ad->item_data_bt->sub_desc);
1117 ad->item_data_bt->sub_desc = (char *)g_strdup(str);
1118 elm_object_item_data_set(ad->item_data_bt->item, ad->item_data_bt);
1119 elm_genlist_item_update(ad->item_data_bt->item);
1121 } else if (!safeStrCmp(vconf_name, VCONFKEY_SETAPPL_DEVICE_NAME_STR)) {
1122 char *name_value = NULL;
1123 name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1124 if (NULL == name_value) {
1125 /*use the defaule name if get vconf failed*/
1126 name_value = (char *)g_strdup(DEVICE_NAME_DEFAULE);
1128 SETTING_TRACE("name:%s", name_value);
1129 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
1130 /*for genlist update */
1131 if (safeStrCmp(ad->item_dev_name->sub_desc, name_value) != 0) {
1132 char *str_name = elm_entry_utf8_to_markup(name_value);
1133 elm_entry_entry_set(ad->item_dev_name->eo_check, str_name);
1134 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
1135 G_FREE(ad->item_dev_name->sub_desc);/*release first */
1136 ad->item_dev_name->sub_desc = (char *)g_strdup(str_name);
1140 if (ad->item_dev_name_main && ad->item_dev_name_main->sub_desc) {
1141 if (safeStrCmp(ad->item_dev_name_main->sub_desc, name_value) != 0) {
1142 char *str_name = elm_entry_utf8_to_markup(name_value);
1143 char *tmp = ad->item_dev_name_main->sub_desc;
1144 ad->item_dev_name_main->sub_desc = (char *)g_strdup(str_name);
1145 elm_genlist_item_fields_update(ad->item_dev_name_main->item, "*", ELM_GENLIST_ITEM_FIELD_TEXT);
1153 SETTING_TRACE_ERROR("vconf_name is error");
1158 * @brief UG destroy callback
1160 * @param ug the UG which is needed to be destoried
1161 * @param priv application data
1163 static void __destroy_ug_cb(ui_gadget_h ug, void *priv)
1165 SETTING_TRACE_BEGIN;
1167 /* restore the '<-' button on the navigate bar */
1169 SettingAboutUG *ad = (SettingAboutUG *) priv; /* ad is point to priv */
1172 setting_ug_destroy(ug);
1173 ad->ug_loading = NULL;
1175 elm_object_tree_focus_allow_set(ad->ly_main, EINA_TRUE);
1179 * @brief Lunch cetificates UG(setting-manage-certificates-efl)
1181 * @param data application data
1183 static void __setting_about_main_certificates_clicked(void *data)
1185 SETTING_TRACE_BEGIN;
1186 retm_if(data == NULL, "Data parameter is NULL");
1187 SettingAboutUG *ad = (SettingAboutUG *)data;
1189 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1194 cbs->layout_cb = setting_about_layout_ug_cb;
1195 cbs->result_cb = NULL;
1196 cbs->destroy_cb = __destroy_ug_cb;
1197 cbs->priv = (void *)ad;
1199 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1201 setting_ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
1203 if (NULL == ad->ug_loading) { /* error handling */
1204 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1210 * @brief Lunch UG setting-phone-efl
1212 * @param data application context
1214 static void __setting_about_main_licence_launch(void *data)
1216 SETTING_TRACE_BEGIN;
1217 retm_if(data == NULL, "Data parameter is NULL");
1218 SettingAboutUG *ad = (SettingAboutUG *)data;
1221 if (app_control_create(&svc)) {
1225 app_control_add_extra_data(svc, "viewtype", "license");
1227 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
1229 app_control_destroy(svc);
1233 cbs->layout_cb = setting_about_layout_ug_cb;
1234 cbs->result_cb = NULL;
1235 cbs->destroy_cb = __destroy_ug_cb;
1236 cbs->priv = (void *)ad;
1239 elm_object_tree_focus_allow_set(ad->ly_main, EINA_FALSE);
1241 setting_ug_create(ad->ug, "setting-phone-efl", UG_MODE_FULLVIEW, svc, cbs);
1243 if (NULL == ad->ug_loading) { /* error handling */
1244 SETTING_TRACE_ERROR("NULL == ad->ug_loading");
1246 app_control_destroy(svc);
1251 * @brief expanlist sub-item selected callback
1253 * @param data app context
1254 * @param obj evas object
1255 * @param event_info event type
1257 static void __setting_about_sub_list_sel_cb(void *data, Evas_Object *obj, void *event_info)
1259 SETTING_TRACE_BEGIN;
1261 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1262 Elm_Object_Item *subitem = (Elm_Object_Item *) event_info;
1263 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subitem);
1264 elm_genlist_item_selected_set(subitem, 0);
1265 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subitem);
1266 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
1267 ret_if(NULL == data_subItem || NULL == data_parentItem);
1271 setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
1272 setting_retm_if(0 != err, "Set vconf error[%d]", data_parentItem->int_slp_setting_binded);
1274 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
1275 elm_object_item_data_set(data_parentItem->item, data_parentItem);
1276 elm_genlist_item_update(data_parentItem->item);
1277 elm_radio_value_set(data_subItem->rgd, data_subItem->chk_status);
1281 * @brief expanlist sub-item radio checked callback
1283 * @param data app context
1284 * @param obj evas object
1285 * @param event_info event type
1288 static void __setting_about_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info)
1290 SETTING_TRACE_BEGIN;
1291 retm_if(data == NULL, "Data parameter is NULL");
1292 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
1294 Elm_Object_Item *subItem = list_item->item;
1295 Elm_Object_Item *parentItem = elm_genlist_item_parent_get(subItem);
1297 Setting_GenGroupItem_Data *data_subItem = elm_object_item_data_get(subItem); /* subItem data */
1298 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem); /* parent data */
1299 ret_if(NULL == data_subItem || NULL == data_parentItem);
1302 setting_set_string_slp_key(data_parentItem->int_slp_setting_binded, data_subItem->keyStr, &err);
1305 data_parentItem->sub_desc = (char *)g_strdup(_(data_subItem->keyStr));
1306 elm_object_item_data_set(data_parentItem->item, data_parentItem);
1307 elm_genlist_item_update(data_parentItem->item);
1308 elm_radio_value_set(obj, data_subItem->chk_status);
1312 * @brief expanlist state changed callback
1314 * @param data app context
1315 * @param obj evas object
1316 * @param event_info event type
1318 void setting_about_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
1320 SETTING_TRACE_BEGIN;
1321 setting_retm_if(data == NULL, "Data parameter is NULL");
1322 setting_retm_if(event_info == NULL, "event_info parameter is NULL");
1324 SettingAboutUG *ad = (SettingAboutUG *) data;
1325 Elm_Object_Item *parentItem = event_info; /* parent item */
1326 Setting_GenGroupItem_Data *data_parentItem = elm_object_item_data_get(parentItem);
1327 Evas_Object *scroller = elm_object_item_widget_get(parentItem);
1329 Evas_Object *rgd = elm_radio_add(scroller);
1330 elm_radio_value_set(rgd, -1);
1333 char sel_num[SETTING_SIM_MSISDN_DIALING_NUMBER_LEN] = { 0, };
1334 setting_retm_if(NULL == data_parentItem, "data_parentItem is NULL");
1335 setting_get_string_slp_key(data_parentItem->int_slp_setting_binded, sel_num, &err);
1336 SETTING_TRACE("binded: %d, checked: %s, err: %d", data_parentItem->int_slp_setting_binded, sel_num, err);
1340 Setting_GenGroupItem_Data *item_data = NULL;
1342 /*for(; i < SETTING_ABOUT_MY_NUMBERS_LEN; i++) { */
1343 for (; i < ad->my_numbers.count; i++) {
1344 if (ad->my_numbers.list[i].num[0] == '\0') {
1348 if (sel_idx == -1 && 0 == safeStrCmp(sel_num, ad->my_numbers.list[i].num)) {
1351 item_data = setting_create_Gendial_exp_sub_field(scroller,
1352 &(ad->itc_1icon_1text_sub),
1353 __setting_about_sub_list_sel_cb, ad, parentItem,
1354 SWALLOW_Type_1RADIO, rgd,
1356 ad->my_numbers.list[i].num, __setting_about_sub_list_rd_change);
1358 item_data->userdata = ad;
1360 SETTING_TRACE_ERROR("item_data is NULL");
1364 elm_radio_value_set(rgd, sel_idx);
1368 * @brief Do process when clicking '<-' button
1370 * @param data application context
1371 * @param obj evas object
1372 * @param event_info event type
1375 setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
1378 SETTING_TRACE_BEGIN;
1379 setting_retvm_if(data == NULL, EINA_FALSE, "Data parameter is NULL");
1380 SettingAboutUG *ad = (SettingAboutUG *) data;
1381 if (ad->empty_flag) {
1385 /*imf must be hided before view is destroyed. */
1386 /*Following code is just to improve the hiding speed. If not add these code, */
1387 /*the input pannel will also be hided with the view destroyed,but it works too slow. */
1388 if (ad->item_dev_name) {
1389 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
1390 setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
1393 /* Send destroy request */
1394 ug_destroy_me(ad->ug);
1399 static Eina_Bool __setting_about_child_view_back_cb(void *data, Elm_Object_Item *it)
1401 SETTING_TRACE_BEGIN;
1403 retvm_if(data == NULL, EINA_TRUE, "Data parameter is NULL");
1405 SettingAboutUG *ad = data;
1406 if (ad->empty_flag) {
1409 if (ad->event_handler) {
1410 ecore_event_handler_del(ad->event_handler);
1411 ad->event_handler = NULL;
1413 if (ad->name_update_idler) {
1414 ecore_idler_del(ad->name_update_idler);
1415 ad->name_update_idler = NULL;
1421 static Eina_Bool __setting_about_name_view_key_down(void *data, int type, void *event)
1423 SETTING_TRACE_BEGIN;
1424 Evas_Event_Key_Down *ev = event;
1427 return ECORE_CALLBACK_RENEW;
1430 SettingAboutUG *ad = data;
1431 if (!strcmp(ev->keyname, "XF86Back")) {
1432 setting_about_naviframe_btn_cancel_cb(ad, NULL, NULL);
1434 return ECORE_CALLBACK_RENEW;
1436 static Eina_Bool setting_about_name_focus_update_cb(const void *data)
1438 SETTING_TRACE_BEGIN;
1440 setting_retvm_if(data == NULL, ECORE_CALLBACK_RENEW, "Data parameter is NULL");
1441 SettingAboutUG *ad = data;
1442 if (ad->item_dev_name && ad->item_dev_name->eo_check) {
1443 evas_object_show(ad->item_dev_name->eo_check);
1444 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1446 ad->name_update_idler = NULL;
1447 return ECORE_CALLBACK_CANCEL;
1449 return ECORE_CALLBACK_RENEW;
1456 * Setting > About > Device name > (new view) here
1458 static void __setting_about_main_creat_name_view(data)
1460 SETTING_TRACE_BEGIN;
1462 setting_retm_if(data == NULL, "Data parameter is NULL");
1463 SettingAboutUG *ad = data;
1465 Evas_Object *scroller = NULL;
1466 scroller = elm_genlist_add(ad->navi_bar);
1467 setting_retm_if(scroller == NULL, "Cannot set scroller object as contento of layout");
1468 elm_genlist_realization_mode_set(scroller, EINA_TRUE);
1469 elm_genlist_clear(scroller); /* first to clear list */
1470 elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
1471 evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
1474 char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1475 char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
1478 ad->empty_flag = FALSE;
1479 if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0]) {
1480 ad->empty_flag = TRUE;
1483 Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)calloc(1, sizeof(Setting_GenGroupItem_Data));
1487 setting_retvm_if(!item_data, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER, "calloc failed");
1489 item_data->keyStr = (char *)g_strdup(SETTING_ABOUT_DEVICE_NAME_STR);
1490 item_data->sub_desc = (char *)g_strdup(pa_sub_desc);
1491 item_data->swallow_type = SWALLOW_Type_LAYOUT_EDITFIELD;
1492 item_data->chk_status = 0;
1493 item_data->chk_change_cb = __setting_about_entry_device_name_changed_cb;
1494 item_data->userdata = ad;
1495 //item_data->isSinglelineFlag = FALSE;
1496 item_data->isSinglelineFlag = TRUE;
1497 item_data->stop_change_cb = __setting_about_entry_unfocus_cb;
1498 item_data->maxlength_reached_cb = __setting_about_entry_max_len_reached;
1499 item_data->focus_cb = __setting_about_entry_focused;
1500 item_data->x_callback_cb = __setting_about_entry_input_panel_event_cb;
1501 item_data->guide_text = (char *)g_strdup(EMPTY_LIMITATION_STR);
1502 item_data->focus_unallowed = get_tethering_status();
1503 item_data->return_key_type = ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE;
1505 item_data->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Limit_Size));
1506 if (item_data->limit_filter_data) {
1507 /*max byte len is 32 -> MAX_DEVICE_NAME_LEN */
1508 item_data->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
1509 item_data->win_main = ad->win_get;
1511 SETTING_TRACE_ERROR("fail to calloc");
1514 item_data->digits_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
1515 if (item_data->digits_filter_data) {
1516 item_data->digits_filter_data->accepted = NULL;
1518 SETTING_TRACE_ERROR("fail to calloc");
1521 item_data->input_panel_disable_flag = EINA_TRUE;
1523 /* add genlist item here for the device name */
1524 item_data->item = elm_genlist_item_append(scroller, &(itc_editfield), item_data, NULL, ELM_GENLIST_ITEM_NONE,
1527 ad->item_dev_name = item_data;
1528 if (ad->item_dev_name) {
1529 __BACK_POINTER_SET(ad->item_dev_name);
1530 elm_genlist_item_select_mode_set(ad->item_dev_name->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1532 SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
1537 Elm_Object_Item *navi_it = setting_push_layout_navi_bar(_(DEVICE_NAME),
1540 ad, scroller, ad->navi_bar, NULL);
1541 elm_naviframe_item_pop_cb_set(navi_it, __setting_about_child_view_back_cb, ad);
1544 /* Title Cancel Button */
1545 btn = elm_button_add(ad->navi_bar);
1546 elm_object_style_set(btn, "naviframe/title_cancel");
1547 evas_object_smart_callback_add(btn, "clicked", setting_about_naviframe_btn_cancel_cb, ad);
1548 elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
1550 /* Title Done Button */
1551 btn = elm_button_add(ad->navi_bar);
1552 elm_object_style_set(btn, "naviframe/title_done");
1553 evas_object_smart_callback_add(btn, "clicked", setting_about_naviframe_btn_done_cb, ad);
1554 elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
1556 ad->event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __setting_about_name_view_key_down, ad);
1557 ad->name_update_idler = ecore_idler_add(setting_about_name_focus_update_cb, ad);
1561 * @brief Do process when clicking on some genlist item
1563 * @param data application context
1564 * @param obj evas object
1565 * @param event_info event type
1568 setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
1571 SETTING_TRACE_BEGIN;
1573 setting_retm_if(data == NULL, "Data parameter is NULL");
1575 retm_if(event_info == NULL, "Invalid argument: event info is NULL");
1576 Elm_Object_Item *item = (Elm_Object_Item *) event_info;
1577 elm_genlist_item_selected_set(item, 0);
1578 Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
1579 retm_if(list_item == NULL, "return of elm_object_item_data_get is NULL");
1581 SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
1582 if (!safeStrCmp("IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB", list_item->keyStr)) {
1583 __setting_about_main_certificates_clicked(data);
1584 } else if (!safeStrCmp(KeyStr_Regulatory_Info, list_item->keyStr)) {
1585 __setting_about_popup_regulatory_info(data);
1586 } else if (!safeStrCmp("IDS_ST_MBODY_LEGAL_INFORMATION_ABB", list_item->keyStr)) {
1587 __setting_about_main_licence_launch(data);
1588 } else if (!safeStrCmp("IDS_ST_MBODY_SOFTWARE_UPDATE", list_item->keyStr)) {
1590 SettingAboutUG *ad = (SettingAboutUG *)list_item->userdata;
1591 Evas_Object *back_btn = elm_object_item_part_content_get(ad->navi_item, "prev_btn");
1593 SETTING_TRACE_DEBUG("Change focus to back_btn");
1594 elm_object_focus_set(back_btn, EINA_TRUE);
1597 app_launcher("org.tizen.oma-dm");
1599 } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
1600 __setting_about_main_creat_name_view(data);
1607 * @brief callback function for genlist event "drag"
1609 * @param data application context
1610 * @param obj evas object
1611 * @param event_info event type
1613 static void setting_about_main_gl_drag(void *data, Evas_Object *obj, void *event)
1616 retm_if(event == NULL, "Invalid argument: event info is NULL");
1617 SettingAboutUG *ad = (SettingAboutUG *) data;
1618 ad->drag_flag = TRUE;
1623 * @brief callback function for EVAS_CALLBACK_MOUSE_UP
1625 * @param data application context
1627 * @param obj evas object
1628 * @param event_info event type
1631 setting_about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
1633 /*SETTING_TRACE_BEGIN; */
1635 SettingAboutUG *ad = (SettingAboutUG *) data;
1636 retm_if(event == NULL, "Invalid argument: event info is NULL");
1637 Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event;
1639 if (ad->drag_flag) {
1640 ad->drag_flag = FALSE;
1644 if (ad->item_dev_name) {
1645 Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
1646 if (ad->item_dev_name->item == selected_item) {
1647 if (elm_object_focus_get(ad->item_dev_name->eo_check)) {
1648 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
1650 ecore_imf_context_input_panel_show(imf_context);
1655 if (get_tethering_status()) {
1657 evas_object_del(ad->popup);
1661 ad->popup = setting_create_popup(ad, ad->win_get,
1662 NULL, SETTING_ABOUT_MOBILE_AP_TURNED_OFF,
1663 __setting_about_popup_mobile_ap_turn_off_ask_resp_cb, 0,
1665 2, "IDS_ST_BODY_TURN_OFF", "IDS_ST_BUTTON_CANCEL_ABB2");
1667 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
1668 elm_entry_cursor_end_set(ad->item_dev_name->eo_check);
1670 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
1672 ecore_imf_context_input_panel_show(imf_context);
1676 elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);/*to make inputing words input */
1679 /*SETTING_TRACE_END; */
1684 * @brief callback run for timer task to update CPU, Battery info
1686 * @param data application context
1688 * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
1690 static Eina_Bool setting_about_main_timer_update_cb(const void *data)
1692 retv_if(data == NULL, TRUE);
1693 SettingAboutUG *ad = (SettingAboutUG *) data;
1695 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
1696 if (ad->item_data_cpu) {
1698 int ret = setting_about_main_stat_get_cpuinfo(&usr, &sys);
1699 if (ret == -ENOENT) {
1700 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
1701 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
1703 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
1706 ad->item_data_cpu->sub_desc = (char *)g_strdup(str);
1707 elm_object_item_data_set(ad->item_data_cpu->item, ad->item_data_cpu);
1708 elm_genlist_item_update(ad->item_data_cpu->item);
1711 if (ad->item_data_battery) {
1712 setting_about_main_get_battery_string(str, sizeof(str));
1713 /*SETTING_TRACE("str:%s", str);*/
1714 ad->item_data_battery->sub_desc = (char *)g_strdup(str);
1716 elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
1717 elm_genlist_item_update(ad->item_data_battery->item);
1719 if (ad->need_update) {
1720 if (ad->item_data_my_phone_number) {
1721 G_FREE(ad->item_data_my_phone_number->sub_desc);
1722 ad->item_data_my_phone_number->sub_desc = (char *)g_strdup(SETTING_ABOUT_PUK_LOCKED);
1723 elm_object_item_data_set(ad->item_data_my_phone_number->item, ad->item_data_my_phone_number);
1724 elm_genlist_item_update(ad->item_data_my_phone_number->item);
1725 ad->need_update = FALSE;
1732 * @brief create main view genlist items
1734 * @param data application data
1736 * @return FALSE for call it once and then destory the timer, TRUE for always call it when the timer is reached.
1738 int setting_about_main_generate_genlist(void *data)
1740 SETTING_TRACE_BEGIN;
1742 retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
1744 SettingAboutUG *ad = (SettingAboutUG *) data;
1745 bool is_emul_bin = isEmulBin();
1747 Evas_Object *scroller = ad->genlsit;
1748 Elm_Object_Item *item = NULL;
1749 Setting_GenGroupItem_Data *item_data = NULL;
1750 char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
1751 telephony_handle_list_s tapi_handle_list;
1753 int tapi_handle_count = 0;
1755 int ret_get_app_info = 0;
1756 app_info_h app_info = NULL;
1757 ret_get_app_info = app_info_create("org.tizen.oma-dm", &app_info);
1759 /* [UI] Software update */
1760 if (ret_get_app_info != APP_MANAGER_ERROR_NONE) {
1761 SETTING_TRACE("No corresponding app_id for [%s]\n", "org.tizen.oma-dm");
1764 item_data = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1765 setting_about_main_mouse_up_Gendial_list_cb,
1766 ad, SWALLOW_Type_INVALID, NULL, NULL,
1767 0, "IDS_ST_MBODY_SOFTWARE_UPDATE",
1770 item_data->userdata = ad;
1772 SETTING_TRACE_ERROR("item_data is NULL");
1777 /* [UI] Certificates */
1778 /* implementation is in progress. */
1779 item_data = setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1780 setting_about_main_mouse_up_Gendial_list_cb,
1781 ad, SWALLOW_Type_INVALID, NULL, NULL,
1782 0, "IDS_ST_HEADER_MANAGE_CERTIFICATES_ABB", NULL, NULL);
1785 SETTING_TRACE_ERROR("item_data is NULL");
1788 item = elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL,
1789 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1790 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1792 /* [UI] Legal Information */
1793 setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
1794 setting_about_main_mouse_up_Gendial_list_cb,
1795 ad, SWALLOW_Type_INVALID, NULL, NULL,
1796 0, "IDS_ST_MBODY_LEGAL_INFORMATION_ABB", NULL, NULL);
1798 /*//////////////////////////////////////////////////////////////////// */
1799 /* [UI] separator */
1800 elm_genlist_item_select_mode_set(elm_genlist_item_append(scroller, &itc_seperator, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL),
1801 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1802 (void)setting_create_Gendial_field_titleItem(scroller,
1803 &(ad->itc_group_item),
1804 "IDS_ST_BODY_DEVICE_INFORMATION", NULL);
1805 /*//////////////////////////////////////////////////////////////////// */
1809 char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
1810 char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
1813 ad->empty_flag = FALSE;
1814 if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0]) {
1815 ad->empty_flag = TRUE;
1818 ad->item_dev_name_main = item_data =
1819 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), setting_about_main_mouse_up_Gendial_list_cb,
1820 ad, SWALLOW_Type_INVALID, NULL,
1821 NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc, NULL);
1823 __BACK_POINTER_SET(ad->item_dev_name_main);
1825 SETTING_TRACE_ERROR("item_data is NULL");
1830 /* 2. Phone number */
1831 /* Initialize telephony handle */
1832 int telephony_init_ret = telephony_init(&tapi_handle_list);
1833 if (telephony_init_ret != TELEPHONY_ERROR_NONE) {
1834 tapi_handle_count = 0;
1836 tapi_handle_count = tapi_handle_list.count;
1838 SETTING_TRACE_DEBUG("tapi_handle_list.count:%d", tapi_handle_list.count);
1839 /* my numbers(SIM1 and SIM2) */
1840 for (i = 0; i < tapi_handle_count; i++) {
1841 memset(str, 0x00, sizeof(str));
1842 char *my_number = NULL;
1843 ret_value = telephony_sim_get_subscriber_number(tapi_handle_list.handle[i], &my_number);
1844 if (ret_value != TELEPHONY_ERROR_NONE) {
1845 SETTING_TRACE_ERROR("telephony_sim_get_subscriber_number() failed!!! [%d]", ret_value);
1846 my_number = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1847 } else if (isEmptyStr(my_number)) {
1848 SETTING_TRACE_DEBUG("telephony_sim_get_subscriber_number() success, BUT return empty my number");
1849 my_number = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1851 /* [UI] Phone number */
1853 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1854 NULL, SWALLOW_Type_INVALID, NULL,
1855 NULL, 0, "IDS_ST_BODY_PHONE_NUMBER", my_number, NULL);
1857 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1858 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1860 SETTING_TRACE_ERROR("item_data is NULL");
1866 /* 3. [UI] Model number */
1867 memset(str, 0x00, sizeof(str));
1868 setting_about_main_get_phone_model_name(str, sizeof(str));
1870 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1871 NULL, SWALLOW_Type_INVALID, NULL,
1872 NULL, 0, "IDS_ST_BODY_MODEL_NUMBER", str, NULL);
1874 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1875 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1877 SETTING_TRACE_ERROR("item_data is NULL");
1879 ad->item_model = item_data;
1881 /* 4. [UI] Tizen version */
1882 memset(str, 0x00, sizeof(str));
1883 setting_about_main_get_sw_version(str, sizeof(str));
1885 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1886 NULL, SWALLOW_Type_INVALID, NULL,
1887 NULL, 0, "IDS_ST_MBODY_TIZEN_VERSION", str, NULL);
1889 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1890 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1892 SETTING_TRACE_ERROR("item_data is NULL");
1894 ad->item_version = item_data;
1896 /* 5. IMEI(IMEI 1 andd IMEI 2) */
1897 for (i = 0; i < tapi_handle_count; i++) {
1898 memset(str, 0x00, sizeof(str));
1899 /*setting_about_main_get_imei(str, sizeof(str),tapi_handle_list.handle[i]); */
1901 ret_value = telephony_modem_get_imei(tapi_handle_list.handle[i], &imei);
1902 if (ret_value != TELEPHONY_ERROR_NONE) {
1903 SETTING_TRACE_ERROR("telephony_modem_get_imei() failed!!! [%d]", ret_value);
1904 imei = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
1908 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1909 NULL, SWALLOW_Type_INVALID, NULL,
1910 NULL, 0, SETTING_ABOUT_IMEI_STR, imei, NULL);
1912 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1913 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1915 SETTING_TRACE_ERROR("item_data is NULL");
1920 ret_value = telephony_deinit(&tapi_handle_list);
1921 if (ret_value != TELEPHONY_ERROR_NONE) {
1922 SETTING_TRACE_ERROR("Deinitialize failed!!!");
1924 /*ad->item_data_imei = item_data; */
1926 /* 6. [UI] Bluetooth address */
1927 if (!is_emul_bin) { /* requested by DI Kim due to BT BS on 11/26 */
1928 memset(str, 0x00, sizeof(str));
1929 setting_about_main_get_bluetooth_address_string(str, sizeof(str));
1931 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1932 NULL, SWALLOW_Type_INVALID, NULL,
1933 NULL, 0, "IDS_ST_MBODY_BLUETOOTH_ADDRESS", str, NULL); /*ad->itc_2text_2 */
1934 if (ad->item_data_bt) {
1935 elm_object_item_disabled_set(ad->item_data_bt->item, EINA_TRUE);
1936 elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1937 __BACK_POINTER_SET(ad->item_data_bt);
1939 SETTING_TRACE_ERROR("item_data is NULL");
1943 /* 7. [UI] Wi-Fi MAC address */
1944 memset(str, 0x00, sizeof(str));
1945 setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
1947 SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
1949 ad->item_data_wifi =
1950 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1951 NULL, SWALLOW_Type_INVALID, NULL,
1952 NULL, 0, "IDS_ST_BODY_WI_FI_MAC_ADDRESS", str, NULL);
1953 if (ad->item_data_wifi) {
1954 elm_object_item_disabled_set(ad->item_data_wifi->item, EINA_TRUE);
1955 elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1956 __BACK_POINTER_SET(ad->item_data_wifi);
1958 SETTING_TRACE_ERROR("item_data is NULL");
1961 /* 8. [UI] Serial number */
1962 memset(str, 0x00, sizeof(str));
1963 setting_about_main_get_sn(str, sizeof(str));
1965 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1966 NULL, SWALLOW_Type_INVALID, NULL,
1967 NULL, 0, SETTING_ABOUT_SN_STR, str, NULL);
1969 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1970 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1972 SETTING_TRACE_ERROR("item_data is NULL");
1974 ad->item_data_sn = item_data;
1976 /* 9. [UI] Battery power */
1977 memset(str, 0x00, sizeof(str));
1978 setting_about_main_get_battery_string(str, sizeof(str));
1980 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
1981 NULL, SWALLOW_Type_INVALID, NULL,
1982 NULL, 0, "IDS_ST_BUTTON_BATTERY_POWER_ABB", str, NULL);
1984 elm_object_item_disabled_set(item_data->item, EINA_TRUE);
1985 elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1986 ad->item_data_battery = item_data;
1987 __BACK_POINTER_SET(ad->item_data_battery);
1989 SETTING_TRACE_ERROR("item_data is NULL");
1992 /* 10. [UI] CPU usage */
1993 memset(str, 0x00, sizeof(str));
1995 int ret = setting_about_main_stat_get_cpuinfo(&usr, &sys);
1996 if (ret == -ENOENT) {
1997 SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
1998 snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
2000 snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
2002 ad->item_data_cpu = item_data =
2003 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2004 NULL, SWALLOW_Type_INVALID, NULL,
2005 NULL, 0, SETTING_ABOUT_CPU_USAGE_STR, str, NULL);
2006 if (ad->item_data_cpu) {
2007 elm_object_item_disabled_set(ad->item_data_cpu->item, EINA_TRUE);
2008 elm_genlist_item_select_mode_set(ad->item_data_cpu->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
2009 __BACK_POINTER_SET(ad->item_data_cpu);
2011 SETTING_TRACE_ERROR("item_data is NULL");
2015 /* 12. Security status */
2017 app_info_h app_info2 = NULL;
2018 ret_get_app_info = app_info_create("org.tizen.smack-update-service", &app_info2);
2019 if (ret_get_app_info == APP_MANAGER_ERROR_NONE) {
2020 char *security_status = NULL;
2021 security_status = vconf_get_str(VCONFKEY_SECURITY_SPD_INSTALLED_POLICY_VERSION);
2022 if (!security_status) {
2023 SETTING_TRACE_ERROR("Failed to register into SPD server");
2024 security_status = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
2028 char *security_status = (char *)g_strdup("IDS_ST_HEADER_UNAVAILABLE");
2031 setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
2032 NULL, SWALLOW_Type_INVALID, NULL,
2033 NULL, 0, "IDS_ST_TMBODY_SECURITY_STATUS", security_status, NULL);
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);
2038 SETTING_TRACE_ERROR("item_data is NULL");
2040 G_FREE(security_status);
2043 app_info_destroy(app_info);
2047 ecore_timer_add(1, (Ecore_Task_Cb) setting_about_main_timer_update_cb, ad);
2049 return SETTING_RETURN_SUCCESS;
2054 * @brief TAPI response callback,get the SIM LOCK data
2056 * @param handle the changed vconf key node.
2057 * @param result application data
2058 * @param data it is struct TelSimLockInfo_t,store SIM lock info
2059 * @param user_data application data
2061 * @see tel_get_sim_lock_info
2063 static void __on_pin_getlock_info(TapiHandle *handle, int result, void *data, void *user_data)
2065 SETTING_TRACE_BEGIN;
2066 ret_if(data == NULL || user_data == NULL);
2067 TelSimPinOperationResult_t sec_rt = result;
2068 TelSimLockInfo_t *lock = data;
2069 SettingAboutUG *ad = (SettingAboutUG *)user_data;
2071 /*lock->lock_status = TAPI_SIM_LOCK_PERM_BLOCKED; //for UT */
2072 SETTING_TRACE_DEBUG("sec_ret[%d]", sec_rt);
2073 SETTING_TRACE_DEBUG("lock_status:%d", lock->lock_status);
2074 if (TAPI_SIM_LOCK_PERM_BLOCKED == lock->lock_status) {
2075 /*update sub description with "PUK is locked" */
2076 if (ad->item_data_my_phone_number) {
2077 G_FREE(ad->item_data_my_phone_number->sub_desc);
2078 ad->item_data_my_phone_number->sub_desc = (char *)g_strdup(SETTING_ABOUT_PUK_LOCKED);
2079 elm_object_item_data_set(ad->item_data_my_phone_number->item, ad->item_data_my_phone_number);
2080 elm_genlist_item_update(ad->item_data_my_phone_number->item);
2082 ad->need_update = TRUE;
2088 * @brief create aboutUG main view layout
2090 * @param cb aboutUG data
2091 * @return 1 for success
2093 static int setting_about_main_create(void *cb)
2095 SETTING_TRACE_BEGIN;
2097 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2099 SettingAboutUG *ad = (SettingAboutUG *) cb;
2101 Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
2102 retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
2103 "Cannot set scroller object as contento of layout");
2104 elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
2105 elm_genlist_realization_mode_set(scroller, EINA_TRUE);
2106 elm_genlist_clear(scroller); /* first to clear list */
2107 ad->genlsit = scroller;
2108 evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
2109 evas_object_smart_callback_add(scroller, "realized", __setting_about_gl_realized_cb, NULL);
2112 setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
2115 (setting_call_back_func)setting_about_main_click_softkey_back_cb,
2117 &ad->navi_bar, NULL);
2119 ad->btn_done = setting_about_naviframe_btn_create(ad->navi_bar, _("IDS_SA_BUTTON_DONE_ABB"), setting_about_naviframe_btn_done_cb, ad);
2120 /*Title Text Right Button */
2121 ad->btn_cancel = setting_about_naviframe_btn_create(ad->navi_bar, _("IDS_ST_BUTTON_CANCEL_ABB"), setting_about_naviframe_btn_cancel_cb, ad);
2122 ad->genlsit = scroller;
2124 evas_object_smart_callback_add(scroller, "drag", setting_about_main_gl_drag, ad);
2126 evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, setting_about_main_gl_mouse_up, ad);
2128 ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
2130 setting_about_main_generate_genlist((void *)ad);
2132 int ret = vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
2133 __setting_about_main_vconf_change_cb, ad);
2135 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2137 ret = vconf_notify_key_changed(VCONFKEY_BT_STATUS,
2138 __setting_about_main_vconf_change_cb, ad);
2140 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2142 ret = vconf_notify_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
2143 __setting_about_main_vconf_change_cb, ad);
2145 SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
2148 setting_view_about_main.is_create = 1;
2150 return SETTING_RETURN_SUCCESS;
2154 * @brief destroy aboutUG main view layout
2156 * @param cb aboutUG data
2157 * @return 1 for success
2159 static int setting_about_main_destroy(void *cb)
2161 SETTING_TRACE_BEGIN;
2163 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2165 SettingAboutUG *ad = (SettingAboutUG *) cb;
2167 evas_object_smart_callback_del(ad->genlsit, "realized", __gl_realized_cb);
2169 int ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
2170 __setting_about_main_vconf_change_cb);
2172 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
2174 ret = vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
2175 __setting_about_main_vconf_change_cb);
2177 SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
2180 /*__setting_about_main_remove_noti(ad);*/
2183 if (ad->update_timer) {
2184 ecore_timer_del(ad->update_timer);
2185 ad->update_timer = NULL;
2187 if (ad->update_idler) {
2188 ecore_idler_del(ad->update_idler);
2189 ad->update_idler = NULL;
2191 if (ad->idler_add_popup) {
2192 ecore_idler_del(ad->idler_add_popup);
2193 ad->idler_add_popup = NULL;
2195 if (ad->idler_remove_popup) {
2196 ecore_idler_del(ad->idler_remove_popup);
2197 ad->idler_remove_popup = NULL;
2199 if (ad->idler_remove_space_popup) {
2200 ecore_idler_del(ad->idler_remove_space_popup);
2201 ad->idler_remove_space_popup = NULL;
2204 evas_object_del(ad->popup);
2207 if (ad->popup_space) {
2208 evas_object_del(ad->popup_space);
2209 ad->popup_space = NULL;
2212 if (ad->ly_main != NULL) {
2213 evas_object_del(ad->ly_main);
2217 if (ad->event_handler) {
2218 ecore_event_handler_del(ad->event_handler);
2219 ad->event_handler = NULL;
2221 if (ad->name_update_idler) {
2222 ecore_idler_del(ad->name_update_idler);
2223 ad->name_update_idler = NULL;
2225 setting_view_about_main.is_create = 0;
2226 return SETTING_RETURN_SUCCESS;
2230 * @brief update aboutUG main view
2232 * @param cb aboutUG data
2233 * @return 1 for success
2235 static int setting_about_main_update(void *cb)
2237 SETTING_TRACE_BEGIN;
2239 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2241 SettingAboutUG *ad = (SettingAboutUG *) cb;
2243 if (ad->item_dev_name) {
2244 ad->is_dev_name_focus = elm_object_focus_get(ad->item_dev_name->eo_check);
2245 ad->cursor_pos = elm_entry_cursor_pos_get(ad->item_dev_name->eo_check);
2247 SETTING_TRACE("elm_object_focus_get(ad->item_dev_name->eo_check):%d", elm_object_focus_get(ad->item_dev_name->eo_check));
2249 SETTING_TRACE("ad->is_dev_name_focus:%d", ad->is_dev_name_focus);
2250 /*elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
2251 Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
2253 ecore_imf_context_input_panel_show(imf_context);
2257 if (ad->ly_main != NULL) {
2258 evas_object_show(ad->ly_main);
2261 return SETTING_RETURN_SUCCESS;
2265 * @brief hide aboutUG main view
2267 * @param cb aboutUG data
2268 * @return 1 for success
2270 static int setting_about_main_cleanup(void *cb)
2272 SETTING_TRACE_BEGIN;
2274 retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
2276 SettingAboutUG *ad = (SettingAboutUG *) cb;
2278 if (ad->ly_main != NULL) {
2279 /* evas_object_hide(ad->ly_main); */
2282 return SETTING_RETURN_SUCCESS;