Fix format-truncation warning for gcc9
[apps/native/ug-mobile-ap.git] / src / mh_view_main.c
index a073cc8..2bbff10 100755 (executable)
@@ -3,7 +3,7 @@
 *
 * 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
 
 #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"
 
-#if 0 /* device rename not supported */
 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 __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 Eina_Bool rotate_flag = EINA_FALSE;
-#endif
+
 void _genlist_update_device_item(mh_appdata_t *ad);
 mh_appdata_t *g_ad = NULL;
 #define UPDATE_INTERVAL 1
 
-#if 0 /* device rename not supported */
-void _rotate_adjust_rename_popup(void)
+#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;
+
+tethering_type_e _get_updated_type(void)
 {
-       __MOBILE_AP_FUNC_ENTER__;
+       return updated_type;
+}
 
-       int change_ang = 0;
+tethering_type_e _get_selected_type(void)
+{
+       return selected_type;
+}
 
-       change_ang = elm_win_rotation_get(g_ad->win);
-       if (change_ang == 0 || change_ang == 180) {
-               _hadnle_rename_popup_rotation(EINA_TRUE);
-       } else {
-               _hadnle_rename_popup_rotation(EINA_FALSE);
-       }
-       __MOBILE_AP_FUNC_EXIT__;
+Eina_Bool _get_selected_state(void)
+{
+       return selected_state;
 }
 #endif
 
-void _select_connected_dev(void *data, Evas_Object *obj, void *event_info)
+void _list_connected_dev(mh_appdata_t *ap)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (data == NULL) {
+       if (ap == NULL) {
                ERR("data is NULL\n");
                return;
        }
 
-       mh_appdata_t *ad = (mh_appdata_t *)data;
-
-       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
-       _create_connected_client_view(ad);
+       _add_connected_clients(ap);
        __MOBILE_AP_FUNC_EXIT__;
 }
 
@@ -105,9 +111,6 @@ Eina_Bool ap_update_data_packet_usage(mh_appdata_t *ad)
                ERR("Invalid param\n");
                return EINA_FALSE;
        }
-       if (ad->main.usage_item == NULL) {
-               return EINA_TRUE;
-       }
 
        if (ad->main.usage_item)
                elm_genlist_item_update(ad->main.usage_item);
@@ -129,9 +132,8 @@ Eina_Bool ap_get_data_statistics(void *data)
        }
 
        /* If previous data is not updated, new data is not required */
-       if (ad->data_statistics.is_updated == false) {
+       if (ad->data_statistics.is_updated == false)
                return ECORE_CALLBACK_RENEW;
-       }
 
        /* Because previous data is updated, new data is required.
           It will be returned asynchronously. */
@@ -149,17 +151,46 @@ Eina_Bool ap_update_device_conn_time(void * data)
                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->connected_device.no_of_clients) {
-               if (ad->connected_device.station_items[count])
-                       elm_genlist_item_fields_update(ad->connected_device.station_items[count++],
+       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;
@@ -175,9 +206,9 @@ void _start_update_device_conn_time(mh_appdata_t *ad)
                return;
        }
 
-       if (ad->update_conn_time_handle) {
+       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);
 
@@ -210,9 +241,8 @@ void _start_update_data_packet_usage(mh_appdata_t *ad)
                return;
        }
 
-       if (ad->update_statistics_handle) {
+       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);
@@ -288,16 +318,16 @@ static void __read_setting(mh_appdata_t *ad)
        free(passphrase);
 
        ret = tethering_wifi_get_ssid_visibility(ad->handle, &visibility);
-       if (ret != TETHERING_ERROR_NONE) {
+       if (ret != TETHERING_ERROR_NONE)
                ERR("tethering_wifi_get_ssid_visibility is failed\n");
-       }
+
        ad->setup.visibility = visibility;
        ad->setup.visibility_new = visibility;
 
        ret = tethering_wifi_get_security_type(ad->handle, &type);
-       if (ret != TETHERING_ERROR_NONE) {
+       if (ret != TETHERING_ERROR_NONE)
                ERR("tethering_wifi_get_security_type is failed\n");
-       }
+
        ad->setup.security_type = type;
        ad->setup.security_type_new = type;
 
