Add support for PR3 battery device name
[apps/core/preloaded/settings.git] / setting-about / src / setting-about-main.c
index fcfeb29..01a17b1 100755 (executable)
@@ -1,22 +1,18 @@
 /*
  * setting
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
- *
- * Contact: MyoungJune Park <mj2004.park@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
+ * Licensed under the Flora License, Version 1.0 (the License);
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- * http://www.apache.org/licenses/LICENSE-2.0
+ *     http://floralicense.org/license/
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
+ * distributed under the License is distributed on an AS IS BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- *
  */
 #include <setting-cfg.h>
 #include <setting-about-main.h>
 
 #include <bluetooth.h>
 
-
 #include <app_manager.h>
 #include <system_info.h>
 
 #define DEVNAME_BLOCK_SPACE    0
-// #define SUPPORT_DIAG_USAGE
 
 /** @todo : need to handle unicode encoded input characters */
 
 #define MAX_DEVICE_NAME_LEN                    24
 #define EMPTY_LIMITATION_STR           "The Name cannot be empty or composited by spaces"//"IDS_ST_BODY_THE_NAME_FIELD_CANNOT_BE_EMPTY"
-#define DIAGNOSTICS_USAGE_STR      "Diagnostics and Usage"
-#define SOFTWARE_UPDATE_STR                    "IDS_ST_MBODY_SOFTWARE_UPDATE"
-
 
 static int setting_about_main_create(void *cb);
 static int setting_about_main_destroy(void *cb);
@@ -76,14 +67,15 @@ static void setting_about_main_mouse_up_Gendial_list_cb(void *data,
                                                        Evas_Object *obj,
                                                        void *event_info);
 
+static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value);
 static void __setting_about_main_certificates_clicked(void *data);
 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj);
-static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj);
 /* ***************************************************
  *
  *basic func
  *
  ***************************************************/
+
 static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
 {
        SettingAboutUG *ad = data;
@@ -93,11 +85,24 @@ static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
        }
        ad->popup = NULL;
 }
