[Feature] use system-info api to get build info .
[apps/core/preloaded/settings.git] / setting-about / src / setting-about-main.c
index 61bf262..7181576 100755 (executable)
@@ -1,29 +1,44 @@
 /*
-  * Copyright 2012  Samsung Electronics Co., Ltd
-  *
-  * 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.tizenopensource.org/license
-  *
-  * Unless required by applicable law or agreed to in writing, software
-  * 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.
-  */
-
+ * setting
+ *
+ * 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");
+ * 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
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * 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 <aul.h>
-#include <iniparser.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <bluetooth-api.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           "Name cannot be empty!"
+#define EMPTY_LIMITATION_STR           "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);
@@ -37,6 +52,27 @@ setting_view setting_view_about_main = {
        .update = setting_about_main_update,
        .cleanup = setting_about_main_cleanup,
 };
+/**
+* Do process when clicking '<-' button
+*
+* @param data
+* @param obj
+* @param event_info
+*/
+static void setting_about_main_click_softkey_back_cb(void *data,
+                                                    Evas_Object *obj,
+                                                    void *event_info);
+
+/**
+* Do process when clicking on some genlist item
+*
+* @param data
+* @param obj
+* @param event_info
+*/
+static void setting_about_main_mouse_up_Gendial_list_cb(void *data,
+                                                       Evas_Object *obj,
+                                                       void *event_info);
 
 static void __setting_about_main_mobile_ap_turn_off_ask_resp_cb(void *data,
                                                    Evas_Object *obj,
@@ -44,21 +80,25 @@ static void __setting_about_main_mobile_ap_turn_off_ask_resp_cb(void *data,
 
 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_exp_cb(void *data, Evas_Object *obj, void *event_info);
-static void __setting_about_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info);
+static void __setting_about_main_diagnostics_usage_clicked(void *data, Evas_Object *obj);
 /* ***************************************************
  *
  *basic func
  *
  ***************************************************/
-
-static void
-__setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
-                                      void *event_info)
+static void __about_popup_rsp_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SettingAboutUG *ad = data;
+       if (obj) {
+               evas_object_del(obj);
+               obj = NULL;
+       }
+       ad->popup = 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
-       retm_if(!elm_object_focus_get(obj), "Entry is not focused");
 
        Setting_GenGroupItem_Data *list_item =
            (Setting_GenGroupItem_Data *) data;
@@ -69,6 +109,32 @@ __setting_about_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);
 
+#if DEVNAME_BLOCK_SPACE
+       //block 'Space' key
+       if (entry_len > 0 && NULL != strstr(entry_str, " ")) {//cancel the effect of input 'space character'
+               SETTING_TRACE("Cannot input the 'space' key or 'enter' key");
+
+               int i = 0;
+               int j = 0;
+               char *tmp = (char *)g_strdup(entry_str);
+               for (; tmp[i];) {
+                       if (tmp[i] == ' ') {
+                               for (j = i; tmp[j]; j++) {
+                                       tmp[j] = tmp[j + 1];
+                               }
+                       } else {
+                               i++;
+                       }
+               }
+               G_FREE(list_item->sub_desc);
+               list_item->sub_desc = (char *)g_strdup(tmp);
+               G_FREE(tmp);
+               SETTING_TRACE("sub_desc:[%s]", list_item->sub_desc);
+
+               elm_entry_entry_set(obj, list_item->sub_desc);
+               elm_entry_cursor_end_set(obj);
+       }
+#endif
        //for genlist update
        G_FREE(list_item->sub_desc);//release first
        list_item->sub_desc = (char *)g_strdup(entry_str);
@@ -77,137 +143,114 @@ __setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
                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);
-                       }
 
+                               Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
+                               if(top_r_btn)
+                               {
+                                       setting_disable_evas_object(top_r_btn);
+                                       setting_dim_evas_object(top_r_btn, TRUE);
+                               }
+                       }
                }
        } else {
                if (ad->empty_flag)
                {
                        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);
+
+                               Evas_Object *top_r_btn = elm_object_item_part_content_get(navi_it, "title_right_btn");
+                               if(top_r_btn)
+                               {
+                                       setting_enable_evas_object(top_r_btn);
+                                       setting_undo_dim_evas_object(top_r_btn, TRUE);
+                               }
                        }
                }
        }
 
 }
 
