Update for license
[apps/native/ug-mobile-ap.git] / src / mh_view_main.c
index 8dcc99e..af55b39 100644 (file)
@@ -1,13 +1,13 @@
 /*
 * ug-mobile-ap
 *
-* Copyright 2012  Samsung Electronics Co., Ltd
+* Copyright 2012-2013  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://www.tizenopensource.org/license
+* http://floralicense.org/license
 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,6 +17,7 @@
 *
 */
 
+#include <time.h>
 #include "mh_view_main.h"
 
 static void _gl_device_item_sel(void *data, Evas_Object *obj, void *event_info);
@@ -124,9 +125,11 @@ static void __genlist_update_device_item(mh_appdata_t *ad, int no_of_dev)
                        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");
+               ERR("elm_genlist_item_insert_before is failed.\n");
                return;
        }
+       elm_object_item_signal_emit(item, "elm,state,top", "");
+
        ad->main.device_item = item;
 
        if (no_of_dev == 0) {
@@ -184,6 +187,11 @@ 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);
 
        return EINA_TRUE;
@@ -286,7 +294,7 @@ static void __read_setting(mh_appdata_t *ad)
 
        ret = tethering_wifi_get_ssid(ad->handle, &ssid);
        if (ret != TETHERING_ERROR_NONE || ssid == NULL) {
-               ERR("tethering_wifi_get_ssid is failed : %d %s\n", ret, ssid);
+               ERR("tethering_wifi_get_ssid is failed : %d\n", ret);
                return;
        }
        g_strlcpy(ad->setup.device_name, ssid, sizeof(ad->setup.device_name));
@@ -294,11 +302,13 @@ static void __read_setting(mh_appdata_t *ad)
 
        ret = tethering_wifi_get_passphrase(ad->handle, &passphrase);
        if (ret != TETHERING_ERROR_NONE || passphrase == NULL) {
-               ERR("tethering_wifi_get_ssid is failed : %d %s\n", ret, ssid);
+               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);
@@ -310,13 +320,6 @@ static void __read_setting(mh_appdata_t *ad)
        if (ret != TETHERING_ERROR_NONE) {
                ERR("tethering_wifi_get_security_type is failed\n");
        }
-
-       DBG("VCONFKEY_MOBILE_HOTSPOT_MODE : %d\n", ad->main.hotspot_mode);
-       DBG("Device name - %s\n", ad->setup.device_name);
-       DBG("Wifi passphrase- %s\n", ad->setup.wifi_passphrase);
-       DBG("Connected device : %d\n", ad->clients.number);
-       DBG("Visibility: %d\n", ad->setup.visibility);
-       DBG("Security: %d\n", ad->setup.security_type);
        DBG("End of Load setting value \n");
 
        __MOBILE_AP_FUNC_EXIT__;
@@ -334,16 +337,39 @@ void _update_wifi_item(mh_appdata_t *ad, int wifi_state)
        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.bt_item, EINA_FALSE);
-               elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
+               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.bt_item, EINA_TRUE);
-               elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
+               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", "");
+
+       __MOBILE_AP_FUNC_EXIT__;
+
+       return;
+}
+
+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");
+               return;
+       }
+
+       if (ad->main.bt_state == MH_STATE_PROCESS) {
+               ad->main.bt_state = MH_STATE_NONE;
+               elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
+       } else if (ad->main.bt_state == MH_STATE_NONE) {
+               ad->main.bt_state = MH_STATE_PROCESS;
+               elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+
+       elm_genlist_item_update(ad->main.bt_item);
 
        __MOBILE_AP_FUNC_EXIT__;
 
@@ -392,8 +418,6 @@ void _update_main_view(mh_appdata_t *ad)
        ad->main.hotspot_mode = _get_vconf_hotspot_mode();
        state = ad->main.hotspot_mode;
 
-       ap_update_data_device(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);
@@ -406,10 +430,13 @@ void _update_main_view(mh_appdata_t *ad)
        } else {
                elm_check_state_set(ad->main.wifi_btn, wifi_state);
        }
-       elm_object_item_disabled_set(ad->main.setup_item, wifi_state);
 
        /* Update BT tethering on / off button */
