X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmh_view_main.c;h=0892e084c797b6de80593a5f420ba817e1e08f80;hb=2bd6bb1cdd1a0564ac5f152315e690806b81fa3f;hp=af55b3905f56de88ce508b7959fafce6fecd2886;hpb=00b27304115663537614e381bb39cfde1b8669a4;p=apps%2Fnative%2Fug-mobile-ap.git diff --git a/src/mh_view_main.c b/src/mh_view_main.c old mode 100644 new mode 100755 index af55b39..0892e08 --- a/src/mh_view_main.c +++ b/src/mh_view_main.c @@ -1,13 +1,13 @@ /* * ug-mobile-ap * -* Copyright 2012-2013 Samsung Electronics Co., Ltd +* Copyright 2012 Samsung Electronics Co., Ltd -* Licensed under the Flora License, Version 1.1 (the "License"); +* Licensed under the Flora License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at -* http://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, @@ -18,137 +18,71 @@ */ #include -#include "mh_view_main.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); +#include +#include +#include -static bool _connected_clients_cb(tethering_client_h client, void *user_data) +#include "mh_view_main.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 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) { - if (user_data == NULL) { - ERR("user_data is NULL\n"); - return true; - } + __MOBILE_AP_FUNC_ENTER__; - mh_appdata_t *ad = (mh_appdata_t *)user_data; - int i = ad->clients.number++; + int change_ang = 0; - tethering_client_clone(&(ad->clients.handle[i]), client); + 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); - return true; + __MOBILE_AP_FUNC_EXIT__; } +#endif -static void __genlist_update_device_subitem(mh_appdata_t *ad) +void _select_connected_dev(void *data, Evas_Object *obj, void *event_info) { __MOBILE_AP_FUNC_ENTER__; - if (ad == NULL) { - ERR("Invalid param\n"); + if (data == NULL) { + ERR("data is NULL\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); - } + 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); __MOBILE_AP_FUNC_EXIT__; - - return; } -static void __genlist_update_device_item(mh_appdata_t *ad, int no_of_dev) +static bool _connected_clients_cb(tethering_client_h client, void *user_data) { __MOBILE_AP_FUNC_ENTER__; - if (ad == NULL) { - ERR("Invalid param\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; - } - - elm_genlist_item_subitems_clear(ad->main.device_item); - elm_object_item_del(ad->main.device_item); - ad->main.device_item = NULL; - } - - 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 +94,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 +107,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 +122,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 +137,67 @@ 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; + 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++], + "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 +207,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 +237,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 +251,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 +276,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 +304,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 +330,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 +341,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 +353,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 +371,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 (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); + } 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); + } + ad->main.device_item = item; + } + + if (ad->connected_device.navi_it) + _update_conn_clients(ad); + + __MOBILE_AP_FUNC_EXIT__; + return; +} + +void _update_main_view(mh_appdata_t *ad, tethering_type_e type) { __MOBILE_AP_FUNC_ENTER__; @@ -413,7 +420,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 +431,186 @@ 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); - } 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); + 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.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_AVAILABLE) { + 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.device0_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); + } + 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; +} + +static int __is_allowed(tethering_type_e type) +{ + int state = 0; + dpm_context_h context = NULL; + dpm_restriction_policy_h policy = NULL; + + context = dpm_context_create(); + if (context == NULL) { + ERR("Failed to create dpm context!!"); + return 0; + } + + policy = dpm_context_acquire_restriction_policy(context); + if (policy == NULL) { + ERR("Failed to create policy handle"); + dpm_context_destroy(context); + return 0; + } + + switch(type) { + case TETHERING_TYPE_WIFI: + dpm_restriction_get_wifi_hotspot_state(policy, &state); + break; + case TETHERING_TYPE_USB: + dpm_restriction_get_usb_tethering_state(policy, &state); + break; + case TETHERING_TYPE_BT: + dpm_restriction_get_bluetooth_tethering_state(policy, &state); + break; + default: + break; + } + + dpm_context_release_restriction_policy(context, policy); + dpm_context_destroy(context); + + return state; } static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj, @@ -512,6 +618,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,10 +633,12 @@ 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; 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; } __MOBILE_AP_FUNC_EXIT__; @@ -539,70 +654,27 @@ static void __select_wifi_item(void *data, Evas_Object *obj, void *event_info) 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); - - __wifi_onoff_changed_cb(data, ad->main.wifi_btn, NULL); + mh_draw_wifi_setup_view(ad); __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); + 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; } - 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 (data == NULL) { ERR("The param is NULL\n"); return; @@ -611,10 +683,13 @@ 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; 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; } __MOBILE_AP_FUNC_EXIT__; @@ -626,8 +701,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 +711,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,17 +723,26 @@ 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; 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; } __MOBILE_AP_FUNC_EXIT__; @@ -669,8 +754,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 +764,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 +783,406 @@ 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_WIFI_TETH); - 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; + evas_object_smart_callback_add(btn, "changed", __wifi_onoff_changed_cb, ad); + evas_object_show(btn); + } } - __MOBILE_AP_FUNC_EXIT__; - return ad->main.wifi_btn; + return btn; } -static char *__get_setup_label(void *data, Evas_Object *obj, const char *part) +static char *__get_bt_label(void *data, Evas_Object *obj, const char *part) { - if (data == NULL) { - - ERR("The param is NULL\n"); - return NULL; - } + if (!strcmp("elm.text", part)) + return strdup(STR_BLUETOOTH_TETH); - if (strcmp(part, "elm.text") != 0) { - DBG("Unknown part : %s\n", part); - return NULL; - } - - 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) { - DBG("Unknown part : %s\n", part); - return NULL; - } - - 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
" - "%s: %s