-void setting_about_main_get_phonenumber(char *my_numbers[], int *my_numbers_len, int *selected_index)
+static void
+__setting_about_device_name_changed_cb(void *data, Evas_Object *obj,
+                                      void *event_info)
 {
-       SETTING_TRACE_BEGIN;
-       /* Currently only have one SIM card */
-       TelSimSubscriberInfo_t subscriber;
-       TapiResult_t ret = 0;
-       ret = tel_get_sim_msisdn(&subscriber);
-       setting_retm_if(ret != TAPI_API_SUCCESS, "call tel_get_sim_msisdn failed");
-
-       SETTING_TRACE("num[%s]", subscriber.num);
-       *my_numbers_len = 0;
-       *selected_index = 0;
-       if(!isEmptyStr(subscriber.num)) {
-               my_numbers[0] = (char *)g_strdup(subscriber.num);
-               (*my_numbers_len)++;
-       } else {
-               SETTING_TRACE("subscriber.num is empty string");
-               my_numbers[0] = NULL;
-       }
+       __device_name_changed_cb(data, obj);
 }
 
-/*
-       Model Name:
-               - No ini: Unavailable
-               - Tizen @ target: TIZEN
-               - Tizen @ emul: SDK
-*/
+
+/**
+ *     Model Name:
+ *             - No ini: Unavailable
+ *             - I9500 @ target: GT-I9500
+ *             - I9500 @ emul: SDK
+ *             - SLP   @ target: GT-SLP
+ *             - SLP   @ emul: SDK
+ */
 void setting_about_main_get_phone_model_name(char* szStr, int nSize)
 {
        retm_if(szStr == NULL, "szStr parameter is NULL");
 
-       char szBin[50];
-       char szEmul[50];
-
-       const char* szBinVer = NULL;
-
-       dictionary* dic = iniparser_load(SETTING_ABOUT_INFO_PATH);
-       if (dic) {
-               szBinVer = (char*)iniparser_getstr(dic, "Version:Build");
-               if (szBinVer) {
-                       char* str = g_strdup(szBinVer);
-                       if (str) {
-                               char* pPos = str;
-                               while (*pPos++) {
-                                       if ('_' == *pPos)
-                                               *pPos = ' ';
-                               }
-                               sscanf(str, "%s %s", szBin, szEmul);
-                       }
-                       G_FREE(str);
-               }
+       char *value = NULL;
+       int ret = system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &value);
+       SETTING_TRACE("value : %s", value);
+       if (ret != SYSTEM_INFO_ERROR_NONE) {
+               SETTING_TRACE_ERROR("fail to call system_info_get_value_string");
+               FREE(value);
+               snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+               return;
        }
 
-       if (!strncmp(szEmul, "emul", 4)) {
-               snprintf(szStr, nSize, "%s", "SDK");
+       if (value) {
+               snprintf(szStr, nSize, "%s", value);
        } else {
-               if (!strncmp(szBin, "TIZEN", 5)) {
-                       snprintf(szStr, nSize, "TIZEN REFERENCE");
-               } else {
-                       snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-               }
+               snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
        }
 
-       if (dic) {
-               iniparser_freedict(dic);
-               dic = NULL;
-       }
+       FREE(value);
 }
 
 void setting_about_main_get_sw_version(char* szStr, int nSize)
 {
        retm_if(szStr == NULL, "szStr parameter is NULL");
 
-       dictionary* dic = iniparser_load(SETTING_ABOUT_INFO_PATH);
-       if (dic == NULL) {
+       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(version);
                snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-       } else {
-               char* szBinVer =
-                       g_strdup((char*)iniparser_getstr(dic, "Version:Version"));
-               if (szBinVer) {
-                       char* pPos = szBinVer;
-                       while(*pPos++) {
-                               if ('.' == *pPos) *pPos = '\0';
-                       }
-               } else {
-                       szBinVer = g_strdup(_("IDS_ST_HEADER_UNAVAILABLE"));
-               }
-               char* szBinVerMaj = g_strdup((char*)iniparser_getstr(dic, "Version:Major"));
-               char* szBinVerMin = g_strdup((char*)iniparser_getstr(dic, "Version:Minor"));
-
-               if (szBinVerMaj == NULL || szBinVerMaj == '\0'
-                                       || szBinVerMin == NULL || szBinVerMin == '\0') {
-                       snprintf(szStr, nSize, "TIZEN %s", szBinVer);
-               } else {
-                       snprintf(szStr, nSize, "TIZEN%s.%s %s", szBinVerMaj, szBinVerMin, szBinVer);
-               }
-
-               if (szBinVer != NULL) G_FREE(szBinVer);
-               if (szBinVerMaj != NULL) G_FREE(szBinVerMaj);
-               if (szBinVerMin != NULL) G_FREE(szBinVerMin);
+               return;
        }
 
-       if (dic) {
-               iniparser_freedict(dic);
-               dic = NULL;
+       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(version);
+               FREE(build_info);
+               snprintf(szStr, nSize, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+               return;
        }
+
+       snprintf(szStr, nSize, "SLP%s (%s)", version, build_info);
+
+       FREE(version);
+       FREE(build_info);
 }
 
 void setting_about_main_get_wifi_mac_address_string(char *str, int size)
@@ -217,27 +260,24 @@ void setting_about_main_get_wifi_mac_address_string(char *str, int size)
 
        FILE *p = fopen(SETTING_ABOUT_MACINFO_PATH, "r");
 
-
-
        if (p) {
-
-               fread(str, sizeof(char), SETTING_ABOUT_WIFI_MAC_STR_LEN, p);
+               int size = fread(str, sizeof(char), SETTING_ABOUT_WIFI_MAC_STR_LEN, p);
+               if (size != SETTING_ABOUT_WIFI_MAC_STR_LEN) {
+                       SETTING_TRACE_ERROR("fail to call fread");
+               }
                fclose(p);
                p = NULL;
        } else {
                perror("open failed!");
        }
 
-
        SETTING_TRACE_DEBUG("get_wifi_mac_address : %s", str);
 
-       if(safeStrLen(str) == 0)
-               snprintf(str, size, "%s  (%s)", _("IDS_ST_HEADER_UNAVAILABLE"), _(SETTING_ABOUT_NEVER_TURN_WIFI_ON_STR));
-
-
-
-
+       int wifi_state = VCONFKEY_WIFI_OFF;
+       vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
 
+       if((safeStrLen(str) == 0) || (wifi_state == VCONFKEY_WIFI_OFF))
+               snprintf(str, size, "%s  (%s)", _("IDS_ST_HEADER_UNAVAILABLE"), _(SETTING_ABOUT_NEVER_TURN_WIFI_ON_STR));
 }
 
 void setting_about_main_get_battery_string(char *str, int size)
@@ -262,13 +302,13 @@ void setting_about_main_get_battery_string(char *str, int size)
                        snprintf(str, size, "%d%s", val, "\%");
                } else {
                        SETTING_TRACE_ERROR("read file fail");
-                       snprintf(str, size, _("IDS_ST_HEADER_UNAVAILABLE"));
+                       snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
                }
 
                close(fd);
        } else {
                SETTING_TRACE_ERROR("open file fail");
-               snprintf(str, size, _("IDS_ST_HEADER_UNAVAILABLE"));
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
        }
 }
 