-       elm_check_state_set(ad->main.bt_btn, bt_state);
+       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) {
@@ -419,12 +446,39 @@ void _update_main_view(mh_appdata_t *ad)
        }
 
        if (wifi_state || bt_state || usb_state) {
+               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],
+                                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(item,
+                                       ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       ad->main.usage_item = item;
+               }
+
+               if (ad->main.device_item == NULL) {
+                       ap_update_data_device(ad);
+               }
+
                _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;
+               }
+
+               if (ad->main.usage_item) {
+                       elm_object_item_del(ad->main.usage_item);
+                       ad->main.usage_item = NULL;
+               }
        }
 
        if (wifi_state || bt_state) {
                if (ad->main.help_item) {
-                       DBG("Just update genlist\n");
+                       DBG("Just update help label item\n");
                        elm_genlist_item_update(ad->main.help_item);
                        return;
                } else {
@@ -438,13 +492,12 @@ void _update_main_view(mh_appdata_t *ad)
                                ERR("elm_genlist_item_insert_after NULL\n");
                                return;
                        }
+                       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("No need to update\n");
-                       return;
-               } else {
+               if (ad->main.help_item) {
                        DBG("Remove help item\n");
                        elm_object_item_del(ad->main.help_item);
                        ad->main.help_item = NULL;
@@ -465,20 +518,13 @@ static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
        }
 
        mh_appdata_t *ad = (mh_appdata_t *)data;
-       Eina_Bool wifi_state = EINA_FALSE;
-
-       wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI ?
-               EINA_TRUE : EINA_FALSE;
 
        _update_wifi_item(ad, MH_STATE_PROCESS);
-       elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
 
        if (_handle_wifi_onoff_change(ad) != 0) {
                ERR("_handle_wifi_onoff_change is failed\n");
                _update_wifi_item(ad, MH_STATE_NONE);
-               elm_object_item_disabled_set(ad->main.setup_item, EINA_FALSE);
-       } else
-               wifi_state = !wifi_state;
+       }
 
        __MOBILE_AP_FUNC_EXIT__;
 
@@ -511,6 +557,8 @@ static void __select_setup_item(void *data, Evas_Object *obj, void *event_info)
 
        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");
@@ -518,7 +566,33 @@ static void __select_setup_item(void *data, Evas_Object *obj, void *event_info)
        }
 
        elm_genlist_item_selected_set(item, EINA_FALSE);
-       mh_draw_wifi_setup_view(ad);
+
+       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__;
 
@@ -535,15 +609,13 @@ static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info
        }
 
        mh_appdata_t *ad = (mh_appdata_t *)data;
-       Eina_Bool bt_state;
-
-       bt_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_BT ?
-               EINA_TRUE : EINA_FALSE;
 
-       if (_handle_bt_onoff_change(ad) == 0)
-               bt_state = !bt_state;
+       _update_bt_item(ad, MH_STATE_PROCESS);
 
-       elm_check_state_set(ad->main.bt_btn, bt_state);
+       if (_handle_bt_onoff_change(ad) != 0) {
+               ERR("_handle_bt_onoff_change is failed\n");
+               _update_bt_item(ad, MH_STATE_NONE);
+       }
 
        __MOBILE_AP_FUNC_EXIT__;
 
@@ -614,7 +686,7 @@ static void __select_usb_item(void *data, Evas_Object *obj, void *event_info)
        return;
 }
 