+
+static void __error_popup_response_cb(void *data, Evas_Object *obj,
+                                    void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+       Setting_GenGroupItem_Data *list_item = data;
+       if (list_item->notify) {
+               evas_object_del(list_item->notify);
+               list_item->notify = NULL;
+       }
+}
+
 static void __device_name_changed_cb(void *data, Evas_Object *obj)
 {
        retm_if(!data || !obj, "Data parameter is NULL");
        //return if entry is not focused too
-
+       SETTING_TRACE_BEGIN;
        Setting_GenGroupItem_Data *list_item =
            (Setting_GenGroupItem_Data *) data;
        SettingAboutUG *ad = list_item->userdata;
@@ -107,6 +112,23 @@ static void __device_name_changed_cb(void *data, Evas_Object *obj)
        int entry_len = safeStrLen(entry_str);
        SETTING_TRACE("entry_str:[%s], lenght:%d", entry_str, entry_len);
 
+       SETTING_TRACE("maxLengthReachFlag:[%d], enterKeyPressFlag:%d", list_item->maxLengthReachFlag, list_item->enterKeyPressFlag);
+       /* show the popup if the text already reaches max length and the input character is not the enter key */
+       if (list_item->maxLengthReachFlag && list_item->enterKeyPressFlag == FALSE) {
+               if (!list_item->notify) {
+                       list_item->notify = setting_create_popup_without_btn(list_item, list_item->win_main,
+                                                                NULL, _(EXCEED_LIMITATION_STR),
+                                                                __error_popup_response_cb,
+                                                                POPUP_INTERVAL, FALSE, FALSE);
+                       elm_object_focus_set(list_item->eo_check, EINA_FALSE);
+               } else {
+                       //postpone 2 seconds again
+                       elm_popup_timeout_set(list_item->notify, POPUP_INTERVAL);
+               }
+       }
+       list_item->maxLengthReachFlag = false;
+       list_item->enterKeyPressFlag = false;
+
 #if DEVNAME_BLOCK_SPACE
        //block 'Space' key
        if (entry_len > 0 && NULL != strstr(entry_str, " ")) {//cancel the effect of input 'space character'
@@ -137,18 +159,22 @@ static void __device_name_changed_cb(void *data, Evas_Object *obj)
        G_FREE(list_item->sub_desc);//release first
        list_item->sub_desc = (char *)g_strdup(entry_str);
 
-       if (NULL == entry_str || 0 == entry_len) {
+       if (isSpaceStr(entry_str)) {
                if (!ad->empty_flag)
                {
                        ad->empty_flag = TRUE;
                        //elm_entry_context_menu_disabled_set(obj, TRUE); //disable the copy&paste&search popup
                        //elm_entry_magnifier_disabled_set(obj, TRUE);
+/*
                        Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
                        if (navi_it)
                        {
                                Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
-                               setting_disable_evas_object(back_btn);
-                               setting_dim_evas_object(back_btn, TRUE);
+                               if(back_btn)
+                               {
+                                       setting_disable_evas_object(back_btn);
+                                       setting_dim_evas_object(back_btn, TRUE);
+                               }
 
                                Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
                                if(top_r_btn)
@@ -157,6 +183,7 @@ static void __device_name_changed_cb(void *data, Evas_Object *obj)
                                        setting_dim_evas_object(top_r_btn, TRUE);
                                }
                        }
+*/
                }
        } else {
                if (ad->empty_flag)
@@ -164,12 +191,16 @@ static void __device_name_changed_cb(void *data, Evas_Object *obj)
                        ad->empty_flag = FALSE;
                        //elm_entry_context_menu_disabled_set(obj, FALSE); //enable the copy&paste&search popup
                        //elm_entry_magnifier_disabled_set(obj, FALSE);
+/*
                        Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
                        if (navi_it)
                        {
                                Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
-                               setting_enable_evas_object(back_btn);
-                               setting_undo_dim_evas_object(back_btn, TRUE);
+                               if(back_btn)
+                               {
+                                       setting_enable_evas_object(back_btn);
+                                       setting_undo_dim_evas_object(back_btn, TRUE);
+                               }
 
                                Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
                                if(top_r_btn)
@@ -178,6 +209,7 @@ static void __device_name_changed_cb(void *data, Evas_Object *obj)
                                        setting_undo_dim_evas_object(top_r_btn, TRUE);
                                }
                        }
+*/
                }
        }
 
@@ -226,32 +258,29 @@ void setting_about_main_get_sw_version(char* szStr, int nSize)
 {
        retm_if(szStr == NULL, "szStr parameter is NULL");
 
-       // ex) TIZEN
-       char *platform = NULL;
-       int ret = system_info_get_value_string(SYSTEM_INFO_KEY_PLATFORM_NAME, &platform);
+       char *version = NULL;
+       int ret = system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &version);
        if (ret != SYSTEM_INFO_ERROR_NONE) {
                SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
-               FREE(platform);
+               FREE(version);
                snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
                return;
        }
 
-       // ex) 2.0.0b
-       char *version = NULL;
-       ret = system_info_get_value_string(SYSTEM_INFO_KEY_TIZEN_VERSION, &version);
+       char *build_info = NULL;
+       ret = system_info_get_value_string(SYSTEM_INFO_KEY_BUILD_STRING, &build_info);
        if (ret != SYSTEM_INFO_ERROR_NONE) {
                SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
-
-               FREE(platform);
                FREE(version);
-
+               FREE(build_info);
                snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
                return;
        }
-       snprintf(szStr, nSize, "%s %s", platform, version);
 
-       FREE(platform);
+       snprintf(szStr, nSize, "TIZEN %s (%s)", version, build_info);
+
        FREE(version);
+       FREE(build_info);
 }
 
 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
@@ -284,17 +313,37 @@ void setting_about_main_get_wifi_mac_address_string(char *str, int size)
 void setting_about_main_get_battery_string(char *str, int size)
 {
        setting_retm_if(str == NULL, "str parameter is NULL");
+       struct stat fileAttrs;
+
+       int val = -1;
+       char file[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
+       snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
+                "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "battery", "capacity");
+
+       /* If Samsung battery not found, check if this is PR3 */
+       if (stat(file, &fileAttrs) < 0)
+               snprintf(file, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO,
+                  "%s/%s/%s", SETTING_ABOUT_POWER_SUPPLY_PATH, "max170xx_battery", "capacity");
+
+       char buf[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
+       int fd = 0;
+       int r = 0;
+
+       fd = open(file, O_RDONLY);
+       if (fd != -1) {
+               r = read(fd, buf, MAX_DISPLAY_STR_LEN_ON_PHONE_INFO);
+               if ((r >= 0) && (r < MAX_DISPLAY_STR_LEN_ON_PHONE_INFO)) {
+                       buf[r] = '\0';
+                       val = atoi(buf);
+                       snprintf(str, size, "%d%s", val, "\%");
+               } else {
+                       SETTING_TRACE_ERROR("read file fail");
+                       snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+               }
 
-       int bat_level = -1;
-
-       /* Read battery level from vconf, as system-server sets that key using a 
-         device-specific plugin. Reading directly from /sys fails on different
-         devices */
-       if (vconf_get_int(VCONFKEY_SYSMAN_BATTERY_CAPACITY, &bat_level) == 0) {
-               snprintf(str, size, "%d%s", bat_level, "\%");
-       }
-       else {
-               SETTING_TRACE_ERROR("Reading VCONFKEY_SYSMAN_BATTERY_CAPACITY failed.");
+               close(fd);
+       } else {
+               SETTING_TRACE_ERROR("open file fail");
                snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
        }
 }
@@ -462,6 +511,7 @@ static Eina_Bool __timer_update_cb(const void *data)
 static void
 __about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
 {
+       SETTING_TRACE_BEGIN;
        ret_if(!data);
        SettingAboutUG *ad = (SettingAboutUG *) data;
        retm_if(event == NULL, "Invalid argument: event info is NULL");
@@ -469,8 +519,15 @@ __about_main_gl_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event)
 
        if (ad->item_dev_name) {
                Elm_Object_Item *selected_item = elm_genlist_at_xy_item_get(ad->genlsit, ev->output.x, ev->output.y, NULL);
-               if (ad->item_dev_name->item == selected_item)//do nothing..
-                       return;
+               if (ad->item_dev_name->item == selected_item) {
+                       if (elm_object_focus_get(ad->item_dev_name->eo_check)) {
+                               Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(ad->item_dev_name->eo_check);
+                               if (imf_context) {
+                                       ecore_imf_context_input_panel_show(imf_context);
+                               }
+                               return;
+                       }
+               }
 
                elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);//to make inputing words input
        }
@@ -494,7 +551,6 @@ static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
        const char *entry_str = elm_entry_entry_get(obj);
        char *entry_str_utf8 = NULL;
        entry_str_utf8 = elm_entry_markup_to_utf8(entry_str);
-       //int len = safeStrLen(entry_str_utf8);
        SETTING_TRACE("To store \"%s\" into vconf[%s]", entry_str_utf8, VCONFKEY_SETAPPL_DEVICE_NAME_STR);
 
        //ecore_idler_add(__check_on_idler, ad);
@@ -515,12 +571,7 @@ static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
        setting_hide_input_pannel_cb(item_dev_name->eo_check);
        if (item_dev_name) {
                if (ad->empty_flag) {
-                       if (ad->popup) {
-                               evas_object_del(ad->popup);
-                               ad->popup = NULL;
-                       }
-                       ad->popup = setting_create_popup_without_btn(ad, ad->win_get, NULL, _(EMPTY_LIMITATION_STR),
-                                            __about_popup_rsp_cb, POPUP_INTERVAL, FALSE, FALSE);
+                       FREE(entry_str_utf8);
                        return;
                } else {
                }
@@ -546,7 +597,7 @@ static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *eve
           || safeStrCmp(ev->key, "Return") == 0)
        {
                // if entry has 1 char at list, hide ime.
-               if(safeStrLen(elm_entry_entry_get(obj)) == 0)
+               if(isSpaceStr(elm_entry_entry_get(obj)))
                {
                        if (ad->popup) {
                                evas_object_del(ad->popup);
@@ -558,6 +609,41 @@ static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *eve
        }
 }
 
+static void __max_len_reached(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       retm_if(data == NULL, "Data parameter is NULL");
+       retm_if(!elm_object_focus_get(obj), "Entry is not focused");//notify only when entry is being focused on.
+
+       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
+       list_item->maxLengthReachFlag = true;
+}
+
+static void __setting_about_main_vconf_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == key, "key is NULL");
+       setting_retm_if(NULL == data, "data is NULL");
+       SettingAboutUG *ad = (SettingAboutUG *)data;
+
+       int status = vconf_keynode_get_int(key);
+       char *vconf_name = vconf_keynode_get_name(key);
+
+       if (!safeStrCmp(vconf_name, VCONFKEY_WIFI_STATE)) {
+               SETTING_TRACE("status:%d", status);
+               char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = {0,};
+               setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
+               if (ad->item_data_wifi) {
+                       G_FREE(ad->item_data_wifi->sub_desc);
+                       ad->item_data_wifi->sub_desc = (char *)g_strdup(str);
+                       elm_object_item_data_set(ad->item_data_wifi->item, ad->item_data_wifi);
+                       elm_genlist_item_update(ad->item_data_wifi->item);
+               }
+       } else {
+               SETTING_TRACE_ERROR("vconf_name is error");
+       }
+}
+
 int setting_about_generate_genlist(void *data)
 {
        SETTING_TRACE_BEGIN;
@@ -583,57 +669,71 @@ int setting_about_generate_genlist(void *data)
        if (NULL == pa_sub_desc || '\0' == pa_sub_desc[0])
        {
                ad->empty_flag = TRUE;
-               Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
+/*             Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
                if (navi_it)
                {
                        Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
                        setting_disable_evas_object(back_btn);
                        setting_dim_evas_object(back_btn, TRUE);
                }
+*/
        }
 
 
        // [UI] Device name
        char *app_name = NULL;
-       int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm-ui", &app_name);
+       int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm", &app_name);
        if (ret_get_app_name == APP_MANAGER_ERROR_INVALID_PACKAGE )
        {
                SETTING_TRACE(">>>>>>>>>>>>>>>>>> UNINSTALLED PACKAGE");
                ad->item_dev_name = NULL;
        } else {
+               Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *)calloc(1, sizeof(Setting_GenGroupItem_Data));
+               if (!item_data)
+                       FREE(pa_sub_desc);
+
+               setting_retvm_if(!item_data, NULL, "calloc failed");
+
+               item_data->keyStr = (char *)g_strdup(SETTING_ABOUT_DEVICE_NAME_STR);
+               item_data->sub_desc = (char *)g_strdup(pa_sub_desc);
+               item_data->swallow_type = SWALLOW_Type_LAYOUT_ENTRY;
+               item_data->chk_status = 0;
+               item_data->chk_change_cb = __setting_about_device_name_changed_cb;
+               item_data->userdata = ad;
+               item_data->isSinglelineFlag = TRUE;
+               item_data->maxlength_reached_cb = __max_len_reached;
+               item_data->start_change_cb = (setting_call_back_func)__entry_key_down_cb;
+               item_data->stop_change_cb = __entry_unfocus_cb;
+               item_data->x_callback_cb = _input_panel_event_cb;
+
+               item_data->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Limit_Size));
+               if (item_data->limit_filter_data) {
+                       //max byte len is 31 not 31+1
+                       //ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN + OFFESET_ENTRY_FILTER;
+                       item_data->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
+                       item_data->win_main = ad->win_get;
+               }
 
-               ad->item_dev_name =
-                       setting_create_Gendial_field_def(scroller, &(ad->itc_1icon),
-                                                                setting_about_main_mouse_up_Gendial_list_cb,
-                                                        ad, SWALLOW_Type_LAYOUT_ENTRY,
-                                                        NULL, NULL, 0, SETTING_ABOUT_DEVICE_NAME_STR, pa_sub_desc,
-                                                        __setting_about_device_name_changed_cb);
+               item_data->input_panel_disable_flag = EINA_TRUE;
+
+               item_data->item = elm_genlist_item_append(scroller, &(itc_1icon), item_data, NULL, ELM_GENLIST_ITEM_NONE,
+                                               setting_about_main_mouse_up_Gendial_list_cb, ad);
+
+               ad->item_dev_name = item_data;
                if (ad->item_dev_name) {
-                       ad->item_dev_name->userdata = ad;
-                       ad->item_dev_name->isSinglelineFlag = 0;
-                       ad->item_dev_name->start_change_cb = (setting_call_back_func)__entry_key_down_cb;
-                       ad->item_dev_name->stop_change_cb = __entry_unfocus_cb;
-                       ad->item_dev_name->limit_filter_data = calloc(1, sizeof(Elm_Entry_Filter_Accept_Set));
-
-                       if (ad->item_dev_name->limit_filter_data) {
-                               //max byte len is 31 not 31+1
-                               //ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN + OFFESET_ENTRY_FILTER;
-                               ad->item_dev_name->limit_filter_data->max_byte_count = MAX_DEVICE_NAME_LEN;
-                               ad->item_dev_name->win_main = ad->win_get;
-                       }
-                       //ad->item_dev_name->input_type = ELM_INPUT_PANEL_LAYOUT_NUMBER;
-                       ad->item_dev_name->input_panel_disable_flag = EINA_TRUE;
+                       elm_genlist_item_select_mode_set(ad->item_dev_name->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
                } else {
-                               SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
+                       SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
                }
-               FREE(pa_sub_desc);
        }
+       FREE(pa_sub_desc);
 
        // [UI] My number
        int err;
        char sel_num[TAPI_SIM_XDN_DIALING_NUMBER_LEN + 1] = { 0, };
        setting_get_string_slp_key(STR_SLP_SETTING_SELECT_NUM, sel_num, &err);
 
+       SETTING_TRACE("ad->my_numbers.count[%d]", ad->my_numbers.count);
        if (ad->my_numbers.count == 1) {
                item_data =
                        setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
@@ -660,8 +760,7 @@ int setting_about_generate_genlist(void *data)
                } else {
                        SETTING_TRACE_ERROR("ad->data_wap is NULL");
                }
-
-       } else if (ad->my_numbers.count == 0) {
+       } else if (ad->my_numbers.count == 0 ){
                // _("IDS_ST_HEADER_UNAVAILABLE")
                SETTING_TRACE_ERROR("don't have my number");
                item_data =
@@ -775,31 +874,16 @@ int setting_about_generate_genlist(void *data)
                                    ELM_GENLIST_ITEM_NONE, NULL, NULL);
        elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