" - "%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' ? "
" : "", - hidden); - - } else { - snprintf(buf, MH_LABEL_LENGTH_MAX, - "%s : %s%s%s", - _("IDS_MOBILEAP_BODY_DEVICE_NAME"), - device_name, - hidden[0] != '\0' ? "
" : "", - hidden); - } - - __MOBILE_AP_FUNC_EXIT__; - - return strdup(buf); -} - -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) { - DBG("Unknown part : %s\n", part); - return NULL; - } - - 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)); - - return strdup(buf); -} - -static char *__get_usage_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.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 ) { - sent = ad->data_statistics.pdp_total_sent; - received = ad->data_statistics.pdp_total_receive; + 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); - if (sent >= 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"); + snprintf(security_type, sizeof(security_type), + fmt, "WPA2 PSK"); } - if (received >= MH_MB) { - received /= MH_MB; - received_str = _("IDS_MOBILEAP_BODY_PD_MB"); - } else if (received >= MH_KB) { - received /= MH_KB; - received_str = _("IDS_MOBILEAP_BODY_PD_KB"); + wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI; + + if (wifi_state && ad->setup.visibility == false) + hidden = STR_WIFI_TETH_HIDDEN; + + if (wifi_state && ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) { + snprintf(buf, MH_LABEL_LENGTH_MAX, + "" + "%s: %s
" + "%s: %s
" + "%s
" + "%s%s" + "%s" + "", + STR_DEV_NAME, + device_name, + STR_PASSWORD, + passphrase, + security_type, + STR_PASSWORD_FOR_WIFI_TETH, + hidden[0] != '\0' ? "
" : "", + hidden); } else { - received_str = _("IDS_MOBILEAP_BODY_PD_BYTES"); + snprintf(buf, MH_LABEL_LENGTH_MAX, + "" + "%s: %s%s" + "%s" + "", + STR_DEV_NAME, + device_name, + hidden[0] != '\0' ? "
" : "", + hidden); } - 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); + return strdup(buf); + } + + return NULL; } -static char *__get_diff_time(time_t connection_time) +static char *__get_no_connected_device_label(void *data, Evas_Object *obj, + const char *part) { - time_t current_time; + mh_appdata_t *ad = (mh_appdata_t*)data; char buf[MH_LABEL_LENGTH_MAX] = {0, }; - int day; - int hour; - int min; - int sec; - double diff; - - time(¤t_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); -} + int no_of_dev; -static char *__gl_get_dev_label(void *data, Evas_Object *obj, const char *part) -{ - if (data == NULL || part == NULL) { - ERR("Invalid param\n"); + if (data == NULL) { + ERR("The param is NULL\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")); - } - - return name; - } else if (!strcmp(part, "elm.text.2")) { - tethering_client_get_time(client, &tm); - return __get_diff_time(tm); + if (!strcmp("elm.text.multiline", part)) { + no_of_dev = _get_list_clients_count(ad); + snprintf(buf, MH_LABEL_LENGTH_MAX, "%s
%d", STR_CONNECTED_DEV, no_of_dev); + return strdup(buf); } return NULL; } -static Evas_Object *__gl_get_dev_wifi_icon(void *data, Evas_Object *obj, +static char *__get_connected_device_label(void *data, Evas_Object *obj, const char *part) { - Evas_Object *icon; + mh_appdata_t *ad = (mh_appdata_t*)data; + char buf[MH_LABEL_LENGTH_MAX] = {0, }; + int no_of_dev; - 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; + if (data == NULL) { + ERR("The param is NULL\n"); + return NULL; } - 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; + 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); + return strdup(buf); } - 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) +#ifdef TETHERING_DATA_USAGE_SUPPORT +static char *__get_usage_label(void *data, Evas_Object *obj, const char *part) { - __MOBILE_AP_FUNC_ENTER__; + 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("Invalid param\n"); - return; + ERR("The param is NULL\n"); + return NULL; } - mh_appdata_t *ad = (mh_appdata_t *)data; + 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; - ap_update_data_device(ad); + if (sent >= MH_MB || received >= MH_MB) { + sent /= MH_MB; + received /= MH_MB; - __MOBILE_AP_FUNC_EXIT__; -} + 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; -static void _gl_con(void *data, Evas_Object *obj, void *event_info) -{ - __MOBILE_AP_FUNC_ENTER__; + total = sent + received; + fmt_str = STR_KB; + } else if (sent + received >= MH_KB) { + total = (sent + received) / MH_KB; + fmt_str = STR_KB; + } else { + total = sent + received; + fmt_str = STR_BYTE; + } - if (event_info == NULL) { - ERR("Invalid param\n"); - return; + if (total > INT_MAX) { + ERR("data usage overflow\n"); + total = 0; + } + snprintf(label, MH_LABEL_LENGTH_MAX, fmt_str, (int)total); + return strdup(label); } - 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; + return NULL; } +#endif 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(); - 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; +#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 */ - 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; @@ -1287,49 +1191,44 @@ 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(); - ad->main.device_itc->item_style = "dialogue/2text.3/expandable"; + if (ad->main.device_itc == NULL) { + ERR("elm_genlist_item_class_new failed\n"); + 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->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 +1253,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 +1275,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 +1284,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 +1298,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 +1307,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 +1329,85 @@ 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_AVAILABLE) { + 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.device0_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); + } + 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); +#if 0 /* not used */ + _free_genlist_itc(&mv->sp_itc); + _free_genlist_itc(&mv->sp2_itc); +#endif __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 +1416,174 @@ 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) +#if 0 /* device rename not supported */ +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__; +} + +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_rename_device_sel(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"); + return; + } + evas_object_del(ad->ctxpopup); + ad->ctxpopup = NULL; + + _create_rename_device_popup((void *)ad); __MOBILE_AP_FUNC_EXIT__; } -void ap_draw_contents(mh_appdata_t *ad) +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__; + 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); + 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_RENAME_DEVICE_HEADER, + NULL, _gl_rename_device_sel, ad); + + evas_object_show(ctxpopup); + + ad->ctxpopup = ctxpopup; + + __MOBILE_AP_FUNC_EXIT__; +} +#endif + +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 +1595,25 @@ 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); +#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", (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; }