-static void __quit_btn_cb(void *data, Evas_Object *obj, void *event_info)
+static void __back_btn_cb(void *data, Evas_Object *obj, void *event_info)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
@@ -633,7 +705,7 @@ static void __quit_btn_cb(void *data, Evas_Object *obj, void *event_info)
 static char *__get_wifi_label(void *data, Evas_Object *obj, const char *part)
 {
        if (strcmp(part, "elm.text") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -651,7 +723,7 @@ static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
        }
 
        if (strcmp(part, "elm.icon") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -697,23 +769,18 @@ static char *__get_setup_label(void *data, Evas_Object *obj, const char *part)
                return NULL;
        }
 
-       mh_appdata_t *ad = (mh_appdata_t *)data;
-
        if (strcmp(part, "elm.text") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
-       elm_object_item_disabled_set(ad->main.setup_item,
-                       ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI);
-
        return strdup(_("IDS_MOBILEAP_MBODY_WI_FI_TETHERING_SETTINGS"));
 }
 
 static char *__get_bt_label(void *data, Evas_Object *obj, const char *part)
 {
        if (strcmp(part, "elm.text") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -726,9 +793,10 @@ 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;
 
        if (strcmp(part, "elm.icon") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -737,28 +805,44 @@ static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part
                return NULL;
        }
 
-       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);
-       elm_check_state_set(btn, ad->main.hotspot_mode &
-                       VCONFKEY_MOBILE_HOTSPOT_MODE_BT ? EINA_TRUE : EINA_FALSE);
-
-       evas_object_smart_callback_add(btn, "changed", __bt_onoff_changed_cb,
-                       ad);
-       ad->main.bt_btn = btn;
+       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 &
+                               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;
+       }
 
        __MOBILE_AP_FUNC_EXIT__;
 
-       return btn;
+       return ad->main.bt_btn;
 }
 
 static char *__get_usb_label(void *data, Evas_Object *obj, const char *part)
 {
        if (strcmp(part, "elm.text") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -775,7 +859,7 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
        Evas_Object *progressbar = NULL;
 
        if (strcmp(part, "elm.icon") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -818,21 +902,6 @@ static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
        return ad->main.usb_btn;
 }
 
-static char *__get_setup_help_label(void *data, Evas_Object *obj,
-                                                       const char *part)
-{
-       __MOBILE_AP_FUNC_ENTER__;
-
-       if (strcmp(part, "elm.text.1") != 0) {
-               ERR("Invalid param\n");
-               return NULL;
-       }
-
-       __MOBILE_AP_FUNC_EXIT__;
-
-       return strdup(_("IDS_MOBILEAP_BODY_WI_FI_TETHERING_SETTINGS_ARE_ONLY_AVAILABLE_WHEN_WI_FI_TETHERING_IS_DISABLED"));
-}
-
 static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
 {
        __MOBILE_AP_FUNC_ENTER__;
@@ -845,8 +914,8 @@ static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
        char *ptr = NULL;
        int wifi_state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
 
-       if (strcmp(part, "elm.text.1") != 0) {
-               ERR("Invalid param\n");
+       if (strcmp(part, "elm.text") != 0) {
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -911,7 +980,7 @@ static char *__get_connected_device_label(void *data, Evas_Object *obj,
                                                        const char *part)
 {
        if (strcmp(part, "elm.text.1") != 0 && strcmp(part, "elm.text.2") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -941,7 +1010,7 @@ static char *__get_usage_label(void *data, Evas_Object *obj, const char *part)
        }
 
        if (strcmp(part, "elm.text.1") != 0 && strcmp(part, "elm.text.2") != 0) {
-               ERR("Invalid param\n");
+               DBG("Unknown part : %s\n", part);
                return NULL;
        }
 
@@ -990,6 +1059,37 @@ static char *__get_usage_label(void *data, Evas_Object *obj, const char *part)
        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) {
@@ -999,16 +1099,20 @@ static char *__gl_get_dev_label(void *data, Evas_Object *obj, const char *part)
 
        tethering_client_h client = (tethering_client_h)data;
        char *name = NULL;
+       time_t tm;
 
-       if (!strcmp(part, "elm.text")) {
+       if (!strcmp(part, "elm.text.1")) {
                tethering_client_get_name(client, &name);
                DBG("Device name : %s\n", name);
 
                if (!strcmp(name, "UNKNOWN")) {
-                       return strdup(_(MH_DEVICE_LIST_NO_NAME));
+                       return strdup(S_("IDS_COM_BODY_NO_NAME"));
                }
 
                return name;
+       } else if (!strcmp(part, "elm.text.2")) {
+               tethering_client_get_time(client, &tm);
+               return __get_diff_time(tm);
        }
 
        return NULL;
@@ -1021,7 +1125,7 @@ static Evas_Object *__gl_get_dev_wifi_icon(void *data, Evas_Object *obj,
 
        if (!strncmp(part, "elm.icon", 8)) {
                icon = elm_icon_add(obj);
-               elm_icon_file_set(icon, MOBILE_AP_IMG_DIR"/Wifi.png", NULL);
+               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;
@@ -1036,7 +1140,7 @@ static Evas_Object *__gl_get_dev_usb_icon(void *data, Evas_Object *obj,
 
        if (!strncmp(part, "elm.icon", 8)) {
                icon = elm_icon_add(obj);
-               elm_icon_file_set(icon, MOBILE_AP_IMG_DIR"/USB.png", NULL);
+               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;
@@ -1051,7 +1155,7 @@ static Evas_Object *__gl_get_dev_bt_icon(void *data, Evas_Object *obj,
 
        if (!strncmp(part, "elm.icon", 8)) {
                icon = elm_icon_add(obj);
-               elm_icon_file_set(icon, MOBILE_AP_IMG_DIR"/Bluetooth.png", NULL);
+               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;
@@ -1116,7 +1220,6 @@ static void __free_genlist_itc(mh_appdata_t *ad)
        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.setup_help_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);
@@ -1131,7 +1234,7 @@ 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/21/with_line";
+       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;
@@ -1145,7 +1248,7 @@ static void __set_genlist_itc(mh_appdata_t *ad)
        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/end";
+       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;
@@ -1174,13 +1277,6 @@ static void __set_genlist_itc(mh_appdata_t *ad)
        ad->main.usb_itc->func.state_get = NULL;
        ad->main.usb_itc->func.del = NULL;
 
-       ad->main.setup_help_itc = elm_genlist_item_class_new();
-       ad->main.setup_help_itc->item_style = "multiline/1text";
-       ad->main.setup_help_itc->func.text_get = __get_setup_help_label;
-       ad->main.setup_help_itc->func.content_get = NULL;
-       ad->main.setup_help_itc->func.state_get = NULL;
-       ad->main.setup_help_itc->func.del = NULL;
-
        ad->main.help_itc = elm_genlist_item_class_new();
        ad->main.help_itc->item_style = "multiline/1text";
        ad->main.help_itc->func.text_get = __get_help_label;
@@ -1213,24 +1309,21 @@ static void __set_genlist_itc(mh_appdata_t *ad)
        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/1text.1icon/expandable2";
+       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/1text.1icon/expandable2";
+       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/1text.1icon/expandable2";
+       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;
@@ -1240,26 +1333,78 @@ static void __set_genlist_itc(mh_appdata_t *ad)
        return;
 }
 
-static void _ap_inner_contents(mh_appdata_t *ad)
+static void __gl_realized(void *data, Evas_Object *obj, void *event_info)
+{
+       if (data == NULL || event_info == NULL) {
+               ERR("Invalid param\n");
+               return;
+       }
+
+       mh_appdata_t *ad = (mh_appdata_t *)data;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       Evas_Object *ao;
+       Evas_Object *btn;
+       char str[MH_LABEL_LENGTH_MAX] = {0, };
+       int i = 0;
+
+       if (item == ad->main.wifi_item || item == ad->main.bt_item || item == ad->main.usb_item) {
+               ao = elm_object_item_access_object_get(item);
+               btn = elm_object_item_part_content_get(item, "on&off");
+               snprintf(str, sizeof(str), "%s, %s", "On/off button",
+                               (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)  {
+                       elm_object_item_signal_emit(item, "elm,state,top", "");
+               } else if (item == ad->main.usb_item) {
+                       elm_object_item_signal_emit(item, "elm,state,bottom", "");
+               }
+       } else if (item == ad->main.setup_item) {
+               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) {
+               ao = elm_object_item_access_object_get(item);
+               snprintf(str, sizeof(str), "%s, %s", "Expandable list",
+                               "Double tap to open list");
+               elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
+
+               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))  {
+               elm_object_item_signal_emit(item, "elm,state,center", "");
+       } else {
+               for (i = 0; i < 4; i++) {
+                       if (item == ad->main.sp_item[i])
+                               elm_object_item_access_unregister(item);
+               }
+       }
+
+       return;
+}
+
+static void __create_inner_contents(mh_appdata_t *ad)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
        Elm_Object_Item *item = NULL;
+       int i = 0;
 
        __read_setting(ad);
-       if (ad->main.hotspot_mode != VCONFKEY_MOBILE_HOTSPOT_MODE_NONE)
-               _start_update_data_packet_usage(ad);
-
        ad->main.genlist = elm_genlist_add(ad->naviframe);
-       elm_object_style_set(ad->main.genlist, "dialogue");
        elm_genlist_mode_set(ad->main.genlist, ELM_LIST_COMPRESS);
-       elm_object_content_set(ad->main.conform, ad->main.genlist);
+       evas_object_smart_callback_add(ad->main.genlist, "realized", __gl_realized, ad);
+
        __set_genlist_itc(ad);
 
        /* separator */
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.sp_itc, ad,
+       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,
@@ -1271,15 +1416,11 @@ static void _ap_inner_contents(mh_appdata_t *ad)
                        __select_setup_item, ad);
        ad->main.setup_item = item;
 
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.setup_help_itc,
-                       ad, NULL, ELM_GENLIST_ITEM_NONE,
-                       NULL, NULL);
-       ad->main.setup_help_item = item;
-
        /* separator */
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.sp_itc, ad,
+       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.bt_itc,
                        ad, NULL, ELM_GENLIST_ITEM_NONE,
@@ -1296,6 +1437,7 @@ static void _ap_inner_contents(mh_appdata_t *ad)
                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;
        }
@@ -1304,34 +1446,41 @@ static void _ap_inner_contents(mh_appdata_t *ad)
        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;
 
-       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;
+       if (ad->main.hotspot_mode != VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
+               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;
 
-       /* Insert "Connected devices" item */
-       ap_update_data_device(ad);
+               /* Insert "Connected devices" item */
+               ap_update_data_device(ad);
 
-       item = elm_genlist_item_append(ad->main.genlist, ad->main.end_sp_itc, ad,
+               _start_update_data_packet_usage(ad);
+       }
+
+       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 ap_callback_del(void *data)
+void ap_callback_del(mh_appdata_t *ad)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       if (data == NULL) {
-               ERR("The param is NULL\n");
+       if (ad == NULL) {
+               ERR("ad is NULL\n");
                return;
        }
-       mh_appdata_t *ad = (mh_appdata_t*)data;
 
        evas_object_smart_callback_del(ad->main.back_btn, "clicked",
-                       __quit_btn_cb);
+                       __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",
@@ -1341,6 +1490,7 @@ void ap_callback_del(void *data)
 
        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__;
 }
@@ -1356,24 +1506,27 @@ void ap_draw_contents(mh_appdata_t *ad)
 {
        __MOBILE_AP_FUNC_ENTER__;
 
-       elm_win_conformant_set(ad->win, 1);
-       ad->main.conform = elm_conformant_add(ad->naviframe);
-       elm_object_style_set(ad->main.conform, "internal_layout");
-       evas_object_show(ad->main.conform);
-
-       _ap_inner_contents(ad);
+       __create_inner_contents(ad);
 
        ad->main.back_btn = elm_button_add(ad->naviframe);
+       if (ad->main.back_btn == NULL) {
+               ERR("elm_button_add is failed\n");
+               if (ad->main.genlist) {
+                       evas_object_del(ad->main.genlist);
+                       ad->main.genlist = NULL;
+               }
+               return;
+       }
 
-       elm_naviframe_item_push(ad->naviframe,
-                       _("IDS_MOBILEAP_BODY_TETHERING"),
-                       ad->main.back_btn, NULL, ad->main.conform, NULL);
-
-       /* Style set should be called after elm_naviframe_item_push(). */
        elm_object_style_set(ad->main.back_btn, "naviframe/back_btn/default");
        evas_object_smart_callback_add(ad->main.back_btn, "clicked",
-                       __quit_btn_cb, ad);
+                       __back_btn_cb, 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);
+
        __MOBILE_AP_FUNC_EXIT__;
+       return;
 }