@@ -283,21 +323,18 @@ void setting_about_main_get_bluetooth_address_string(char *str, int size)
        /* for fixing BS of dbus signal */
        bluetooth_register_callback(NULL, NULL);
 
-    ret = bluetooth_get_local_address(&local_address);
+       ret = bluetooth_get_local_address(&local_address);
 
        /* for fixing BS of dbus signal */
        bluetooth_unregister_callback();
 
-    if (ret < 0)
-       {
-        snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
-    }
-       else
-    {
+       if (ret < 0) {
+               snprintf(str, size, "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
+       } else {
                snprintf(str, size, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
                         local_address.addr[0], local_address.addr[1], local_address.addr[2],
                         local_address.addr[3], local_address.addr[4], local_address.addr[5]);
-    }
+       }
        SETTING_TRACE_DEBUG("bt address : %s", str);
 }
 
@@ -414,8 +451,7 @@ static Eina_Bool __timer_update_cb(const void *data)
                int ret = __stat_get_cpuinfo(&usr, &sys);
                if (ret == -ENOENT) {
                        SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
-                       snprintf(str, sizeof(str),
-                                _("IDS_ST_HEADER_UNAVAILABLE"));
+                       snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
                } else {
                        snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
                }
@@ -427,6 +463,7 @@ static Eina_Bool __timer_update_cb(const void *data)
 
        if (ad->item_data_battery) {
                setting_about_main_get_battery_string(str, sizeof(str));
+               /*SETTING_TRACE("str:%s", str);*/
                ad->item_data_battery->sub_desc = (char *)g_strdup(str);
                elm_object_item_data_set(ad->item_data_battery->item, ad->item_data_battery);
                elm_genlist_item_update(ad->item_data_battery->item);
@@ -444,19 +481,11 @@ __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->empty_flag && ad->item_dev_name->item != selected_item) {
-                       setting_create_popup_without_btn(ad, ad->win_get,_(EMPTY_LIMITATION_STR),
-                                            NULL, NULL, POPUP_INTERVAL);
+               if (ad->item_dev_name->item == selected_item)//do nothing..
                        return;
-               }
-               else
-               {
-                       //invoke elm_object_unfocus to trigger "unfocus" event.
-                       elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);
-                       setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
-               }
-       }
 