@@ -308,9 +338,8 @@ void _update_wifi_item(mh_appdata_t *ad, int wifi_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.wifi_state == wifi_state) {
+       if (ad->main.wifi_state == wifi_state)
                return;
-       }
 
        if (ad->main.wifi_state == MH_STATE_PROCESS) {
                ad->main.wifi_state = MH_STATE_NONE;
@@ -335,9 +364,8 @@ void _update_bt_item(mh_appdata_t *ad, int bt_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.bt_state == bt_state) {
+       if (ad->main.bt_state == bt_state)
                return;
-       }
 
        if (ad->main.bt_state == MH_STATE_PROCESS) {
                ad->main.bt_state = MH_STATE_NONE;
@@ -359,9 +387,8 @@ void _update_usb_item(mh_appdata_t *ad, int usb_state)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->main.usb_state == usb_state) {
+       if (ad->main.usb_state == usb_state)
                return;
-       }
 
        if (ad->main.usb_state == MH_STATE_PROCESS) {
                ad->main.usb_state = MH_STATE_NONE;
@@ -390,26 +417,25 @@ void _genlist_update_device_item(mh_appdata_t *ad)
        no_of_dev = _get_list_clients_count(ad);
        Elm_Object_Item *item = NULL;
 
-       if (ad->main.device_item) {
-               elm_object_item_del(ad->main.device_item);
-               ad->main.device_item = NULL;
-               if (no_of_dev == 0) {
-                       item = elm_genlist_item_append(ad->main.genlist,
-                                       ad->main.device0_itc, ad, NULL,
-                                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
-                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       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, _select_connected_dev, (void *)ad);
-                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
+                                       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);
+                       }
                }
-               ad->main.device_item = item;
-       }
 
-       if (ad->connected_device.navi_it) {
-               _update_conn_clients(ad);
-       }
 
        __MOBILE_AP_FUNC_EXIT__;
        return;
@@ -455,7 +481,7 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
                        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_AVAILABLE) {
+               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 {
@@ -479,16 +505,13 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
 
                no_of_dev = _get_list_clients_count(ad);
                if (ad->main.device_item == NULL) {
-                       if (no_of_dev == 0) {
-                               item = elm_genlist_item_append(ad->main.genlist,
-                                               ad->main.device0_itc, ad, NULL,
-                                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
-                               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
-                       } else {
+                       if (no_of_dev != 0) {
                                item = elm_genlist_item_append(ad->main.genlist,
                                                ad->main.device_itc, ad, NULL,
-                                               ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
+                                               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;
                }
@@ -536,13 +559,11 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
                        _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) {
+                       if (obj != NULL)
                                elm_check_state_set(obj, wifi_state);
-                       }
 
-                       if (ad->main.wifi_item) {
+                       if (ad->main.wifi_item)
                                elm_genlist_item_update(ad->main.wifi_item);
-                       }
                }
                break;
 
@@ -552,13 +573,11 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
                        _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) {
+                       if (obj != NULL)
                                elm_check_state_set(obj, bt_state);
-                       }
 
-                       if (ad->main.bt_item) {
+                       if (ad->main.bt_item)
                                elm_genlist_item_update(ad->main.bt_item);
-                       }
                }
                break;
 
@@ -586,11 +605,141 @@ void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
        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,
                                                        void *event_info)
 {
        __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;
@@ -601,12 +750,24 @@ static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
        _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;
@@ -616,14 +777,18 @@ 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);
-       mh_draw_wifi_setup_view(ad);
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       content = elm_object_item_part_content_get(item, "elm.icon");
+       __wifi_onoff_changed_cb(data, content, NULL);
 
        __MOBILE_AP_FUNC_EXIT__;
 
@@ -634,6 +799,13 @@ 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");
                return;
@@ -645,12 +817,23 @@ static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info
        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;
@@ -682,6 +865,13 @@ 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;
@@ -691,12 +881,23 @@ static void __usb_onoff_changed_cb(void *data, Evas_Object *obj, void *event_inf
        _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;
@@ -724,13 +925,13 @@ static void __select_usb_item(void *data, Evas_Object *obj, void *event_info)
        return;
 }
 
-static Eina_Bool __back_btn_cb(void *data, Elm_Object_Item *navi_item)
+static void  __back_btn_cb(void *data, Elm_Object_Item *navi_item)
 {
        INFO("+\n");
 
        if (data == NULL) {
                ERR("The param is NULL\n");
-               return EINA_FALSE;
+               return;
        }
 
        mh_appdata_t *ad = (mh_appdata_t*)data;
@@ -741,14 +942,13 @@ static Eina_Bool __back_btn_cb(void *data, Elm_Object_Item *navi_item)
        ug_destroy_me(((mh_ugdata_t *)ad->gadget)->ug);
 
        INFO("-\n");
-       return EINA_FALSE;
+       return;
 }
 
 static char *__get_wifi_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (!strcmp("elm.text", part)) {
-               return strdup(STR_WIFI_TETH);
-       }
+       if (!strcmp("elm.text", part))
+               return strdup(STR_MOBILE_HOTSPOT);
 
        return NULL;
 }