-#ifdef SUPPORT_DIAG_USAGE
-       // [UI] Diagnostics and Usage
-       if (!is_emul_bin) {
-               setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
-                                        setting_about_main_mouse_up_Gendial_list_cb,
-                                        ad, SWALLOW_Type_INVALID, NULL, NULL,
-                                        0, DIAGNOSTICS_USAGE_STR,
-                                        NULL, NULL);
-       }
-#endif
-
        // [UI] Certificates
        // implementation is in progress.
-       if (is_ug_installed_by_ug_args("setting-manage-applications-efl"))
-       {
-               setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
-                                                setting_about_main_mouse_up_Gendial_list_cb,
-                                                ad, SWALLOW_Type_INVALID, NULL, NULL,
-                                                0, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
-
-               item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
-                                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
-               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-       }
+       setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
+                                        setting_about_main_mouse_up_Gendial_list_cb,
+                                        ad, SWALLOW_Type_INVALID, NULL, NULL,
+                                        0, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
 
+       item = elm_genlist_item_append(scroller, &itc_bottom_seperator, NULL, NULL,
+                                   ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
 
        ad->update_timer =
            ecore_timer_add(2, (Ecore_Task_Cb) __timer_update_cb, ad);
@@ -821,12 +905,6 @@ static int setting_about_main_create(void *cb)
        elm_object_style_set(scroller, "dialogue");
        elm_genlist_clear(scroller);    /* first to clear list */
 
-       /*  Enabling illume notification property for window */
-       elm_win_conformant_set(ad->win_main_layout, 1);
-       Evas_Object *conformant = elm_conformant_add(ad->win_main_layout);
-       elm_object_style_set(conformant, "internal_layout");    /*  By Kollus. 2011-01-04 */
-       evas_object_show(conformant);
-       elm_object_content_set(conformant, scroller);
        ad->genlsit = scroller;
 
        ad->ly_main =
@@ -834,7 +912,7 @@ static int setting_about_main_create(void *cb)
                                           _(KeyStr_AboutPhone),
                                           _("IDS_COM_BODY_BACK"), NULL, NULL,
                                           setting_about_main_click_softkey_back_cb,
-                                          NULL, NULL, ad, conformant,
+                                          NULL, NULL, ad, scroller,
                                           &ad->navi_bar, NULL);
 
        evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
