4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.tizenopensource.org/license
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
22 #include <efl_extension.h>
23 #include <dpm/restriction.h>
25 #include "mh_view_main.h"
27 #include "mh_string.h"
29 static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad);
30 static void __ctx_delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
31 static void __create_ctxpopup_more_button(void *data, Evas_Object *obj, void *event_info);
33 static Eina_Bool rotate_flag = EINA_FALSE;
35 void _genlist_update_device_item(mh_appdata_t *ad);
36 mh_appdata_t *g_ad = NULL;
37 #define UPDATE_INTERVAL 1
39 void _select_connected_dev(void *data, Evas_Object *obj, void *event_info)
41 __MOBILE_AP_FUNC_ENTER__;
44 ERR("data is NULL\n");
48 mh_appdata_t *ad = (mh_appdata_t *)data;
50 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
51 _create_connected_client_view(ad);
52 __MOBILE_AP_FUNC_EXIT__;
55 static bool _connected_clients_cb(tethering_client_h client, void *user_data)
57 __MOBILE_AP_FUNC_ENTER__;
59 if (user_data == NULL) {
60 ERR("user_data is NULL\n");
64 mh_appdata_t *ad = (mh_appdata_t *)user_data;
66 _append_list_client_handle(ad, client);
68 __MOBILE_AP_FUNC_EXIT__;
72 void ap_update_data_device(mh_appdata_t *ad)
74 __MOBILE_AP_FUNC_ENTER__;
77 ERR("Invalid param\n");
81 _genlist_update_device_item(ad);
83 __MOBILE_AP_FUNC_EXIT__;
86 #ifdef TETHERING_DATA_USAGE_SUPPORT
87 Eina_Bool ap_update_data_packet_usage(mh_appdata_t *ad)
90 ERR("Invalid param\n");
94 if (ad->main.usage_item)
95 elm_genlist_item_update(ad->main.usage_item);
100 Eina_Bool ap_get_data_statistics(void *data)
103 ERR("The param is NULL\n");
104 return ECORE_CALLBACK_CANCEL;
106 mh_appdata_t *ad = (mh_appdata_t *)data;
108 if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
109 ad->update_statistics_handle = NULL;
110 return ECORE_CALLBACK_CANCEL;
113 /* If previous data is not updated, new data is not required */
114 if (ad->data_statistics.is_updated == false)
115 return ECORE_CALLBACK_RENEW;
117 /* Because previous data is updated, new data is required.
118 It will be returned asynchronously. */
119 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
120 ad->data_statistics.is_updated = false;
122 return ECORE_CALLBACK_RENEW;
126 Eina_Bool ap_update_device_conn_time(void * data)
129 ERR("The param is NULL\n");
130 return ECORE_CALLBACK_CANCEL;
132 mh_appdata_t *ad = (mh_appdata_t *)data;
135 if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
136 _stop_update_device_conn_time(ad);
137 __MOBILE_AP_FUNC_EXIT__;
138 return ECORE_CALLBACK_CANCEL;
141 while (count < ad->connected_device.no_of_clients) {
142 if (ad->connected_device.station_items[count])
143 elm_genlist_item_fields_update(ad->connected_device.station_items[count++],
144 "elm.text.sub", ELM_GENLIST_ITEM_FIELD_TEXT);
146 return ECORE_CALLBACK_RENEW;
149 void _start_update_device_conn_time(mh_appdata_t *ad)
151 __MOBILE_AP_FUNC_ENTER__;
154 ERR("Invalid param\n");
155 __MOBILE_AP_FUNC_EXIT__;
159 if (ad->update_conn_time_handle)
160 _stop_update_device_conn_time(ad);
162 ad->update_conn_time_handle = ecore_timer_add(UPDATE_INTERVAL,
163 ap_update_device_conn_time, (void *)ad);
165 __MOBILE_AP_FUNC_EXIT__;
168 void _stop_update_device_conn_time(mh_appdata_t *ad)
170 __MOBILE_AP_FUNC_ENTER__;
173 ERR("Invalid param\n");
177 if (ad->update_conn_time_handle) {
178 ecore_timer_del(ad->update_conn_time_handle);
179 ad->update_conn_time_handle = NULL;
181 __MOBILE_AP_FUNC_EXIT__;
184 #ifdef TETHERING_DATA_USAGE_SUPPORT
185 void _start_update_data_packet_usage(mh_appdata_t *ad)
187 __MOBILE_AP_FUNC_ENTER__;
190 ERR("Invalid param\n");
194 if (ad->update_statistics_handle)
195 _stop_update_data_packet_usage(ad);
197 ad->data_statistics.is_updated = false;
198 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
199 ad->update_statistics_handle = ecore_timer_add(MH_UPDATE_INTERVAL,
200 ap_get_data_statistics, (void *)ad);
202 __MOBILE_AP_FUNC_EXIT__;
206 void _stop_update_data_packet_usage(mh_appdata_t *ad)
208 __MOBILE_AP_FUNC_ENTER__;
211 ERR("Invalid param\n");
215 if (ad->update_statistics_handle) {
216 ecore_timer_del(ad->update_statistics_handle);
217 ad->data_statistics.is_updated = false;
218 ad->update_statistics_handle = NULL;
221 __MOBILE_AP_FUNC_EXIT__;
226 static void __read_setting(mh_appdata_t *ad)
228 __MOBILE_AP_FUNC_ENTER__;
231 ERR("Invalid param\n");
237 char *passphrase = NULL;
239 tethering_wifi_security_type_e type;
241 ad->main.hotspot_mode = _get_vconf_hotspot_mode();
243 #ifdef TETHERING_DATA_USAGE_SUPPORT
244 ad->data_statistics.pdp_total_sent = 0;
245 ad->data_statistics.pdp_total_receive = 0;
246 if (ad->main.hotspot_mode != VCONFKEY_MOBILE_HOTSPOT_MODE_NONE)
247 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
250 ret = tethering_wifi_get_ssid(ad->handle, &ssid);
251 if (ret != TETHERING_ERROR_NONE || ssid == NULL) {
252 ERR("tethering_wifi_get_ssid is failed : %d\n", ret);
255 g_strlcpy(ad->setup.device_name, ssid, sizeof(ad->setup.device_name));
258 ret = tethering_wifi_get_passphrase(ad->handle, &passphrase);
259 if (ret != TETHERING_ERROR_NONE || passphrase == NULL) {
260 ERR("tethering_wifi_get_passphrase is failed : %d\n", ret);
264 g_strlcpy(ad->setup.wifi_passphrase, passphrase,
265 sizeof(ad->setup.wifi_passphrase));
266 g_strlcpy(ad->setup.wifi_passphrase_new, passphrase,
267 sizeof(ad->setup.wifi_passphrase_new));
270 ret = tethering_wifi_get_ssid_visibility(ad->handle, &visibility);
271 if (ret != TETHERING_ERROR_NONE)
272 ERR("tethering_wifi_get_ssid_visibility is failed\n");
274 ad->setup.visibility = visibility;
275 ad->setup.visibility_new = visibility;
277 ret = tethering_wifi_get_security_type(ad->handle, &type);
278 if (ret != TETHERING_ERROR_NONE)
279 ERR("tethering_wifi_get_security_type is failed\n");
281 ad->setup.security_type = type;
282 ad->setup.security_type_new = type;
284 __MOBILE_AP_FUNC_EXIT__;
287 void _update_wifi_item(mh_appdata_t *ad, int wifi_state)
289 __MOBILE_AP_FUNC_ENTER__;
291 if (ad->main.wifi_state == wifi_state)
294 if (ad->main.wifi_state == MH_STATE_PROCESS) {
295 ad->main.wifi_state = MH_STATE_NONE;
296 elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
297 } else if (ad->main.wifi_state == MH_STATE_NONE) {
298 ad->main.wifi_state = MH_STATE_PROCESS;
299 elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
302 if (ad->main.wifi_item)
303 elm_genlist_item_update(ad->main.wifi_item);
305 if (ad->main.setup_item)
306 elm_object_item_signal_emit(ad->main.setup_item, "elm,state,bottom", "");
308 __MOBILE_AP_FUNC_EXIT__;
313 void _update_bt_item(mh_appdata_t *ad, int bt_state)
315 __MOBILE_AP_FUNC_ENTER__;
317 if (ad->main.bt_state == bt_state)
320 if (ad->main.bt_state == MH_STATE_PROCESS) {
321 ad->main.bt_state = MH_STATE_NONE;
322 elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
323 } else if (ad->main.bt_state == MH_STATE_NONE) {
324 ad->main.bt_state = MH_STATE_PROCESS;
325 elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
328 if (ad->main.bt_item)
329 elm_genlist_item_update(ad->main.bt_item);
331 __MOBILE_AP_FUNC_EXIT__;
336 void _update_usb_item(mh_appdata_t *ad, int usb_state)
338 __MOBILE_AP_FUNC_ENTER__;
340 if (ad->main.usb_state == usb_state)
343 if (ad->main.usb_state == MH_STATE_PROCESS) {
344 ad->main.usb_state = MH_STATE_NONE;
345 elm_genlist_item_select_mode_set(ad->main.usb_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
346 } else if (ad->main.usb_state == MH_STATE_NONE) {
347 ad->main.usb_state = MH_STATE_PROCESS;
348 elm_genlist_item_select_mode_set(ad->main.usb_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
351 elm_genlist_item_update(ad->main.usb_item);
353 __MOBILE_AP_FUNC_EXIT__;
358 void _genlist_update_device_item(mh_appdata_t *ad)
360 __MOBILE_AP_FUNC_ENTER__;
363 ERR("Invalid param\n");
366 unsigned int no_of_dev = 0;
367 no_of_dev = _get_list_clients_count(ad);
368 Elm_Object_Item *item = NULL;
370 if (ad->main.device_item) {
371 elm_object_item_del(ad->main.device_item);
372 ad->main.device_item = NULL;
373 if (no_of_dev == 0) {
374 item = elm_genlist_item_append(ad->main.genlist,
375 ad->main.device0_itc, ad, NULL,
376 ELM_GENLIST_ITEM_NONE, NULL, NULL);
377 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
379 item = elm_genlist_item_append(ad->main.genlist,
380 ad->main.device_itc, ad, NULL,
381 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
382 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
384 ad->main.device_item = item;
387 if (ad->connected_device.navi_it)
388 _update_conn_clients(ad);
390 __MOBILE_AP_FUNC_EXIT__;
394 void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
396 __MOBILE_AP_FUNC_ENTER__;
399 ERR("Invalid param\n");
403 int state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
404 Eina_Bool wifi_state = EINA_FALSE;
405 Eina_Bool bt_state = EINA_FALSE;
406 Eina_Bool usb_state = EINA_FALSE;
407 Eina_Bool wifi_ap_state = EINA_FALSE;
408 Elm_Object_Item *item = NULL;
412 ad->main.hotspot_mode = _get_vconf_hotspot_mode();
413 state = ad->main.hotspot_mode;
415 wifi_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI);
416 bt_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_BT);
417 usb_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_USB);
418 wifi_ap_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP);
421 if (ad->main.wifi_item)
422 elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
423 if (ad->main.setup_item)
424 elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
425 if (ad->main.bt_item)
426 elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
427 if (ad->main.usb_item)
428 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
430 if (ad->main.setup_item)
431 elm_object_item_disabled_set(ad->main.setup_item, EINA_FALSE);
432 if (ad->main.bt_item)
433 elm_object_item_disabled_set(ad->main.bt_item, EINA_FALSE);
434 if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
435 if (ad->main.usb_item)
436 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
438 if (ad->main.usb_item)
439 elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
443 if (wifi_state || bt_state || usb_state) {
444 #ifdef TETHERING_DATA_USAGE_SUPPORT
445 if (ad->main.usage_item == NULL) {
446 item = elm_genlist_item_insert_before(ad->main.genlist,
447 ad->main.usage_itc, ad, NULL,
449 ELM_GENLIST_ITEM_NONE, NULL, NULL);
450 elm_genlist_item_select_mode_set(item,
451 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
452 ad->main.usage_item = item;
456 no_of_dev = _get_list_clients_count(ad);
457 if (ad->main.device_item == NULL) {
458 if (no_of_dev == 0) {
459 item = elm_genlist_item_append(ad->main.genlist,
460 ad->main.device0_itc, ad, NULL,
461 ELM_GENLIST_ITEM_NONE, NULL, NULL);
462 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
464 item = elm_genlist_item_append(ad->main.genlist,
465 ad->main.device_itc, ad, NULL,
466 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
467 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
469 ad->main.device_item = item;
472 if (ad->main.device_item) {
473 elm_object_item_del(ad->main.device_item);
474 ad->main.device_item = NULL;
476 #ifdef TETHERING_DATA_USAGE_SUPPORT
477 if (ad->main.usage_item) {
478 elm_object_item_del(ad->main.usage_item);
479 ad->main.usage_item = NULL;
485 if (ad->main.help_item) {
486 elm_genlist_item_update(ad->main.help_item);
488 item = elm_genlist_item_insert_after(ad->main.genlist,
489 ad->main.help_itc, ad, NULL,
491 ELM_GENLIST_ITEM_NONE, NULL,
494 ERR("elm_genlist_item_insert_after NULL\n");
496 elm_genlist_item_select_mode_set(item,
497 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
498 ad->main.help_item = item;
502 if (ad->main.help_item) {
503 elm_object_item_del(ad->main.help_item);
504 ad->main.help_item = NULL;
509 case TETHERING_TYPE_WIFI:
510 /* Update Wi-Fi tethering on / off button */
511 if (ad->main.wifi_state != MH_STATE_NONE) {
512 _update_wifi_item(ad, MH_STATE_NONE);
514 obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
516 elm_check_state_set(obj, wifi_state);
518 if (ad->main.wifi_item)
519 elm_genlist_item_update(ad->main.wifi_item);
523 case TETHERING_TYPE_BT:
524 /* Update BT tethering on / off button */
525 if (ad->main.bt_state != MH_STATE_NONE) {
526 _update_bt_item(ad, MH_STATE_NONE);
528 obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
530 elm_check_state_set(obj, bt_state);
532 if (ad->main.bt_item)
533 elm_genlist_item_update(ad->main.bt_item);
537 case TETHERING_TYPE_USB:
538 /* Update USB tethering on / off button */
539 if (ad->main.usb_state != MH_STATE_NONE) {
540 _update_usb_item(ad, MH_STATE_NONE);
542 obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
544 elm_check_state_set(obj, usb_state);
546 if (ad->main.usb_item)
547 elm_genlist_item_update(ad->main.usb_item);
552 DBG("Unknown tethering type : %d\n", type);
556 __MOBILE_AP_FUNC_EXIT__;
561 static int __is_allowed(tethering_type_e type)
564 device_policy_manager_h dpm = NULL;
566 dpm = dpm_manager_create();
568 ERR("Failed to create device policy manager!!");
573 case TETHERING_TYPE_WIFI:
574 dpm_restriction_get_wifi_hotspot_state(dpm, &state);
576 case TETHERING_TYPE_USB:
577 dpm_restriction_get_usb_tethering_state(dpm, &state);
579 case TETHERING_TYPE_BT:
580 dpm_restriction_get_bluetooth_tethering_state(dpm, &state);
586 dpm_manager_destroy(dpm);
591 static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
594 __MOBILE_AP_FUNC_ENTER__;
596 if (!__is_allowed(TETHERING_TYPE_WIFI)) {
597 ERR("Wi-Fi tethering is restricted!!");
598 elm_check_state_set(obj, EINA_FALSE);
599 _create_security_restriction_noti(TETHERING_TYPE_WIFI);
604 ERR("The param is NULL\n");
608 mh_appdata_t *ad = (mh_appdata_t *)data;
610 _update_wifi_item(ad, MH_STATE_PROCESS);
611 ad->type = TETHERING_TYPE_WIFI;
612 ad->is_wifi_teth_enabling = true;
613 if (_handle_wifi_onoff_change(ad) != 0) {
614 ERR("_handle_wifi_onoff_change is failed\n");
615 _update_wifi_item(ad, MH_STATE_NONE);
616 ad->is_wifi_teth_enabling = false;
619 __MOBILE_AP_FUNC_EXIT__;
624 static void __select_wifi_item(void *data, Evas_Object *obj, void *event_info)
626 __MOBILE_AP_FUNC_ENTER__;
628 Evas_Object *content;
629 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
632 ERR("The param is NULL\n");
636 elm_genlist_item_selected_set(item, EINA_FALSE);
638 content = elm_object_item_part_content_get(item, "elm.icon");
639 __wifi_onoff_changed_cb(data, content, NULL);
641 __MOBILE_AP_FUNC_EXIT__;
646 static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
648 __MOBILE_AP_FUNC_ENTER__;
650 if (!__is_allowed(TETHERING_TYPE_BT)) {
651 ERR("BT tethering is restricted!!");
652 elm_check_state_set(obj, EINA_FALSE);
653 _create_security_restriction_noti(TETHERING_TYPE_BT);
658 ERR("The param is NULL\n");
662 mh_appdata_t *ad = (mh_appdata_t *)data;
664 _update_bt_item(ad, MH_STATE_PROCESS);
665 ad->type = TETHERING_TYPE_BT;
666 ad->is_bt_teth_enabling = true;
668 if (_handle_bt_onoff_change(ad) != 0) {
669 ERR("_handle_bt_onoff_change is failed\n");
670 _update_bt_item(ad, MH_STATE_NONE);
671 ad->is_bt_teth_enabling = false;
674 __MOBILE_AP_FUNC_EXIT__;
679 static void __select_bt_item(void *data, Evas_Object *obj, void *event_info)
681 __MOBILE_AP_FUNC_ENTER__;
683 Evas_Object *content;
684 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
687 ERR("The param is NULL\n");
691 elm_genlist_item_selected_set(item, EINA_FALSE);
693 content = elm_object_item_part_content_get(item, "elm.icon");
694 __bt_onoff_changed_cb(data, content, NULL);
696 __MOBILE_AP_FUNC_EXIT__;
701 static void __usb_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
703 __MOBILE_AP_FUNC_ENTER__;
705 if (!__is_allowed(TETHERING_TYPE_USB)) {
706 ERR("USB tethering is restricted!!");
707 elm_check_state_set(obj, EINA_FALSE);
708 _create_security_restriction_noti(TETHERING_TYPE_USB);
713 ERR("The param is NULL\n");
717 mh_appdata_t *ad = (mh_appdata_t *)data;
718 _update_usb_item(ad, MH_STATE_PROCESS);
719 ad->type = TETHERING_TYPE_USB;
720 ad->is_usb_teth_enabling = true;
721 if (_handle_usb_onoff_change(ad) != 0) {
722 ERR("_handle_usb_onoff_change is failed\n");
723 _update_usb_item(ad, MH_STATE_NONE);
724 ad->is_usb_teth_enabling = false;
727 __MOBILE_AP_FUNC_EXIT__;
732 static void __select_usb_item(void *data, Evas_Object *obj, void *event_info)
734 __MOBILE_AP_FUNC_ENTER__;
736 Evas_Object *content;
737 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
740 ERR("The param is NULL\n");
744 elm_genlist_item_selected_set(item, EINA_FALSE);
746 content = elm_object_item_part_content_get(item, "elm.icon");
747 __usb_onoff_changed_cb(data, content, NULL);
749 __MOBILE_AP_FUNC_EXIT__;
754 static void __back_btn_cb(void *data, Elm_Object_Item *navi_item)
759 ERR("The param is NULL\n");
763 mh_appdata_t *ad = (mh_appdata_t*)data;
765 _release_list_client_handle(ad);
766 _main_callback_del(ad);
768 ug_destroy_me(((mh_ugdata_t *)ad->gadget)->ug);
774 static char *__get_wifi_label(void *data, Evas_Object *obj, const char *part)
776 if (!strcmp("elm.text", part))
777 return strdup(STR_MOBILE_HOTSPOT);
782 static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
785 mh_appdata_t *ad = (mh_appdata_t*)data;
786 Evas_Object *btn = NULL;
789 ERR("The param is NULL\n");
793 if (!strcmp("elm.swallow.end", part)) {
794 if (ad->main.wifi_state == MH_STATE_PROCESS) {
795 btn = _create_progressbar(obj, "process_medium");
797 btn = elm_check_add(obj);
798 elm_object_style_set(btn, "on&off");
800 evas_object_propagate_events_set(btn, EINA_FALSE);
801 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
802 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
803 elm_check_state_set(btn, ad->main.hotspot_mode &
804 VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI ? EINA_TRUE : EINA_FALSE);
806 evas_object_smart_callback_add(btn, "changed", __wifi_onoff_changed_cb, ad);
807 evas_object_show(btn);
814 static char *__get_bt_label(void *data, Evas_Object *obj, const char *part)
816 if (!strcmp("elm.text", part))
817 return strdup(STR_BLUETOOTH_TETH);
822 static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part)
824 mh_appdata_t *ad = (mh_appdata_t *)data;
825 Evas_Object *btn = NULL;
828 ERR("The param is NULL\n");
832 if (!strcmp("elm.swallow.end", part)) {
833 if (ad->main.bt_state == MH_STATE_PROCESS) {
834 btn = _create_progressbar(obj, "process_medium");
836 btn = elm_check_add(obj);
838 ERR("btn is NULL\n");
841 elm_object_style_set(btn, "on&off");
842 evas_object_pass_events_set(btn, EINA_TRUE);
843 evas_object_propagate_events_set(btn, EINA_FALSE);
844 elm_check_state_set(btn, ad->main.hotspot_mode &
845 VCONFKEY_MOBILE_HOTSPOT_MODE_BT ? EINA_TRUE : EINA_FALSE);
846 evas_object_show(btn);
847 evas_object_smart_callback_add(btn, "changed", __bt_onoff_changed_cb, ad);
854 static char *__get_usb_label(void *data, Evas_Object *obj, const char *part)
856 if (!strcmp("elm.text", part))
857 return strdup(STR_USB_TETH);
862 static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
865 mh_appdata_t *ad = (mh_appdata_t *)data;
866 Evas_Object *btn = NULL;
869 ERR("The param is NULL\n");
873 if (!strcmp("elm.swallow.end", part)) {
874 if (ad->main.usb_state == MH_STATE_PROCESS) {
875 btn = _create_progressbar(obj, "process_medium");
877 btn = elm_check_add(obj);
879 ERR("btn is NULL\n");
882 elm_object_style_set(btn, "on&off");
883 evas_object_pass_events_set(btn, EINA_TRUE);
884 evas_object_propagate_events_set(btn, EINA_FALSE);
885 elm_check_state_set(btn, ad->main.hotspot_mode &
886 VCONFKEY_MOBILE_HOTSPOT_MODE_USB ? EINA_TRUE : EINA_FALSE);
887 evas_object_show(btn);
888 evas_object_smart_callback_add(btn, "changed", __usb_onoff_changed_cb, ad);
895 static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
897 mh_appdata_t *ad = (mh_appdata_t *)data;
898 char buf[MH_LABEL_LENGTH_MAX] = {0, };
899 char device_name[MH_LABEL_LENGTH_MAX] = {0, };
900 char passphrase[MH_LABEL_LENGTH_MAX] = {0, };
901 char security_type[MH_LABEL_LENGTH_MAX] = {0, };
902 char *fmt = STR_SECURITY_TYPE_PS;
905 char *device_name_utf = NULL;
906 int wifi_state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
909 ERR("The param is NULL\n");
913 if (!strcmp("elm.text.multiline", part)) {
914 device_name_utf = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
915 if (device_name_utf == NULL) {
916 ERR("vconf_get_str failed \n");
920 ptr = elm_entry_utf8_to_markup(device_name_utf);
922 g_free(device_name_utf);
923 ERR("elm_entry_utf8_to_markup is failed\n");
927 g_strlcpy(ad->setup.device_name, ptr,
928 sizeof(ad->setup.device_name));
929 g_strlcpy(device_name, ptr, MH_LABEL_LENGTH_MAX);
930 g_free(device_name_utf);
934 if (ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
935 ptr = elm_entry_utf8_to_markup(ad->setup.wifi_passphrase);
937 ERR("elm_entry_utf8_to_markup is failed\n");
940 g_strlcpy(passphrase, ptr, MH_LABEL_LENGTH_MAX);
943 snprintf(security_type, sizeof(security_type),
947 wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
949 if (wifi_state && ad->setup.visibility == false)
950 hidden = STR_MOBILE_HOTSPOT_IS_HIDDEN;
952 if (wifi_state && ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
953 snprintf(buf, MH_LABEL_LENGTH_MAX,
966 STR_ENTER_THE_PASSWORD_ON_THE_OTHER_DEVICE,
967 hidden[0] != '\0' ? "<br>" : "",
970 snprintf(buf, MH_LABEL_LENGTH_MAX,
977 hidden[0] != '\0' ? "<br>" : "",
987 static char *__get_no_connected_device_label(void *data, Evas_Object *obj,
990 mh_appdata_t *ad = (mh_appdata_t*)data;
991 char buf[MH_LABEL_LENGTH_MAX] = {0, };
995 ERR("The param is NULL\n");
999 if (!strcmp("elm.text.multiline", part)) {
1000 no_of_dev = _get_list_clients_count(ad);
1001 snprintf(buf, MH_LABEL_LENGTH_MAX, "<font_size=30>%s<br>%d</font_size>", STR_CONNECTED_DEV, no_of_dev);
1008 static char *__get_connected_device_label(void *data, Evas_Object *obj,
1011 mh_appdata_t *ad = (mh_appdata_t*)data;
1012 char buf[MH_LABEL_LENGTH_MAX] = {0, };
1016 ERR("The param is NULL\n");
1020 if (!strcmp("elm.text.sub", part)) {
1021 g_strlcpy(buf, STR_CONNECTED_DEV, sizeof(buf));
1023 } else if (!strcmp("elm.text", part)) {
1024 no_of_dev = _get_list_clients_count(ad);
1025 snprintf(buf, MH_LABEL_LENGTH_MAX, "%d", no_of_dev);
1032 #ifdef TETHERING_DATA_USAGE_SUPPORT
1033 static char *__get_usage_label(void *data, Evas_Object *obj, const char *part)
1035 mh_appdata_t *ad = (mh_appdata_t*)data;
1036 unsigned long long total = 0;
1037 unsigned long long sent = 0;
1038 unsigned long long received = 0;
1040 char buf[MH_LABEL_LENGTH_MAX] = {0, };
1041 char label[MH_LABEL_LENGTH_MAX] = {0, };
1044 ERR("The param is NULL\n");
1048 if (!strcmp("elm.text", part)) {
1049 g_strlcpy(label, STR_DATA_USAGE, sizeof(label));
1050 return strdup(label);
1051 } else if (!strcmp("elm.text.multiline", part)) {
1052 sent = ad->data_statistics.pdp_total_sent;
1053 received = ad->data_statistics.pdp_total_receive;
1055 if (sent >= MH_MB || received >= MH_MB) {
1059 total = sent + received;
1061 } else if (sent + received >= MH_MB) {
1062 total = (sent + received) / MH_MB;
1064 } else if (sent >= MH_KB || received >= MH_KB) {
1068 total = sent + received;
1070 } else if (sent + received >= MH_KB) {
1071 total = (sent + received) / MH_KB;
1074 total = sent + received;
1078 if (total > INT_MAX) {
1079 ERR("data usage overflow\n");
1082 snprintf(label, MH_LABEL_LENGTH_MAX, fmt_str, (int)total);
1083 return strdup(label);
1090 static void __set_genlist_itc(mh_appdata_t *ad)
1092 /* On, Off view's item class for genlist */
1093 ad->main.wifi_itc = elm_genlist_item_class_new();
1094 if (ad->main.wifi_itc == NULL) {
1095 ERR("elm_genlist_item_class_new failed\n");
1099 ad->main.wifi_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1100 ad->main.wifi_itc->func.text_get = __get_wifi_label;
1101 ad->main.wifi_itc->func.content_get = __get_wifi_icon;
1102 ad->main.wifi_itc->func.state_get = NULL;
1103 ad->main.wifi_itc->func.del = NULL;
1105 /* End of On, Off view's item class for genlist */
1107 /* Off view's item class for genlist */
1108 ad->main.bt_itc = elm_genlist_item_class_new();
1109 if (ad->main.bt_itc == NULL) {
1110 ERR("elm_genlist_item_class_new failed\n");
1114 ad->main.bt_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1115 ad->main.bt_itc->func.text_get = __get_bt_label;
1116 ad->main.bt_itc->func.content_get = __get_bt_icon;
1117 ad->main.bt_itc->func.state_get = NULL;
1118 ad->main.bt_itc->func.del = NULL;
1120 ad->main.usb_itc = elm_genlist_item_class_new();
1121 if (ad->main.usb_itc == NULL) {
1122 ERR("elm_genlist_item_class_new failed\n");
1126 ad->main.usb_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1127 ad->main.usb_itc->func.text_get = __get_usb_label;
1128 ad->main.usb_itc->func.content_get = __get_usb_icon;
1129 ad->main.usb_itc->func.state_get = NULL;
1130 ad->main.usb_itc->func.del = NULL;
1132 ad->main.help_itc = elm_genlist_item_class_new();
1133 if (ad->main.help_itc == NULL) {
1134 ERR("elm_genlist_item_class_new failed\n");
1138 ad->main.help_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1139 ad->main.help_itc->func.text_get = __get_help_label;
1140 ad->main.help_itc->func.content_get = NULL;
1141 ad->main.help_itc->func.state_get = NULL;
1142 ad->main.help_itc->func.del = NULL;
1144 /* End of Off view's item class for genlist */
1146 /* On view's item class for genlist */
1147 ad->main.device0_itc = elm_genlist_item_class_new();
1148 if (ad->main.device0_itc == NULL) {
1149 ERR("elm_genlist_item_class_new failed\n");
1153 ad->main.device0_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1154 ad->main.device0_itc->func.text_get = __get_no_connected_device_label;
1155 ad->main.device0_itc->func.content_get = NULL;
1156 ad->main.device0_itc->func.state_get = NULL;
1157 ad->main.device0_itc->func.del = NULL;
1159 ad->main.device_itc = elm_genlist_item_class_new();
1160 if (ad->main.device_itc == NULL) {
1161 ERR("elm_genlist_item_class_new failed\n");
1165 ad->main.device_itc->item_style = MH_GENLIST_2LINE_BOTTOM_TEXT_STYLE;
1166 ad->main.device_itc->func.text_get = __get_connected_device_label;
1167 ad->main.device_itc->func.content_get = NULL;
1168 ad->main.device_itc->func.state_get = NULL;
1169 ad->main.device_itc->func.del = NULL;
1171 #ifdef TETHERING_DATA_USAGE_SUPPORT
1172 ad->main.usage_itc = elm_genlist_item_class_new();
1173 if (ad->main.usage_itc == NULL) {
1174 ERR("elm_genlist_item_class_new failed\n");
1178 ad->main.usage_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1179 ad->main.usage_itc->func.text_get = __get_usage_label;
1180 ad->main.usage_itc->func.content_get = NULL;
1181 ad->main.usage_itc->func.state_get = NULL;
1182 ad->main.usage_itc->func.del = NULL;
1184 /* End of On view's item class for genlist */
1188 static void __gl_realized(void *data, Evas_Object *obj, void *event_info)
1190 if (data == NULL || event_info == NULL) {
1191 ERR("Invalid param\n");
1195 mh_appdata_t *ad = (mh_appdata_t *)data;
1196 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
1199 char str[MH_LABEL_LENGTH_MAX] = {0, };
1202 if (item == ad->main.wifi_item || item == ad->main.bt_item || item == ad->main.usb_item) {
1203 ao = elm_object_item_access_object_get(item);
1204 btn = elm_object_item_part_content_get(item, "on&off");
1205 snprintf(str, sizeof(str), "%s, %s", "On/off button",
1206 (elm_check_state_get(btn) ? "On" : "Off"));
1207 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
1209 if (item == ad->main.wifi_item || item == ad->main.bt_item) {
1210 DBG("Wi-Fi or BT item : %p\n", item);
1211 elm_object_item_signal_emit(item, "elm,state,top", "");
1212 } else if (item == ad->main.usb_item) {
1214 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1216 } else if (item == ad->main.setup_item) {
1217 DBG("setup_item\n");
1218 ao = elm_object_item_access_object_get(item);
1219 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, "Item");
1221 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1222 } else if (item == ad->main.device_item) {
1223 DBG("device_item\n");
1224 ao = elm_object_item_access_object_get(item);
1225 snprintf(str, sizeof(str), "%s, %s", "Expandable list",
1226 "Double tap to open list");
1227 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
1229 elm_object_item_signal_emit(item, "elm,state,top", "");
1230 } else if (ad->main.device_item != NULL &&
1231 ad->main.device_item == elm_genlist_item_parent_get(item)) {
1232 DBG("device_item's child\n");
1233 elm_object_item_signal_emit(item, "elm,state,center", "");
1235 for (i = 0; i < 4; i++) {
1236 if (item == ad->main.sp_item[i])
1237 elm_object_item_access_unregister(item);
1240 #ifdef TETHERING_DATA_USAGE_SUPPORT
1241 if (item == ad->main.usage_item) {
1242 DBG("usage_item\n");
1243 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1249 static void __create_inner_contents(mh_appdata_t *ad)
1251 __MOBILE_AP_FUNC_ENTER__;
1253 Elm_Object_Item *item = NULL;
1257 ad->main.genlist = elm_genlist_add(ad->naviframe);
1258 elm_genlist_mode_set(ad->main.genlist, ELM_LIST_COMPRESS);
1259 evas_object_smart_callback_add(ad->main.genlist, "realized", __gl_realized, ad);
1261 __set_genlist_itc(ad);
1263 item = elm_genlist_item_append(ad->main.genlist, ad->main.wifi_itc,
1264 ad, NULL, ELM_GENLIST_ITEM_NONE,
1265 __select_wifi_item, ad);
1266 ad->main.wifi_item = item;
1268 if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) {
1269 item = elm_genlist_item_append(ad->main.genlist, ad->main.help_itc,
1270 ad, NULL, ELM_GENLIST_ITEM_NONE,
1272 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1273 ad->main.help_item = item;
1276 item = elm_genlist_item_append(ad->main.genlist, ad->main.bt_itc,
1277 ad, NULL, ELM_GENLIST_ITEM_NONE,
1278 __select_bt_item, ad);
1279 ad->main.bt_item = item;
1281 item = elm_genlist_item_append(ad->main.genlist, ad->main.usb_itc,
1282 ad, NULL, ELM_GENLIST_ITEM_NONE,
1283 __select_usb_item, ad);
1284 ad->main.usb_item = item;
1285 if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
1286 if (ad->main.usb_item)
1287 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
1289 if (ad->main.usb_item)
1290 elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
1292 if (ad->main.hotspot_mode & (VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI |
1293 VCONFKEY_MOBILE_HOTSPOT_MODE_USB |
1294 VCONFKEY_MOBILE_HOTSPOT_MODE_BT)) {
1295 #ifdef TETHERING_DATA_USAGE_SUPPORT
1296 item = elm_genlist_item_append(ad->main.genlist, ad->main.usage_itc,
1297 ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1298 elm_genlist_item_select_mode_set(item,
1299 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1300 ad->main.usage_item = item;
1302 /* Insert "Connected devices" item */
1303 tethering_foreach_connected_clients(ad->handle, TETHERING_TYPE_ALL,
1304 _connected_clients_cb, (void *)ad);
1306 no_of_dev = _get_list_clients_count(ad);
1307 if (no_of_dev == 0) {
1308 item = elm_genlist_item_append(ad->main.genlist,
1309 ad->main.device0_itc, ad, NULL,
1310 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1311 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1313 item = elm_genlist_item_append(ad->main.genlist,
1314 ad->main.device_itc, ad, NULL,
1315 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
1316 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1318 ad->main.device_item = item;
1321 if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP) {
1322 if (ad->main.wifi_item)
1323 elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
1324 if (ad->main.setup_item)
1325 elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
1326 if (ad->main.bt_item)
1327 elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
1328 if (ad->main.usb_item)
1329 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
1332 __MOBILE_AP_FUNC_EXIT__;
1336 void _main_free_genlist_itc(mh_appdata_t *ad)
1338 __MOBILE_AP_FUNC_ENTER__;
1343 mh_main_view_t *mv = &ad->main;
1345 #ifdef TETHERING_DATA_USAGE_SUPPORT
1346 _free_genlist_itc(&mv->usage_itc);
1348 _free_genlist_itc(&mv->device_itc);
1349 _free_genlist_itc(&mv->device0_itc);
1350 _free_genlist_itc(&mv->help_itc);
1351 _free_genlist_itc(&mv->usb_itc);
1352 _free_genlist_itc(&mv->bt_itc);
1353 _free_genlist_itc(&mv->setup_itc);
1354 _free_genlist_itc(&mv->wifi_itc);
1355 __MOBILE_AP_FUNC_EXIT__;
1359 void _main_callback_del(mh_appdata_t *ad)
1361 __MOBILE_AP_FUNC_ENTER__;
1364 ERR("ad is NULL\n");
1370 obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
1372 evas_object_smart_callback_del(obj, "changed", __wifi_onoff_changed_cb);
1374 obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
1376 evas_object_smart_callback_del(obj, "changed", __bt_onoff_changed_cb);
1378 obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
1380 evas_object_smart_callback_del(obj, "changed", __usb_onoff_changed_cb);
1382 evas_object_smart_callback_del(ad->main.genlist, "realized", __gl_realized);
1384 __MOBILE_AP_FUNC_EXIT__;
1387 void _ctxpopup_more_button_callback_add(mh_appdata_t *ad)
1389 eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_MORE,
1390 __create_ctxpopup_more_button, ad);
1393 void _ctxpopup_more_button_callback_del(mh_appdata_t *ad)
1395 eext_object_event_callback_del(ad->naviframe, EEXT_CALLBACK_MORE,
1396 __create_ctxpopup_more_button);
1399 static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad)
1404 __MOBILE_AP_FUNC_ENTER__;
1406 elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
1407 pos = elm_win_rotation_get(ad->win);
1412 evas_object_move(ctx, w/2, h);
1415 evas_object_move(ctx, h/2, w);
1418 evas_object_move(ctx, h/2, w);
1421 __MOBILE_AP_FUNC_EXIT__;
1424 static void __rotate_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
1426 __MOBILE_AP_FUNC_ENTER__;
1428 mh_appdata_t *ad = (mh_appdata_t *)data;
1429 Evas_Object *ctx = ad->ctxpopup;
1431 __ctx_move_more_ctxpopup(ctx, ad);
1432 evas_object_show(ctx);
1434 __MOBILE_AP_FUNC_EXIT__;
1437 static void __dismissed_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event)
1439 __MOBILE_AP_FUNC_ENTER__;
1441 mh_appdata_t *ad = (mh_appdata_t *)data;
1442 Evas_Object *ctx = ad->ctxpopup;
1445 evas_object_del(ctx);
1448 __ctx_move_more_ctxpopup(ctx, ad);
1449 evas_object_show(ctx);
1450 rotate_flag = EINA_FALSE;
1452 __MOBILE_AP_FUNC_EXIT__;
1455 static void __ctx_delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj,
1458 Evas_Object *navi = (Evas_Object *)data;
1459 Evas_Object *ctx = obj;
1462 ERR("data is null\n");
1465 __MOBILE_AP_FUNC_ENTER__;
1467 evas_object_smart_callback_del(ctx, "dismissed",
1468 __dismissed_more_ctxpopup_cb);
1469 evas_object_smart_callback_del(elm_object_top_widget_get(ctx),
1470 "rotation,changed", __rotate_more_ctxpopup_cb);
1471 evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL,
1472 __ctx_delete_more_ctxpopup_cb, navi);
1473 __MOBILE_AP_FUNC_EXIT__;
1476 static void __gl_configure_wifi_tethering(void *data, Evas_Object *obj, void *event_info)
1478 __MOBILE_AP_FUNC_ENTER__;
1481 ERR("The param is NULL\n");
1484 mh_appdata_t *ad = (mh_appdata_t *)data;
1486 evas_object_del(ad->ctxpopup);
1487 ad->ctxpopup = NULL;
1489 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1490 _ctxpopup_more_button_callback_del(ad);
1491 mh_draw_wifi_setup_view(ad);
1493 __MOBILE_AP_FUNC_EXIT__;
1498 static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
1501 mh_appdata_t *ad = (mh_appdata_t *)data;
1502 Evas_Object *ctxpopup = NULL;
1505 ERR("ad is null\n");
1508 __MOBILE_AP_FUNC_ENTER__;
1510 ctxpopup = elm_ctxpopup_add(ad->win);
1511 elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
1513 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK,
1514 eext_ctxpopup_back_cb, ad);
1515 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE,
1516 eext_ctxpopup_back_cb, ad);
1517 elm_object_style_set(ctxpopup, "more/default");
1518 evas_object_smart_callback_add(ctxpopup, "dismissed",
1519 __dismissed_more_ctxpopup_cb, ad);
1520 evas_object_smart_callback_add(elm_object_top_widget_get(ctxpopup), "rotation,changed",
1521 __rotate_more_ctxpopup_cb, ad);
1522 evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL,
1523 __ctx_delete_more_ctxpopup_cb, ad->naviframe);
1525 elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
1526 ELM_CTXPOPUP_DIRECTION_DOWN,
1527 ELM_CTXPOPUP_DIRECTION_UNKNOWN,
1528 ELM_CTXPOPUP_DIRECTION_UNKNOWN);
1530 __ctx_move_more_ctxpopup(ctxpopup, ad);
1531 elm_ctxpopup_item_append(ctxpopup, STR_CONFIGURE_MOBILE_HOTSPOT,
1532 NULL, __gl_configure_wifi_tethering, ad);
1534 evas_object_show(ctxpopup);
1536 ad->ctxpopup = ctxpopup;
1538 __MOBILE_AP_FUNC_EXIT__;
1542 void _main_draw_contents(mh_appdata_t *ad)
1546 Elm_Object_Item *navi_item;
1548 __create_inner_contents(ad);
1550 ad->main.back_btn = elm_button_add(ad->naviframe);
1551 if (ad->main.back_btn == NULL) {
1552 ERR("elm_button_add is failed\n");
1553 if (ad->main.genlist) {
1554 evas_object_del(ad->main.genlist);
1555 ad->main.genlist = NULL;
1559 elm_object_style_set(ad->main.back_btn, "naviframe/back_btn/default");
1561 eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_BACK,
1562 eext_naviframe_back_cb, NULL);
1563 _ctxpopup_more_button_callback_add(ad);
1564 evas_object_smart_callback_add(ad->main.back_btn, "clicked", (Evas_Smart_Cb)__back_btn_cb, (void *)ad);
1565 elm_object_focus_allow_set(ad->main.back_btn, EINA_FALSE);
1567 navi_item = elm_naviframe_item_push(ad->naviframe, IDS_TETH,
1568 ad->main.back_btn, NULL, ad->main.genlist, NULL);
1569 elm_object_item_domain_text_translatable_set(navi_item, PKGNAME, EINA_TRUE);
1571 elm_naviframe_item_pop_cb_set(navi_item, (Elm_Naviframe_Item_Pop_Cb)__back_btn_cb, (void *)ad);
1572 ad->navi_item = navi_item;