+               elm_object_focus_set(ad->item_dev_name->eo_check, EINA_FALSE);//to make inputing words input
+       }
 }
 
 static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
@@ -465,11 +494,10 @@ static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
        retm_if(!data || !obj, "Data parameter is NULL");
 
        Evas_Object *entry_container = elm_object_parent_widget_get(obj);
-       if(entry_container)
-       {
+       if (entry_container) {
+               //whe entry unfocused, its guidetext will becomes "Input here"
                elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
-
-               if(elm_entry_is_empty(obj))
+               if (elm_entry_is_empty(obj))
                        elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
                elm_object_signal_emit(entry_container, "elm,state,eraser,hide", "elm");
        }
@@ -481,6 +509,35 @@ static void __entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info)
        //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);
+       Setting_GenGroupItem_Data *item_dev_name = data;
+       SettingAboutUG *ad = item_dev_name->userdata;
+       __device_name_changed_cb(item_dev_name, item_dev_name->eo_check);
+       //after unfocus,need updating..
+       elm_object_item_data_set(item_dev_name->item, item_dev_name);
+       elm_genlist_item_update(item_dev_name->item);
+
+
+       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);
+       }
+       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);
+                       return;
+               } else {
+               }
+       }
+
+
        if (0 != vconf_set_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR, entry_str_utf8)) {
                SETTING_TRACE_ERROR("Set vconf[%s] failed",
                                    VCONFKEY_SETAPPL_DEVICE_NAME_STR);
@@ -497,6 +554,8 @@ static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *eve
        Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
        SETTING_TRACE_DEBUG("ev->key : %s", ev->key);
 
+       SETTING_TRACE("ad->item_dev_name->eo_check:%p", ad->item_dev_name->eo_check);
+       SETTING_TRACE("obj:%p, %s", obj, elm_entry_entry_get(obj));
        if(safeStrCmp(ev->key, "Return") == 0)
        {
                // if entry has 1 char at list, hide ime.
@@ -506,64 +565,41 @@ static void __entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *eve
                }
                else
                {
-                       setting_create_popup_without_btn(ad, ad->win_get,_(EMPTY_LIMITATION_STR),
-                                    NULL, NULL, POPUP_INTERVAL);
+                       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);
+               }
+       } else {
+               Evas_Object *entry_container = elm_object_parent_widget_get(obj);
+               if(safeStrLen(elm_entry_entry_get(obj)) > 0) {
+                       elm_object_signal_emit(entry_container, "elm,state,guidetext,hide", "elm");
+               } else {
+                       //elm_object_part_text_set(entry_container, "elm.guidetext", _("IDS_ST_BODY_TAP_TO_INSERT"));
+                       elm_object_signal_emit(entry_container, "elm,state,guidetext,show", "elm");
                }
        }
 }
 
-static Eina_Bool __add_event_on_idler(void *data)
-{
-       retv_if(data==NULL, FALSE);
-
-       SettingAboutUG *ad = (SettingAboutUG*)data;
-
-       if(ad->item_dev_name)
-       evas_object_event_callback_add(ad->item_dev_name->eo_check, EVAS_CALLBACK_KEY_DOWN, __entry_key_down_cb, ad);
-
-       return ECORE_CALLBACK_CANCEL;
-}
 