@@ -842,7 +920,17 @@ static int setting_about_main_create(void *cb)
 
        ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
 
-       setting_about_generate_genlist((void *)ad);
+       int value, err;
+       setting_get_int_slp_key(INT_SLP_SETTING_SIM_SLOT, &value, &err);
+       if (VCONFKEY_TELEPHONY_SIM_INSERTED != value) {
+               setting_about_generate_genlist((void *)ad);
+       }
+
+       int ret = vconf_notify_key_changed(VCONFKEY_WIFI_STATE,
+                       __setting_about_main_vconf_change_cb, ad);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_notify_key_changed failed");
+       }
 
        setting_view_about_main.is_create = 1;
        SETTING_TRACE_END;
@@ -857,6 +945,13 @@ static int setting_about_main_destroy(void *cb)
 
        SettingAboutUG *ad = (SettingAboutUG *) cb;
 
+       int ret = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE,
+                       __setting_about_main_vconf_change_cb);
+       if (ret != 0) {
+               SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
+       }
+
+
        if (ad->update_timer) {
                ecore_timer_del(ad->update_timer);
                ad->update_timer = NULL;
@@ -939,8 +1034,6 @@ setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
                return;
        }
 
-       /* Send destroy request */
-       ug_destroy_me(ad->ug);
        //imf must be hided before view is destroyed.
        //Following code is just to improve the hiding speed. If not add these code,
        //the input pannel will also be hided with the view destroyed,but it works too slow.
