[WGID-89732] Fix dereference issue
[apps/native/ug-mobile-ap.git] / src / mh_view_main.c
old mode 100644 (file)
new mode 100755 (executable)
index a874130..ecc39e5
@@ -3,11 +3,11 @@
 *
 * Copyright 2012  Samsung Electronics Co., Ltd
 
-* Licensed under the Flora License, Version 1.0 (the "License");
+* Licensed under the Flora License, Version 1.1 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 
-* http://floralicense.org/license
+* 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,
 */
 
 #include <time.h>
+#include <limits.h>
+#include <efl_extension.h>
+#include <dpm/restriction.h>
+
 #include "mh_view_main.h"
+#include "mh_common_utility.h"
+#include "mh_popup.h"
+#include "mh_string.h"
 
-static void _gl_device_item_sel(void *data, Evas_Object *obj, void *event_info);
-static void _gl_exp(void *data, Evas_Object *obj, void *event_info);
-static void _gl_con(void *data, Evas_Object *obj, void *event_info);
+static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad);
+static void __ctx_delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj,
+                                         void *event_info);
+static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
+                                         void *event_info);
 
-static bool _connected_clients_cb(tethering_client_h client, void *user_data)
-{
-       if (user_data == NULL) {
-               ERR("user_data is NULL\n");
-               return true;
-       }
+static Eina_Bool rotate_flag = EINA_FALSE;
 
-       mh_appdata_t *ad = (mh_appdata_t *)user_data;
-       int i = ad->clients.number++;
+void _genlist_update_device_item(mh_appdata_t *ad);
+mh_appdata_t *g_ad = NULL;
+#define UPDATE_INTERVAL 1
 
-       tethering_client_clone(&(ad->clients.handle[i]), client);
+#ifdef TIZEN_FEATURE_EMULATOR
+static tethering_type_e updated_type = TETHERING_TYPE_ALL;
+static tethering_type_e selected_type = TETHERING_TYPE_ALL;
+static Eina_Bool selected_state = EINA_FALSE;
 
-       return true;
+tethering_type_e _get_updated_type(void)
+{
+       return updated_type;
 }
 
-static void __genlist_update_device_subitem(mh_appdata_t *ad)
+tethering_type_e _get_selected_type(void)
 {
-       __MOBILE_AP_FUNC_ENTER__;
-
-       if (ad == NULL) {
-               ERR("Invalid param\n");
-               return;
-       }
-
-       Elm_Object_Item *item = NULL;
-       tethering_type_e connection_type = 0;
-       int i;
-
-       for (i = 0; i < ad->clients.number; i++) {
-               tethering_client_get_tethering_type(ad->clients.handle[i], &connection_type);
-
-               item = elm_genlist_item_append(ad->main.genlist,
-                               ad->main.dev_itc[connection_type],
-                               (void *)ad->clients.handle[i],
-                               ad->main.device_item, ELM_GENLIST_ITEM_NONE,
-                               NULL, NULL);
-               if (item == NULL) {
-                       ERR("elm_genlist_item_append is failed\n");
-                       continue;
-               }
-
-               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-       }
-
-       __MOBILE_AP_FUNC_EXIT__;
+       return selected_type;
+}
 
-       return;
+Eina_Bool _get_selected_state(void)
+{
+       return selected_state;
 }
+#endif
 
-static void __genlist_update_device_item(mh_appdata_t *ad, int no_of_dev)
+void _list_connected_dev(mh_appdata_t *ap)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad == NULL) {
-               ERR("Invalid param\n");
+       if (ap == NULL) {
+               ERR("data is NULL\n");
                return;
        }
 
-       Elm_Object_Item *item = NULL;
-       const Elm_Genlist_Item_Class *itc = NULL;
-       Elm_Genlist_Item_Type item_flags = ELM_GENLIST_ITEM_NONE;
-       Eina_Bool expanded = EINA_FALSE;
-
-       if (ad->main.device_item != NULL) {
-               itc = elm_genlist_item_item_class_get(ad->main.device_item);
-               if (itc == NULL) {
-                       ERR("itc is NULL\n");
-                       return;
-               }
-
-               if ((itc == ad->main.device0_itc && no_of_dev == 0) ||
-                               (itc == ad->main.device_itc && no_of_dev > 0)) {
-                       DBG("No need to change genlist item flags\n");
-                       elm_genlist_item_update(ad->main.device_item);
-
-                       expanded = elm_genlist_item_expanded_get(ad->main.device_item);
-                       if (expanded == EINA_TRUE) {
-                               elm_genlist_item_subitems_clear(ad->main.device_item);
-                               __genlist_update_device_subitem(ad);
-                       }
-
-                       return;
-               }
+       _add_connected_clients(ap);
+       __MOBILE_AP_FUNC_EXIT__;
+}
 
-               elm_genlist_item_subitems_clear(ad->main.device_item);
-               elm_object_item_del(ad->main.device_item);
-               ad->main.device_item = NULL;
-       }
+static bool _connected_clients_cb(tethering_client_h client, void *user_data)
+{
+       __MOBILE_AP_FUNC_ENTER__;
 
-       if (no_of_dev == 0) {
-               itc = ad->main.device0_itc;
-               item_flags = ELM_GENLIST_ITEM_NONE;
-       } else if (no_of_dev > 0) {
-               itc = ad->main.device_itc;
-               item_flags = ELM_GENLIST_ITEM_TREE;
-       }
-
-       item = elm_genlist_item_insert_before(ad->main.genlist,
-                       itc, ad, NULL, ad->main.usage_item, item_flags,
-                       _gl_device_item_sel, NULL);
-       if (item == NULL) {
-               ERR("elm_genlist_item_insert_before is failed.\n");
-               return;
+       if (user_data == NULL) {
+               ERR("user_data is NULL\n");
+               return true;
        }
-       elm_object_item_signal_emit(item, "elm,state,top", "");
 
-       ad->main.device_item = item;
+       mh_appdata_t *ad = (mh_appdata_t *)user_data;
 
-       if (no_of_dev == 0) {
-               elm_genlist_item_select_mode_set(item,
-                               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-               evas_object_smart_callback_del(ad->main.genlist, "expanded",
-                               _gl_exp);
-               evas_object_smart_callback_del(ad->main.genlist, "contracted",
-                               _gl_con);
-       } else if (no_of_dev > 0) {
-               evas_object_smart_callback_add(ad->main.genlist, "expanded",
-                               _gl_exp, ad);
-               evas_object_smart_callback_add(ad->main.genlist, "contracted",
-                               _gl_con, ad);
-       }
+       _append_list_client_handle(ad, client);
 
        __MOBILE_AP_FUNC_EXIT__;
-
-       return;
+       return true;
 }
 
 void ap_update_data_device(mh_appdata_t *ad)
@@ -160,26 +99,12 @@ void ap_update_data_device(mh_appdata_t *ad)
                return;
        }
 
-       int i;
-
-       if (ad->clients.number > 0) {
-               for (i = 0; i < ad->clients.number; i++) {
-                       if (!ad->clients.handle[i])
-                               continue;
-
-                       tethering_client_destroy(ad->clients.handle[i]);
-                       ad->clients.handle[i] = NULL;
-               }
-       }
-       ad->clients.number = 0;
-
-       tethering_foreach_connected_clients(ad->handle, TETHERING_TYPE_ALL,
-                       _connected_clients_cb, (void *)ad);
-       __genlist_update_device_item(ad, ad->clients.number);
+       _genlist_update_device_item(ad);
 
        __MOBILE_AP_FUNC_EXIT__;
 }
 
+#ifdef TETHERING_DATA_USAGE_SUPPORT
 Eina_Bool ap_update_data_packet_usage(mh_appdata_t *ad)
 {
        if (ad == NULL) {
@@ -187,12 +112,8 @@ Eina_Bool ap_update_data_packet_usage(mh_appdata_t *ad)
                return EINA_FALSE;
        }
 
-       if (ad->main.usage_item == NULL) {
-               DBG("usage_item is removed\n");
-               return EINA_TRUE;
-       }
-
-       elm_genlist_item_update(ad->main.usage_item);
+       if (ad->main.usage_item)
+               elm_genlist_item_update(ad->main.usage_item);
 
        return EINA_TRUE;
 }
@@ -206,7 +127,6 @@ Eina_Bool ap_get_data_statistics(void *data)
        mh_appdata_t *ad = (mh_appdata_t *)data;
 
        if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
-               DBG("Mobile hotspot is turned off.\n");
                ad->update_statistics_handle = NULL;
                return ECORE_CALLBACK_CANCEL;
        }
@@ -222,7 +142,96 @@ Eina_Bool ap_get_data_statistics(void *data)
 
        return ECORE_CALLBACK_RENEW;
 }