@@ -758,8 +958,6 @@ static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
 {
        mh_appdata_t *ad = (mh_appdata_t*)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-       Evas_Object *icon_layout = NULL;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -767,35 +965,30 @@ static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
        }
 
        if (!strcmp("elm.swallow.end", part)) {
-               icon_layout = elm_layout_add(obj);
-               elm_layout_theme_set(icon_layout, "layout", "list/C/type.3", "default");
-
                if (ad->main.wifi_state == MH_STATE_PROCESS) {
-                       progressbar = _create_progressbar(obj, "process_medium");
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", progressbar);
+                       btn = _create_progressbar(obj, "process_medium");
                } else {
                        btn = elm_check_add(obj);
                        elm_object_style_set(btn, "on&off");
-                       evas_object_show(btn);
 
-                       evas_object_pass_events_set(btn, EINA_TRUE);
                        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);
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", btn);
+                       evas_object_show(btn);
                }
        }
 
-       return icon_layout;
+       return btn;
 }
 
 static char *__get_bt_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (!strcmp("elm.text", part)) {
+       if (!strcmp("elm.text", part))
                return strdup(STR_BLUETOOTH_TETH);
-       }
 
        return NULL;
 }
@@ -804,8 +997,6 @@ static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part
 {
        mh_appdata_t *ad = (mh_appdata_t *)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-       Evas_Object *icon_layout = NULL;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -813,12 +1004,8 @@ static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part
        }
 
        if (!strcmp("elm.swallow.end", part)) {
-               icon_layout = elm_layout_add(obj);
-               elm_layout_theme_set(icon_layout, "layout", "list/C/type.3", "default");
-
                if (ad->main.bt_state == MH_STATE_PROCESS) {
-                       progressbar = _create_progressbar(obj, "process_medium");
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", progressbar);
+                       btn = _create_progressbar(obj, "process_medium");
                } else {
                        btn = elm_check_add(obj);
                        if (btn == NULL) {
@@ -832,18 +1019,16 @@ static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part
                                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);
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", btn);
                }
        }
 
-       return icon_layout;
+       return btn;
 }
 
 static char *__get_usb_label(void *data, Evas_Object *obj, const char *part)
 {
-       if (!strcmp("elm.text", part)) {
+       if (!strcmp("elm.text", part))
                return strdup(STR_USB_TETH);
-       }
 
        return NULL;
 }
@@ -853,8 +1038,6 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
 {
        mh_appdata_t *ad = (mh_appdata_t *)data;
        Evas_Object *btn = NULL;
-       Evas_Object *progressbar = NULL;
-       Evas_Object *icon_layout = NULL;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
@@ -862,12 +1045,8 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
        }
 
        if (!strcmp("elm.swallow.end", part)) {
-               icon_layout = elm_layout_add(obj);
-               elm_layout_theme_set(icon_layout, "layout", "list/C/type.3", "default");
-
                if (ad->main.usb_state == MH_STATE_PROCESS) {
-                       progressbar = _create_progressbar(obj, "process_medium");
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", progressbar);
+                       btn = _create_progressbar(obj, "process_medium");
                } else {
                        btn = elm_check_add(obj);
                        if (btn == NULL) {
@@ -881,20 +1060,20 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
                                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);
-                       elm_layout_content_set(icon_layout, "elm.swallow.content", btn);
                }
        }
 
-       return icon_layout;
+       return btn;
 }
 
 static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
 {
        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 device_name[DEVICE_NAME_LENGTH_MAX] = {0, };
+       char passphrase[WIFI_PASSPHRASE_LENGTH_MAX] = {0, };
+       char security_type[SECURITY_TYPE_LENGTH_MAX] = {0, };
+       char *fmt = STR_SECURITY_TYPE_PS;
        char *hidden = "";
        char *ptr = NULL;
        char *device_name_utf = NULL;
@@ -936,13 +1115,13 @@ static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
                        g_free(ptr);
 
                        snprintf(security_type, sizeof(security_type),
-                                       STR_SECURITY_TYPE_PS, "WPA2 PSK");
+                                       fmt, "WPA2 PSK");
                }
 
                wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
 
                if (wifi_state && ad->setup.visibility == false)