-static int setting_about_main_create(void *cb)
+int setting_about_generate_genlist(void *data)
 {
        SETTING_TRACE_BEGIN;
        /* error check */
-       retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
-
-       SettingAboutUG *ad = (SettingAboutUG *) cb;
-
-       Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
-       retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
-                "Cannot set scroller object  as contento of layout");
-       elm_genlist_clear(scroller);    /* first to clear list */
+       retv_if(data == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
 
-       /*  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 =
-           setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
-                                          _(KeyStr_AboutPhone),
-                                          _("IDS_COM_BODY_BACK"), NULL, NULL,
-                                          setting_about_main_click_softkey_back_cb,
-                                          NULL, NULL, ad, conformant,
-                                          &ad->navi_bar, NULL);
-
-       evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
-                                      __about_main_gl_mouse_up, ad);
+       SettingAboutUG *ad = (SettingAboutUG *) data;
+       bool is_emul_bin = isEmulBin();
 
+       Evas_Object *scroller = ad->genlsit;
        Elm_Object_Item *item = NULL;
        Setting_GenGroupItem_Data *item_data = NULL;
        char str[MAX_DISPLAY_STR_LEN_ON_PHONE_INFO] = { 0, };
-
        (void)setting_create_Gendial_field_titleItem(scroller,
                                                     &(ad->itc_group_item),
                                                     SETTING_ABOUT_DEVICE_INFO_STR, NULL);
-
        /* Device name */
        char *name_value = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
        char *pa_sub_desc = elm_entry_utf8_to_markup(name_value);
@@ -582,59 +618,80 @@ static int setting_about_main_create(void *cb)
                }
        }
 
+
        // [UI] Device name
-       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);
-       if (ad->item_dev_name) {
-               ad->item_dev_name->userdata = ad;
-               ad->item_dev_name->isSinglelineFlag = 1;
-               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;
-                       ad->item_dev_name->win_main = ad->win_get;
-               }
-               ad->item_dev_name->input_panel_disable_flag = EINA_TRUE;
+       char *app_name = NULL;
+       int ret_get_app_name = app_manager_get_app_name("com.samsung.oma-dm-ui", &app_name);
+       if (ret_get_app_name == APP_MANAGER_ERROR_INVALID_PACKAGE )
+       {
+               SETTING_TRACE(">>>>>>>>>>>>>>>>>> UNINSTALLED PACKAGE");
+               ad->item_dev_name = NULL;
        } else {
-               SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
+
+               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);
+               if (ad->item_dev_name) {
+                       ad->item_dev_name->userdata = ad;
+                       ad->item_dev_name->isSinglelineFlag = 1;
+                       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;
+               } else {
+                               SETTING_TRACE_ERROR("ad->item_dev_name is NULL");
+               }
+               FREE(pa_sub_desc);
        }
-       FREE(pa_sub_desc);
 
-       /* My number */
-       int my_numbers_len = 0;
-       setting_about_main_get_phonenumber(ad->my_numbers, &my_numbers_len, &ad->my_number_sel_idx);
-       if (my_numbers_len == 1) {
+       // [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);
+
+       if (ad->my_numbers.count == 1) {
                item_data =
                        setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2),
-                                            setting_about_main_mouse_up_Gendial_list_cb,
+                                            NULL,
                                             ad, SWALLOW_Type_INVALID, NULL,
                                             NULL, 0, SETTING_ABOUT_MY_NUMBER_STR,
-                                            ad->my_numbers[0], NULL);
+                                            sel_num, NULL);
                if (item_data) {
                        elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
                } else {
                        SETTING_TRACE_ERROR("item_data is NULL");
                }
-       } else if (my_numbers_len > 1){
+       } else if (ad->my_numbers.count > 1){
                setting_enable_expandable_genlist(scroller, ad,
-                                         __setting_about_main_exp_cb, NULL);
+                                         setting_about_main_exp_cb, NULL);
                item_data = setting_create_Gendial_exp_parent_field(scroller,
                                                    &(ad->itc_2text_3_parent),
                                                    NULL, NULL,
                                                    SWALLOW_Type_INVALID,
                                                    SETTING_ABOUT_MY_NUMBER_STR,
-                                                   ad->my_numbers[ad->my_number_sel_idx]);
+                                                   sel_num);
+               if (item_data) {
+                       item_data->int_slp_setting_binded = STR_SLP_SETTING_SELECT_NUM;
+               } else {
+                       SETTING_TRACE_ERROR("ad->data_wap is NULL");
+               }
 
        } else {
                SETTING_TRACE_ERROR("don't have my number");
        }
 
+       // [UI] Phone model
        memset(str, 0x00, sizeof(str));
        setting_about_main_get_phone_model_name(str, sizeof(str));
        item_data =
@@ -647,6 +704,7 @@ static int setting_about_main_create(void *cb)
                SETTING_TRACE_ERROR("item_data is NULL");
        }
 
+       // [UI] SW version
        memset(str, 0x00, sizeof(str));
        setting_about_main_get_sw_version(str, sizeof(str));
        item_data =
@@ -659,32 +717,38 @@ static int setting_about_main_create(void *cb)
                SETTING_TRACE_ERROR("item_data is NULL");
        }
 
