4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.1 (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.
20 #include <efl_extension.h>
21 #include <app_control_internal.h>
23 #include <bundle_internal.h>
26 #include "mh_common_utility.h"
27 #include "mobile_hotspot.h"
29 #include "mh_string.h"
31 #define MAX_BUF_SIZE (256u)
32 #define NETPOPUP "net.netpopup"
33 #define NETWORK_SETTING_APP "org.tizen.setting-network"
35 static mh_popup_type_e popup_type = MH_POPUP_NONE;
36 static Evas_Object *popup_content = NULL;
37 static char *popup_string = NULL;
39 static void __launch_network_app(void)
41 int ret = APP_CONTROL_ERROR_NONE;
42 app_control_h app_control;
44 ret = app_control_create(&app_control);
45 if (ret != APP_CONTROL_ERROR_NONE) {
46 ERR("app_control_create failed");
49 app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
50 app_control_set_launch_mode(app_control, APP_CONTROL_LAUNCH_MODE_GROUP);
51 app_control_set_app_id(app_control, NETWORK_SETTING_APP);
53 ret = app_control_send_launch_request(app_control, NULL, NULL);
54 if (ret == APP_CONTROL_ERROR_NONE)
55 DBG("Launch network ug successful");
57 ERR("Fail to launch network ug");
59 app_control_destroy(app_control);
62 static void __handle_popup_resp(void *data, bool response)
64 __MOBILE_AP_FUNC_ENTER__;
67 ERR("The param is NULL\n");
71 mh_appdata_t *ad = (mh_appdata_t *)data;
75 if (ad->popup_checkbox) {
76 state = elm_check_state_get(ad->popup_checkbox);
77 evas_object_del(ad->popup_checkbox);
78 ad->popup_checkbox = NULL;
79 DBG("Checkbox status is = %d\n", state);
82 evas_object_del(ad->popup);
86 if (response == true) {
88 case MH_POPUP_WIFI_ON_CHECKBOX:
90 _set_checkbox_status(TETHERING_TYPE_WIFI, 1);
92 ad->is_wifi_teth_enabling = false;
93 ret = tethering_enable(ad->handle, TETHERING_TYPE_WIFI);
94 if (ret != TETHERING_ERROR_NONE) {
95 ERR("wifi tethering on is failed : %d\n", ret);
96 _update_wifi_item(ad, MH_STATE_NONE);
98 _wifi_tethering_checkbox_popup_status_set(false);
99 _send_signal_qp(QP_SIGNAL_PROGRESS_ON);
102 case MH_POPUP_BT_ON_CHECKBOX:
104 _set_checkbox_status(TETHERING_TYPE_BT, 1);
106 ad->is_bt_teth_enabling = false;
107 ret = tethering_enable(ad->handle, TETHERING_TYPE_BT);
108 if (ret != TETHERING_ERROR_NONE) {
109 ERR("Error enable bt tethering : %d\n", ret);
110 _update_bt_item(ad, MH_STATE_NONE);
114 case MH_POPUP_USB_ON_CHECKBOX:
116 _set_checkbox_status(TETHERING_TYPE_USB, 1);
118 if (_get_vconf_usb_state() == VCONFKEY_SYSMAN_USB_DISCONNECTED) {
119 _update_tethering_item(ad, MH_STATE_NONE);
122 ad->is_usb_teth_enabling = false;
123 ret = tethering_enable(ad->handle, TETHERING_TYPE_USB);
124 if (ret != TETHERING_ERROR_NONE) {
125 ERR("Error enable usb tethering : %d\n", ret);
126 _update_usb_item(ad, MH_STATE_NONE);
130 case MH_POPUP_WIFI_OFF:
131 ret = tethering_disable(ad->handle, TETHERING_TYPE_WIFI);
132 if (ret != TETHERING_ERROR_NONE) {
133 ERR("wifi tethering off is failed : %d\n", ret);
134 _update_wifi_item(ad, MH_STATE_NONE);
136 _send_signal_qp(QP_SIGNAL_PROGRESS_OFF);
139 case MH_POPUP_MOBILE_DATA_OFF:
140 __launch_network_app();
141 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
145 ERR("Unknown popup_type : %d\n", popup_type);
149 switch (popup_type) {
150 case MH_POPUP_WIFI_ON_CHECKBOX:
151 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
152 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
153 _wifi_tethering_checkbox_popup_status_set(false);
156 case MH_POPUP_BT_ON_CHECKBOX:
157 _update_tethering_enabling_item(ad, TETHERING_TYPE_BT, MH_STATE_NONE);
160 case MH_POPUP_USB_ON_CHECKBOX:
161 _update_tethering_enabling_item(ad, TETHERING_TYPE_USB, MH_STATE_NONE);
164 case MH_POPUP_WIFI_AP_OFF:
165 if (ad->setup.genlist)
166 elm_naviframe_item_pop(ad->naviframe);
167 elm_naviframe_item_pop(ad->naviframe);
170 case MH_POPUP_WIFI_OFF:
171 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
172 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
175 case MH_POPUP_MOBILE_DATA_OFF:
176 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
179 ERR("Unknown popup_type : %d\n", popup_type);
184 __MOBILE_AP_FUNC_EXIT__;
187 #ifdef TIZEN_FEATURE_EMULATOR
188 static void __handle_emul_popup_resp(void *data, bool response)
190 __MOBILE_AP_FUNC_ENTER__;
193 ERR("The param is NULL\n");
197 mh_appdata_t *ad = (mh_appdata_t *)data;
200 if (ad->popup_checkbox) {
201 state = elm_check_state_get(ad->popup_checkbox);
202 evas_object_del(ad->popup_checkbox);
203 ad->popup_checkbox = NULL;
204 DBG("Checkbox status is = %d\n", state);
207 evas_object_del(ad->popup);
211 if (response == true) {
212 switch (popup_type) {
213 case MH_POPUP_WIFI_ON_CHECKBOX:
215 _set_checkbox_status(TETHERING_TYPE_WIFI, 1);
216 ad->is_wifi_teth_enabling = false;
219 case MH_POPUP_BT_ON_CHECKBOX:
221 _set_checkbox_status(TETHERING_TYPE_BT, 1);
222 ad->is_bt_teth_enabling = false;
226 ERR("Unknown popup_type : %d\n", popup_type);
230 switch (popup_type) {
231 case MH_POPUP_WIFI_ON_CHECKBOX:
232 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
233 _wifi_tethering_checkbox_popup_status_set(false);
236 case MH_POPUP_BT_ON_CHECKBOX:
237 _update_tethering_enabling_item(ad, TETHERING_TYPE_BT, MH_STATE_NONE);
241 ERR("Unknown popup_type : %d\n", popup_type);
246 __MOBILE_AP_FUNC_EXIT__;
250 void _teth_on(mh_appdata_t *ad)
252 #ifndef TIZEN_FEATURE_EMULATOR
253 __handle_popup_resp(ad, true);
255 __handle_emul_popup_resp(ad, true);
259 static void __popup_yes_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
261 if (data == NULL || obj == NULL) {
262 ERR("The param is NULL\n");
266 #ifndef TIZEN_FEATURE_EMULATOR
267 __handle_popup_resp(data, true);
269 mh_appdata_t *ad = (mh_appdata_t *)data;
271 __handle_emul_popup_resp(data, true);
272 _update_emul_main_view(ad, _get_selected_type(), _get_selected_state());
276 static void __popup_no_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
278 if (data == NULL || obj == NULL) {
279 ERR("The param is NULL\n");
283 #ifndef TIZEN_FEATURE_EMULATOR
284 __handle_popup_resp(data, false);
286 __handle_emul_popup_resp(data, false);
290 static void __popup_no_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
292 if (data == NULL || obj == NULL) {
293 ERR("The param is NULL\n");
297 Evas_Event_Mouse_Up *ev = event_info;
300 #ifndef TIZEN_FEATURE_EMULATOR
301 __handle_popup_resp(data, false);
303 __handle_emul_popup_resp(data, false);
307 static void __popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
310 ERR("The param is NULL\n");
314 elm_popup_dismiss(obj);
317 static void __popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
320 ERR("The param is NULL\n");
324 #ifndef TIZEN_FEAUTRE_EMULATOR
325 __handle_popup_resp(data, false);
327 __handle_emul_popup_resp(data, false);
331 void _prepare_popup_with_content(int type, Evas_Object *obj)
333 __MOBILE_AP_FUNC_ENTER__;
336 ERR("param is NULL\n");
343 evas_object_del(popup_content);
351 __MOBILE_AP_FUNC_EXIT__;
354 void _prepare_popup(int type, const char *str)
356 __MOBILE_AP_FUNC_ENTER__;
359 ERR("param is NULL\n");
364 popup_content = NULL;
369 popup_string = strndup(str, MH_LABEL_LENGTH_MAX);
370 if (popup_string == NULL)
371 ERR("strndup is failed\n");
373 __MOBILE_AP_FUNC_EXIT__;
376 void _prepare_popup_type(int type)
381 static void __language_changed_cb(void *data, Evas_Object *obj, void *event_info)
383 __MOBILE_AP_FUNC_ENTER__;
385 mh_appdata_t *ad = (mh_appdata_t *)data;
386 Evas_Object *label = NULL;
387 bool wifi_state = false;
389 char str[MH_LABEL_LENGTH_MAX];
391 if (ad->type < TETHERING_TYPE_USB || ad->type > TETHERING_TYPE_BT) {
392 ERR("Invalid Tethering type\n");
397 case TETHERING_TYPE_WIFI:
398 wifi_is_activated(&wifi_state);
399 _set_vconf_prev_wifi_state(wifi_state);
400 if (wifi_state == true || _is_wifi_direct_on() == true)
401 fmt = STR_TETH_ON_DESC_1;
403 fmt = STR_TETH_ON_DESC_2;
405 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_WIFI_MAX_CONNECTED_STA);
408 case TETHERING_TYPE_BT:
409 fmt = STR_TETH_ON_DESC_2;
410 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_BT_MAX_CONNECTED_STA);
413 case TETHERING_TYPE_USB:
414 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_3);
420 label = elm_label_add(ad->main.check_popup_ly);
421 elm_object_style_set(label, "popup/default");
422 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
423 elm_object_text_set(label, str);
424 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
425 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
426 evas_object_show(label);
427 elm_object_part_content_set(ad->main.check_popup_ly, "elm.swallow.content", label);
429 __MOBILE_AP_FUNC_EXIT__;
432 static void __popup_with_checkbox(mh_appdata_t *ad)
434 __MOBILE_AP_FUNC_ENTER__;
436 Evas_Object *popup = NULL;
437 Evas_Object *yes_button = NULL;
438 Evas_Object *cancel_button = NULL;
439 Evas_Object *layout = NULL;
440 Evas_Object *label = NULL;
441 Evas_Object *check = NULL;
443 popup = elm_popup_add(ad->win);
444 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
445 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
448 case TETHERING_TYPE_WIFI:
449 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
450 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
452 case TETHERING_TYPE_BT:
453 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
454 "IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING");
456 case TETHERING_TYPE_USB:
457 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
458 "IDS_MOBILEAP_MBODY_USB_TETHERING");
465 layout = elm_layout_add(popup);
466 elm_layout_file_set(layout, FILE_PATH_OF_EDC, "popup_checkview_layout");
467 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
468 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 1.0);
469 ad->main.check_popup_ly = layout;
472 check = elm_check_add(popup);
473 elm_object_style_set(check, "popup");
474 elm_object_domain_translatable_text_set(check, PACKAGE, STR_NO_SHOW_AGAIN);
475 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
476 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
477 elm_object_part_content_set(layout, "elm.swallow.end", check);
478 ad->popup_checkbox = check;
481 label = elm_label_add(layout);
482 elm_object_style_set(label, "popup/default");
483 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
484 elm_object_text_set(label, popup_string);
485 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
486 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
487 evas_object_show(label);
488 elm_object_part_content_set(layout, "elm.swallow.content", label);
490 cancel_button = _create_button(popup, "IDS_BR_SK_CANCEL",
491 "button1", __popup_no_btn_clicked_cb, ad);
492 yes_button = _create_button(popup, "IDS_ST_BUTTON_ENABLE_M_USE",
493 "button2", __popup_yes_btn_clicked_cb, ad);
495 evas_object_smart_callback_add(popup, "language,changed", __language_changed_cb, ad);
497 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
498 __popup_no_btn_clicked_cb, (void *)ad);
500 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
501 __popup_no_btn_mouse_event_cb, (void *)ad);
502 evas_object_smart_callback_add(popup, "block,clicked",
503 __popup_block_clicked_cb, NULL);
504 evas_object_smart_callback_add(popup, "dismissed",
505 __popup_hide_finished_cb, ad);
508 if (check && yes_button) {
509 elm_object_focus_next_object_set(check, yes_button, ELM_FOCUS_PREVIOUS);
510 elm_object_focus_next_object_set(yes_button, check, ELM_FOCUS_NEXT);
512 elm_object_focus_next_object_set(cancel_button, check, ELM_FOCUS_PREVIOUS);
513 elm_object_focus_next_object_set(check , cancel_button, ELM_FOCUS_NEXT);
517 elm_object_content_set(popup, layout);
518 evas_object_show(popup);
521 __MOBILE_AP_FUNC_EXIT__;
524 Eina_Bool _create_popup(mh_appdata_t *ad)
526 __MOBILE_AP_FUNC_ENTER__;
528 Evas_Object *popup = NULL;
529 Evas_Object *cancel_button = NULL;
530 Evas_Object *yes_button = NULL;
533 ERR("The param is NULL\n");
538 popup_content = NULL;
543 if (ad->popup != NULL) {
544 evas_object_del(ad->popup);
547 ad->popup_checkbox = NULL;
548 DBG("popup type : %d", popup_type);
550 switch (popup_type) {
551 case MH_POPUP_WIFI_ON_CHECKBOX:
552 case MH_POPUP_BT_ON_CHECKBOX:
553 case MH_POPUP_USB_ON_CHECKBOX:
554 __popup_with_checkbox(ad);
557 case MH_POPUP_WIFI_OFF:
558 popup = elm_popup_add(ad->win);
559 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
562 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
563 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
565 evas_object_size_hint_weight_set(popup,
566 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
568 if (popup_content == NULL)
569 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
571 elm_object_content_set(popup, popup_content);
573 cancel_button = _create_button(popup, STR_CANCEL,
574 "button1", __popup_no_btn_clicked_cb, ad);
575 yes_button = _create_button(popup, STR_TURN_OFF,
576 "button2", __popup_yes_btn_clicked_cb, ad);
578 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
579 __popup_no_btn_clicked_cb, (void *)ad);
580 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
581 __popup_no_btn_mouse_event_cb, (void *)ad);
582 evas_object_smart_callback_add(popup, "block,clicked",
583 __popup_block_clicked_cb, NULL);
584 evas_object_smart_callback_add(popup, "dismissed",
585 __popup_hide_finished_cb, ad);
587 evas_object_show(popup);
590 case MH_POPUP_TETH_ENABLING_FAILED:
591 case MH_POPUP_NO_SIM:
592 case MH_POPUP_FLIGHT_MODE:
593 case MH_POPUP_NETWORK_OUT_OF_RANGE:
594 popup = elm_popup_add(ad->win);
595 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
597 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
600 if (popup_content == NULL)
601 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
603 elm_object_content_set(popup, popup_content);
604 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
606 cancel_button = _create_button(popup, STR_CANCEL,
607 "button1", __popup_no_btn_clicked_cb, ad);
609 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
610 __popup_no_btn_clicked_cb, (void *)ad);
611 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
612 __popup_no_btn_mouse_event_cb, (void *)ad);
613 evas_object_smart_callback_add(popup, "block,clicked",
614 __popup_block_clicked_cb, NULL);
615 evas_object_smart_callback_add(popup, "dismissed",
616 __popup_hide_finished_cb, ad);
618 evas_object_show(popup);
621 case MH_POPUP_MOBILE_DATA_OFF:
622 popup = elm_popup_add(ad->win);
623 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
625 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
628 if (popup_content == NULL)
629 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
631 elm_object_content_set(popup, popup_content);
632 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
634 cancel_button = _create_button(popup, STR_CANCEL,
635 "button1", __popup_no_btn_clicked_cb, ad);
636 yes_button = _create_button(popup, STR_SETTING,
637 "button2", __popup_yes_btn_clicked_cb, ad);
639 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
640 __popup_no_btn_clicked_cb, (void *)ad);
641 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
642 __popup_no_btn_mouse_event_cb, (void *)ad);
643 evas_object_smart_callback_add(popup, "block,clicked",
644 __popup_block_clicked_cb, NULL);
645 evas_object_smart_callback_add(popup, "dismissed",
646 __popup_hide_finished_cb, ad);
648 evas_object_show(popup);
651 case MH_POPUP_WIFI_AP_OFF:
652 popup = elm_popup_add(ad->win);
653 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
655 evas_object_size_hint_weight_set(popup,
656 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
658 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
660 if (popup_content == NULL)
661 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
663 elm_object_content_set(popup, popup_content);
665 cancel_button = _create_button(popup, STR_CANCEL,
666 "button1", __popup_no_btn_clicked_cb, ad);
667 yes_button = _create_button(popup, STR_ENABLE,
668 "button2", __popup_yes_btn_clicked_cb, ad);
670 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
671 __popup_no_btn_clicked_cb, (void *)ad);
672 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
673 __popup_no_btn_mouse_event_cb, (void *)ad);
675 evas_object_show(popup);
679 ERR("Unknown popup_type : %d\n", popup_type);
683 if (cancel_button && yes_button) {
684 elm_object_focus_next_object_set(cancel_button, yes_button, ELM_FOCUS_PREVIOUS);
685 elm_object_focus_next_object_set(yes_button, cancel_button, ELM_FOCUS_NEXT);
692 popup_content = NULL;
694 __MOBILE_AP_FUNC_EXIT__;
699 void _destroy_popup(mh_appdata_t *ad)
701 __MOBILE_AP_FUNC_ENTER__;
709 evas_object_del(ad->popup);
712 ad->popup_checkbox = NULL;
718 popup_content = NULL;
719 popup_type = MH_POPUP_NONE;
721 __MOBILE_AP_FUNC_EXIT__;
726 void _create_security_restriction_noti(tethering_type_e type)
729 char restricted_type[MAX_BUF_SIZE] = {0, };
733 case TETHERING_TYPE_WIFI:
734 g_strlcpy(restricted_type, "wifi tethering", MAX_BUF_SIZE - 1);
736 case TETHERING_TYPE_USB:
737 g_strlcpy(restricted_type, "usb tethering", MAX_BUF_SIZE - 1);
739 case TETHERING_TYPE_BT:
740 g_strlcpy(restricted_type, "bt tethering", MAX_BUF_SIZE - 1);
743 ERR("Invalid type.\n");
748 bundle_add(b, "_SYSPOPUP_TYPE_", "toast_popup");
749 bundle_add(b, "_SYSPOPUP_CONTENT_", "security restriction");
750 bundle_add(b, "_RESTRICTED_TYPE_", restricted_type);
752 DBG("Launch security restriction alert network popup");
753 ret = aul_launch_app(NETPOPUP, b);
755 ERR("Fail to launch syspopup");