@@ -949,6 +1042,9 @@ setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
                setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
        }
 
+       /* Send destroy request */
+       ug_destroy_me(ad->ug);
+
        SETTING_TRACE_END;
 }
 
@@ -972,7 +1068,7 @@ setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
        elm_genlist_item_selected_set(item, 0);
        Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) elm_object_item_data_get(item);
 
-       /* SettingAboutUG *ad = (SettingAboutUG *) data; */
+       SettingAboutUG *ad = (SettingAboutUG *) data;
 
        SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
        if (!safeStrCmp("IDS_ST_BODY_OPEN_SOURCE_LICENCES", list_item->keyStr)) {
@@ -980,11 +1076,14 @@ setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
                //setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
 
        } else if (!safeStrCmp("IDS_COM_BODY_CERTIFICATES", list_item->keyStr)) {
+               Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
+               if (navi_it) {
+                       Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
+                       elm_object_focus_set(back_btn, TRUE);
+               }
                __setting_about_main_certificates_clicked(data);
        } else if (!safeStrCmp(SETTING_ABOUT_DEVICE_NAME_STR, list_item->keyStr)) {
                __setting_about_main_device_name_clicked(data, list_item->eo_check);
-       } else if (!safeStrCmp(DIAGNOSTICS_USAGE_STR, list_item->keyStr)) {
-               __setting_about_main_diagnostics_usage_clicked(data, list_item->eo_check);
        }
 }
 