-       if ( ! isEmulBin()) { // requested by DI Kim due to BT BS on 11/26
+       // [UI] Bluetooth address
+       if ( ! is_emul_bin) { // requested by DI Kim due to BT BS on 11/26
                memset(str, 0x00, sizeof(str));
                setting_about_main_get_bluetooth_address_string(str, sizeof(str));
-               item_data =
+               ad->item_data_bt =
                        setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
-                                                       NULL, SWALLOW_Type_INVALID, NULL,
-                                                       NULL, 0, SETTING_ABOUT_BLUETOOTH_STR, str, NULL);
-               if (item_data) {
-                       elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                                                        NULL, SWALLOW_Type_INVALID, NULL,
+                                                        NULL, 0, SETTING_ABOUT_BLUETOOTH_STR, str, NULL);
+               if (ad->item_data_bt) {
+                       elm_genlist_item_select_mode_set(ad->item_data_bt->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
                } else {
                                SETTING_TRACE_ERROR("item_data is NULL");
+               }
        }
-}
+
+       // [UI] MAC address
        memset(str, 0x00, sizeof(str));
        setting_about_main_get_wifi_mac_address_string(str, sizeof(str));
 
-       item_data =
+       SETTING_TRACE_DEBUG("[about main] get_wifi_mac_address : %s", str);
+
+       ad->item_data_wifi =
            setting_create_Gendial_field_def(scroller, &(ad->itc_2text_2), NULL,
                                             NULL, SWALLOW_Type_INVALID, NULL,
                                             NULL, 0, SETTING_ABOUT_WIFI_STR, str, NULL);
-       if (item_data) {
-               elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       if (ad->item_data_wifi) {
+               elm_genlist_item_select_mode_set(ad->item_data_wifi->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
        } else {
                SETTING_TRACE_ERROR("item_data is NULL");
        }
 
+       // [UI] Battery
        memset(str, 0x00, sizeof(str));
        setting_about_main_get_battery_string(str, sizeof(str));
        item_data =
@@ -698,12 +762,13 @@ static int setting_about_main_create(void *cb)
                SETTING_TRACE_ERROR("item_data is NULL");
        }
 
+       // [UI] CPU Info
        memset(str, 0x00, sizeof(str));
        float usr, sys;
        int ret = __stat_get_cpuinfo(&usr, &sys);
        if (ret == -ENOENT) {
                SETTING_TRACE_ERROR("call __stat_get_cpuinfo fail");
-               snprintf(str, sizeof(str), _("IDS_ST_HEADER_UNAVAILABLE"));
+               snprintf(str, sizeof(str), "%s", _("IDS_ST_HEADER_UNAVAILABLE"));
        } else {
                snprintf(str, sizeof(str), "%.0f%s", usr + sys, "\%");
        }
@@ -718,29 +783,93 @@ static int setting_about_main_create(void *cb)
                SETTING_TRACE_ERROR("item_data is NULL");
        }
 
+       // [UI] separator
        item =
            elm_genlist_item_append(scroller, &(ad->itc_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),
+#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, "IDS_ST_BODY_OPEN_SOURCE_LICENCES",
+                                        0, DIAGNOSTICS_USAGE_STR,
                                         NULL, NULL);
-       // implementation is in progress.
-       setting_create_Gendial_field_def(scroller, &(ad->itc_1text),
+       }
+#endif
+
+#ifdef SUPPORT_FOTA
+       // [UI] Software update
+       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, "IDS_COM_BODY_CERTIFICATES", NULL, NULL);
+                                        0, SOFTWARE_UPDATE_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);
+       }
+
 
        ad->update_timer =
            ecore_timer_add(2, (Ecore_Task_Cb) __timer_update_cb, ad);
 
-       ecore_idler_add(__add_event_on_idler, ad);
+       return SETTING_RETURN_SUCCESS;
+}
 
-       setting_view_about_main.is_create = 1;
+static int setting_about_main_create(void *cb)
+{
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       SettingAboutUG *ad = (SettingAboutUG *) cb;
+
+       Evas_Object *scroller = elm_genlist_add(ad->win_main_layout);
+       retvm_if(scroller == NULL, SETTING_DRAW_ERR_FAIL_SCROLLER,
+                "Cannot set scroller object  as contento of layout");
+       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 =
+           setting_create_layout_navi_bar(ad->win_main_layout, ad->win_get,
+                                          _(KeyStr_AboutPhone),
+                                          _("IDS_COM_BODY_BACK"), NULL, NULL,
+                                          setting_about_main_click_softkey_back_cb,
+                                          NULL, NULL, ad, conformant,
+                                          &ad->navi_bar, NULL);
+
+       evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP,
+                                      __about_main_gl_mouse_up, ad);
+
+       ad->navi_item = elm_naviframe_top_item_get(ad->navi_bar);
 
