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 _ctxpopup_more_button_callback_del(ad);
52 _create_connected_client_view(ad);
53 __MOBILE_AP_FUNC_EXIT__;
56 static bool _connected_clients_cb(tethering_client_h client, void *user_data)
58 __MOBILE_AP_FUNC_ENTER__;
60 if (user_data == NULL) {
61 ERR("user_data is NULL\n");
65 mh_appdata_t *ad = (mh_appdata_t *)user_data;
67 _append_list_client_handle(ad, client);
69 __MOBILE_AP_FUNC_EXIT__;
73 void ap_update_data_device(mh_appdata_t *ad)
75 __MOBILE_AP_FUNC_ENTER__;
78 ERR("Invalid param\n");
82 _genlist_update_device_item(ad);
84 __MOBILE_AP_FUNC_EXIT__;
87 #ifdef TETHERING_DATA_USAGE_SUPPORT
88 Eina_Bool ap_update_data_packet_usage(mh_appdata_t *ad)
91 ERR("Invalid param\n");
95 if (ad->main.usage_item)
96 elm_genlist_item_update(ad->main.usage_item);
101 Eina_Bool ap_get_data_statistics(void *data)
104 ERR("The param is NULL\n");
105 return ECORE_CALLBACK_CANCEL;
107 mh_appdata_t *ad = (mh_appdata_t *)data;
109 if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
110 ad->update_statistics_handle = NULL;
111 return ECORE_CALLBACK_CANCEL;
114 /* If previous data is not updated, new data is not required */
115 if (ad->data_statistics.is_updated == false)
116 return ECORE_CALLBACK_RENEW;
118 /* Because previous data is updated, new data is required.
119 It will be returned asynchronously. */
120 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
121 ad->data_statistics.is_updated = false;
123 return ECORE_CALLBACK_RENEW;
127 Eina_Bool ap_update_device_conn_time(void * data)
130 ERR("The param is NULL\n");
131 return ECORE_CALLBACK_CANCEL;
133 mh_appdata_t *ad = (mh_appdata_t *)data;
136 if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
137 _stop_update_device_conn_time(ad);
138 __MOBILE_AP_FUNC_EXIT__;
139 return ECORE_CALLBACK_CANCEL;
142 while (count < ad->connected_device.no_of_clients) {
143 if (ad->connected_device.station_items[count])
144 elm_genlist_item_fields_update(ad->connected_device.station_items[count++],
145 "elm.text.sub", ELM_GENLIST_ITEM_FIELD_TEXT);
147 return ECORE_CALLBACK_RENEW;
150 void _start_update_device_conn_time(mh_appdata_t *ad)
152 __MOBILE_AP_FUNC_ENTER__;
155 ERR("Invalid param\n");
156 __MOBILE_AP_FUNC_EXIT__;
160 if (ad->update_conn_time_handle)
161 _stop_update_device_conn_time(ad);
163 ad->update_conn_time_handle = ecore_timer_add(UPDATE_INTERVAL,
164 ap_update_device_conn_time, (void *)ad);
166 __MOBILE_AP_FUNC_EXIT__;
169 void _stop_update_device_conn_time(mh_appdata_t *ad)
171 __MOBILE_AP_FUNC_ENTER__;
174 ERR("Invalid param\n");
178 if (ad->update_conn_time_handle) {
179 ecore_timer_del(ad->update_conn_time_handle);
180 ad->update_conn_time_handle = NULL;
182 __MOBILE_AP_FUNC_EXIT__;
185 #ifdef TETHERING_DATA_USAGE_SUPPORT
186 void _start_update_data_packet_usage(mh_appdata_t *ad)
188 __MOBILE_AP_FUNC_ENTER__;
191 ERR("Invalid param\n");
195 if (ad->update_statistics_handle)
196 _stop_update_data_packet_usage(ad);
198 ad->data_statistics.is_updated = false;
199 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
200 ad->update_statistics_handle = ecore_timer_add(MH_UPDATE_INTERVAL,
201 ap_get_data_statistics, (void *)ad);
203 __MOBILE_AP_FUNC_EXIT__;
207 void _stop_update_data_packet_usage(mh_appdata_t *ad)
209 __MOBILE_AP_FUNC_ENTER__;
212 ERR("Invalid param\n");
216 if (ad->update_statistics_handle) {
217 ecore_timer_del(ad->update_statistics_handle);
218 ad->data_statistics.is_updated = false;
219 ad->update_statistics_handle = NULL;
222 __MOBILE_AP_FUNC_EXIT__;
227 static void __read_setting(mh_appdata_t *ad)
229 __MOBILE_AP_FUNC_ENTER__;
232 ERR("Invalid param\n");
238 char *passphrase = NULL;
240 tethering_wifi_security_type_e type;
242 ad->main.hotspot_mode = _get_vconf_hotspot_mode();
244 #ifdef TETHERING_DATA_USAGE_SUPPORT
245 ad->data_statistics.pdp_total_sent = 0;
246 ad->data_statistics.pdp_total_receive = 0;
247 if (ad->main.hotspot_mode != VCONFKEY_MOBILE_HOTSPOT_MODE_NONE)
248 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
251 ret = tethering_wifi_get_ssid(ad->handle, &ssid);
252 if (ret != TETHERING_ERROR_NONE || ssid == NULL) {
253 ERR("tethering_wifi_get_ssid is failed : %d\n", ret);
256 g_strlcpy(ad->setup.device_name, ssid, sizeof(ad->setup.device_name));
259 ret = tethering_wifi_get_passphrase(ad->handle, &passphrase);
260 if (ret != TETHERING_ERROR_NONE || passphrase == NULL) {
261 ERR("tethering_wifi_get_passphrase is failed : %d\n", ret);
265 g_strlcpy(ad->setup.wifi_passphrase, passphrase,
266 sizeof(ad->setup.wifi_passphrase));
267 g_strlcpy(ad->setup.wifi_passphrase_new, passphrase,
268 sizeof(ad->setup.wifi_passphrase_new));
271 ret = tethering_wifi_get_ssid_visibility(ad->handle, &visibility);
272 if (ret != TETHERING_ERROR_NONE)
273 ERR("tethering_wifi_get_ssid_visibility is failed\n");
275 ad->setup.visibility = visibility;
276 ad->setup.visibility_new = visibility;
278 ret = tethering_wifi_get_security_type(ad->handle, &type);
279 if (ret != TETHERING_ERROR_NONE)
280 ERR("tethering_wifi_get_security_type is failed\n");
282 ad->setup.security_type = type;
283 ad->setup.security_type_new = type;
285 __MOBILE_AP_FUNC_EXIT__;
288 void _update_wifi_item(mh_appdata_t *ad, int wifi_state)
290 __MOBILE_AP_FUNC_ENTER__;
292 if (ad->main.wifi_state == wifi_state)
295 if (ad->main.wifi_state == MH_STATE_PROCESS) {
296 ad->main.wifi_state = MH_STATE_NONE;
297 elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
298 } else if (ad->main.wifi_state == MH_STATE_NONE) {
299 ad->main.wifi_state = MH_STATE_PROCESS;
300 elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
303 if (ad->main.wifi_item)
304 elm_genlist_item_update(ad->main.wifi_item);
306 if (ad->main.setup_item)
307 elm_object_item_signal_emit(ad->main.setup_item, "elm,state,bottom", "");
309 __MOBILE_AP_FUNC_EXIT__;
314 void _update_bt_item(mh_appdata_t *ad, int bt_state)
316 __MOBILE_AP_FUNC_ENTER__;
318 if (ad->main.bt_state == bt_state)
321 if (ad->main.bt_state == MH_STATE_PROCESS) {
322 ad->main.bt_state = MH_STATE_NONE;
323 elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
324 } else if (ad->main.bt_state == MH_STATE_NONE) {
325 ad->main.bt_state = MH_STATE_PROCESS;
326 elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
329 if (ad->main.bt_item)
330 elm_genlist_item_update(ad->main.bt_item);
332 __MOBILE_AP_FUNC_EXIT__;
337 void _update_usb_item(mh_appdata_t *ad, int usb_state)
339 __MOBILE_AP_FUNC_ENTER__;
341 if (ad->main.usb_state == usb_state)
344 if (ad->main.usb_state == MH_STATE_PROCESS) {
345 ad->main.usb_state = MH_STATE_NONE;
346 elm_genlist_item_select_mode_set(ad->main.usb_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
347 } else if (ad->main.usb_state == MH_STATE_NONE) {
348 ad->main.usb_state = MH_STATE_PROCESS;
349 elm_genlist_item_select_mode_set(ad->main.usb_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
352 elm_genlist_item_update(ad->main.usb_item);
354 __MOBILE_AP_FUNC_EXIT__;
359 void _genlist_update_device_item(mh_appdata_t *ad)
361 __MOBILE_AP_FUNC_ENTER__;
364 ERR("Invalid param\n");
367 unsigned int no_of_dev = 0;
368 no_of_dev = _get_list_clients_count(ad);
369 Elm_Object_Item *item = NULL;
371 if (ad->main.device_item) {
372 elm_object_item_del(ad->main.device_item);
373 ad->main.device_item = NULL;
374 if (no_of_dev == 0) {
375 item = elm_genlist_item_append(ad->main.genlist,
376 ad->main.device0_itc, ad, NULL,
377 ELM_GENLIST_ITEM_NONE, NULL, NULL);
378 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
380 item = elm_genlist_item_append(ad->main.genlist,
381 ad->main.device_itc, ad, NULL,
382 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
383 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
385 ad->main.device_item = item;
388 if (ad->connected_device.navi_it)
389 _update_conn_clients(ad);
391 __MOBILE_AP_FUNC_EXIT__;
395 void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
397 __MOBILE_AP_FUNC_ENTER__;
400 ERR("Invalid param\n");
404 int state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
405 Eina_Bool wifi_state = EINA_FALSE;
406 Eina_Bool bt_state = EINA_FALSE;
407 Eina_Bool usb_state = EINA_FALSE;
408 Eina_Bool wifi_ap_state = EINA_FALSE;
409 Elm_Object_Item *item = NULL;
413 ad->main.hotspot_mode = _get_vconf_hotspot_mode();
414 state = ad->main.hotspot_mode;
416 wifi_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI);
417 bt_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_BT);
418 usb_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_USB);
419 wifi_ap_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP);
422 if (ad->main.wifi_item)
423 elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
424 if (ad->main.setup_item)
425 elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
426 if (ad->main.bt_item)
427 elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
428 if (ad->main.usb_item)
429 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
431 if (ad->main.setup_item)
432 elm_object_item_disabled_set(ad->main.setup_item, EINA_FALSE);
433 if (ad->main.bt_item)
434 elm_object_item_disabled_set(ad->main.bt_item, EINA_FALSE);
435 if (_get_vconf_usb_state() == VCONFKEY_SYSMAN_USB_DISCONNECTED) {
436 if (ad->main.usb_item)
437 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
439 if (ad->main.usb_item)
440 elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
444 if (wifi_state || bt_state || usb_state) {
445 #ifdef TETHERING_DATA_USAGE_SUPPORT
446 if (ad->main.usage_item == NULL) {
447 item = elm_genlist_item_insert_before(ad->main.genlist,
448 ad->main.usage_itc, ad, NULL,
450 ELM_GENLIST_ITEM_NONE, NULL, NULL);
451 elm_genlist_item_select_mode_set(item,
452 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
453 ad->main.usage_item = item;
457 no_of_dev = _get_list_clients_count(ad);
458 if (ad->main.device_item == NULL) {
459 if (no_of_dev == 0) {
460 item = elm_genlist_item_append(ad->main.genlist,
461 ad->main.device0_itc, ad, NULL,
462 ELM_GENLIST_ITEM_NONE, NULL, NULL);
463 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
465 item = elm_genlist_item_append(ad->main.genlist,
466 ad->main.device_itc, ad, NULL,
467 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
468 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
470 ad->main.device_item = item;
473 if (ad->main.device_item) {
474 elm_object_item_del(ad->main.device_item);
475 ad->main.device_item = NULL;
477 #ifdef TETHERING_DATA_USAGE_SUPPORT
478 if (ad->main.usage_item) {
479 elm_object_item_del(ad->main.usage_item);
480 ad->main.usage_item = NULL;
486 if (ad->main.help_item) {
487 elm_genlist_item_update(ad->main.help_item);
489 item = elm_genlist_item_insert_after(ad->main.genlist,
490 ad->main.help_itc, ad, NULL,
492 ELM_GENLIST_ITEM_NONE, NULL,
495 ERR("elm_genlist_item_insert_after NULL\n");
497 elm_genlist_item_select_mode_set(item,
498 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
499 ad->main.help_item = item;
503 if (ad->main.help_item) {
504 elm_object_item_del(ad->main.help_item);
505 ad->main.help_item = NULL;
510 case TETHERING_TYPE_WIFI:
511 /* Update Wi-Fi tethering on / off button */
512 if (ad->main.wifi_state != MH_STATE_NONE) {
513 _update_wifi_item(ad, MH_STATE_NONE);
515 obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
517 elm_check_state_set(obj, wifi_state);
519 if (ad->main.wifi_item)
520 elm_genlist_item_update(ad->main.wifi_item);
524 case TETHERING_TYPE_BT:
525 /* Update BT tethering on / off button */
526 if (ad->main.bt_state != MH_STATE_NONE) {
527 _update_bt_item(ad, MH_STATE_NONE);
529 obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
531 elm_check_state_set(obj, bt_state);
533 if (ad->main.bt_item)
534 elm_genlist_item_update(ad->main.bt_item);
538 case TETHERING_TYPE_USB:
539 /* Update USB tethering on / off button */
540 if (ad->main.usb_state != MH_STATE_NONE) {
541 _update_usb_item(ad, MH_STATE_NONE);
543 obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
545 elm_check_state_set(obj, usb_state);
547 if (ad->main.usb_item)
548 elm_genlist_item_update(ad->main.usb_item);
553 DBG("Unknown tethering type : %d\n", type);
557 __MOBILE_AP_FUNC_EXIT__;
562 static int __is_allowed(tethering_type_e type)
565 device_policy_manager_h dpm = NULL;
567 dpm = dpm_manager_create();
569 ERR("Failed to create device policy manager!!");
574 case TETHERING_TYPE_WIFI:
575 dpm_restriction_get_wifi_hotspot_state(dpm, &state);
577 case TETHERING_TYPE_USB:
578 dpm_restriction_get_usb_tethering_state(dpm, &state);
580 case TETHERING_TYPE_BT:
581 dpm_restriction_get_bluetooth_tethering_state(dpm, &state);
587 dpm_manager_destroy(dpm);
592 static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
595 __MOBILE_AP_FUNC_ENTER__;
597 if (!__is_allowed(TETHERING_TYPE_WIFI)) {
598 ERR("Wi-Fi tethering is restricted!!");
599 elm_check_state_set(obj, EINA_FALSE);
600 _create_security_restriction_noti(TETHERING_TYPE_WIFI);
605 ERR("The param is NULL\n");
609 mh_appdata_t *ad = (mh_appdata_t *)data;
611 _update_wifi_item(ad, MH_STATE_PROCESS);
612 ad->type = TETHERING_TYPE_WIFI;
613 ad->is_wifi_teth_enabling = true;
614 if (_handle_wifi_onoff_change(ad) != 0) {
615 ERR("_handle_wifi_onoff_change is failed\n");
616 _update_wifi_item(ad, MH_STATE_NONE);
617 ad->is_wifi_teth_enabling = false;
620 __MOBILE_AP_FUNC_EXIT__;
625 static void __select_wifi_item(void *data, Evas_Object *obj, void *event_info)
627 __MOBILE_AP_FUNC_ENTER__;
629 Evas_Object *content;
630 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
633 ERR("The param is NULL\n");
637 elm_genlist_item_selected_set(item, EINA_FALSE);
639 content = elm_object_item_part_content_get(item, "elm.icon");
640 __wifi_onoff_changed_cb(data, content, NULL);
642 __MOBILE_AP_FUNC_EXIT__;
647 static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
649 __MOBILE_AP_FUNC_ENTER__;
651 if (!__is_allowed(TETHERING_TYPE_BT)) {
652 ERR("BT tethering is restricted!!");
653 elm_check_state_set(obj, EINA_FALSE);
654 _create_security_restriction_noti(TETHERING_TYPE_BT);
659 ERR("The param is NULL\n");
663 mh_appdata_t *ad = (mh_appdata_t *)data;
665 _update_bt_item(ad, MH_STATE_PROCESS);
666 ad->type = TETHERING_TYPE_BT;
667 ad->is_bt_teth_enabling = true;
669 if (_handle_bt_onoff_change(ad) != 0) {
670 ERR("_handle_bt_onoff_change is failed\n");
671 _update_bt_item(ad, MH_STATE_NONE);
672 ad->is_bt_teth_enabling = false;
675 __MOBILE_AP_FUNC_EXIT__;
680 static void __select_bt_item(void *data, Evas_Object *obj, void *event_info)
682 __MOBILE_AP_FUNC_ENTER__;
684 Evas_Object *content;
685 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
688 ERR("The param is NULL\n");
692 elm_genlist_item_selected_set(item, EINA_FALSE);
694 content = elm_object_item_part_content_get(item, "elm.icon");
695 __bt_onoff_changed_cb(data, content, NULL);
697 __MOBILE_AP_FUNC_EXIT__;
702 static void __usb_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
704 __MOBILE_AP_FUNC_ENTER__;
706 if (!__is_allowed(TETHERING_TYPE_USB)) {
707 ERR("USB tethering is restricted!!");
708 elm_check_state_set(obj, EINA_FALSE);
709 _create_security_restriction_noti(TETHERING_TYPE_USB);
714 ERR("The param is NULL\n");
718 mh_appdata_t *ad = (mh_appdata_t *)data;
719 _update_usb_item(ad, MH_STATE_PROCESS);
720 ad->type = TETHERING_TYPE_USB;
721 ad->is_usb_teth_enabling = true;
722 if (_handle_usb_onoff_change(ad) != 0) {
723 ERR("_handle_usb_onoff_change is failed\n");
724 _update_usb_item(ad, MH_STATE_NONE);
725 ad->is_usb_teth_enabling = false;
728 __MOBILE_AP_FUNC_EXIT__;
733 static void __select_usb_item(void *data, Evas_Object *obj, void *event_info)
735 __MOBILE_AP_FUNC_ENTER__;
737 Evas_Object *content;
738 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
741 ERR("The param is NULL\n");
745 elm_genlist_item_selected_set(item, EINA_FALSE);
747 content = elm_object_item_part_content_get(item, "elm.icon");
748 __usb_onoff_changed_cb(data, content, NULL);
750 __MOBILE_AP_FUNC_EXIT__;
755 static void __back_btn_cb(void *data, Elm_Object_Item *navi_item)
760 ERR("The param is NULL\n");
764 mh_appdata_t *ad = (mh_appdata_t*)data;
766 _release_list_client_handle(ad);
767 _main_callback_del(ad);
769 ug_destroy_me(((mh_ugdata_t *)ad->gadget)->ug);
775 static char *__get_wifi_label(void *data, Evas_Object *obj, const char *part)
777 if (!strcmp("elm.text", part))
778 return strdup(STR_MOBILE_HOTSPOT);
783 static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
786 mh_appdata_t *ad = (mh_appdata_t*)data;
787 Evas_Object *btn = NULL;
790 ERR("The param is NULL\n");
794 if (!strcmp("elm.swallow.end", part)) {
795 if (ad->main.wifi_state == MH_STATE_PROCESS) {
796 btn = _create_progressbar(obj, "process_medium");
798 btn = elm_check_add(obj);
799 elm_object_style_set(btn, "on&off");
801 evas_object_propagate_events_set(btn, EINA_FALSE);
802 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
803 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
804 elm_check_state_set(btn, ad->main.hotspot_mode &
805 VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI ? EINA_TRUE : EINA_FALSE);
807 evas_object_smart_callback_add(btn, "changed", __wifi_onoff_changed_cb, ad);
808 evas_object_show(btn);
815 static char *__get_bt_label(void *data, Evas_Object *obj, const char *part)
817 if (!strcmp("elm.text", part))
818 return strdup(STR_BLUETOOTH_TETH);
823 static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part)
825 mh_appdata_t *ad = (mh_appdata_t *)data;
826 Evas_Object *btn = NULL;
829 ERR("The param is NULL\n");
833 if (!strcmp("elm.swallow.end", part)) {
834 if (ad->main.bt_state == MH_STATE_PROCESS) {
835 btn = _create_progressbar(obj, "process_medium");
837 btn = elm_check_add(obj);
839 ERR("btn is NULL\n");
842 elm_object_style_set(btn, "on&off");
843 evas_object_pass_events_set(btn, EINA_TRUE);
844 evas_object_propagate_events_set(btn, EINA_FALSE);
845 elm_check_state_set(btn, ad->main.hotspot_mode &
846 VCONFKEY_MOBILE_HOTSPOT_MODE_BT ? EINA_TRUE : EINA_FALSE);
847 evas_object_show(btn);
848 evas_object_smart_callback_add(btn, "changed", __bt_onoff_changed_cb, ad);
855 static char *__get_usb_label(void *data, Evas_Object *obj, const char *part)
857 if (!strcmp("elm.text", part))
858 return strdup(STR_USB_TETH);
863 static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
866 mh_appdata_t *ad = (mh_appdata_t *)data;
867 Evas_Object *btn = NULL;
870 ERR("The param is NULL\n");
874 if (!strcmp("elm.swallow.end", part)) {
875 if (ad->main.usb_state == MH_STATE_PROCESS) {
876 btn = _create_progressbar(obj, "process_medium");
878 btn = elm_check_add(obj);
880 ERR("btn is NULL\n");
883 elm_object_style_set(btn, "on&off");
884 evas_object_pass_events_set(btn, EINA_TRUE);
885 evas_object_propagate_events_set(btn, EINA_FALSE);
886 elm_check_state_set(btn, ad->main.hotspot_mode &
887 VCONFKEY_MOBILE_HOTSPOT_MODE_USB ? EINA_TRUE : EINA_FALSE);
888 evas_object_show(btn);
889 evas_object_smart_callback_add(btn, "changed", __usb_onoff_changed_cb, ad);
896 static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
898 mh_appdata_t *ad = (mh_appdata_t *)data;
899 char buf[MH_LABEL_LENGTH_MAX] = {0, };
900 char device_name[MH_LABEL_LENGTH_MAX] = {0, };
901 char passphrase[MH_LABEL_LENGTH_MAX] = {0, };
902 char security_type[MH_LABEL_LENGTH_MAX] = {0, };
903 char *fmt = STR_SECURITY_TYPE_PS;
906 char *device_name_utf = NULL;
907 int wifi_state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
910 ERR("The param is NULL\n");
914 if (!strcmp("elm.text.multiline", part)) {
915 device_name_utf = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
916 if (device_name_utf == NULL) {
917 ERR("vconf_get_str failed \n");
921 ptr = elm_entry_utf8_to_markup(device_name_utf);
923 g_free(device_name_utf);
924 ERR("elm_entry_utf8_to_markup is failed\n");
928 g_strlcpy(ad->setup.device_name, ptr,
929 sizeof(ad->setup.device_name));
930 g_strlcpy(device_name, ptr, MH_LABEL_LENGTH_MAX);
931 g_free(device_name_utf);
935 if (ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
936 ptr = elm_entry_utf8_to_markup(ad->setup.wifi_passphrase);
938 ERR("elm_entry_utf8_to_markup is failed\n");
941 g_strlcpy(passphrase, ptr, MH_LABEL_LENGTH_MAX);
944 snprintf(security_type, sizeof(security_type),
948 wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
950 if (wifi_state && ad->setup.visibility == false)
951 hidden = STR_MOBILE_HOTSPOT_IS_HIDDEN;
953 if (wifi_state && ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
954 snprintf(buf, MH_LABEL_LENGTH_MAX,
967 STR_ENTER_THE_PASSWORD_ON_THE_OTHER_DEVICE,
968 hidden[0] != '\0' ? "<br>" : "",
971 snprintf(buf, MH_LABEL_LENGTH_MAX,
978 hidden[0] != '\0' ? "<br>" : "",
988 static char *__get_no_connected_device_label(void *data, Evas_Object *obj,
991 mh_appdata_t *ad = (mh_appdata_t*)data;
992 char buf[MH_LABEL_LENGTH_MAX] = {0, };
996 ERR("The param is NULL\n");
1000 if (!strcmp("elm.text.multiline", part)) {
1001 no_of_dev = _get_list_clients_count(ad);
1002 snprintf(buf, MH_LABEL_LENGTH_MAX, "<font_size=30>%s<br>%d</font_size>", STR_CONNECTED_DEV, no_of_dev);
1009 static char *__get_connected_device_label(void *data, Evas_Object *obj,
1012 mh_appdata_t *ad = (mh_appdata_t*)data;
1013 char buf[MH_LABEL_LENGTH_MAX] = {0, };
1017 ERR("The param is NULL\n");
1021 if (!strcmp("elm.text.sub", part)) {
1022 g_strlcpy(buf, STR_CONNECTED_DEV, sizeof(buf));
1024 } else if (!strcmp("elm.text", part)) {
1025 no_of_dev = _get_list_clients_count(ad);
1026 snprintf(buf, MH_LABEL_LENGTH_MAX, "%d", no_of_dev);
1033 #ifdef TETHERING_DATA_USAGE_SUPPORT
1034 static char *__get_usage_label(void *data, Evas_Object *obj, const char *part)
1036 mh_appdata_t *ad = (mh_appdata_t*)data;
1037 unsigned long long total = 0;
1038 unsigned long long sent = 0;
1039 unsigned long long received = 0;
1041 char buf[MH_LABEL_LENGTH_MAX] = {0, };
1042 char label[MH_LABEL_LENGTH_MAX] = {0, };
1045 ERR("The param is NULL\n");
1049 if (!strcmp("elm.text", part)) {
1050 g_strlcpy(label, STR_DATA_USAGE, sizeof(label));
1051 return strdup(label);
1052 } else if (!strcmp("elm.text.multiline", part)) {
1053 sent = ad->data_statistics.pdp_total_sent;
1054 received = ad->data_statistics.pdp_total_receive;
1056 if (sent >= MH_MB || received >= MH_MB) {
1060 total = sent + received;
1062 } else if (sent + received >= MH_MB) {
1063 total = (sent + received) / MH_MB;
1065 } else if (sent >= MH_KB || received >= MH_KB) {
1069 total = sent + received;
1071 } else if (sent + received >= MH_KB) {
1072 total = (sent + received) / MH_KB;
1075 total = sent + received;
1079 if (total > INT_MAX) {
1080 ERR("data usage overflow\n");
1083 snprintf(label, MH_LABEL_LENGTH_MAX, fmt_str, (int)total);
1084 return strdup(label);
1091 static void __set_genlist_itc(mh_appdata_t *ad)
1093 /* On, Off view's item class for genlist */
1094 ad->main.wifi_itc = elm_genlist_item_class_new();
1095 if (ad->main.wifi_itc == NULL) {
1096 ERR("elm_genlist_item_class_new failed\n");
1100 ad->main.wifi_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1101 ad->main.wifi_itc->func.text_get = __get_wifi_label;
1102 ad->main.wifi_itc->func.content_get = __get_wifi_icon;
1103 ad->main.wifi_itc->func.state_get = NULL;
1104 ad->main.wifi_itc->func.del = NULL;
1106 /* End of On, Off view's item class for genlist */
1108 /* Off view's item class for genlist */
1109 ad->main.bt_itc = elm_genlist_item_class_new();
1110 if (ad->main.bt_itc == NULL) {
1111 ERR("elm_genlist_item_class_new failed\n");
1115 ad->main.bt_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1116 ad->main.bt_itc->func.text_get = __get_bt_label;
1117 ad->main.bt_itc->func.content_get = __get_bt_icon;
1118 ad->main.bt_itc->func.state_get = NULL;
1119 ad->main.bt_itc->func.del = NULL;
1121 ad->main.usb_itc = elm_genlist_item_class_new();
1122 if (ad->main.usb_itc == NULL) {
1123 ERR("elm_genlist_item_class_new failed\n");
1127 ad->main.usb_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1128 ad->main.usb_itc->func.text_get = __get_usb_label;
1129 ad->main.usb_itc->func.content_get = __get_usb_icon;
1130 ad->main.usb_itc->func.state_get = NULL;
1131 ad->main.usb_itc->func.del = NULL;
1133 ad->main.help_itc = elm_genlist_item_class_new();
1134 if (ad->main.help_itc == NULL) {
1135 ERR("elm_genlist_item_class_new failed\n");
1139 ad->main.help_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1140 ad->main.help_itc->func.text_get = __get_help_label;
1141 ad->main.help_itc->func.content_get = NULL;
1142 ad->main.help_itc->func.state_get = NULL;
1143 ad->main.help_itc->func.del = NULL;
1145 /* End of Off view's item class for genlist */
1147 /* On view's item class for genlist */
1148 ad->main.device0_itc = elm_genlist_item_class_new();
1149 if (ad->main.device0_itc == NULL) {
1150 ERR("elm_genlist_item_class_new failed\n");
1154 ad->main.device0_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1155 ad->main.device0_itc->func.text_get = __get_no_connected_device_label;
1156 ad->main.device0_itc->func.content_get = NULL;
1157 ad->main.device0_itc->func.state_get = NULL;
1158 ad->main.device0_itc->func.del = NULL;
1160 ad->main.device_itc = elm_genlist_item_class_new();
1161 if (ad->main.device_itc == NULL) {
1162 ERR("elm_genlist_item_class_new failed\n");
1166 ad->main.device_itc->item_style = MH_GENLIST_2LINE_BOTTOM_TEXT_STYLE;
1167 ad->main.device_itc->func.text_get = __get_connected_device_label;
1168 ad->main.device_itc->func.content_get = NULL;
1169 ad->main.device_itc->func.state_get = NULL;
1170 ad->main.device_itc->func.del = NULL;
1172 #ifdef TETHERING_DATA_USAGE_SUPPORT
1173 ad->main.usage_itc = elm_genlist_item_class_new();
1174 if (ad->main.usage_itc == NULL) {
1175 ERR("elm_genlist_item_class_new failed\n");
1179 ad->main.usage_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1180 ad->main.usage_itc->func.text_get = __get_usage_label;
1181 ad->main.usage_itc->func.content_get = NULL;
1182 ad->main.usage_itc->func.state_get = NULL;
1183 ad->main.usage_itc->func.del = NULL;
1185 /* End of On view's item class for genlist */
1189 static void __gl_realized(void *data, Evas_Object *obj, void *event_info)
1191 if (data == NULL || event_info == NULL) {
1192 ERR("Invalid param\n");
1196 mh_appdata_t *ad = (mh_appdata_t *)data;
1197 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
1200 char str[MH_LABEL_LENGTH_MAX] = {0, };
1203 if (item == ad->main.wifi_item || item == ad->main.bt_item || item == ad->main.usb_item) {
1204 ao = elm_object_item_access_object_get(item);
1205 btn = elm_object_item_part_content_get(item, "on&off");
1206 snprintf(str, sizeof(str), "%s, %s", "On/off button",
1207 (elm_check_state_get(btn) ? "On" : "Off"));
1208 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
1210 if (item == ad->main.wifi_item || item == ad->main.bt_item) {
1211 DBG("Wi-Fi or BT item : %p\n", item);
1212 elm_object_item_signal_emit(item, "elm,state,top", "");
1213 } else if (item == ad->main.usb_item) {
1215 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1217 } else if (item == ad->main.setup_item) {
1218 DBG("setup_item\n");
1219 ao = elm_object_item_access_object_get(item);
1220 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, "Item");
1222 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1223 } else if (item == ad->main.device_item) {
1224 DBG("device_item\n");
1225 ao = elm_object_item_access_object_get(item);
1226 snprintf(str, sizeof(str), "%s, %s", "Expandable list",
1227 "Double tap to open list");
1228 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
1230 elm_object_item_signal_emit(item, "elm,state,top", "");
1231 } else if (ad->main.device_item != NULL &&
1232 ad->main.device_item == elm_genlist_item_parent_get(item)) {
1233 DBG("device_item's child\n");
1234 elm_object_item_signal_emit(item, "elm,state,center", "");
1236 for (i = 0; i < 4; i++) {
1237 if (item == ad->main.sp_item[i])
1238 elm_object_item_access_unregister(item);
1241 #ifdef TETHERING_DATA_USAGE_SUPPORT
1242 if (item == ad->main.usage_item) {
1243 DBG("usage_item\n");
1244 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1250 static void __create_inner_contents(mh_appdata_t *ad)
1252 __MOBILE_AP_FUNC_ENTER__;
1254 Elm_Object_Item *item = NULL;
1258 ad->main.genlist = elm_genlist_add(ad->naviframe);
1259 elm_genlist_mode_set(ad->main.genlist, ELM_LIST_COMPRESS);
1260 evas_object_smart_callback_add(ad->main.genlist, "realized", __gl_realized, ad);
1262 __set_genlist_itc(ad);
1264 item = elm_genlist_item_append(ad->main.genlist, ad->main.wifi_itc,
1265 ad, NULL, ELM_GENLIST_ITEM_NONE,
1266 __select_wifi_item, ad);
1267 ad->main.wifi_item = item;
1269 if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) {
1270 item = elm_genlist_item_append(ad->main.genlist, ad->main.help_itc,
1271 ad, NULL, ELM_GENLIST_ITEM_NONE,
1273 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1274 ad->main.help_item = item;
1277 item = elm_genlist_item_append(ad->main.genlist, ad->main.bt_itc,
1278 ad, NULL, ELM_GENLIST_ITEM_NONE,
1279 __select_bt_item, ad);
1280 ad->main.bt_item = item;
1282 item = elm_genlist_item_append(ad->main.genlist, ad->main.usb_itc,
1283 ad, NULL, ELM_GENLIST_ITEM_NONE,
1284 __select_usb_item, ad);
1285 ad->main.usb_item = item;
1286 if (_get_vconf_usb_state() == VCONFKEY_SYSMAN_USB_DISCONNECTED) {
1287 if (ad->main.usb_item)
1288 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
1290 if (ad->main.usb_item)
1291 elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
1293 if (ad->main.hotspot_mode & (VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI |
1294 VCONFKEY_MOBILE_HOTSPOT_MODE_USB |
1295 VCONFKEY_MOBILE_HOTSPOT_MODE_BT)) {
1296 #ifdef TETHERING_DATA_USAGE_SUPPORT
1297 item = elm_genlist_item_append(ad->main.genlist, ad->main.usage_itc,
1298 ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1299 elm_genlist_item_select_mode_set(item,
1300 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1301 ad->main.usage_item = item;
1303 /* Insert "Connected devices" item */
1304 tethering_foreach_connected_clients(ad->handle, TETHERING_TYPE_ALL,
1305 _connected_clients_cb, (void *)ad);
1307 no_of_dev = _get_list_clients_count(ad);
1308 if (no_of_dev == 0) {
1309 item = elm_genlist_item_append(ad->main.genlist,
1310 ad->main.device0_itc, ad, NULL,
1311 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1312 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1314 item = elm_genlist_item_append(ad->main.genlist,
1315 ad->main.device_itc, ad, NULL,
1316 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
1317 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1319 ad->main.device_item = item;
1322 if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP) {
1323 if (ad->main.wifi_item)
1324 elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
1325 if (ad->main.setup_item)
1326 elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
1327 if (ad->main.bt_item)
1328 elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
1329 if (ad->main.usb_item)
1330 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
1333 __MOBILE_AP_FUNC_EXIT__;
1337 void _main_free_genlist_itc(mh_appdata_t *ad)
1339 __MOBILE_AP_FUNC_ENTER__;
1344 mh_main_view_t *mv = &ad->main;
1346 #ifdef TETHERING_DATA_USAGE_SUPPORT
1347 _free_genlist_itc(&mv->usage_itc);
1349 _free_genlist_itc(&mv->device_itc);
1350 _free_genlist_itc(&mv->device0_itc);
1351 _free_genlist_itc(&mv->help_itc);
1352 _free_genlist_itc(&mv->usb_itc);
1353 _free_genlist_itc(&mv->bt_itc);
1354 _free_genlist_itc(&mv->setup_itc);
1355 _free_genlist_itc(&mv->wifi_itc);
1356 __MOBILE_AP_FUNC_EXIT__;
1360 void _main_callback_del(mh_appdata_t *ad)
1362 __MOBILE_AP_FUNC_ENTER__;
1365 ERR("ad is NULL\n");
1371 obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
1373 evas_object_smart_callback_del(obj, "changed", __wifi_onoff_changed_cb);
1375 obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
1377 evas_object_smart_callback_del(obj, "changed", __bt_onoff_changed_cb);
1379 obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
1381 evas_object_smart_callback_del(obj, "changed", __usb_onoff_changed_cb);
1383 evas_object_smart_callback_del(ad->main.genlist, "realized", __gl_realized);
1385 __MOBILE_AP_FUNC_EXIT__;
1388 void _ctxpopup_more_button_callback_add(mh_appdata_t *ad)
1390 eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_MORE,
1391 __create_ctxpopup_more_button, ad);
1394 void _ctxpopup_more_button_callback_del(mh_appdata_t *ad)
1396 eext_object_event_callback_del(ad->naviframe, EEXT_CALLBACK_MORE,
1397 __create_ctxpopup_more_button);
1400 static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad)
1405 __MOBILE_AP_FUNC_ENTER__;
1407 elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
1408 pos = elm_win_rotation_get(ad->win);
1413 evas_object_move(ctx, w/2, h);
1416 evas_object_move(ctx, h/2, w);
1419 evas_object_move(ctx, h/2, w);
1422 __MOBILE_AP_FUNC_EXIT__;
1425 static void __rotate_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
1427 __MOBILE_AP_FUNC_ENTER__;
1429 mh_appdata_t *ad = (mh_appdata_t *)data;
1430 Evas_Object *ctx = ad->ctxpopup;
1432 __ctx_move_more_ctxpopup(ctx, ad);
1433 evas_object_show(ctx);
1435 __MOBILE_AP_FUNC_EXIT__;
1438 static void __dismissed_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event)
1440 __MOBILE_AP_FUNC_ENTER__;
1442 mh_appdata_t *ad = (mh_appdata_t *)data;
1443 Evas_Object *ctx = ad->ctxpopup;
1446 evas_object_del(ctx);
1449 __ctx_move_more_ctxpopup(ctx, ad);
1450 evas_object_show(ctx);
1451 rotate_flag = EINA_FALSE;
1453 __MOBILE_AP_FUNC_EXIT__;
1456 static void __ctx_delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj,
1459 Evas_Object *navi = (Evas_Object *)data;
1460 Evas_Object *ctx = obj;
1463 ERR("data is null\n");
1466 __MOBILE_AP_FUNC_ENTER__;
1468 evas_object_smart_callback_del(ctx, "dismissed",
1469 __dismissed_more_ctxpopup_cb);
1470 evas_object_smart_callback_del(elm_object_top_widget_get(ctx),
1471 "rotation,changed", __rotate_more_ctxpopup_cb);
1472 evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL,
1473 __ctx_delete_more_ctxpopup_cb, navi);
1474 __MOBILE_AP_FUNC_EXIT__;
1477 static void __gl_configure_wifi_tethering(void *data, Evas_Object *obj, void *event_info)
1479 __MOBILE_AP_FUNC_ENTER__;
1482 ERR("The param is NULL\n");
1485 mh_appdata_t *ad = (mh_appdata_t *)data;
1487 evas_object_del(ad->ctxpopup);
1488 ad->ctxpopup = NULL;
1490 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
1491 _ctxpopup_more_button_callback_del(ad);
1492 mh_draw_wifi_setup_view(ad);
1494 __MOBILE_AP_FUNC_EXIT__;
1499 static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
1502 mh_appdata_t *ad = (mh_appdata_t *)data;
1503 Evas_Object *ctxpopup = NULL;
1506 ERR("ad is null\n");
1509 __MOBILE_AP_FUNC_ENTER__;
1511 ctxpopup = elm_ctxpopup_add(ad->win);
1512 elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
1514 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK,
1515 eext_ctxpopup_back_cb, ad);
1516 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE,
1517 eext_ctxpopup_back_cb, ad);
1518 elm_object_style_set(ctxpopup, "more/default");
1519 evas_object_smart_callback_add(ctxpopup, "dismissed",
1520 __dismissed_more_ctxpopup_cb, ad);
1521 evas_object_smart_callback_add(elm_object_top_widget_get(ctxpopup), "rotation,changed",
1522 __rotate_more_ctxpopup_cb, ad);
1523 evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL,
1524 __ctx_delete_more_ctxpopup_cb, ad->naviframe);
1526 elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
1527 ELM_CTXPOPUP_DIRECTION_DOWN,
1528 ELM_CTXPOPUP_DIRECTION_UNKNOWN,
1529 ELM_CTXPOPUP_DIRECTION_UNKNOWN);
1531 __ctx_move_more_ctxpopup(ctxpopup, ad);
1532 elm_ctxpopup_item_append(ctxpopup, STR_CONFIGURE_MOBILE_HOTSPOT,
1533 NULL, __gl_configure_wifi_tethering, ad);
1535 evas_object_show(ctxpopup);
1537 ad->ctxpopup = ctxpopup;
1539 __MOBILE_AP_FUNC_EXIT__;
1543 void _main_draw_contents(mh_appdata_t *ad)
1547 Elm_Object_Item *navi_item;
1549 __create_inner_contents(ad);
1551 ad->main.back_btn = elm_button_add(ad->naviframe);
1552 if (ad->main.back_btn == NULL) {
1553 ERR("elm_button_add is failed\n");
1554 if (ad->main.genlist) {
1555 evas_object_del(ad->main.genlist);
1556 ad->main.genlist = NULL;
1560 elm_object_style_set(ad->main.back_btn, "naviframe/back_btn/default");
1562 eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_BACK,
1563 eext_naviframe_back_cb, NULL);
1564 _ctxpopup_more_button_callback_add(ad);
1565 evas_object_smart_callback_add(ad->main.back_btn, "clicked", (Evas_Smart_Cb)__back_btn_cb, (void *)ad);
1566 elm_object_focus_allow_set(ad->main.back_btn, EINA_FALSE);
1568 navi_item = elm_naviframe_item_push(ad->naviframe, IDS_TETH,
1569 ad->main.back_btn, NULL, ad->main.genlist, NULL);
1570 elm_object_item_domain_text_translatable_set(navi_item, PKGNAME, EINA_TRUE);
1572 elm_naviframe_item_pop_cb_set(navi_item, (Elm_Naviframe_Item_Pop_Cb)__back_btn_cb, (void *)ad);
1573 ad->navi_item = navi_item;