+#endif
+
+Eina_Bool ap_update_device_conn_time(void * data)
+{
+       if (!data) {
+               ERR("The param is NULL\n");
+               return ECORE_CALLBACK_CANCEL;
+       }
+       mh_appdata_t *ad = (mh_appdata_t *)data;
+       int count = 0;
+
+#ifdef TIZEN_FEATURE_EMULATOR
+       if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
+               _stop_update_device_conn_time(ad);
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) {
+               updated_type = TETHERING_TYPE_WIFI;
+               elm_genlist_item_fields_update(ad->main.emul_station_items[TETHERING_TYPE_WIFI],
+                                       "elm.text.sub", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+
+       if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_BT) {
+               updated_type = TETHERING_TYPE_BT;
+               elm_genlist_item_fields_update(ad->main.emul_station_items[TETHERING_TYPE_BT],
+                                       "elm.text.sub", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+
+       if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_USB) {
+               updated_type = TETHERING_TYPE_USB;
+               elm_genlist_item_fields_update(ad->main.emul_station_items[TETHERING_TYPE_USB],
+                                       "elm.text.sub", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+
+       updated_type = TETHERING_TYPE_ALL;
+
+       return ECORE_CALLBACK_RENEW;
+#endif
+
+       if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
+               _stop_update_device_conn_time(ad);
+               __MOBILE_AP_FUNC_EXIT__;
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       while (count < ad->main.no_of_clients) {
+               if (ad->main.station_items[count])
+                       elm_genlist_item_fields_update(ad->main.station_items[count++],
+                                       "elm.text.sub", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+       return ECORE_CALLBACK_RENEW;
+}
+
+void _start_update_device_conn_time(mh_appdata_t *ad)
+{
+       __MOBILE_AP_FUNC_ENTER__;
+
+       if (ad == NULL) {
+               ERR("Invalid param\n");
+               __MOBILE_AP_FUNC_EXIT__;
+               return;
+       }
+
+       if (ad->update_conn_time_handle)
+               _stop_update_device_conn_time(ad);
+
+       ad->update_conn_time_handle = ecore_timer_add(UPDATE_INTERVAL,
+                       ap_update_device_conn_time, (void *)ad);
+
+       __MOBILE_AP_FUNC_EXIT__;
+}
+
+void _stop_update_device_conn_time(mh_appdata_t *ad)
+{
+       __MOBILE_AP_FUNC_ENTER__;
+
+       if (ad == NULL) {
+               ERR("Invalid param\n");
+               return;
+       }
+
+       if (ad->update_conn_time_handle) {
+               ecore_timer_del(ad->update_conn_time_handle);
+               ad->update_conn_time_handle = NULL;
+       }
+       __MOBILE_AP_FUNC_EXIT__;
+}
 
+#ifdef TETHERING_DATA_USAGE_SUPPORT
 void _start_update_data_packet_usage(mh_appdata_t *ad)
 {
        __MOBILE_AP_FUNC_ENTER__;
@@ -232,10 +241,8 @@ void _start_update_data_packet_usage(mh_appdata_t *ad)
                return;
        }
 
-       if (ad->update_statistics_handle) {
-               DBG("update_statistics_handle is not NULL.\n");
+       if (ad->update_statistics_handle)
                _stop_update_data_packet_usage(ad);
-       }
 
        ad->data_statistics.is_updated = false;
        tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
@@ -264,6 +271,7 @@ void _stop_update_data_packet_usage(mh_appdata_t *ad)
        __MOBILE_AP_FUNC_EXIT__;
        return;
 }
+#endif
 
 static void __read_setting(mh_appdata_t *ad)
 {
@@ -277,20 +285,17 @@ static void __read_setting(mh_appdata_t *ad)
        int ret = 0;
        char *ssid = NULL;
        char *passphrase = NULL;
+       bool visibility;
+       tethering_wifi_security_type_e type;
 
        ad->main.hotspot_mode = _get_vconf_hotspot_mode();
 
-       ret = vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_CONNECTED_DEVICE,
-                       &ad->clients.number);
-       if (ret != 0) {
-               ERR("vconf_get_int is failed\n");
-               ad->clients.number = 0;
-       }
-
+#ifdef TETHERING_DATA_USAGE_SUPPORT
        ad->data_statistics.pdp_total_sent = 0;
        ad->data_statistics.pdp_total_receive = 0;
        if (ad->main.hotspot_mode != VCONFKEY_MOBILE_HOTSPOT_MODE_NONE)
                tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
+#endif
 
        ret = tethering_wifi_get_ssid(ad->handle, &ssid);
        if (ret != TETHERING_ERROR_NONE || ssid == NULL) {
@@ -305,22 +310,26 @@ static void __read_setting(mh_appdata_t *ad)
                ERR("tethering_wifi_get_passphrase is failed : %d\n", ret);
                return;
        }
+
        g_strlcpy(ad->setup.wifi_passphrase, passphrase,
                        sizeof(ad->setup.wifi_passphrase));
        g_strlcpy(ad->setup.wifi_passphrase_new, passphrase,
                        sizeof(ad->setup.wifi_passphrase_new));
        free(passphrase);
 
-       ret = tethering_wifi_get_ssid_visibility(ad->handle, &ad->setup.visibility);
-       if (ret != TETHERING_ERROR_NONE) {
+       ret = tethering_wifi_get_ssid_visibility(ad->handle, &visibility);
+       if (ret != TETHERING_ERROR_NONE)
                ERR("tethering_wifi_get_ssid_visibility is failed\n");
-       }
 
-       ret = tethering_wifi_get_security_type(ad->handle, &ad->setup.security_type);
-       if (ret != TETHERING_ERROR_NONE) {
+       ad->setup.visibility = visibility;
+       ad->setup.visibility_new = visibility;
+
+       ret = tethering_wifi_get_security_type(ad->handle, &type);
+       if (ret != TETHERING_ERROR_NONE)
                ERR("tethering_wifi_get_security_type is failed\n");
-       }
-       DBG("End of Load setting value \n");
+
+       ad->setup.security_type = type;
+       ad->setup.security_type_new = type;
 
        __MOBILE_AP_FUNC_EXIT__;
 }
@@ -329,23 +338,22 @@ void _update_wifi_item(mh_appdata_t *ad, int wifi_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.wifi_state == wifi_state) {
-               DBG("aready updated\n");
+       if (ad->main.wifi_state == wifi_state)
                return;
-       }
 
        if (ad->main.wifi_state == MH_STATE_PROCESS) {
                ad->main.wifi_state = MH_STATE_NONE;
                elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
-               elm_object_item_disabled_set(ad->main.setup_item, EINA_FALSE);
        } else if (ad->main.wifi_state == MH_STATE_NONE) {
                ad->main.wifi_state = MH_STATE_PROCESS;
                elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-               elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
        }
 
-       elm_genlist_item_update(ad->main.wifi_item);
-       elm_object_item_signal_emit(ad->main.setup_item, "elm,state,bottom", "");
+       if (ad->main.wifi_item)
+               elm_genlist_item_update(ad->main.wifi_item);
+
+       if (ad->main.setup_item)
+               elm_object_item_signal_emit(ad->main.setup_item, "elm,state,bottom", "");
 
        __MOBILE_AP_FUNC_EXIT__;
 
@@ -356,10 +364,8 @@ void _update_bt_item(mh_appdata_t *ad, int bt_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.bt_state == bt_state) {
-               DBG("aready updated\n");
+       if (ad->main.bt_state == bt_state)
                return;
-       }
 
        if (ad->main.bt_state == MH_STATE_PROCESS) {
                ad->main.bt_state = MH_STATE_NONE;
@@ -369,7 +375,8 @@ void _update_bt_item(mh_appdata_t *ad, int bt_state)
                elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
        }
 
-       elm_genlist_item_update(ad->main.bt_item);
+       if (ad->main.bt_item)
+               elm_genlist_item_update(ad->main.bt_item);
 
        __MOBILE_AP_FUNC_EXIT__;
 
@@ -380,10 +387,8 @@ void _update_usb_item(mh_appdata_t *ad, int usb_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.usb_state == usb_state) {
-               DBG("aready updated\n");
+       if (ad->main.usb_state == usb_state)
                return;
-       }
 
        if (ad->main.usb_state == MH_STATE_PROCESS) {
                ad->main.usb_state = MH_STATE_NONE;
@@ -400,7 +405,43 @@ void _update_usb_item(mh_appdata_t *ad, int usb_state)
        return;
 }
 
-void _update_main_view(mh_appdata_t *ad)
+void _genlist_update_device_item(mh_appdata_t *ad)
+{
+       __MOBILE_AP_FUNC_ENTER__;
+
+       if (ad == NULL) {
+               ERR("Invalid param\n");
+               return;
+       }
+       unsigned int no_of_dev = 0;
+       no_of_dev = _get_list_clients_count(ad);
+       Elm_Object_Item *item = NULL;
+
+       if (no_of_dev == 0) {
+               if (ad->main.device_item) {
+                       elm_object_item_del(ad->main.device_item);
+                       ad->main.device_item = NULL;
+                       _update_conn_clients(ad);
+               }
+       } else {
+               if (ad->main.device_item) {
+               _update_conn_clients(ad);
+               } else {
+                       item = elm_genlist_item_append(ad->main.genlist,
+                                       ad->main.device_itc, ad, NULL,
+                                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       ad->main.device_item = item;
+                       _list_connected_dev(ad);
+                       }
+               }
+
+
+       __MOBILE_AP_FUNC_EXIT__;
+       return;
+}
+
+void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
@@ -413,7 +454,10 @@ void _update_main_view(mh_appdata_t *ad)
        Eina_Bool wifi_state = EINA_FALSE;
        Eina_Bool bt_state = EINA_FALSE;
        Eina_Bool usb_state = EINA_FALSE;
+       Eina_Bool wifi_ap_state = EINA_FALSE;
        Elm_Object_Item *item = NULL;
+       Evas_Object *obj;
+       int no_of_dev = 0;
 
        ad->main.hotspot_mode = _get_vconf_hotspot_mode();
        state = ad->main.hotspot_mode;
@@ -421,90 +465,267 @@ void _update_main_view(mh_appdata_t *ad)
        wifi_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI);
        bt_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_BT);
        usb_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_USB);
-       DBG("wifi_state : %d, bt_state : %d, usb_state : %d\n",
-                       wifi_state, bt_state, usb_state);
-
-       /* Update Wi-Fi tethering on / off button */
-       if (ad->main.wifi_state != MH_STATE_NONE) {
-               _update_wifi_item(ad, MH_STATE_NONE);
+       wifi_ap_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP);
+
+       if (wifi_ap_state) {
+               if (ad->main.wifi_item)
+                       elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
+               if (ad->main.setup_item)
+                       elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
+               if (ad->main.bt_item)
+                       elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
+               if (ad->main.usb_item)
+                       elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
        } else {
-               elm_check_state_set(ad->main.wifi_btn, wifi_state);
-       }
-
-       /* Update BT tethering on / off button */
-       if (ad->main.bt_state != MH_STATE_NONE) {
-               _update_bt_item(ad, MH_STATE_NONE);
-       } else {
-               elm_check_state_set(ad->main.bt_btn, bt_state);
-       }
-
-       /* Update USB tethering on / off button */
-       if (ad->main.usb_state != MH_STATE_NONE) {
-               _update_usb_item(ad, MH_STATE_NONE);
-       } else {
-               elm_check_state_set(ad->main.usb_btn, usb_state);
+               if (ad->main.setup_item)
+                       elm_object_item_disabled_set(ad->main.setup_item, EINA_FALSE);
+               if (ad->main.bt_item)
+                       elm_object_item_disabled_set(ad->main.bt_item, EINA_FALSE);
+               if (_get_vconf_usb_state() == VCONFKEY_SYSMAN_USB_DISCONNECTED) {
+                       if (ad->main.usb_item)
+                               elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
+               } else {
+                       if (ad->main.usb_item)
+                               elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
+               }
        }
 
        if (wifi_state || bt_state || usb_state) {
+#ifdef TETHERING_DATA_USAGE_SUPPORT
                if (ad->main.usage_item == NULL) {
                        item = elm_genlist_item_insert_before(ad->main.genlist,
                                        ad->main.usage_itc, ad, NULL,
-                                       ad->main.sp_item[3],
+                                       ad->main.sp_item[0],
                                        ELM_GENLIST_ITEM_NONE, NULL, NULL);
                        elm_genlist_item_select_mode_set(item,
                                        ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
                        ad->main.usage_item = item;
                }
+#endif
 
+               no_of_dev = _get_list_clients_count(ad);
                if (ad->main.device_item == NULL) {
-                       ap_update_data_device(ad);
+                       if (no_of_dev != 0) {
+                               item = elm_genlist_item_append(ad->main.genlist,
+                                               ad->main.device_itc, ad, NULL,
+                                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
+                       _list_connected_dev(ad);
+                       _update_conn_clients(ad);
+                       }
+                       ad->main.device_item = item;
                }
-
-               _start_update_data_packet_usage(ad);
        } else {
-               _stop_update_data_packet_usage(ad);
-
                if (ad->main.device_item) {
-                       elm_genlist_item_subitems_clear(ad->main.device_item);
                        elm_object_item_del(ad->main.device_item);
                        ad->main.device_item = NULL;
                }
-
+#ifdef TETHERING_DATA_USAGE_SUPPORT
                if (ad->main.usage_item) {
                        elm_object_item_del(ad->main.usage_item);
                        ad->main.usage_item = NULL;
                }
+#endif
        }
 
-       if (wifi_state || bt_state) {
+       if (wifi_state) {
                if (ad->main.help_item) {
-                       DBG("Just update help label item\n");
                        elm_genlist_item_update(ad->main.help_item);
-                       return;
                } else {
-                       DBG("Add help item\n");
                        item = elm_genlist_item_insert_after(ad->main.genlist,
                                        ad->main.help_itc, ad, NULL,
-                                       ad->main.usb_item,
+                                       ad->main.wifi_item,
                                        ELM_GENLIST_ITEM_NONE, NULL,
                                        NULL);
                        if (item == NULL) {
                                ERR("elm_genlist_item_insert_after NULL\n");
-                               return;
+                       } else {
+                               elm_genlist_item_select_mode_set(item,
+                                               ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                               ad->main.help_item = item;
                        }
-                       elm_genlist_item_select_mode_set(item,
-                                       ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-                       ad->main.help_item = item;
                }
        } else {
                if (ad->main.help_item) {
-                       DBG("Remove help item\n");
                        elm_object_item_del(ad->main.help_item);
                        ad->main.help_item = NULL;
                }
        }
 
+       switch (type) {
+       case TETHERING_TYPE_WIFI:
+               /* Update Wi-Fi tethering on / off button */
+               if (ad->main.wifi_state != MH_STATE_NONE) {
+                       _update_wifi_item(ad, MH_STATE_NONE);
+               } else {
+                       obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
+                       if (obj != NULL)
+                               elm_check_state_set(obj, wifi_state);
+
+                       if (ad->main.wifi_item)
+                               elm_genlist_item_update(ad->main.wifi_item);
+               }
+               break;
+
+       case TETHERING_TYPE_BT:
+               /* Update BT tethering on / off button */
+               if (ad->main.bt_state != MH_STATE_NONE) {
+                       _update_bt_item(ad, MH_STATE_NONE);
+               } else {
+                       obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
+                       if (obj != NULL)
+                               elm_check_state_set(obj, bt_state);
+
+                       if (ad->main.bt_item)
+                               elm_genlist_item_update(ad->main.bt_item);
+               }
+               break;
+
+       case TETHERING_TYPE_USB:
+               /* Update USB tethering on / off button */
+               if (ad->main.usb_state != MH_STATE_NONE) {
+                       _update_usb_item(ad, MH_STATE_NONE);
+               } else {
+                       obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
+                       if (obj != NULL)
+                               elm_check_state_set(obj, usb_state);
+
+                       if (ad->main.usb_item)
+                               elm_genlist_item_update(ad->main.usb_item);
+               }
+               break;
+
+       default:
+               DBG("Unknown tethering type : %d\n", type);
+               break;
+       }
+
+       __MOBILE_AP_FUNC_EXIT__;
+
+       return;
+}
+
+#ifdef TIZEN_FEATURE_EMULATOR
+void _update_emul_main_view(mh_appdata_t *ad, tethering_type_e type, Eina_Bool state)
+{
+       __MOBILE_AP_FUNC_ENTER__;
+
+       if (ad == NULL) {
+               ERR("Invalid param\n");
+               return;
+       }
+
+       Elm_Object_Item *item = NULL;
+
+       switch (type) {
+       case TETHERING_TYPE_WIFI:
+               /* Update Wi-Fi tethering on / off button */
+               _update_wifi_item(ad, MH_STATE_NONE);
+               if (state) {
+                       ad->main.hotspot_mode |= VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
+                       if (ad->main.help_item) {
+                               elm_genlist_item_update(ad->main.help_item);
+                       } else {
+                               item = elm_genlist_item_insert_after(ad->main.genlist,
+                                               ad->main.help_itc, ad, NULL,
+                                               ad->main.wifi_item,
+                                               ELM_GENLIST_ITEM_NONE, NULL,
+                                               NULL);
+                               if (item == NULL) {
+                                       ERR("elm_genlist_item_insert_after NULL\n");
+                               } else {
+                                       elm_genlist_item_select_mode_set(item,
+                                                       ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                                       ad->main.help_item = item;
+                               }
+                       }
+               } else {
+                       ad->main.hotspot_mode ^= VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
+                       if (ad->main.help_item) {
+                               elm_object_item_del(ad->main.help_item);
+                               ad->main.help_item = NULL;
+                       }
+               }
+
+               if (ad->main.wifi_item)
+                       elm_genlist_item_update(ad->main.wifi_item);
+               break;
+
+       case TETHERING_TYPE_BT:
+               /* Update BT tethering on / off button */
+               _update_bt_item(ad, MH_STATE_NONE);
+               if (state)
+                       ad->main.hotspot_mode |= VCONFKEY_MOBILE_HOTSPOT_MODE_BT;
+               else
+                       ad->main.hotspot_mode ^= VCONFKEY_MOBILE_HOTSPOT_MODE_BT;
+
+               if (ad->main.bt_item)
+                       elm_genlist_item_update(ad->main.bt_item);
+               break;
+
+       case TETHERING_TYPE_USB:
+               /* Update USB tethering on / off button */
+               _update_usb_item(ad, MH_STATE_NONE);
+               if (state)
+                       ad->main.hotspot_mode |= VCONFKEY_MOBILE_HOTSPOT_MODE_USB;
+               else
+                       ad->main.hotspot_mode ^= VCONFKEY_MOBILE_HOTSPOT_MODE_USB;
+
+               if (ad->main.usb_item)
+                       elm_genlist_item_update(ad->main.usb_item);
+               break;
+
+       default:
+               DBG("Unknown tethering type : %d\n", type);
+               break;
+       }
+
+       if (ad->main.hotspot_mode && ad->main.device_item == NULL) {
+               item = elm_genlist_item_append(ad->main.genlist,
+                               ad->main.device_itc, ad, NULL,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
+               ad->main.device_item = item;
+       } else if (ad->main.hotspot_mode == 0 && ad->main.device_item) {
+                       elm_object_item_del(ad->main.device_item);
+                       ad->main.device_item = NULL;
+       }
+
+       __update_emul_clients_genlist(ad);
+
        __MOBILE_AP_FUNC_EXIT__;
+       return;
+}
+#endif
+
+static int __is_allowed(tethering_type_e type)
+{
+       int state = 0;
+       device_policy_manager_h dpm = NULL;
+
+       dpm = dpm_manager_create();
+       if (dpm == NULL) {
+               ERR("Failed to create device policy manager!!");
+               return 0;
+       }
+
+       switch (type) {
+       case TETHERING_TYPE_WIFI:
+               dpm_restriction_get_wifi_hotspot_state(dpm, &state);
+               break;
+       case TETHERING_TYPE_USB:
+               dpm_restriction_get_usb_tethering_state(dpm, &state);
+               break;
+       case TETHERING_TYPE_BT:
+               dpm_restriction_get_bluetooth_tethering_state(dpm, &state);
+               break;
+       default:
+               break;
+       }
+
+       dpm_manager_destroy(dpm);
+
+       return state;
 }
 
 static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
@@ -512,6 +733,13 @@ static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       if (!__is_allowed(TETHERING_TYPE_WIFI)) {
+               ERR("Wi-Fi tethering is restricted!!");
+               elm_check_state_set(obj, EINA_FALSE);
+               _create_security_restriction_noti(TETHERING_TYPE_WIFI);
+               return;
+       }
+
        if (data == NULL) {
                ERR("The param is NULL\n");
                return;
@@ -520,12 +748,26 @@ static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
        mh_appdata_t *ad = (mh_appdata_t *)data;
 
        _update_wifi_item(ad, MH_STATE_PROCESS);
+       ad->type = TETHERING_TYPE_WIFI;
+       ad->is_wifi_teth_enabling = true;
+
+#ifdef TIZEN_FEATURE_EMULATOR
+       selected_type = TETHERING_TYPE_WIFI;
+       selected_state = (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) ? EINA_FALSE : EINA_TRUE;
+       DBG("type [%d] state[%d]", selected_type, selected_state);
+#endif
 
        if (_handle_wifi_onoff_change(ad) != 0) {
                ERR("_handle_wifi_onoff_change is failed\n");
                _update_wifi_item(ad, MH_STATE_NONE);
+               ad->is_wifi_teth_enabling = false;
        }
 
+#ifdef TIZEN_FEATURE_EMULATOR
+       if (_get_checkbox_status(selected_type) || !selected_state)
+               _update_emul_main_view(ad, selected_type, selected_state);
+#endif
+
        __MOBILE_AP_FUNC_EXIT__;
 
        return;
@@ -535,73 +777,34 @@ static void __select_wifi_item(void *data, Evas_Object *obj, void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       Evas_Object *content;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
        if (data == NULL) {
                ERR("The param is NULL\n");
                return;
        }
 
-       mh_appdata_t *ad = (mh_appdata_t *)data;
-
-       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+       elm_genlist_item_selected_set(item, EINA_FALSE);
 
-       __wifi_onoff_changed_cb(data, ad->main.wifi_btn, NULL);
+       content = elm_object_item_part_content_get(item, "elm.icon");
+       __wifi_onoff_changed_cb(data, content, NULL);
 
        __MOBILE_AP_FUNC_EXIT__;
 
        return;
 }
 
-static void __select_setup_item(void *data, Evas_Object *obj, void *event_info)
+static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
-       mh_appdata_t *ad = (mh_appdata_t *)data;
-       int connected_wifi_clients = 0;
-       int ret = 0;
-
-       if (data == NULL) {
-               ERR("The param is NULL\n");
-               return;
-       }
-
-       elm_genlist_item_selected_set(item, EINA_FALSE);
-
-       if (tethering_is_enabled(ad->handle, TETHERING_TYPE_WIFI) == false) {
-               mh_draw_wifi_setup_view(ad);
-               return;
-       }
-
-       DBG("Wi-Fi tethering is on\n");
-       if (_get_no_of_connected_device(ad->handle, &connected_wifi_clients,
-                               TETHERING_TYPE_WIFI) == FALSE) {
-               ERR("Getting the number of connected device is failed\n");
-       }
-
-       if (connected_wifi_clients > 0) {
-               _prepare_popup(MH_POP_ENTER_TO_WIFI_SETUP_CONF,
-                               _("IDS_MOBILEAP_POP_CONNECTED_DEVICE_WILL_BE_DISCONNECTED"));
-               _create_popup(ad);
-       } else {
-               _update_wifi_item(ad, MH_STATE_PROCESS);
-               ret = tethering_disable(ad->handle, TETHERING_TYPE_WIFI);
-               if (ret != TETHERING_ERROR_NONE) {
-                       ERR("Wi-Fi tethering off is failed : %d\n", ret);
-                       _update_wifi_item(ad, MH_STATE_NONE);
-               } else
-                       ad->main.need_recover_wifi_tethering = true;
-
-               mh_draw_wifi_setup_view(ad);
-       }
-
-       __MOBILE_AP_FUNC_EXIT__;
-
-       return;
-}
-
-static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       __MOBILE_AP_FUNC_ENTER__;
+       if (!__is_allowed(TETHERING_TYPE_BT)) {
+               ERR("BT tethering is restricted!!");
+               elm_check_state_set(obj, EINA_FALSE);
+               _create_security_restriction_noti(TETHERING_TYPE_BT);
+               return;
+       }
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -611,12 +814,26 @@ static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info
        mh_appdata_t *ad = (mh_appdata_t *)data;
 
        _update_bt_item(ad, MH_STATE_PROCESS);
+       ad->type = TETHERING_TYPE_BT;
+       ad->is_bt_teth_enabling = true;
+
+#ifdef TIZEN_FEATURE_EMULATOR
+       selected_type = TETHERING_TYPE_BT;
+       selected_state = (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_BT) ? EINA_FALSE : EINA_TRUE;
+       DBG("type [%d] state[%d]", selected_type, selected_state);
+#endif
 
        if (_handle_bt_onoff_change(ad) != 0) {
                ERR("_handle_bt_onoff_change is failed\n");
                _update_bt_item(ad, MH_STATE_NONE);
+               ad->is_bt_teth_enabling = false;
        }
 
+#ifdef TIZEN_FEATURE_EMULATOR
+       if (_get_checkbox_status(selected_type) || !selected_state)
+               _update_emul_main_view(ad, selected_type, selected_state);
+#endif
+
        __MOBILE_AP_FUNC_EXIT__;
 
        return;
@@ -626,8 +843,8 @@ static void __select_bt_item(void *data, Evas_Object *obj, void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       Evas_Object *content;
        Elm_Object_Item *item = (Elm_Object_Item *)event_info;
-       mh_appdata_t *ad = (mh_appdata_t *)data;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -636,7 +853,8 @@ static void __select_bt_item(void *data, Evas_Object *obj, void *event_info)
 
        elm_genlist_item_selected_set(item, EINA_FALSE);
 
-       __bt_onoff_changed_cb(data, ad->main.bt_btn, NULL);
+       content = elm_object_item_part_content_get(item, "elm.icon");
+       __bt_onoff_changed_cb(data, content, NULL);
 
        __MOBILE_AP_FUNC_EXIT__;
 
@@ -647,19 +865,39 @@ static void __usb_onoff_changed_cb(void *data, Evas_Object *obj, void *event_inf
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       if (!__is_allowed(TETHERING_TYPE_USB)) {
+               ERR("USB tethering is restricted!!");
+               elm_check_state_set(obj, EINA_FALSE);
+               _create_security_restriction_noti(TETHERING_TYPE_USB);
+               return;
+       }
+
        if (data == NULL) {
                ERR("The param is NULL\n");
                return;
        }
 
        mh_appdata_t *ad = (mh_appdata_t *)data;
-
        _update_usb_item(ad, MH_STATE_PROCESS);
+       ad->type = TETHERING_TYPE_USB;
+       ad->is_usb_teth_enabling = true;
+
+#ifdef TIZEN_FEATURE_EMULATOR
+       selected_type = TETHERING_TYPE_USB;
+       selected_state = (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_USB) ? EINA_FALSE : EINA_TRUE;
+#endif
+
        if (_handle_usb_onoff_change(ad) != 0) {
                ERR("_handle_usb_onoff_change is failed\n");
                _update_usb_item(ad, MH_STATE_NONE);
+               ad->is_usb_teth_enabling = false;
        }
 
+#ifdef TIZEN_FEATURE_EMULATOR
+       if (_get_checkbox_status(selected_type) || !selected_state)
+               _update_emul_main_view(ad, selected_type, selected_state);
+#endif
+
        __MOBILE_AP_FUNC_EXIT__;
 
        return;
@@ -669,8 +907,8 @@ static void __select_usb_item(void *data, Evas_Object *obj, void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       Evas_Object *content;
        Elm_Object_Item *item = (Elm_Object_Item *)event_info;
-       mh_appdata_t *ad = (mh_appdata_t *)data;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -679,16 +917,17 @@ static void __select_usb_item(void *data, Evas_Object *obj, void *event_info)
 
        elm_genlist_item_selected_set(item, EINA_FALSE);
 
-       __usb_onoff_changed_cb(data, ad->main.usb_btn, NULL);
+       content = elm_object_item_part_content_get(item, "elm.icon");
+       __usb_onoff_changed_cb(data, content, NULL);
 
        __MOBILE_AP_FUNC_EXIT__;
 
        return;
 }
 
-static void __back_btn_cb(void *data, Evas_Object *obj, void *event_info)
+static void  __back_btn_cb(void *data, Elm_Object_Item *navi_item)
 {
-       __MOBILE_AP_FUNC_ENTER__;
+       INFO("+\n");
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -697,588 +936,353 @@ static void __back_btn_cb(void *data, Evas_Object *obj, void *event_info)
 
        mh_appdata_t *ad = (mh_appdata_t*)data;
 
+       _release_list_client_handle(ad);
+       _main_callback_del(ad);
+
        ug_destroy_me(((mh_ugdata_t *)ad->gadget)->ug);
 
-       __MOBILE_AP_FUNC_EXIT__;
+       INFO("-\n");
+       return;
 }
 
 static char *__get_wifi_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (strcmp(part, "elm.text") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
+       if (!strcmp("elm.text", part))
+               return strdup(STR_MOBILE_HOTSPOT);
 
-       return strdup(_("IDS_MOBILEAP_MBODY_WI_FI_TETHERING"));
+       return NULL;
 }
 
 static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
                const char *part)
 {
-       __MOBILE_AP_FUNC_ENTER__;
+       mh_appdata_t *ad = (mh_appdata_t*)data;
+       Evas_Object *btn = NULL;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
                return NULL;
        }
 
-       if (strcmp(part, "elm.icon") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
-
-       mh_appdata_t *ad = (mh_appdata_t*)data;
-       Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-
-       if (ad->main.wifi_state == MH_STATE_PROCESS) {
-               progressbar = elm_progressbar_add(obj);
-               if (progressbar == NULL) {
-                       ERR("progressbar is NULL\n");
-                       return NULL;
-               }
-               elm_object_style_set(progressbar, "list_process");
-               elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
-               elm_progressbar_pulse(progressbar, EINA_TRUE);
-               evas_object_show(progressbar);
-               ad->main.wifi_btn = progressbar;
-       } else {
-               btn = elm_check_add(obj);
-               elm_object_style_set(btn, "on&off");
-               evas_object_show(btn);
+       if (!strcmp("elm.swallow.end", part)) {
+               if (ad->main.wifi_state == MH_STATE_PROCESS) {
+                       btn = _create_progressbar(obj, "process_medium");
+               } else {
+                       btn = elm_check_add(obj);
+                       elm_object_style_set(btn, "on&off");
 
-               evas_object_pass_events_set(btn, EINA_TRUE);
-               evas_object_propagate_events_set(btn, EINA_FALSE);
-               elm_check_state_set(btn, ad->main.hotspot_mode &
+                       evas_object_propagate_events_set(btn, EINA_FALSE);
+                       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_check_state_set(btn, ad->main.hotspot_mode &
                                VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI ? EINA_TRUE : EINA_FALSE);
 
-               evas_object_smart_callback_add(btn, "changed", __wifi_onoff_changed_cb,
-                               ad);
-               ad->main.wifi_btn = btn;
-       }
-
-       __MOBILE_AP_FUNC_EXIT__;
-       return ad->main.wifi_btn;
-}
-
-static char *__get_setup_label(void *data, Evas_Object *obj, const char *part)
-{
-       if (data == NULL) {
-
-               ERR("The param is NULL\n");
-               return NULL;
-       }
-
-       if (strcmp(part, "elm.text") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
+                       evas_object_smart_callback_add(btn, "changed", __wifi_onoff_changed_cb, ad);
+                       evas_object_show(btn);
+               }
        }
 
-       return strdup(_("IDS_MOBILEAP_MBODY_WI_FI_TETHERING_SETTINGS"));
+       return btn;
 }
 
 static char *__get_bt_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (strcmp(part, "elm.text") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
+       if (!strcmp("elm.text", part))
+               return strdup(STR_BLUETOOTH_TETH);
 
-       return strdup(_("IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING"));
+       return NULL;
 }
 
 static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part)
 {
-       __MOBILE_AP_FUNC_ENTER__;
-
        mh_appdata_t *ad = (mh_appdata_t *)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-
-       if (strcmp(part, "elm.icon") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
 
        if (data == NULL) {
                ERR("The param is NULL\n");
                return NULL;
        }
 
-       ad->main.bt_btn = NULL;
-       if (ad->main.bt_state == MH_STATE_PROCESS) {
-               progressbar = elm_progressbar_add(obj);
-               if (progressbar == NULL) {
-                       ERR("progressbar is NULL\n");
-                       return NULL;
-               }
-               elm_object_style_set(progressbar, "list_process");
-               elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
-               elm_progressbar_pulse(progressbar, EINA_TRUE);
-               evas_object_show(progressbar);
-               ad->main.bt_btn = progressbar;
-       } else {
-               btn = elm_check_add(obj);
-               if (btn == NULL) {
-                       ERR("btn is NULL\n");
-                       return NULL;
-               }
-               elm_object_style_set(btn, "on&off");
-               evas_object_pass_events_set(btn, EINA_TRUE);
-               evas_object_propagate_events_set(btn, EINA_FALSE);
-               elm_check_state_set(btn, ad->main.hotspot_mode &
+       if (!strcmp("elm.swallow.end", part)) {
+               if (ad->main.bt_state == MH_STATE_PROCESS) {
+                       btn = _create_progressbar(obj, "process_medium");
+               } else {
+                       btn = elm_check_add(obj);
+                       if (btn == NULL) {
+                               ERR("btn is NULL\n");
+                               return NULL;
+                       }
+                       elm_object_style_set(btn, "on&off");
+                       evas_object_pass_events_set(btn, EINA_TRUE);
+                       evas_object_propagate_events_set(btn, EINA_FALSE);
+                       elm_check_state_set(btn, ad->main.hotspot_mode &
                                VCONFKEY_MOBILE_HOTSPOT_MODE_BT ? EINA_TRUE : EINA_FALSE);
-               evas_object_show(btn);
-               evas_object_smart_callback_add(btn, "changed", __bt_onoff_changed_cb,
-                               ad);
-               ad->main.bt_btn = btn;
+                       evas_object_show(btn);
+                       evas_object_smart_callback_add(btn, "changed", __bt_onoff_changed_cb, ad);
+               }
        }
 
-       __MOBILE_AP_FUNC_EXIT__;
-
-       return ad->main.bt_btn;
+       return btn;
 }
 
 static char *__get_usb_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (strcmp(part, "elm.text") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
+       if (!strcmp("elm.text", part))
+               return strdup(STR_USB_TETH);
 
-       return strdup(_("IDS_MOBILEAP_MBODY_USB_TETHERING"));
+       return NULL;
 }
 
 static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
                                                        const char *part)
 {
-       __MOBILE_AP_FUNC_ENTER__;
-
        mh_appdata_t *ad = (mh_appdata_t *)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-
-       if (strcmp(part, "elm.icon") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
 
        if (data == NULL) {
                ERR("The param is NULL\n");
                return NULL;
        }
 
-       ad->main.usb_btn = NULL;
-       if (ad->main.usb_state == MH_STATE_PROCESS) {
-               progressbar = elm_progressbar_add(obj);
-               if (progressbar == NULL) {
-                       ERR("progressbar is NULL\n");
-                       return NULL;
-               }
-               elm_object_style_set(progressbar, "list_process");
-               elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
-               elm_progressbar_pulse(progressbar, EINA_TRUE);
-               evas_object_show(progressbar);
-               ad->main.usb_btn = progressbar;
-       } else {
-               btn = elm_check_add(obj);
-               if (btn == NULL) {
-                       ERR("btn is NULL\n");
-                       return NULL;
-               }
-               elm_object_style_set(btn, "on&off");
-               evas_object_pass_events_set(btn, EINA_TRUE);
-               evas_object_propagate_events_set(btn, EINA_FALSE);
-               elm_check_state_set(btn, ad->main.hotspot_mode &
+       if (!strcmp("elm.swallow.end", part)) {
+               if (ad->main.usb_state == MH_STATE_PROCESS) {
+                       btn = _create_progressbar(obj, "process_medium");
+               } else {
+                       btn = elm_check_add(obj);
+                       if (btn == NULL) {
+                               ERR("btn is NULL\n");
+                               return NULL;
+                       }
+                       elm_object_style_set(btn, "on&off");
+                       evas_object_pass_events_set(btn, EINA_TRUE);
+                       evas_object_propagate_events_set(btn, EINA_FALSE);
+                       elm_check_state_set(btn, ad->main.hotspot_mode &
                                VCONFKEY_MOBILE_HOTSPOT_MODE_USB ? EINA_TRUE : EINA_FALSE);
-               evas_object_show(btn);
-               evas_object_smart_callback_add(btn, "changed", __usb_onoff_changed_cb,
-                               ad);
-               ad->main.usb_btn = btn;
+                       evas_object_show(btn);
+                       evas_object_smart_callback_add(btn, "changed", __usb_onoff_changed_cb, ad);
+               }
        }
 
-       __MOBILE_AP_FUNC_EXIT__;
-
-       return ad->main.usb_btn;
+       return btn;
 }
 
 static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
 {
-       __MOBILE_AP_FUNC_ENTER__;
-
        mh_appdata_t *ad = (mh_appdata_t *)data;
        char buf[MH_LABEL_LENGTH_MAX] = {0, };
        char device_name[MH_LABEL_LENGTH_MAX] = {0, };
        char passphrase[MH_LABEL_LENGTH_MAX] = {0, };
+       char security_type[MH_LABEL_LENGTH_MAX] = {0, };
+       char *fmt = STR_SECURITY_TYPE_PS;
        char *hidden = "";
        char *ptr = NULL;
+       char *device_name_utf = NULL;
        int wifi_state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
 
-       if (strcmp(part, "elm.text") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
-
        if (data == NULL) {
                ERR("The param is NULL\n");
                return NULL;
        }
 
-       ptr = elm_entry_utf8_to_markup(ad->setup.device_name);
-       if (ptr == NULL) {
-               ERR("elm_entry_utf8_to_markup is failed\n");
-               return NULL;
-       }
-       g_strlcpy(device_name, ptr, MH_LABEL_LENGTH_MAX);
-       free(ptr);
+       if (!strcmp("elm.text.multiline", part)) {
+               device_name_utf = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
+               if (device_name_utf == NULL) {
+                       ERR("vconf_get_str failed \n");
+                       return NULL;
+               }
 
-       if (ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
-               ptr = elm_entry_utf8_to_markup(ad->setup.wifi_passphrase);
+               ptr = elm_entry_utf8_to_markup(device_name_utf);
                if (ptr == NULL) {
+                       g_free(device_name_utf);
                        ERR("elm_entry_utf8_to_markup is failed\n");
                        return NULL;
                }
-               g_strlcpy(passphrase, ptr, MH_LABEL_LENGTH_MAX);
-               free(ptr);
-       }
-
-       wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
-
-       if (wifi_state && ad->setup.visibility == false)
-               hidden = _("IDS_MOBILEAP_BODY_WI_FI_TETHERING_HIDDEN");
-
-       if (wifi_state && ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
-               snprintf(buf, MH_LABEL_LENGTH_MAX,
-                               "%s: %s<br>"
-                               "%s: %s<br><br>"
-                               "%s"
-                               "%s"
-                               "%s",
-                               _("IDS_MOBILEAP_BODY_DEVICE_NAME"),
-                               device_name,
-                               _("IDS_MOBILEAP_BODY_PASSWORD"),
-                               passphrase,
-                               _("IDS_MOBILEAP_BODY_THIS_PASSWORD_IS_ONLY_FOR_WI_FI_TETHERING"),
-                               hidden[0] != '\0' ? "<br>" : "",
-                               hidden);
 
-       } else {
-               snprintf(buf, MH_LABEL_LENGTH_MAX,
-                               "%s : %s%s%s",
-                               _("IDS_MOBILEAP_BODY_DEVICE_NAME"),
-                               device_name,
-                               hidden[0] != '\0' ? "<br>" : "",
-                               hidden);
-       }
+               g_strlcpy(ad->setup.device_name, ptr,
+                               sizeof(ad->setup.device_name));
+               g_strlcpy(device_name, ptr, MH_LABEL_LENGTH_MAX);
+               g_free(device_name_utf);
+               g_free(ptr);
+               ptr = NULL;
+
+               if (ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
+                       ptr = elm_entry_utf8_to_markup(ad->setup.wifi_passphrase);
+                       if (ptr == NULL) {
+                               ERR("elm_entry_utf8_to_markup is failed\n");
+                               return NULL;
+                       }
+                       g_strlcpy(passphrase, ptr, MH_LABEL_LENGTH_MAX);
+                       g_free(ptr);
 
-       __MOBILE_AP_FUNC_EXIT__;
+                       snprintf(security_type, sizeof(security_type),
+                                       fmt, "WPA2 PSK");
+               }
+
+               wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
+
+               if (wifi_state && ad->setup.visibility == false)
+                       hidden = STR_MOBILE_HOTSPOT_IS_HIDDEN;
+
+               if (wifi_state && ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
+                       snprintf(buf, MH_LABEL_LENGTH_MAX,
+                                       "<font_size=30>"
+                                       "%s: %s<br>"
+                                       "%s: %s<br>"
+                                       "%s<br>"
+                                       "%s%s"
+                                       "%s"
+                                       "</font_size>",
+                                       STR_DEV_NAME,
+                                       device_name,
+                                       STR_PASSWORD,
+                                       passphrase,
+                                       security_type,
+                                       STR_ENTER_THE_PASSWORD_ON_THE_OTHER_DEVICE,
+                                       hidden && hidden[0] != '\0' ? "<br>" : "",
+                                       hidden);
+               } else {
+                       snprintf(buf, MH_LABEL_LENGTH_MAX,
+                                       "<font_size=30>"
+                                       "%s: %s%s"
+                                       "%s"
+                                       "</font_size>",
+                                       STR_DEV_NAME,
+                                       device_name,
+                                       hidden && hidden[0] != '\0' ? "<br>" : "",
+                                       hidden);
+               }
 
-       return strdup(buf);
+               return strdup(buf);
+       }
+
+       return NULL;
 }
 
-static char *__get_connected_device_label(void *data, Evas_Object *obj,
+static char *__get_device_label(void *data, Evas_Object *obj,
                                                        const char *part)
 {
-       if (strcmp(part, "elm.text.1") != 0 && strcmp(part, "elm.text.2") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
+       char buf[MH_LABEL_LENGTH_MAX] = {0, };
 
        if (data == NULL) {
                ERR("The param is NULL\n");
                return NULL;
        }
 
-       mh_appdata_t *ad = (mh_appdata_t*)data;
-       char buf[MH_LABEL_LENGTH_MAX] = {0, };
-
-       if (strcmp(part, "elm.text.1") != 0)
-               snprintf(buf, MH_LABEL_LENGTH_MAX, "%d",
-                               ad->clients.number);
-       else if (strcmp(part, "elm.text.2") != 0)
-               g_strlcpy(buf, _("IDS_MOBILEAP_BODY_CONNECTED_DEVICE"),
-                               sizeof(buf));
+       if (!strcmp("elm.text", part)) {
+               snprintf(buf, MH_LABEL_LENGTH_MAX, "<font_size=30>%s</font_size>", STR_CONNECTED_DEV);
+               return strdup(buf);
+       }
 
-       return strdup(buf);
+       return NULL;
 }
 
+#ifdef TETHERING_DATA_USAGE_SUPPORT
 static char *__get_usage_label(void *data, Evas_Object *obj, const char *part)
 {
+       mh_appdata_t *ad = (mh_appdata_t*)data;
+       unsigned long long total = 0;
+       unsigned long long sent = 0;
+       unsigned long long received = 0;
+       char *fmt_str;
+       char buf[MH_LABEL_LENGTH_MAX] = {0, };
+       char label[MH_LABEL_LENGTH_MAX] = {0, };
+
        if (data == NULL) {
                ERR("The param is NULL\n");
                return NULL;
        }
 
-       if (strcmp(part, "elm.text.1") != 0 && strcmp(part, "elm.text.2") != 0) {
-               DBG("Unknown part : %s\n", part);
-               return NULL;
-       }
-
-       mh_appdata_t *ad = (mh_appdata_t*)data;
-       int sent = 0;
-       int received = 0;
-       char *sent_str = NULL;
-       char *received_str = NULL;
-       char fmt[MH_LABEL_LENGTH_MAX] = {0, };
-       char label[MH_LABEL_LENGTH_MAX] = {0, };
-
-       if (strcmp(part, "elm.text.1") != 0 ) {
+       if (!strcmp("elm.text", part)) {
+               g_strlcpy(label, STR_DATA_USAGE, sizeof(label));
+               return strdup(label);
+       } else if (!strcmp("elm.text.multiline", part)) {
                sent = ad->data_statistics.pdp_total_sent;
                received = ad->data_statistics.pdp_total_receive;
 
-               if (sent >= MH_MB) {
+               if (sent >= MH_MB || received >= MH_MB) {
                        sent /= MH_MB;
-                       sent_str =  _("IDS_MOBILEAP_BODY_PD_MB");
-               } else if (sent >= MH_KB) {
-                       sent /= MH_KB;
-                       sent_str =  _("IDS_MOBILEAP_BODY_PD_KB");
-               } else {
-                       sent_str =  _("IDS_MOBILEAP_BODY_PD_BYTES");
-               }
-
-               if (received >= MH_MB) {
                        received /= MH_MB;
-                       received_str =  _("IDS_MOBILEAP_BODY_PD_MB");
-               } else if (received >= MH_KB) {
+
+                       total = sent + received;
+                       fmt_str = STR_MB;
+               } else if (sent + received >= MH_MB) {
+                       total = (sent + received) / MH_MB;
+                       fmt_str = STR_MB;
+               } else if (sent >= MH_KB || received >= MH_KB) {
+                       sent /= MH_KB;
                        received /= MH_KB;
-                       received_str =  _("IDS_MOBILEAP_BODY_PD_KB");
+
+                       total = sent + received;
+                       fmt_str = STR_KB;
+               } else if (sent + received >= MH_KB) {
+                       total = (sent + received) / MH_KB;
+                       fmt_str = STR_KB;
                } else {
-                       received_str =  _("IDS_MOBILEAP_BODY_PD_BYTES");
+                       total = sent + received;
+                       fmt_str = STR_BYTE;
                }
 
-               snprintf(fmt, sizeof(fmt), "%s %s / %s %s",
-                               _("IDS_MOBILEAP_BODY_SENT_C"),
-                               sent_str,
-                               _("IDS_MOBILEAP_BODY_RECEIVED_C"),
-                               received_str);
-               snprintf(label, sizeof(label), fmt, sent, received);
-       } else if (strcmp(part, "elm.text.2") != 0)
-               g_strlcpy(label, _("IDS_MOBILEAP_MBODY_DATA_USAGE"),
-                               sizeof(label));
-
-       return strdup(label);
-}
-
-static char *__get_diff_time(time_t connection_time)
-{
-       time_t current_time;
-       char buf[MH_LABEL_LENGTH_MAX] = {0, };
-       int day;
-       int hour;
-       int min;
-       int sec;
-       double diff;
-
-       time(&current_time);
-       diff = difftime(current_time, connection_time);
-       day = diff / (60 * 60 * 24);
-       diff = diff - (day * 60 * 60 * 24);
-       hour = diff / (60 * 60);
-       diff = diff - (hour * 60 * 60);
-       min = diff / 60;
-       diff = diff - (min * 60);
-       sec = diff;
-
-       if (day > 0)
-               hour = hour + day * 24;
-
-       if (hour > 0)
-               snprintf(buf, sizeof(buf), "%02d : %02d : %02d", hour, min, sec);
-       else
-               snprintf(buf, sizeof(buf), "%02d : %02d", min, sec);
-
-        return g_strdup(buf);
-}
-
-static char *__gl_get_dev_label(void *data, Evas_Object *obj, const char *part)
-{
-       if (data == NULL || part == NULL) {
-               ERR("Invalid param\n");
-               return NULL;
-       }
-
-       tethering_client_h client = (tethering_client_h)data;
-       char *name = NULL;
-       time_t tm;
-
-       if (!strcmp(part, "elm.text.1")) {
-               tethering_client_get_name(client, &name);
-               DBG("Device name : %s\n", name);
-
-               if (!strcmp(name, "UNKNOWN")) {
-                       return strdup(S_("IDS_COM_BODY_NO_NAME"));
+               if (total > INT_MAX) {
+                       ERR("data usage overflow\n");
+                       total = 0;
                }
-
-               return name;
-       } else if (!strcmp(part, "elm.text.2")) {
-               tethering_client_get_time(client, &tm);
-               return __get_diff_time(tm);
+               snprintf(label, MH_LABEL_LENGTH_MAX, fmt_str, (int)total);
+               return strdup(label);
        }
 
        return NULL;
 }
-
-static Evas_Object *__gl_get_dev_wifi_icon(void *data, Evas_Object *obj,
-                                                       const char *part)
-{
-       Evas_Object *icon;
-
-       if (!strncmp(part, "elm.icon", 8)) {
-               icon = elm_icon_add(obj);
-               elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, WIFI_ICON);
-               evas_object_size_hint_aspect_set(icon,
-                               EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-               return icon;
-       }
-       return NULL;
-}
-
-static Evas_Object *__gl_get_dev_usb_icon(void *data, Evas_Object *obj,
-                                                       const char *part)
-{
-       Evas_Object *icon;
-
-       if (!strncmp(part, "elm.icon", 8)) {
-               icon = elm_icon_add(obj);
-               elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, USB_ICON);
-               evas_object_size_hint_aspect_set(icon,
-                               EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-               return icon;
-       }
-       return NULL;
-}
-
-static Evas_Object *__gl_get_dev_bt_icon(void *data, Evas_Object *obj,
-                                                       const char *part)
-{
-       Evas_Object *icon;
-
-       if (!strncmp(part, "elm.icon", 8)) {
-               icon = elm_icon_add(obj);
-               elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, BT_ICON);
-               evas_object_size_hint_aspect_set(icon,
-                                       EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
-               return icon;
-       }
-       return NULL;
-}
-
-static void _gl_exp(void *data, Evas_Object *obj, void *event_info)
-{
-       __MOBILE_AP_FUNC_ENTER__;
-
-       if (data == NULL) {
-               ERR("Invalid param\n");
-               return;
-       }
-
-       mh_appdata_t *ad = (mh_appdata_t *)data;
-
-       ap_update_data_device(ad);
-
-       __MOBILE_AP_FUNC_EXIT__;
-}
-
-static void _gl_con(void *data, Evas_Object *obj, void *event_info)
-{
-       __MOBILE_AP_FUNC_ENTER__;
-
-       if (event_info == NULL) {
-               ERR("Invalid param\n");
-               return;
-       }
-
-       mh_appdata_t *ad = (mh_appdata_t *)data;
-
-       elm_genlist_item_subitems_clear(ad->main.device_item);
-
-       __MOBILE_AP_FUNC_EXIT__;
-}
-
-static void _gl_device_item_sel(void *data, Evas_Object *obj, void *event_info)
-{
-       __MOBILE_AP_FUNC_ENTER__;
-
-       Elm_Object_Item *item = (Elm_Object_Item*)event_info;
-
-       elm_genlist_item_selected_set(item, EINA_FALSE);
-
-       Eina_Bool status = elm_genlist_item_expanded_get(item);
-       DBG("+ expand status:%d\n", status);
-
-       elm_genlist_item_expanded_set(item, !status);
-
-       __MOBILE_AP_FUNC_EXIT__;
-
-       return;
-}
-
-static void __free_genlist_itc(mh_appdata_t *ad)
-{
-       elm_genlist_item_class_free(ad->main.sp_itc);
-       elm_genlist_item_class_free(ad->main.wifi_itc);
-       elm_genlist_item_class_free(ad->main.setup_itc);
-       elm_genlist_item_class_free(ad->main.bt_itc);
-       elm_genlist_item_class_free(ad->main.usb_itc);
-       elm_genlist_item_class_free(ad->main.help_itc);
-       elm_genlist_item_class_free(ad->main.device_itc);
-       elm_genlist_item_class_free(ad->main.device0_itc);
-       elm_genlist_item_class_free(ad->main.usage_itc);
-       elm_genlist_item_class_free(ad->main.dev_itc[TETHERING_TYPE_WIFI]);
-       elm_genlist_item_class_free(ad->main.dev_itc[TETHERING_TYPE_USB]);
-       elm_genlist_item_class_free(ad->main.dev_itc[TETHERING_TYPE_BT]);
-       return;
-}
+#endif
 
 static void __set_genlist_itc(mh_appdata_t *ad)
 {
        /* On, Off view's item class for genlist */
-       ad->main.sp_itc = elm_genlist_item_class_new();
-       ad->main.sp_itc->item_style = "dialogue/separator";
-       ad->main.sp_itc->func.text_get = NULL;
-       ad->main.sp_itc->func.content_get = NULL;
-       ad->main.sp_itc->func.state_get = NULL;
-       ad->main.sp_itc->func.del = NULL;
-
        ad->main.wifi_itc = elm_genlist_item_class_new();
-       ad->main.wifi_itc->item_style = "dialogue/1text.1icon";
+       if (ad->main.wifi_itc == NULL) {
+               ERR("elm_genlist_item_class_new failed\n");
+               return;
+       }
+
+       ad->main.wifi_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
        ad->main.wifi_itc->func.text_get = __get_wifi_label;
-       ad->main.wifi_itc->func.content_get = __get_wifi_icon;
+       ad->main.wifi_itc->func.content_get =  __get_wifi_icon;
        ad->main.wifi_itc->func.state_get = NULL;
        ad->main.wifi_itc->func.del = NULL;
 
-       ad->main.end_sp_itc = elm_genlist_item_class_new();
-       ad->main.end_sp_itc->item_style = "dialogue/separator";
-       ad->main.end_sp_itc->func.text_get = NULL;
-       ad->main.end_sp_itc->func.content_get = NULL;
-       ad->main.end_sp_itc->func.state_get = NULL;
-       ad->main.end_sp_itc->func.del = NULL;
        /* End of On, Off view's item class for genlist */
 
        /* Off view's item class for genlist */
-       ad->main.setup_itc = elm_genlist_item_class_new();
-       ad->main.setup_itc->item_style = "dialogue/1text";
-       ad->main.setup_itc->func.text_get = __get_setup_label;
-       ad->main.setup_itc->func.content_get = NULL;
-       ad->main.setup_itc->func.state_get = NULL;
-       ad->main.setup_itc->func.del = NULL;
-
        ad->main.bt_itc = elm_genlist_item_class_new();
-       ad->main.bt_itc->item_style = "dialogue/1text.1icon";
+       if (ad->main.bt_itc == NULL) {
+               ERR("elm_genlist_item_class_new failed\n");
+               return;
+       }
+
+       ad->main.bt_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
        ad->main.bt_itc->func.text_get = __get_bt_label;
        ad->main.bt_itc->func.content_get = __get_bt_icon;
        ad->main.bt_itc->func.state_get = NULL;
        ad->main.bt_itc->func.del = NULL;
 
        ad->main.usb_itc = elm_genlist_item_class_new();
-       ad->main.usb_itc->item_style = "dialogue/1text.1icon";
+       if (ad->main.usb_itc == NULL) {
+               ERR("elm_genlist_item_class_new failed\n");
+               return;
+       }
+
+       ad->main.usb_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
        ad->main.usb_itc->func.text_get = __get_usb_label;
        ad->main.usb_itc->func.content_get = __get_usb_icon;
        ad->main.usb_itc->func.state_get = NULL;
        ad->main.usb_itc->func.del = NULL;
 
        ad->main.help_itc = elm_genlist_item_class_new();
-       ad->main.help_itc->item_style = "multiline/1text";
+       if (ad->main.help_itc == NULL) {
+               ERR("elm_genlist_item_class_new failed\n");
+               return;
+       }
+
+       ad->main.help_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
        ad->main.help_itc->func.text_get = __get_help_label;
        ad->main.help_itc->func.content_get = NULL;
        ad->main.help_itc->func.state_get = NULL;
@@ -1286,50 +1290,33 @@ static void __set_genlist_itc(mh_appdata_t *ad)
 
        /* End of Off view's item class for genlist */
 
-       /* On view's item class for genlist */
+
        ad->main.device_itc = elm_genlist_item_class_new();
-       ad->main.device_itc->item_style = "dialogue/2text.3/expandable";
-       ad->main.device_itc->func.text_get = __get_connected_device_label;
+       if (ad->main.device_itc == NULL) {
+               ERR("elm_genlist_item_class_new failed\n");
+               return;
+       }
+
+       ad->main.device_itc->item_style = MH_GENLIST_GROUP_INDEX_STYLE;
+       ad->main.device_itc->func.text_get = __get_device_label;
        ad->main.device_itc->func.content_get = NULL;
        ad->main.device_itc->func.state_get = NULL;
        ad->main.device_itc->func.del = NULL;
 
-       ad->main.device0_itc = elm_genlist_item_class_new();
-       ad->main.device0_itc->item_style = "dialogue/2text.3";
-       ad->main.device0_itc->func.text_get = __get_connected_device_label;
-       ad->main.device0_itc->func.content_get = NULL;
-       ad->main.device0_itc->func.state_get = NULL;
-       ad->main.device0_itc->func.del = NULL;
-
+#ifdef TETHERING_DATA_USAGE_SUPPORT
        ad->main.usage_itc = elm_genlist_item_class_new();
-       ad->main.usage_itc->item_style = "dialogue/2text.3";
+       if (ad->main.usage_itc == NULL) {
+               ERR("elm_genlist_item_class_new failed\n");
+               return;
+       }
+
+       ad->main.usage_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
        ad->main.usage_itc->func.text_get = __get_usage_label;
        ad->main.usage_itc->func.content_get = NULL;
        ad->main.usage_itc->func.state_get = NULL;
        ad->main.usage_itc->func.del = NULL;
-
-       ad->main.dev_itc[TETHERING_TYPE_WIFI] = elm_genlist_item_class_new();
-       ad->main.dev_itc[TETHERING_TYPE_WIFI]->item_style = "dialogue/2text.1icon.2";
-       ad->main.dev_itc[TETHERING_TYPE_WIFI]->func.text_get = __gl_get_dev_label;
-       ad->main.dev_itc[TETHERING_TYPE_WIFI]->func.content_get = __gl_get_dev_wifi_icon;
-       ad->main.dev_itc[TETHERING_TYPE_WIFI]->func.state_get = NULL;
-       ad->main.dev_itc[TETHERING_TYPE_WIFI]->func.del = NULL;
-
-       ad->main.dev_itc[TETHERING_TYPE_USB] = elm_genlist_item_class_new();
-       ad->main.dev_itc[TETHERING_TYPE_USB]->item_style = "dialogue/2text.1icon.2";
-       ad->main.dev_itc[TETHERING_TYPE_USB]->func.text_get = __gl_get_dev_label;
-       ad->main.dev_itc[TETHERING_TYPE_USB]->func.content_get = __gl_get_dev_usb_icon;
-       ad->main.dev_itc[TETHERING_TYPE_USB]->func.state_get = NULL;
-       ad->main.dev_itc[TETHERING_TYPE_USB]->func.del = NULL;
-
-       ad->main.dev_itc[TETHERING_TYPE_BT] = elm_genlist_item_class_new();
-       ad->main.dev_itc[TETHERING_TYPE_BT]->item_style = "dialogue/2text.1icon.2";
-       ad->main.dev_itc[TETHERING_TYPE_BT]->func.text_get = __gl_get_dev_label;
-       ad->main.dev_itc[TETHERING_TYPE_BT]->func.content_get = __gl_get_dev_bt_icon;
-       ad->main.dev_itc[TETHERING_TYPE_BT]->func.state_get = NULL;
-       ad->main.dev_itc[TETHERING_TYPE_BT]->func.del = NULL;
+#endif
        /* End of On view's item class for genlist */
-
        return;
 }
 
@@ -1354,19 +1341,21 @@ static void __gl_realized(void *data, Evas_Object *obj, void *event_info)
                                (elm_check_state_get(btn) ? "On" : "Off"));
                elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
 
-               if (item == ad->main.wifi_item || item == ad->main.bt_item)  {
+               if (item == ad->main.wifi_item || item == ad->main.bt_item) {
+                       DBG("Wi-Fi or BT item : %p\n", item);
                        elm_object_item_signal_emit(item, "elm,state,top", "");
                } else if (item == ad->main.usb_item) {
+                       DBG("USB item\n");
                        elm_object_item_signal_emit(item, "elm,state,bottom", "");
                }
        } else if (item == ad->main.setup_item) {
+               DBG("setup_item\n");
                ao = elm_object_item_access_object_get(item);
                elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, "Item");
 
                elm_object_item_signal_emit(item, "elm,state,bottom", "");
-       } else if (item == ad->main.usage_item) {
-               elm_object_item_signal_emit(item, "elm,state,bottom", "");
        } else if (item == ad->main.device_item) {
+               DBG("device_item\n");
                ao = elm_object_item_access_object_get(item);
                snprintf(str, sizeof(str), "%s, %s", "Expandable list",
                                "Double tap to open list");
@@ -1374,7 +1363,8 @@ static void __gl_realized(void *data, Evas_Object *obj, void *event_info)
 
                elm_object_item_signal_emit(item, "elm,state,top", "");
        } else if (ad->main.device_item != NULL &&
-                       ad->main.device_item == elm_genlist_item_parent_get(item))  {
+                       ad->main.device_item == elm_genlist_item_parent_get(item)) {
+               DBG("device_item's child\n");
                elm_object_item_signal_emit(item, "elm,state,center", "");
        } else {
                for (i = 0; i < 4; i++) {
@@ -1382,7 +1372,12 @@ static void __gl_realized(void *data, Evas_Object *obj, void *event_info)
                                elm_object_item_access_unregister(item);
                }
        }
-
+#ifdef TETHERING_DATA_USAGE_SUPPORT
+       if (item == ad->main.usage_item) {
+                       DBG("usage_item\n");
+                       elm_object_item_signal_emit(item, "elm,state,bottom", "");
+       }
+#endif
        return;
 }
 
@@ -1391,7 +1386,7 @@ static void __create_inner_contents(mh_appdata_t *ad)
        __MOBILE_AP_FUNC_ENTER__;
 
        Elm_Object_Item *item = NULL;
-       int i = 0;
+       int no_of_dev = 0;
 
        __read_setting(ad);
        ad->main.genlist = elm_genlist_add(ad->naviframe);
@@ -1400,27 +1395,18 @@ static void __create_inner_contents(mh_appdata_t *ad)
 
        __set_genlist_itc(ad);
 
-       /* separator */
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.sp_itc, NULL,
-                       NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-       ad->main.sp_item[i++] = item;
-
        item = elm_genlist_item_append(ad->main.genlist, ad->main.wifi_itc,
                        ad, NULL, ELM_GENLIST_ITEM_NONE,
                        __select_wifi_item, ad);
        ad->main.wifi_item = item;
 
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.setup_itc,
-                       ad, NULL, ELM_GENLIST_ITEM_NONE,
-                       __select_setup_item, ad);
-       ad->main.setup_item = item;
-
-       /* separator */
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.sp_itc, NULL,
-                       NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-       ad->main.sp_item[i++] = item;
+       if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) {
+               item = elm_genlist_item_append(ad->main.genlist, ad->main.help_itc,
+                               ad, NULL, ELM_GENLIST_ITEM_NONE,
+                               NULL, NULL);
+               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               ad->main.help_item = item;
+       }
 
        item = elm_genlist_item_append(ad->main.genlist, ad->main.bt_itc,
                        ad, NULL, ELM_GENLIST_ITEM_NONE,
@@ -1431,46 +1417,78 @@ static void __create_inner_contents(mh_appdata_t *ad)
                        ad, NULL, ELM_GENLIST_ITEM_NONE,
                        __select_usb_item, ad);
        ad->main.usb_item = item;
-
-       if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI ||
-                       ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_BT) {
-               item = elm_genlist_item_append(ad->main.genlist, ad->main.help_itc,
-                               ad, NULL, ELM_GENLIST_ITEM_NONE,
-                               NULL, NULL);
-               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-               DBG("elm_genlist_item_append for help_itc : %x\n", item);
-               ad->main.help_item = item;
+       if (_get_vconf_usb_state() == VCONFKEY_SYSMAN_USB_DISCONNECTED) {
+               if (ad->main.usb_item)
+                       elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
+       } else {
+               if (ad->main.usb_item)
+                       elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
        }
-
-       /* separator */
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.sp_itc, ad,
-                       NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-       ad->main.sp_item[i++] = item;
-
-       if (ad->main.hotspot_mode != VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
+       if (ad->main.hotspot_mode & (VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI |
+                               VCONFKEY_MOBILE_HOTSPOT_MODE_USB |
+                               VCONFKEY_MOBILE_HOTSPOT_MODE_BT)) {
+#ifdef TETHERING_DATA_USAGE_SUPPORT
                item = elm_genlist_item_append(ad->main.genlist, ad->main.usage_itc,
                                ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
                elm_genlist_item_select_mode_set(item,
                                ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
                ad->main.usage_item = item;
-
+#endif
                /* Insert "Connected devices" item */
-               ap_update_data_device(ad);
+               tethering_foreach_connected_clients(ad->handle, TETHERING_TYPE_ALL,
+                               _connected_clients_cb, (void *)ad);
+
+               no_of_dev = _get_list_clients_count(ad);
+               if (no_of_dev != 0) {
+                       item = elm_genlist_item_append(ad->main.genlist,
+                                               ad->main.device_itc, ad, NULL,
+                                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       _list_connected_dev(ad);
+                       _update_conn_clients(ad);
+               }
+               ad->main.device_item = item;
+       }
 
-               _start_update_data_packet_usage(ad);
+       if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP) {
+               if (ad->main.wifi_item)
+                       elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
+               if (ad->main.setup_item)
+                       elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
+               if (ad->main.bt_item)
+                       elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
+               if (ad->main.usb_item)
+                       elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
        }
 
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.end_sp_itc, NULL,
-                       NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
-       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-       ad->main.sp_item[i++] = item;
+       __MOBILE_AP_FUNC_EXIT__;
+       return;
+}
 
+void _main_free_genlist_itc(mh_appdata_t *ad)
+{
+       __MOBILE_AP_FUNC_ENTER__;
+
+       if (ad == NULL)
+               return;
+
+       mh_main_view_t *mv = &ad->main;
+
+#ifdef TETHERING_DATA_USAGE_SUPPORT
+       _free_genlist_itc(&mv->usage_itc);
+#endif
+       _free_genlist_itc(&mv->device_itc);
+       _free_genlist_itc(&mv->device0_itc);
+       _free_genlist_itc(&mv->help_itc);
+       _free_genlist_itc(&mv->usb_itc);
+       _free_genlist_itc(&mv->bt_itc);
+       _free_genlist_itc(&mv->setup_itc);
+       _free_genlist_itc(&mv->wifi_itc);
        __MOBILE_AP_FUNC_EXIT__;
        return;
 }
 
-void ap_callback_del(mh_appdata_t *ad)
+void _main_callback_del(mh_appdata_t *ad)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
@@ -1479,33 +1497,186 @@ void ap_callback_del(mh_appdata_t *ad)
                return;
        }
 
-       evas_object_smart_callback_del(ad->main.back_btn, "clicked",
-                       __back_btn_cb);
-       evas_object_smart_callback_del(ad->main.wifi_btn, "changed",
-                       __wifi_onoff_changed_cb);
-       evas_object_smart_callback_del(ad->main.bt_btn, "changed",
-                       __bt_onoff_changed_cb);
-       evas_object_smart_callback_del(ad->main.usb_btn, "changed",
-                       __usb_onoff_changed_cb);
+       Evas_Object *obj;
+
+       obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
+       if (obj != NULL)
+               evas_object_smart_callback_del(obj, "changed", __wifi_onoff_changed_cb);
+
+       obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
+       if (obj != NULL)
+               evas_object_smart_callback_del(obj, "changed", __bt_onoff_changed_cb);
+
+       obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
+       if (obj != NULL)
+               evas_object_smart_callback_del(obj, "changed", __usb_onoff_changed_cb);
 
-       evas_object_smart_callback_del(ad->main.genlist, "expanded", _gl_exp);
-       evas_object_smart_callback_del(ad->main.genlist, "contracted", _gl_con);
        evas_object_smart_callback_del(ad->main.genlist, "realized", __gl_realized);
 
        __MOBILE_AP_FUNC_EXIT__;
 }
 
-void ap_update_data_onoff(void* data)
+void _ctxpopup_more_button_callback_add(mh_appdata_t *ad)
+{
+       eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_MORE,
+                       __create_ctxpopup_more_button, ad);
+}
+
+void _ctxpopup_more_button_callback_del(mh_appdata_t *ad)
+{
+       eext_object_event_callback_del(ad->naviframe, EEXT_CALLBACK_MORE,
+                       __create_ctxpopup_more_button);
+}
+
+static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad)
+{
+       Evas_Coord w;
+       Evas_Coord h;
+       int pos = -1;
+       __MOBILE_AP_FUNC_ENTER__;
+
+       elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
+       pos = elm_win_rotation_get(ad->win);
+
+       switch (pos) {
+       case 0:
+       case 180:
+               evas_object_move(ctx, w/2, h);
+               break;
+       case 90:
+               evas_object_move(ctx, h/2, w);
+               break;
+       case 270:
+               evas_object_move(ctx, h/2, w);
+               break;
+       }
+       __MOBILE_AP_FUNC_EXIT__;
+}
+
+static void __rotate_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       mh_appdata_t *ad = (mh_appdata_t *)data;
+       Evas_Object *ctx = ad->ctxpopup;
+
+       __ctx_move_more_ctxpopup(ctx, ad);
+       evas_object_show(ctx);
+
        __MOBILE_AP_FUNC_EXIT__;
 }
 
-void ap_draw_contents(mh_appdata_t *ad)
+static void __dismissed_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
+       mh_appdata_t *ad = (mh_appdata_t *)data;
+       Evas_Object *ctx = ad->ctxpopup;
+
+       if (!rotate_flag) {
+               evas_object_del(ctx);
+               ctx = NULL;
+       } else {
+               __ctx_move_more_ctxpopup(ctx, ad);
+               evas_object_show(ctx);
+               rotate_flag = EINA_FALSE;
+       }
+       __MOBILE_AP_FUNC_EXIT__;
+}
+
+static void __ctx_delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj,
+               void *event_info)
+{
+       Evas_Object *navi = (Evas_Object *)data;
+       Evas_Object *ctx = obj;
+
+       if (navi == NULL) {
+               ERR("data is null\n");
+               return;
+       }
+       __MOBILE_AP_FUNC_ENTER__;
+
+       evas_object_smart_callback_del(ctx, "dismissed",
+                       __dismissed_more_ctxpopup_cb);
+       evas_object_smart_callback_del(elm_object_top_widget_get(ctx),
+                       "rotation,changed", __rotate_more_ctxpopup_cb);
+       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL,
+                       __ctx_delete_more_ctxpopup_cb, navi);
+       __MOBILE_AP_FUNC_EXIT__;
+}
+
+static void __gl_configure_wifi_tethering(void *data, Evas_Object *obj, void *event_info)
+{
+       __MOBILE_AP_FUNC_ENTER__;
+
+       if (data == NULL) {
+               ERR("The param is NULL\n");
+               return;
+       }
+       mh_appdata_t *ad = (mh_appdata_t *)data;
+
+       evas_object_del(ad->ctxpopup);
+       ad->ctxpopup = NULL;
+
+       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+       _ctxpopup_more_button_callback_del(ad);
+       mh_draw_wifi_setup_view(ad);
+
+       __MOBILE_AP_FUNC_EXIT__;
+
+       return;
+}
+
+static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
+               void *event_info)
+{
+       mh_appdata_t *ad = (mh_appdata_t *)data;
+       Evas_Object *ctxpopup = NULL;
+
+       if (ad == NULL) {
+               ERR("ad is null\n");
+               return;
+       }
+       __MOBILE_AP_FUNC_ENTER__;
+
+       ctxpopup = elm_ctxpopup_add(ad->win);
+       elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
+
+       eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK,
+                       eext_ctxpopup_back_cb, ad);
+       eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE,
+                       eext_ctxpopup_back_cb, ad);
+       elm_object_style_set(ctxpopup, "more/default");
+       evas_object_smart_callback_add(ctxpopup, "dismissed",
+                       __dismissed_more_ctxpopup_cb, ad);
+       evas_object_smart_callback_add(elm_object_top_widget_get(ctxpopup), "rotation,changed",
+                       __rotate_more_ctxpopup_cb, ad);
+       evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL,
+                       __ctx_delete_more_ctxpopup_cb, ad->naviframe);
+
+       elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
+                       ELM_CTXPOPUP_DIRECTION_DOWN,
+                       ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                       ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+       __ctx_move_more_ctxpopup(ctxpopup, ad);
+       elm_ctxpopup_item_append(ctxpopup, STR_CONFIGURE_MOBILE_HOTSPOT,
+                       NULL, __gl_configure_wifi_tethering, ad);
+
+       evas_object_show(ctxpopup);
+
+       ad->ctxpopup = ctxpopup;
+
+       __MOBILE_AP_FUNC_EXIT__;
+}
+
+
+void _main_draw_contents(mh_appdata_t *ad)
+{
+       INFO("+\n");
+
+       Elm_Object_Item *navi_item;
+
        __create_inner_contents(ad);
 
        ad->main.back_btn = elm_button_add(ad->naviframe);
@@ -1517,16 +1688,21 @@ void ap_draw_contents(mh_appdata_t *ad)
                }
                return;
        }
-
        elm_object_style_set(ad->main.back_btn, "naviframe/back_btn/default");
-       evas_object_smart_callback_add(ad->main.back_btn, "clicked",
-                       __back_btn_cb, ad);
+
+       eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_BACK,
+                       eext_naviframe_back_cb, NULL);
+       _ctxpopup_more_button_callback_add(ad);
+       evas_object_smart_callback_add(ad->main.back_btn, "clicked", (Evas_Smart_Cb)__back_btn_cb, (void *)ad);
        elm_object_focus_allow_set(ad->main.back_btn, EINA_FALSE);
 
-       elm_naviframe_item_push(ad->naviframe,
-                       _("IDS_MOBILEAP_BODY_TETHERING"),
-                       ad->main.back_btn, NULL, ad->main.genlist, NULL);
+       navi_item = elm_naviframe_item_push(ad->naviframe, IDS_TETH,
+                               ad->main.back_btn, NULL, ad->main.genlist, NULL);
+       elm_object_item_domain_text_translatable_set(navi_item, PKGNAME, EINA_TRUE);
 
-       __MOBILE_AP_FUNC_EXIT__;
+       elm_naviframe_item_pop_cb_set(navi_item, (Elm_Naviframe_Item_Pop_Cb)__back_btn_cb, (void *)ad);
+       ad->navi_item = navi_item;
+       g_ad = ad;
+       INFO("-\n");
        return;
 }