+       setting_about_generate_genlist((void *)ad);
+
+       setting_view_about_main.is_create = 1;
+       SETTING_TRACE_END;
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -760,10 +889,6 @@ static int setting_about_main_destroy(void *cb)
                evas_object_del(ad->popup);
                ad->popup = NULL;
        }
-       if (ad->progress_bar) {
-               evas_object_del(ad->progress_bar);
-               ad->progress_bar = NULL;
-       }
 
        if (ad->ly_main != NULL) {
                evas_object_del(ad->ly_main);
@@ -791,6 +916,16 @@ static int setting_about_main_update(void *cb)
 
 static int setting_about_main_cleanup(void *cb)
 {
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
+
+       SettingAboutUG *ad = (SettingAboutUG *) cb;
+
+       if (ad->ly_main != NULL) {
+               /*  evas_object_hide(ad->ly_main); */
+       }
+
        return SETTING_RETURN_SUCCESS;
 }
 
@@ -816,8 +951,12 @@ setting_about_main_click_softkey_back_cb(void *data, Evas_Object *obj,
 
        SettingAboutUG *ad = (SettingAboutUG *) data;
        if (ad->empty_flag) {
-               setting_create_popup_without_btn(ad, ad->win_get,_(EMPTY_LIMITATION_STR),
-                                    NULL, NULL, POPUP_INTERVAL);
+               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);
                if (ad->item_dev_name) {
                        elm_object_focus_set(ad->item_dev_name->eo_check, EINA_TRUE);
                }
@@ -862,16 +1001,31 @@ setting_about_main_mouse_up_Gendial_list_cb(void *data, Evas_Object *obj,
        SETTING_TRACE("clicking item[%s]", _(list_item->keyStr));
        if (!safeStrCmp("IDS_ST_BODY_OPEN_SOURCE_LICENCES", list_item->keyStr)) {
 
-               setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
+               //setting_view_change(&setting_view_about_main, &setting_view_about_licences, data);
 
        } else if (!safeStrCmp("IDS_COM_BODY_CERTIFICATES", list_item->keyStr)) {
                __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);
+       } else if (!safeStrCmp(SOFTWARE_UPDATE_STR, list_item->keyStr)) {
+#ifdef SUPPORT_FOTA
+               if(aul_app_is_running("com.samsung.oma-dm-ui"))
+               {
+                       SETTING_TRACE_DEBUG("oma-dm-ui is already launched. ");
+                       aul_open_app("com.samsung.oma-dm-ui");
+               }
+               else
+               {
+                       SETTING_TRACE_DEBUG("oma-dm-ui will be launched. ");
+                       aul_launch_app("com.samsung.oma-dm-ui", NULL);
+               }
+#endif
        }
 }
 
-static void __destroy_certificates_ug_cb(struct ui_gadget *ug, void *priv)
+static void __destroy_certificates_ug_cb(ui_gadget_h ug, void *priv)
 {
        SETTING_TRACE_BEGIN;
 
@@ -903,7 +1057,7 @@ static void __setting_about_main_certificates_clicked(void *data)
        cbs->priv = (void *)ad;
 
        ad->ug_loading =
-           ug_create(ad->ug, "setting-manage-applications-efl", UG_MODE_FULLVIEW, NULL, cbs);
+           ug_create(ad->ug, "setting-manage-certificates-efl", UG_MODE_FULLVIEW, NULL, cbs);
 
        if (NULL == ad->ug_loading) {   /* error handling */
                SETTING_TRACE_ERROR("NULL == ad->ug_loading");
@@ -911,6 +1065,55 @@ static void __setting_about_main_certificates_clicked(void *data)
        FREE(cbs);
 }
 
+static void __top_back_cb(void *data, Evas_Object *obj,
+                                        void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       /* error check */
+       setting_retm_if(data == NULL, "Data parameter is NULL");
+
+       SettingAboutUG *ad = (SettingAboutUG *) data;
+
+       if (ad->item_dev_name)
+               setting_hide_input_pannel_cb(ad->item_dev_name->eo_check);
+
+       SETTING_TRACE_END;
+}
+
+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)
+       {
+               SETTING_TRACE("value == ECORE_IMF_INPUT_PANEL_STATE_SHOW");
+               if(ad->navi_item && !elm_object_item_part_content_get(ad->navi_item, "title_right_btn"))
+               {
+                       Evas_Object *r_button = setting_create_button(ad->navi_bar,
+                                                                       dgettext("sys_string", "IDS_COM_BODY_BACK"),
+                                                                       NAVI_BACK_BUTTON_STYLE,
+                                                                       __top_back_cb,
+                                                                       ad);
+                       elm_object_item_part_content_set(ad->navi_item, "title_right_btn", r_button);
+               }
+       }
+       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);
+               }
+       }
+}
 
 static void __setting_about_main_device_name_clicked(void *data, Evas_Object *obj)
 {
@@ -934,70 +1137,69 @@ static void __setting_about_main_device_name_clicked(void *data, Evas_Object *ob
                        ad->popup = NULL;
                }
                ad->popup = setting_create_popup_with_btn(ad, ad->win_get,
-                                        _(SETTING_ABOUT_MOBILE_AP_TURNED_OFF),
-                                        NULL, __setting_about_main_mobile_ap_turn_off_ask_resp_cb, 0,
+                                        NULL, _(SETTING_ABOUT_MOBILE_AP_TURNED_OFF),
+                                        __setting_about_main_mobile_ap_turn_off_ask_resp_cb, 0,
                                         1, _("IDS_COM_SK_OK"));
        } else {
                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);