@@ -1059,7 +1158,6 @@ static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
        SETTING_TRACE_BEGIN;
        retm_if(data == NULL, "Data parameter is NULL");
        retm_if(ctx == NULL, "obj parameter is NULL");
-
        SettingAboutUG *ad = (SettingAboutUG *)data;
 
        if(value == ECORE_IMF_INPUT_PANEL_STATE_SHOW)
@@ -1072,25 +1170,30 @@ static void _input_panel_event_cb(void *data, Ecore_IMF_Context *ctx, int value)
                                                                        NAVI_BACK_BUTTON_STYLE,
                                                                        __top_back_cb,
                                                                        ad);
+
                        elm_object_item_part_content_set(ad->navi_item, "title_right_btn", r_button);
+/*
                        if (ad->empty_flag)
                        {
                                setting_disable_evas_object(r_button);
                                setting_dim_evas_object(r_button, TRUE);
                        }
+*/
                }
        }
        else if(value == ECORE_IMF_INPUT_PANEL_STATE_HIDE)
        {
                SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_HIDE");
                if(ad->navi_item && elm_object_item_part_content_get(ad->navi_item, "title_right_btn")) {
+
                        Evas_Object *btn = elm_object_item_part_content_unset(ad->navi_item, "title_right_btn");
                        evas_object_del(btn);
                }
 
                if (ad->item_dev_name) {
                        elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
-               }//if Setting is overlapped by other app,the entry will lost its focus,
+               }
+               //if Setting is overlapped by other app,the entry will lost its focus,
                //the input pannel will be hided and any popup should be removed to fix blinking issue.
                if (ad->pause_flag)
                        ecore_idler_add(__delay_remove, ad);
