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>
24 #include "mh_view_main.h"
26 #include "mh_string.h"
28 #if 0 /* device rename not supported */
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 Eina_Bool rotate_flag = EINA_FALSE;
33 void _genlist_update_device_item(mh_appdata_t *ad);
34 mh_appdata_t *g_ad = NULL;
35 #define UPDATE_INTERVAL 1
37 #if 0 /* device rename not supported */
38 void _rotate_adjust_rename_popup(void)
40 __MOBILE_AP_FUNC_ENTER__;
44 change_ang = elm_win_rotation_get(g_ad->win);
45 if (change_ang == 0 || change_ang == 180)
46 _hadnle_rename_popup_rotation(EINA_TRUE);
48 _hadnle_rename_popup_rotation(EINA_FALSE);
50 __MOBILE_AP_FUNC_EXIT__;
54 void _select_connected_dev(void *data, Evas_Object *obj, void *event_info)
56 __MOBILE_AP_FUNC_ENTER__;
59 ERR("data is NULL\n");
63 mh_appdata_t *ad = (mh_appdata_t *)data;
65 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
66 _create_connected_client_view(ad);
67 __MOBILE_AP_FUNC_EXIT__;
70 static bool _connected_clients_cb(tethering_client_h client, void *user_data)
72 __MOBILE_AP_FUNC_ENTER__;
74 if (user_data == NULL) {
75 ERR("user_data is NULL\n");
79 mh_appdata_t *ad = (mh_appdata_t *)user_data;
81 _append_list_client_handle(ad, client);
83 __MOBILE_AP_FUNC_EXIT__;
87 void ap_update_data_device(mh_appdata_t *ad)
89 __MOBILE_AP_FUNC_ENTER__;
92 ERR("Invalid param\n");
96 _genlist_update_device_item(ad);
98 __MOBILE_AP_FUNC_EXIT__;
101 #ifdef TETHERING_DATA_USAGE_SUPPORT
102 Eina_Bool ap_update_data_packet_usage(mh_appdata_t *ad)
105 ERR("Invalid param\n");
109 if (ad->main.usage_item)
110 elm_genlist_item_update(ad->main.usage_item);
115 Eina_Bool ap_get_data_statistics(void *data)
118 ERR("The param is NULL\n");
119 return ECORE_CALLBACK_CANCEL;
121 mh_appdata_t *ad = (mh_appdata_t *)data;
123 if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
124 ad->update_statistics_handle = NULL;
125 return ECORE_CALLBACK_CANCEL;
128 /* If previous data is not updated, new data is not required */
129 if (ad->data_statistics.is_updated == false)
130 return ECORE_CALLBACK_RENEW;
132 /* Because previous data is updated, new data is required.
133 It will be returned asynchronously. */
134 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
135 ad->data_statistics.is_updated = false;
137 return ECORE_CALLBACK_RENEW;
141 Eina_Bool ap_update_device_conn_time(void * data)
144 ERR("The param is NULL\n");
145 return ECORE_CALLBACK_CANCEL;
147 mh_appdata_t *ad = (mh_appdata_t *)data;
150 if (ad->main.hotspot_mode == VCONFKEY_MOBILE_HOTSPOT_MODE_NONE) {
151 _stop_update_device_conn_time(ad);
152 __MOBILE_AP_FUNC_EXIT__;
153 return ECORE_CALLBACK_CANCEL;
156 while (count < ad->connected_device.no_of_clients) {
157 if (ad->connected_device.station_items[count])
158 elm_genlist_item_fields_update(ad->connected_device.station_items[count++],
159 "elm.text.sub", ELM_GENLIST_ITEM_FIELD_TEXT);
161 return ECORE_CALLBACK_RENEW;
164 void _start_update_device_conn_time(mh_appdata_t *ad)
166 __MOBILE_AP_FUNC_ENTER__;
169 ERR("Invalid param\n");
170 __MOBILE_AP_FUNC_EXIT__;
174 if (ad->update_conn_time_handle)
175 _stop_update_device_conn_time(ad);
177 ad->update_conn_time_handle = ecore_timer_add(UPDATE_INTERVAL,
178 ap_update_device_conn_time, (void *)ad);
180 __MOBILE_AP_FUNC_EXIT__;
183 void _stop_update_device_conn_time(mh_appdata_t *ad)
185 __MOBILE_AP_FUNC_ENTER__;
188 ERR("Invalid param\n");
192 if (ad->update_conn_time_handle) {
193 ecore_timer_del(ad->update_conn_time_handle);
194 ad->update_conn_time_handle = NULL;
196 __MOBILE_AP_FUNC_EXIT__;
199 #ifdef TETHERING_DATA_USAGE_SUPPORT
200 void _start_update_data_packet_usage(mh_appdata_t *ad)
202 __MOBILE_AP_FUNC_ENTER__;
205 ERR("Invalid param\n");
209 if (ad->update_statistics_handle)
210 _stop_update_data_packet_usage(ad);
212 ad->data_statistics.is_updated = false;
213 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
214 ad->update_statistics_handle = ecore_timer_add(MH_UPDATE_INTERVAL,
215 ap_get_data_statistics, (void *)ad);
217 __MOBILE_AP_FUNC_EXIT__;
221 void _stop_update_data_packet_usage(mh_appdata_t *ad)
223 __MOBILE_AP_FUNC_ENTER__;
226 ERR("Invalid param\n");
230 if (ad->update_statistics_handle) {
231 ecore_timer_del(ad->update_statistics_handle);
232 ad->data_statistics.is_updated = false;
233 ad->update_statistics_handle = NULL;
236 __MOBILE_AP_FUNC_EXIT__;
241 static void __read_setting(mh_appdata_t *ad)
243 __MOBILE_AP_FUNC_ENTER__;
246 ERR("Invalid param\n");
252 char *passphrase = NULL;
254 tethering_wifi_security_type_e type;
256 ad->main.hotspot_mode = _get_vconf_hotspot_mode();
258 #ifdef TETHERING_DATA_USAGE_SUPPORT
259 ad->data_statistics.pdp_total_sent = 0;
260 ad->data_statistics.pdp_total_receive = 0;
261 if (ad->main.hotspot_mode != VCONFKEY_MOBILE_HOTSPOT_MODE_NONE)
262 tethering_get_data_usage(ad->handle, _data_usage_cb, (void *)ad);
265 ret = tethering_wifi_get_ssid(ad->handle, &ssid);
266 if (ret != TETHERING_ERROR_NONE || ssid == NULL) {
267 ERR("tethering_wifi_get_ssid is failed : %d\n", ret);
270 g_strlcpy(ad->setup.device_name, ssid, sizeof(ad->setup.device_name));
273 ret = tethering_wifi_get_passphrase(ad->handle, &passphrase);
274 if (ret != TETHERING_ERROR_NONE || passphrase == NULL) {
275 ERR("tethering_wifi_get_passphrase is failed : %d\n", ret);
279 g_strlcpy(ad->setup.wifi_passphrase, passphrase,
280 sizeof(ad->setup.wifi_passphrase));
281 g_strlcpy(ad->setup.wifi_passphrase_new, passphrase,
282 sizeof(ad->setup.wifi_passphrase_new));
285 ret = tethering_wifi_get_ssid_visibility(ad->handle, &visibility);
286 if (ret != TETHERING_ERROR_NONE)
287 ERR("tethering_wifi_get_ssid_visibility is failed\n");
289 ad->setup.visibility = visibility;
290 ad->setup.visibility_new = visibility;
292 ret = tethering_wifi_get_security_type(ad->handle, &type);
293 if (ret != TETHERING_ERROR_NONE)
294 ERR("tethering_wifi_get_security_type is failed\n");
296 ad->setup.security_type = type;
297 ad->setup.security_type_new = type;
299 __MOBILE_AP_FUNC_EXIT__;
302 void _update_wifi_item(mh_appdata_t *ad, int wifi_state)
304 __MOBILE_AP_FUNC_ENTER__;
306 if (ad->main.wifi_state == wifi_state)
309 if (ad->main.wifi_state == MH_STATE_PROCESS) {
310 ad->main.wifi_state = MH_STATE_NONE;
311 elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
312 } else if (ad->main.wifi_state == MH_STATE_NONE) {
313 ad->main.wifi_state = MH_STATE_PROCESS;
314 elm_genlist_item_select_mode_set(ad->main.wifi_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
317 if (ad->main.wifi_item)
318 elm_genlist_item_update(ad->main.wifi_item);
320 if (ad->main.setup_item)
321 elm_object_item_signal_emit(ad->main.setup_item, "elm,state,bottom", "");
323 __MOBILE_AP_FUNC_EXIT__;
328 void _update_bt_item(mh_appdata_t *ad, int bt_state)
330 __MOBILE_AP_FUNC_ENTER__;
332 if (ad->main.bt_state == bt_state)
335 if (ad->main.bt_state == MH_STATE_PROCESS) {
336 ad->main.bt_state = MH_STATE_NONE;
337 elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
338 } else if (ad->main.bt_state == MH_STATE_NONE) {
339 ad->main.bt_state = MH_STATE_PROCESS;
340 elm_genlist_item_select_mode_set(ad->main.bt_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
343 if (ad->main.bt_item)
344 elm_genlist_item_update(ad->main.bt_item);
346 __MOBILE_AP_FUNC_EXIT__;
351 void _update_usb_item(mh_appdata_t *ad, int usb_state)
353 __MOBILE_AP_FUNC_ENTER__;
355 if (ad->main.usb_state == usb_state)
358 if (ad->main.usb_state == MH_STATE_PROCESS) {
359 ad->main.usb_state = MH_STATE_NONE;
360 elm_genlist_item_select_mode_set(ad->main.usb_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
361 } else if (ad->main.usb_state == MH_STATE_NONE) {
362 ad->main.usb_state = MH_STATE_PROCESS;
363 elm_genlist_item_select_mode_set(ad->main.usb_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
366 elm_genlist_item_update(ad->main.usb_item);
368 __MOBILE_AP_FUNC_EXIT__;
373 void _genlist_update_device_item(mh_appdata_t *ad)
375 __MOBILE_AP_FUNC_ENTER__;
378 ERR("Invalid param\n");
381 unsigned int no_of_dev = 0;
382 no_of_dev = _get_list_clients_count(ad);
383 Elm_Object_Item *item = NULL;
385 if (ad->main.device_item) {
386 elm_object_item_del(ad->main.device_item);
387 ad->main.device_item = NULL;
388 if (no_of_dev == 0) {
389 item = elm_genlist_item_append(ad->main.genlist,
390 ad->main.device0_itc, ad, NULL,
391 ELM_GENLIST_ITEM_NONE, NULL, NULL);
392 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
394 item = elm_genlist_item_append(ad->main.genlist,
395 ad->main.device_itc, ad, NULL,
396 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
397 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
399 ad->main.device_item = item;
402 if (ad->connected_device.navi_it)
403 _update_conn_clients(ad);
405 __MOBILE_AP_FUNC_EXIT__;
409 void _update_main_view(mh_appdata_t *ad, tethering_type_e type)
411 __MOBILE_AP_FUNC_ENTER__;
414 ERR("Invalid param\n");
418 int state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
419 Eina_Bool wifi_state = EINA_FALSE;
420 Eina_Bool bt_state = EINA_FALSE;
421 Eina_Bool usb_state = EINA_FALSE;
422 Eina_Bool wifi_ap_state = EINA_FALSE;
423 Elm_Object_Item *item = NULL;
427 ad->main.hotspot_mode = _get_vconf_hotspot_mode();
428 state = ad->main.hotspot_mode;
430 wifi_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI);
431 bt_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_BT);
432 usb_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_USB);
433 wifi_ap_state = (Eina_Bool)(state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP);
436 if (ad->main.wifi_item)
437 elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
438 if (ad->main.setup_item)
439 elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
440 if (ad->main.bt_item)
441 elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
442 if (ad->main.usb_item)
443 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
445 if (ad->main.setup_item)
446 elm_object_item_disabled_set(ad->main.setup_item, EINA_FALSE);
447 if (ad->main.bt_item)
448 elm_object_item_disabled_set(ad->main.bt_item, EINA_FALSE);
449 if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
450 if (ad->main.usb_item)
451 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
453 if (ad->main.usb_item)
454 elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
458 if (wifi_state || bt_state || usb_state) {
459 #ifdef TETHERING_DATA_USAGE_SUPPORT
460 if (ad->main.usage_item == NULL) {
461 item = elm_genlist_item_insert_before(ad->main.genlist,
462 ad->main.usage_itc, ad, NULL,
464 ELM_GENLIST_ITEM_NONE, NULL, NULL);
465 elm_genlist_item_select_mode_set(item,
466 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
467 ad->main.usage_item = item;
471 no_of_dev = _get_list_clients_count(ad);
472 if (ad->main.device_item == NULL) {
473 if (no_of_dev == 0) {
474 item = elm_genlist_item_append(ad->main.genlist,
475 ad->main.device0_itc, ad, NULL,
476 ELM_GENLIST_ITEM_NONE, NULL, NULL);
477 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
479 item = elm_genlist_item_append(ad->main.genlist,
480 ad->main.device_itc, ad, NULL,
481 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
482 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
484 ad->main.device_item = item;
487 if (ad->main.device_item) {
488 elm_object_item_del(ad->main.device_item);
489 ad->main.device_item = NULL;
491 #ifdef TETHERING_DATA_USAGE_SUPPORT
492 if (ad->main.usage_item) {
493 elm_object_item_del(ad->main.usage_item);
494 ad->main.usage_item = NULL;
500 if (ad->main.help_item) {
501 elm_genlist_item_update(ad->main.help_item);
503 item = elm_genlist_item_insert_after(ad->main.genlist,
504 ad->main.help_itc, ad, NULL,
506 ELM_GENLIST_ITEM_NONE, NULL,
509 ERR("elm_genlist_item_insert_after NULL\n");
511 elm_genlist_item_select_mode_set(item,
512 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
513 ad->main.help_item = item;
517 if (ad->main.help_item) {
518 elm_object_item_del(ad->main.help_item);
519 ad->main.help_item = NULL;
524 case TETHERING_TYPE_WIFI:
525 /* Update Wi-Fi tethering on / off button */
526 if (ad->main.wifi_state != MH_STATE_NONE) {
527 _update_wifi_item(ad, MH_STATE_NONE);
529 obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
531 elm_check_state_set(obj, wifi_state);
533 if (ad->main.wifi_item)
534 elm_genlist_item_update(ad->main.wifi_item);
538 case TETHERING_TYPE_BT:
539 /* Update BT tethering on / off button */
540 if (ad->main.bt_state != MH_STATE_NONE) {
541 _update_bt_item(ad, MH_STATE_NONE);
543 obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
545 elm_check_state_set(obj, bt_state);
547 if (ad->main.bt_item)
548 elm_genlist_item_update(ad->main.bt_item);
552 case TETHERING_TYPE_USB:
553 /* Update USB tethering on / off button */
554 if (ad->main.usb_state != MH_STATE_NONE) {
555 _update_usb_item(ad, MH_STATE_NONE);
557 obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
559 elm_check_state_set(obj, usb_state);
561 if (ad->main.usb_item)
562 elm_genlist_item_update(ad->main.usb_item);
567 DBG("Unknown tethering type : %d\n", type);
571 __MOBILE_AP_FUNC_EXIT__;
576 static void __wifi_onoff_changed_cb(void *data, Evas_Object *obj,
579 __MOBILE_AP_FUNC_ENTER__;
582 ERR("The param is NULL\n");
586 mh_appdata_t *ad = (mh_appdata_t *)data;
588 _update_wifi_item(ad, MH_STATE_PROCESS);
589 ad->type = TETHERING_TYPE_WIFI;
590 ad->is_wifi_teth_enabling = true;
591 if (_handle_wifi_onoff_change(ad) != 0) {
592 ERR("_handle_wifi_onoff_change is failed\n");
593 _update_wifi_item(ad, MH_STATE_NONE);
594 ad->is_wifi_teth_enabling = false;
597 __MOBILE_AP_FUNC_EXIT__;
602 static void __select_wifi_item(void *data, Evas_Object *obj, void *event_info)
604 __MOBILE_AP_FUNC_ENTER__;
607 ERR("The param is NULL\n");
610 mh_appdata_t *ad = (mh_appdata_t *)data;
612 elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
613 mh_draw_wifi_setup_view(ad);
615 __MOBILE_AP_FUNC_EXIT__;
620 static void __bt_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
622 __MOBILE_AP_FUNC_ENTER__;
625 ERR("The param is NULL\n");
629 mh_appdata_t *ad = (mh_appdata_t *)data;
631 _update_bt_item(ad, MH_STATE_PROCESS);
632 ad->type = TETHERING_TYPE_BT;
633 ad->is_bt_teth_enabling = true;
635 if (_handle_bt_onoff_change(ad) != 0) {
636 ERR("_handle_bt_onoff_change is failed\n");
637 _update_bt_item(ad, MH_STATE_NONE);
638 ad->is_bt_teth_enabling = false;
641 __MOBILE_AP_FUNC_EXIT__;
646 static void __select_bt_item(void *data, Evas_Object *obj, void *event_info)
648 __MOBILE_AP_FUNC_ENTER__;
650 Evas_Object *content;
651 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
654 ERR("The param is NULL\n");
658 elm_genlist_item_selected_set(item, EINA_FALSE);
660 content = elm_object_item_part_content_get(item, "elm.icon");
661 __bt_onoff_changed_cb(data, content, NULL);
663 __MOBILE_AP_FUNC_EXIT__;
668 static void __usb_onoff_changed_cb(void *data, Evas_Object *obj, void *event_info)
670 __MOBILE_AP_FUNC_ENTER__;
673 ERR("The param is NULL\n");
677 mh_appdata_t *ad = (mh_appdata_t *)data;
678 _update_usb_item(ad, MH_STATE_PROCESS);
679 ad->type = TETHERING_TYPE_USB;
680 ad->is_usb_teth_enabling = true;
681 if (_handle_usb_onoff_change(ad) != 0) {
682 ERR("_handle_usb_onoff_change is failed\n");
683 _update_usb_item(ad, MH_STATE_NONE);
684 ad->is_usb_teth_enabling = false;
687 __MOBILE_AP_FUNC_EXIT__;
692 static void __select_usb_item(void *data, Evas_Object *obj, void *event_info)
694 __MOBILE_AP_FUNC_ENTER__;
696 Evas_Object *content;
697 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
700 ERR("The param is NULL\n");
704 elm_genlist_item_selected_set(item, EINA_FALSE);
706 content = elm_object_item_part_content_get(item, "elm.icon");
707 __usb_onoff_changed_cb(data, content, NULL);
709 __MOBILE_AP_FUNC_EXIT__;
714 static void __back_btn_cb(void *data, Elm_Object_Item *navi_item)
719 ERR("The param is NULL\n");
723 mh_appdata_t *ad = (mh_appdata_t*)data;
725 _release_list_client_handle(ad);
726 _main_callback_del(ad);
728 ug_destroy_me(((mh_ugdata_t *)ad->gadget)->ug);
734 static char *__get_wifi_label(void *data, Evas_Object *obj, const char *part)
736 if (!strcmp("elm.text", part))
737 return strdup(STR_WIFI_TETH);
742 static Evas_Object *__get_wifi_icon(void *data, Evas_Object *obj,
745 mh_appdata_t *ad = (mh_appdata_t*)data;
746 Evas_Object *btn = NULL;
749 ERR("The param is NULL\n");
753 if (!strcmp("elm.swallow.end", part)) {
754 if (ad->main.wifi_state == MH_STATE_PROCESS) {
755 btn = _create_progressbar(obj, "process_medium");
757 btn = elm_check_add(obj);
758 elm_object_style_set(btn, "on&off");
760 evas_object_propagate_events_set(btn, EINA_FALSE);
761 evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
762 evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
763 elm_check_state_set(btn, ad->main.hotspot_mode &
764 VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI ? EINA_TRUE : EINA_FALSE);
766 evas_object_smart_callback_add(btn, "changed", __wifi_onoff_changed_cb, ad);
767 evas_object_show(btn);
774 static char *__get_bt_label(void *data, Evas_Object *obj, const char *part)
776 if (!strcmp("elm.text", part))
777 return strdup(STR_BLUETOOTH_TETH);
782 static Evas_Object *__get_bt_icon(void *data, Evas_Object *obj, const char *part)
784 mh_appdata_t *ad = (mh_appdata_t *)data;
785 Evas_Object *btn = NULL;
788 ERR("The param is NULL\n");
792 if (!strcmp("elm.swallow.end", part)) {
793 if (ad->main.bt_state == MH_STATE_PROCESS) {
794 btn = _create_progressbar(obj, "process_medium");
796 btn = elm_check_add(obj);
798 ERR("btn is NULL\n");
801 elm_object_style_set(btn, "on&off");
802 evas_object_pass_events_set(btn, EINA_TRUE);
803 evas_object_propagate_events_set(btn, EINA_FALSE);
804 elm_check_state_set(btn, ad->main.hotspot_mode &
805 VCONFKEY_MOBILE_HOTSPOT_MODE_BT ? EINA_TRUE : EINA_FALSE);
806 evas_object_show(btn);
807 evas_object_smart_callback_add(btn, "changed", __bt_onoff_changed_cb, ad);
814 static char *__get_usb_label(void *data, Evas_Object *obj, const char *part)
816 if (!strcmp("elm.text", part))
817 return strdup(STR_USB_TETH);
822 static Evas_Object *__get_usb_icon(void *data, Evas_Object *obj,
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.usb_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_USB ? EINA_TRUE : EINA_FALSE);
847 evas_object_show(btn);
848 evas_object_smart_callback_add(btn, "changed", __usb_onoff_changed_cb, ad);
855 static char *__get_help_label(void *data, Evas_Object *obj, const char *part)
857 mh_appdata_t *ad = (mh_appdata_t *)data;
858 char buf[MH_LABEL_LENGTH_MAX] = {0, };
859 char device_name[MH_LABEL_LENGTH_MAX] = {0, };
860 char passphrase[MH_LABEL_LENGTH_MAX] = {0, };
861 char security_type[MH_LABEL_LENGTH_MAX] = {0, };
862 char *fmt = STR_SECURITY_TYPE_PS;
865 char *device_name_utf = NULL;
866 int wifi_state = VCONFKEY_MOBILE_HOTSPOT_MODE_NONE;
869 ERR("The param is NULL\n");
873 if (!strcmp("elm.text.multiline", part)) {
874 device_name_utf = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
875 if (device_name_utf == NULL) {
876 ERR("vconf_get_str failed \n");
880 ptr = elm_entry_utf8_to_markup(device_name_utf);
882 g_free(device_name_utf);
883 ERR("elm_entry_utf8_to_markup is failed\n");
887 g_strlcpy(ad->setup.device_name, ptr,
888 sizeof(ad->setup.device_name));
889 g_strlcpy(device_name, ptr, MH_LABEL_LENGTH_MAX);
890 g_free(device_name_utf);
894 if (ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
895 ptr = elm_entry_utf8_to_markup(ad->setup.wifi_passphrase);
897 ERR("elm_entry_utf8_to_markup is failed\n");
900 g_strlcpy(passphrase, ptr, MH_LABEL_LENGTH_MAX);
903 snprintf(security_type, sizeof(security_type),
907 wifi_state = ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI;
909 if (wifi_state && ad->setup.visibility == false)
910 hidden = STR_WIFI_TETH_HIDDEN;
912 if (wifi_state && ad->setup.security_type != TETHERING_WIFI_SECURITY_TYPE_NONE) {
913 snprintf(buf, MH_LABEL_LENGTH_MAX,
926 STR_PASSWORD_FOR_WIFI_TETH,
927 hidden[0] != '\0' ? "<br>" : "",
930 snprintf(buf, MH_LABEL_LENGTH_MAX,
937 hidden[0] != '\0' ? "<br>" : "",
947 static char *__get_no_connected_device_label(void *data, Evas_Object *obj,
950 mh_appdata_t *ad = (mh_appdata_t*)data;
951 char buf[MH_LABEL_LENGTH_MAX] = {0, };
955 ERR("The param is NULL\n");
959 if (!strcmp("elm.text.multiline", part)) {
960 no_of_dev = _get_list_clients_count(ad);
961 snprintf(buf, MH_LABEL_LENGTH_MAX, "<font_size=30>%s<br>%d</font_size>", STR_CONNECTED_DEV, no_of_dev);
968 static char *__get_connected_device_label(void *data, Evas_Object *obj,
971 mh_appdata_t *ad = (mh_appdata_t*)data;
972 char buf[MH_LABEL_LENGTH_MAX] = {0, };
976 ERR("The param is NULL\n");
980 if (!strcmp("elm.text.sub", part)) {
981 g_strlcpy(buf, STR_CONNECTED_DEV, sizeof(buf));
983 } else if (!strcmp("elm.text", part)) {
984 no_of_dev = _get_list_clients_count(ad);
985 snprintf(buf, MH_LABEL_LENGTH_MAX, "%d", no_of_dev);
992 #ifdef TETHERING_DATA_USAGE_SUPPORT
993 static char *__get_usage_label(void *data, Evas_Object *obj, const char *part)
995 mh_appdata_t *ad = (mh_appdata_t*)data;
996 unsigned long long total = 0;
997 unsigned long long sent = 0;
998 unsigned long long received = 0;
1000 char buf[MH_LABEL_LENGTH_MAX] = {0, };
1001 char label[MH_LABEL_LENGTH_MAX] = {0, };
1004 ERR("The param is NULL\n");
1008 if (!strcmp("elm.text", part)) {
1009 g_strlcpy(label, STR_DATA_USAGE, sizeof(label));
1010 return strdup(label);
1011 } else if (!strcmp("elm.text.multiline", part)) {
1012 sent = ad->data_statistics.pdp_total_sent;
1013 received = ad->data_statistics.pdp_total_receive;
1015 if (sent >= MH_MB || received >= MH_MB) {
1019 total = sent + received;
1021 } else if (sent + received >= MH_MB) {
1022 total = (sent + received) / MH_MB;
1024 } else if (sent >= MH_KB || received >= MH_KB) {
1028 total = sent + received;
1030 } else if (sent + received >= MH_KB) {
1031 total = (sent + received) / MH_KB;
1034 total = sent + received;
1038 if (total > INT_MAX) {
1039 ERR("data usage overflow\n");
1042 snprintf(label, MH_LABEL_LENGTH_MAX, fmt_str, (int)total);
1043 return strdup(label);
1050 static void __set_genlist_itc(mh_appdata_t *ad)
1052 /* On, Off view's item class for genlist */
1053 #if 0 /* not used */
1054 ad->main.sp_itc = elm_genlist_item_class_new();
1055 if (ad->main.sp_itc == NULL) {
1056 ERR("elm_genlist_item_class_new failed\n");
1060 ad->main.sp_itc->item_style = "dialogue/separator";
1061 ad->main.sp_itc->func.text_get = NULL;
1062 ad->main.sp_itc->func.content_get = NULL;
1063 ad->main.sp_itc->func.state_get = NULL;
1064 ad->main.sp_itc->func.del = NULL;
1066 ad->main.wifi_itc = elm_genlist_item_class_new();
1067 if (ad->main.wifi_itc == NULL) {
1068 ERR("elm_genlist_item_class_new failed\n");
1072 ad->main.wifi_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1073 ad->main.wifi_itc->func.text_get = __get_wifi_label;
1074 ad->main.wifi_itc->func.content_get = __get_wifi_icon;
1075 ad->main.wifi_itc->func.state_get = NULL;
1076 ad->main.wifi_itc->func.del = NULL;
1078 #if 0 /* not used */
1079 ad->main.sp2_itc = elm_genlist_item_class_new();
1080 if (ad->main.sp2_itc == NULL) {
1081 ERR("elm_genlist_item_class_new failed\n");
1085 ad->main.sp2_itc->item_style = "dialogue/separator.2";
1086 ad->main.sp2_itc->func.text_get = NULL;
1087 ad->main.sp2_itc->func.content_get = NULL;
1088 ad->main.sp2_itc->func.state_get = NULL;
1089 ad->main.sp2_itc->func.del = NULL;
1091 /* End of On, Off view's item class for genlist */
1093 /* Off view's item class for genlist */
1094 ad->main.bt_itc = elm_genlist_item_class_new();
1095 if (ad->main.bt_itc == NULL) {
1096 ERR("elm_genlist_item_class_new failed\n");
1100 ad->main.bt_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1101 ad->main.bt_itc->func.text_get = __get_bt_label;
1102 ad->main.bt_itc->func.content_get = __get_bt_icon;
1103 ad->main.bt_itc->func.state_get = NULL;
1104 ad->main.bt_itc->func.del = NULL;
1106 ad->main.usb_itc = elm_genlist_item_class_new();
1107 if (ad->main.usb_itc == NULL) {
1108 ERR("elm_genlist_item_class_new failed\n");
1112 ad->main.usb_itc->item_style = MH_GENLIST_1LINE_TEXT_ICON_STYLE;
1113 ad->main.usb_itc->func.text_get = __get_usb_label;
1114 ad->main.usb_itc->func.content_get = __get_usb_icon;
1115 ad->main.usb_itc->func.state_get = NULL;
1116 ad->main.usb_itc->func.del = NULL;
1118 ad->main.help_itc = elm_genlist_item_class_new();
1119 if (ad->main.help_itc == NULL) {
1120 ERR("elm_genlist_item_class_new failed\n");
1124 ad->main.help_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1125 ad->main.help_itc->func.text_get = __get_help_label;
1126 ad->main.help_itc->func.content_get = NULL;
1127 ad->main.help_itc->func.state_get = NULL;
1128 ad->main.help_itc->func.del = NULL;
1130 /* End of Off view's item class for genlist */
1132 /* On view's item class for genlist */
1133 ad->main.device0_itc = elm_genlist_item_class_new();
1134 if (ad->main.device0_itc == NULL) {
1135 ERR("elm_genlist_item_class_new failed\n");
1139 ad->main.device0_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1140 ad->main.device0_itc->func.text_get = __get_no_connected_device_label;
1141 ad->main.device0_itc->func.content_get = NULL;
1142 ad->main.device0_itc->func.state_get = NULL;
1143 ad->main.device0_itc->func.del = NULL;
1145 ad->main.device_itc = elm_genlist_item_class_new();
1146 if (ad->main.device_itc == NULL) {
1147 ERR("elm_genlist_item_class_new failed\n");
1151 ad->main.device_itc->item_style = MH_GENLIST_2LINE_BOTTOM_TEXT_STYLE;
1152 ad->main.device_itc->func.text_get = __get_connected_device_label;
1153 ad->main.device_itc->func.content_get = NULL;
1154 ad->main.device_itc->func.state_get = NULL;
1155 ad->main.device_itc->func.del = NULL;
1157 #ifdef TETHERING_DATA_USAGE_SUPPORT
1158 ad->main.usage_itc = elm_genlist_item_class_new();
1159 if (ad->main.usage_itc == NULL) {
1160 ERR("elm_genlist_item_class_new failed\n");
1164 ad->main.usage_itc->item_style = MH_GENLIST_MULTILINE_TEXT_STYLE;
1165 ad->main.usage_itc->func.text_get = __get_usage_label;
1166 ad->main.usage_itc->func.content_get = NULL;
1167 ad->main.usage_itc->func.state_get = NULL;
1168 ad->main.usage_itc->func.del = NULL;
1170 /* End of On view's item class for genlist */
1174 static void __gl_realized(void *data, Evas_Object *obj, void *event_info)
1176 if (data == NULL || event_info == NULL) {
1177 ERR("Invalid param\n");
1181 mh_appdata_t *ad = (mh_appdata_t *)data;
1182 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
1185 char str[MH_LABEL_LENGTH_MAX] = {0, };
1188 if (item == ad->main.wifi_item || item == ad->main.bt_item || item == ad->main.usb_item) {
1189 ao = elm_object_item_access_object_get(item);
1190 btn = elm_object_item_part_content_get(item, "on&off");
1191 snprintf(str, sizeof(str), "%s, %s", "On/off button",
1192 (elm_check_state_get(btn) ? "On" : "Off"));
1193 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
1195 if (item == ad->main.wifi_item || item == ad->main.bt_item) {
1196 DBG("Wi-Fi or BT item : %p\n", item);
1197 elm_object_item_signal_emit(item, "elm,state,top", "");
1198 } else if (item == ad->main.usb_item) {
1200 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1202 } else if (item == ad->main.setup_item) {
1203 DBG("setup_item\n");
1204 ao = elm_object_item_access_object_get(item);
1205 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, "Item");
1207 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1208 } else if (item == ad->main.device_item) {
1209 DBG("device_item\n");
1210 ao = elm_object_item_access_object_get(item);
1211 snprintf(str, sizeof(str), "%s, %s", "Expandable list",
1212 "Double tap to open list");
1213 elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, str);
1215 elm_object_item_signal_emit(item, "elm,state,top", "");
1216 } else if (ad->main.device_item != NULL &&
1217 ad->main.device_item == elm_genlist_item_parent_get(item)) {
1218 DBG("device_item's child\n");
1219 elm_object_item_signal_emit(item, "elm,state,center", "");
1221 for (i = 0; i < 4; i++) {
1222 if (item == ad->main.sp_item[i])
1223 elm_object_item_access_unregister(item);
1226 #ifdef TETHERING_DATA_USAGE_SUPPORT
1227 if (item == ad->main.usage_item) {
1228 DBG("usage_item\n");
1229 elm_object_item_signal_emit(item, "elm,state,bottom", "");
1235 static void __create_inner_contents(mh_appdata_t *ad)
1237 __MOBILE_AP_FUNC_ENTER__;
1239 Elm_Object_Item *item = NULL;
1243 ad->main.genlist = elm_genlist_add(ad->naviframe);
1244 elm_genlist_mode_set(ad->main.genlist, ELM_LIST_COMPRESS);
1245 evas_object_smart_callback_add(ad->main.genlist, "realized", __gl_realized, ad);
1247 __set_genlist_itc(ad);
1249 item = elm_genlist_item_append(ad->main.genlist, ad->main.wifi_itc,
1250 ad, NULL, ELM_GENLIST_ITEM_NONE,
1251 __select_wifi_item, ad);
1252 ad->main.wifi_item = item;
1254 if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) {
1255 item = elm_genlist_item_append(ad->main.genlist, ad->main.help_itc,
1256 ad, NULL, ELM_GENLIST_ITEM_NONE,
1258 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1259 ad->main.help_item = item;
1262 item = elm_genlist_item_append(ad->main.genlist, ad->main.bt_itc,
1263 ad, NULL, ELM_GENLIST_ITEM_NONE,
1264 __select_bt_item, ad);
1265 ad->main.bt_item = item;
1267 item = elm_genlist_item_append(ad->main.genlist, ad->main.usb_itc,
1268 ad, NULL, ELM_GENLIST_ITEM_NONE,
1269 __select_usb_item, ad);
1270 ad->main.usb_item = item;
1271 if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
1272 if (ad->main.usb_item)
1273 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
1275 if (ad->main.usb_item)
1276 elm_object_item_disabled_set(ad->main.usb_item, EINA_FALSE);
1278 if (ad->main.hotspot_mode & (VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI |
1279 VCONFKEY_MOBILE_HOTSPOT_MODE_USB |
1280 VCONFKEY_MOBILE_HOTSPOT_MODE_BT)) {
1281 #ifdef TETHERING_DATA_USAGE_SUPPORT
1282 item = elm_genlist_item_append(ad->main.genlist, ad->main.usage_itc,
1283 ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
1284 elm_genlist_item_select_mode_set(item,
1285 ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1286 ad->main.usage_item = item;
1288 /* Insert "Connected devices" item */
1289 tethering_foreach_connected_clients(ad->handle, TETHERING_TYPE_ALL,
1290 _connected_clients_cb, (void *)ad);
1292 no_of_dev = _get_list_clients_count(ad);
1293 if (no_of_dev == 0) {
1294 item = elm_genlist_item_append(ad->main.genlist,
1295 ad->main.device0_itc, ad, NULL,
1296 ELM_GENLIST_ITEM_NONE, NULL, NULL);
1297 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
1299 item = elm_genlist_item_append(ad->main.genlist,
1300 ad->main.device_itc, ad, NULL,
1301 ELM_GENLIST_ITEM_NONE, _select_connected_dev, (void *)ad);
1302 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DEFAULT);
1304 ad->main.device_item = item;
1307 if (ad->main.hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI_AP) {
1308 if (ad->main.wifi_item)
1309 elm_object_item_disabled_set(ad->main.wifi_item, EINA_TRUE);
1310 if (ad->main.setup_item)
1311 elm_object_item_disabled_set(ad->main.setup_item, EINA_TRUE);
1312 if (ad->main.bt_item)
1313 elm_object_item_disabled_set(ad->main.bt_item, EINA_TRUE);
1314 if (ad->main.usb_item)
1315 elm_object_item_disabled_set(ad->main.usb_item, EINA_TRUE);
1318 __MOBILE_AP_FUNC_EXIT__;
1322 void _main_free_genlist_itc(mh_appdata_t *ad)
1324 __MOBILE_AP_FUNC_ENTER__;
1329 mh_main_view_t *mv = &ad->main;
1331 #ifdef TETHERING_DATA_USAGE_SUPPORT
1332 _free_genlist_itc(&mv->usage_itc);
1334 _free_genlist_itc(&mv->device_itc);
1335 _free_genlist_itc(&mv->device0_itc);
1336 _free_genlist_itc(&mv->help_itc);
1337 _free_genlist_itc(&mv->usb_itc);
1338 _free_genlist_itc(&mv->bt_itc);
1339 _free_genlist_itc(&mv->setup_itc);
1340 _free_genlist_itc(&mv->wifi_itc);
1341 #if 0 /* not used */
1342 _free_genlist_itc(&mv->sp_itc);
1343 _free_genlist_itc(&mv->sp2_itc);
1345 __MOBILE_AP_FUNC_EXIT__;
1349 void _main_callback_del(mh_appdata_t *ad)
1351 __MOBILE_AP_FUNC_ENTER__;
1354 ERR("ad is NULL\n");
1360 obj = elm_object_item_part_content_get(ad->main.wifi_item, "elm.swallow.end");
1362 evas_object_smart_callback_del(obj, "changed", __wifi_onoff_changed_cb);
1364 obj = elm_object_item_part_content_get(ad->main.bt_item, "elm.swallow.end");
1366 evas_object_smart_callback_del(obj, "changed", __bt_onoff_changed_cb);
1368 obj = elm_object_item_part_content_get(ad->main.usb_item, "elm.swallow.end");
1370 evas_object_smart_callback_del(obj, "changed", __usb_onoff_changed_cb);
1372 evas_object_smart_callback_del(ad->main.genlist, "realized", __gl_realized);
1374 __MOBILE_AP_FUNC_EXIT__;
1377 #if 0 /* device rename not supported */
1378 static void __ctx_move_more_ctxpopup(Evas_Object *ctx, mh_appdata_t *ad)
1383 __MOBILE_AP_FUNC_ENTER__;
1385 elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
1386 pos = elm_win_rotation_get(ad->win);
1391 evas_object_move(ctx, w/2, h);
1394 evas_object_move(ctx, h/2, w);
1397 evas_object_move(ctx, h/2, w);
1400 __MOBILE_AP_FUNC_EXIT__;
1403 static void __rotate_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
1405 __MOBILE_AP_FUNC_ENTER__;
1407 mh_appdata_t *ad = (mh_appdata_t *)data;
1408 Evas_Object *ctx = ad->ctxpopup;
1410 __ctx_move_more_ctxpopup(ctx, ad);
1411 evas_object_show(ctx);
1413 __MOBILE_AP_FUNC_EXIT__;
1416 static void __dismissed_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event)
1418 __MOBILE_AP_FUNC_ENTER__;
1420 mh_appdata_t *ad = (mh_appdata_t *)data;
1421 Evas_Object *ctx = ad->ctxpopup;
1424 evas_object_del(ctx);
1427 __ctx_move_more_ctxpopup(ctx, ad);
1428 evas_object_show(ctx);
1429 rotate_flag = EINA_FALSE;
1431 __MOBILE_AP_FUNC_EXIT__;
1434 static void __ctx_delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj,
1437 Evas_Object *navi = (Evas_Object *)data;
1438 Evas_Object *ctx = obj;
1441 ERR("data is null\n");
1444 __MOBILE_AP_FUNC_ENTER__;
1446 evas_object_smart_callback_del(ctx, "dismissed",
1447 __dismissed_more_ctxpopup_cb);
1448 evas_object_smart_callback_del(elm_object_top_widget_get(ctx),
1449 "rotation,changed", __rotate_more_ctxpopup_cb);
1450 evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL,
1451 __ctx_delete_more_ctxpopup_cb, navi);
1452 __MOBILE_AP_FUNC_EXIT__;
1455 static void _gl_rename_device_sel(void *data, Evas_Object *obj, void *event_info)
1457 __MOBILE_AP_FUNC_ENTER__;
1459 mh_appdata_t *ad = (mh_appdata_t *)data;
1462 ERR("ad is null\n");
1465 evas_object_del(ad->ctxpopup);
1466 ad->ctxpopup = NULL;
1468 _create_rename_device_popup((void *)ad);
1469 __MOBILE_AP_FUNC_EXIT__;
1472 static void __create_ctxpopup_more_button(void *data, Evas_Object *obj,
1475 mh_appdata_t *ad = (mh_appdata_t *)data;
1476 Evas_Object *ctxpopup = NULL;
1479 ERR("ad is null\n");
1482 __MOBILE_AP_FUNC_ENTER__;
1484 if (ad->setup.navi_it == NULL)
1487 elm_naviframe_item_pop_cb_set(ad->setup.navi_it, _setting_back_btn_cb, (void *)ad);
1488 ctxpopup = elm_ctxpopup_add(ad->naviframe);
1489 elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
1491 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_BACK,
1492 eext_ctxpopup_back_cb, ad);
1493 eext_object_event_callback_add(ctxpopup, EEXT_CALLBACK_MORE,
1494 eext_ctxpopup_back_cb, ad);
1495 elm_object_style_set(ctxpopup, "more/default");
1496 evas_object_smart_callback_add(ctxpopup, "dismissed",
1497 __dismissed_more_ctxpopup_cb, ad);
1498 evas_object_smart_callback_add(elm_object_top_widget_get(ctxpopup), "rotation,changed",
1499 __rotate_more_ctxpopup_cb, ad);
1500 evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL,
1501 __ctx_delete_more_ctxpopup_cb, ad->naviframe);
1503 elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
1504 ELM_CTXPOPUP_DIRECTION_DOWN,
1505 ELM_CTXPOPUP_DIRECTION_UNKNOWN,
1506 ELM_CTXPOPUP_DIRECTION_UNKNOWN);
1508 __ctx_move_more_ctxpopup(ctxpopup, ad);
1509 elm_ctxpopup_item_append(ctxpopup, STR_RENAME_DEVICE_HEADER,
1510 NULL, _gl_rename_device_sel, ad);
1512 evas_object_show(ctxpopup);
1514 ad->ctxpopup = ctxpopup;
1516 __MOBILE_AP_FUNC_EXIT__;
1520 void _main_draw_contents(mh_appdata_t *ad)
1524 Elm_Object_Item *navi_item;
1526 __create_inner_contents(ad);
1528 ad->main.back_btn = elm_button_add(ad->naviframe);
1529 if (ad->main.back_btn == NULL) {
1530 ERR("elm_button_add is failed\n");
1531 if (ad->main.genlist) {
1532 evas_object_del(ad->main.genlist);
1533 ad->main.genlist = NULL;
1537 elm_object_style_set(ad->main.back_btn, "naviframe/back_btn/default");
1539 eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_BACK,
1540 eext_naviframe_back_cb, NULL);
1541 #if 0 /* device rename not supported */
1542 eext_object_event_callback_add(ad->naviframe, EEXT_CALLBACK_MORE,
1543 __create_ctxpopup_more_button, ad);
1546 evas_object_smart_callback_add(ad->main.back_btn, "clicked", (Evas_Smart_Cb)__back_btn_cb, (void *)ad);
1547 elm_object_focus_allow_set(ad->main.back_btn, EINA_FALSE);
1549 navi_item = elm_naviframe_item_push(ad->naviframe, IDS_TETH,
1550 ad->main.back_btn, NULL, ad->main.genlist, NULL);
1551 elm_object_item_domain_text_translatable_set(navi_item, PKGNAME, EINA_TRUE);
1553 elm_naviframe_item_pop_cb_set(navi_item, (Elm_Naviframe_Item_Pop_Cb)__back_btn_cb, (void *)ad);
1554 ad->navi_item = navi_item;