+}
 
 static void __setting_about_main_mobile_ap_turn_off_ask_resp_cb(void *data,
                                                    Evas_Object *obj,
@@ -1010,11 +1212,14 @@ static void __setting_about_main_mobile_ap_turn_off_ask_resp_cb(void *data,
 
        if (POPUP_RESPONSE_OK == response_type) {
                ad->popup_showed_flag = TRUE;
-               Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(ad->item_dev_name->eo_check);
-               setting_retm_if(imf_context == NULL, "imf_context is NULL");
-               ecore_imf_context_input_panel_show(imf_context);
+
+               if (ad->item_dev_name) {
+                       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(ad->item_dev_name->eo_check);
+                       setting_retm_if(imf_context == NULL, "imf_context is NULL");
+                       ecore_imf_context_input_panel_show(imf_context);
+               }
        }
-       
+
        if (ad->popup)
        {
                evas_object_del(ad->popup);
@@ -1022,48 +1227,4 @@ static void __setting_about_main_mobile_ap_turn_off_ask_resp_cb(void *data,
        }
 }
 
-static void __setting_about_main_exp_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       SETTING_TRACE_BEGIN;
-       setting_retm_if(data == NULL, "Data parameter is NULL");
-       setting_retm_if(event_info == NULL, "event_info parameter is NULL");
-
-       SettingAboutUG *ad = (SettingAboutUG *) data;
-       Elm_Object_Item *parentItem = event_info;       /* parent item */
-       Evas_Object *scroller = elm_object_item_widget_get(parentItem);
-
-       Evas_Object *rgd = elm_radio_add(scroller);
-       elm_radio_value_set(rgd, -1);
-
-       int i = 0;
-       Setting_GenGroupItem_Data *item_data = NULL;
-       for(; i < SETTING_ABOUT_MY_NUMBERS_LEN; i++) {
-               if (ad->my_numbers[i] == NULL) {
-                       break;
-               }
-
-               item_data = setting_create_Gendial_exp_sub_field(scroller,
-                                       &(ad->itc_1icon_1text_sub),
-                                       NULL, NULL, parentItem,
-                                       SWALLOW_Type_1RADIO, rgd,
-                                       i,
-                                       ad->my_numbers[i], __setting_about_sub_list_rd_change);
-               if (item_data) {
-                       item_data->userdata = ad;
-                       elm_genlist_item_select_mode_set(item_data->item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-               } else {
-                       SETTING_TRACE_ERROR("item_data is NULL");
-               }
-       }
-       elm_radio_value_set(rgd, ad->my_number_sel_idx);
-}
-
-static void __setting_about_sub_list_rd_change(void *data, Evas_Object *obj, void *event_info) {
-       SETTING_TRACE_BEGIN;
-       retm_if(data == NULL, "Data parameter is NULL");
-       Setting_GenGroupItem_Data *list_item = (Setting_GenGroupItem_Data *) data;
-       SettingAboutUG *ad = (SettingAboutUG *) list_item->userdata;
-       SETTING_TRACE("my_number_sel_idx = %d", ad->my_number_sel_idx);
-       elm_radio_value_set(obj, ad->my_number_sel_idx);
-}