@@ -1107,62 +1210,7 @@ static void __setting_about_main_device_name_clicked(void *data, Evas_Object *ob
        if (!elm_object_focus_get(obj)) {
                elm_object_focus_set(obj, EINA_TRUE);
        }
-
-       Ecore_IMF_Context *imf_context = (Ecore_IMF_Context *)elm_entry_imf_context_get(obj);
-       setting_retm_if(imf_context == NULL, "imf_context is NULL");
-       ecore_imf_context_input_panel_event_callback_add(imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_cb, ad);
-       ecore_imf_context_input_panel_show(imf_context);
-}
-
-
-static void __destroy_diagnostics_usage_ug_cb(ui_gadget_h ug, void *priv)
-{
-       SETTING_TRACE_BEGIN;
-
-       /* restore the '<-' button on the navigate bar */
-       ret_if(!priv);
-       SettingAboutUG *ad = (SettingAboutUG *) priv;   /* ad is point to priv */
-
-       if (ug) {
-               ug_destroy(ug);
-               ad->ug_loading = NULL;
-       }
-
-       Elm_Object_Item *navi_it = elm_naviframe_top_item_get(ad->navi_bar);
-       ret_if(!navi_it);
-       Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
-
-       if (back_btn != NULL) {
-               elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
-       }
 }
 
-static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj)
-{
-       SETTING_TRACE_BEGIN;
-       retm_if(data == NULL, "Data parameter is NULL");
-       SettingAboutUG *ad = (SettingAboutUG *)data;
 
-       // create UG
-       if (!ad)
-               return;         /*  do nothing if ad is NULL */
 
-       struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
-       if (!cbs) {
-               return;
-       }
-
-       cbs->layout_cb = setting_about_layout_ug_cb;
-       cbs->result_cb = NULL;
-       cbs->destroy_cb = __destroy_diagnostics_usage_ug_cb;
-       cbs->priv = (void *)ad;
-
-       ad->ug_loading =
-           ug_create(ad->ug, "setting-crash-efl", UG_MODE_FULLVIEW, NULL, cbs);
-
-       if (NULL == ad->ug_loading) {   /* error handling */
-               SETTING_TRACE_ERROR("NULL == ad->ug_loading");
-               setting_create_simple_popup(ad, ad->win_get, NULL, _(UNSUPPORTED_FUNCTION));
-       }
-       FREE(cbs);
-}