-                       hidden = STR_WIFI_TETH_HIDDEN;
+                       hidden = STR_MOBILE_HOTSPOT_IS_HIDDEN;
 
                if (wifi_state && ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
                        snprintf(buf, MH_LABEL_LENGTH_MAX,
@@ -958,8 +1137,8 @@ static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
                                        STR_PASSWORD,
                                        passphrase,
                                        security_type,
-                                       STR_PASSWORD_FOR_WIFI_TETH,
-                                       hidden[0] != '\0' ? "<br>" : "",
+                                       STR_ENTER_THE_PASSWORD_ON_THE_OTHER_DEVICE,
+                                       hidden && hidden[0] != '\0' ? "<br>" : "",
                                        hidden);
                } else {
                        snprintf(buf, MH_LABEL_LENGTH_MAX,
@@ -969,7 +1148,7 @@ static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
                                        "</font_size>",
                                        STR_DEV_NAME,
                                        device_name,
-                                       hidden[0] != '\0' ? "<br>" : "",
+                                       hidden && hidden[0] != '\0' ? "<br>" : "",
                                        hidden);
                }
 
@@ -979,45 +1158,18 @@ static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
        return NULL;
 }
 
-static char *__get_no_connected_device_label(void *data, Evas_Object *obj,
-                                                       const char *part)
-{
-       mh_appdata_t *ad = (mh_appdata_t*)data;
-       char buf[MH_LABEL_LENGTH_MAX] = {0, };
-       int no_of_dev;
-
-       if (data == NULL) {
-               ERR("The param is NULL\n");
-               return NULL;
-       }
-
-       if (!strcmp("elm.text.multiline", part)) {
-               no_of_dev = _get_list_clients_count(ad);
-               snprintf(buf, MH_LABEL_LENGTH_MAX, "<font_size=30>%s<br>%d</font_size>", STR_CONNECTED_DEV, no_of_dev);
-               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)
 {
-       mh_appdata_t *ad = (mh_appdata_t*)data;
        char buf[MH_LABEL_LENGTH_MAX] = {0, };
-       int no_of_dev;
 
        if (data == NULL) {
                ERR("The param is NULL\n");
                return NULL;
        }
 
-       if (!strcmp("elm.text.sub", part)) {
-               g_strlcpy(buf, STR_CONNECTED_DEV, sizeof(buf));
-               return strdup(buf);
-       } else if (!strcmp("elm.text", part)) {
-               no_of_dev = _get_list_clients_count(ad);
-               snprintf(buf, MH_LABEL_LENGTH_MAX, "%d", no_of_dev);
+       if (!strcmp("elm.text", part)) {
+               snprintf(buf, MH_LABEL_LENGTH_MAX, "<font_size=30>%s</font_size>", STR_CONNECTED_DEV);
                return strdup(buf);
        }
 
@@ -1085,19 +1237,6 @@ static char *__get_usage_label(void *data, Evas_Object *obj, const char *part)
 static void __set_genlist_itc(mh_appdata_t *ad)
 {
        /* On, Off view's item class for genlist */
-#if 0 /* not used */
-       ad->main.sp_itc = elm_genlist_item_class_new();
-       if (ad->main.sp_itc == NULL) {
-               ERR("elm_genlist_item_class_new failed\n");
-               return;
-       }
-
-       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;
-#endif
        ad->main.wifi_itc = elm_genlist_item_class_new();
        if (ad->main.wifi_itc == NULL) {
                ERR("elm_genlist_item_class_new failed\n");
@@ -1110,19 +1249,6 @@ static void __set_genlist_itc(mh_appdata_t *ad)
        ad->main.wifi_itc->func.state_get = NULL;
        ad->main.wifi_itc->func.del = NULL;
 
-#if 0 /* not used */
-       ad->main.sp2_itc = elm_genlist_item_class_new();
-       if (ad->main.sp2_itc == NULL) {
-               ERR("elm_genlist_item_class_new failed\n");
-               return;
-       }
-
-       ad->main.sp2_itc->item_style = "dialogue/separator.2";
-       ad->main.sp2_itc->func.text_get = NULL;
-       ad->main.sp2_itc->func.content_get = NULL;
-       ad->main.sp2_itc->func.state_get = NULL;
-       ad->main.sp2_itc->func.del = NULL;
-#endif
        /* End of On, Off view's item class for genlist */
 
        /* Off view's item class for genlist */
@@ -1164,18 +1290,6 @@ 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.device0_itc = elm_genlist_item_class_new();
-       if (ad->main.device0_itc == NULL) {
-               ERR("elm_genlist_item_class_new failed\n");
-               return;
-       }
-
-       ad->main.device0_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
-       ad->main.device0_itc->func.text_get = __get_no_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;
 
        ad->main.device_itc = elm_genlist_item_class_new();
        if (ad->main.device_itc == NULL) {
@@ -1183,8 +1297,8 @@ static void __set_genlist_itc(mh_appdata_t *ad)
                return;
        }
 
-       ad->main.device_itc->item_style = MH_GENLIST_2LINE_BOTTOM_TEXT_STYLE;
-       ad->main.device_itc->func.text_get = __get_connected_device_label;
+       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;
@@ -1303,7 +1417,7 @@ 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 (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
+       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 {
@@ -1325,16 +1439,13 @@ static void __create_inner_contents(mh_appdata_t *ad)
                                _connected_clients_cb, (void *)ad);
 
                no_of_dev = _get_list_clients_count(ad);
-               if (no_of_dev == 0) {
+               if (no_of_dev != 0) {
                        item = elm_genlist_item_append(ad->main.genlist,
-                                               ad->main.device0_itc, ad, NULL,
+                                               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);
-               } else {
-                       item = elm_genlist_item_append(ad->main.genlist,
-                                               ad->main.device_itc, ad, NULL,
-                                               ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
-                       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;
        }
@@ -1373,10 +1484,6 @@ void _main_free_genlist_itc(mh_appdata_t *ad)
        _free_genlist_itc(&mv->bt_itc);
        _free_genlist_itc(&mv->setup_itc);
        _free_genlist_itc(&mv->wifi_itc);
-#if 0 /* not used */
-       _free_genlist_itc(&mv->sp_itc);
-       _free_genlist_itc(&mv->sp2_itc);
-#endif
        __MOBILE_AP_FUNC_EXIT__;
        return;
 }
@@ -1409,7 +1516,18 @@ void _main_callback_del(mh_appdata_t *ad)
        __MOBILE_AP_FUNC_EXIT__;
 }
 
-#if 0 /* device rename not supported */
+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;
@@ -1421,16 +1539,16 @@ static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad)
        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;
+       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__;
 }
@@ -1487,21 +1605,26 @@ static void __ctx_delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj,
        __MOBILE_AP_FUNC_EXIT__;
 }
 
-static void _gl_rename_device_sel(void *data, Evas_Object *obj, void *event_info)
+static void __gl_configure_wifi_tethering(void *data, Evas_Object *obj, void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       mh_appdata_t *ad = (mh_appdata_t *)data;
-
-       if (ad == NULL) {
-               ERR("ad is null\n");
+       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;
 
-       _create_rename_device_popup((void *)ad);
+       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,
@@ -1516,12 +1639,7 @@ static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
        }
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (ad->setup.navi_it == NULL) {
-               return;
-       }
-
-       elm_naviframe_item_pop_cb_set(ad->setup.navi_it, _setting_back_btn_cb, (void *)ad);
-       ctxpopup = elm_ctxpopup_add(ad->naviframe);
+       ctxpopup = elm_ctxpopup_add(ad->win);
        elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
 
        eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK,
@@ -1542,8 +1660,8 @@ static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
                        ELM_CTXPOPUP_DIRECTION_UNKNOWN);
 
        __ctx_move_more_ctxpopup(ctxpopup, ad);
-       elm_ctxpopup_item_append(ctxpopup, STR_RENAME_DEVICE_HEADER,
-                       NULL, _gl_rename_device_sel, ad);
+       elm_ctxpopup_item_append(ctxpopup, STR_CONFIGURE_MOBILE_HOTSPOT,
+                       NULL, __gl_configure_wifi_tethering, ad);
 
        evas_object_show(ctxpopup);
 
@@ -1551,7 +1669,7 @@ static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
 
        __MOBILE_AP_FUNC_EXIT__;
 }
-#endif
+
 
 void _main_draw_contents(mh_appdata_t *ad)
 {
@@ -1574,19 +1692,15 @@ void _main_draw_contents(mh_appdata_t *ad)
 
        eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_BACK,
                        eext_naviframe_back_cb, NULL);
-#if 0 /* device rename not supported */
-       eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_MORE,
-                       __create_ctxpopup_more_button, ad);
-#endif
-
-       evas_object_smart_callback_add(ad->main.back_btn, "clicked", __back_btn_cb, (void *)ad);
+       _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);
 
        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);
 
-       elm_naviframe_item_pop_cb_set(navi_item, __back_btn_cb, (void *)ad);
+       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");