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.
20 #include <efl_extension.h>
21 #include <app_control_internal.h>
23 #include "mh_common_utility.h"
24 #include "mobile_hotspot.h"
26 #include "mh_string.h"
28 static mh_popup_type_e popup_type = MH_POPUP_NONE;
29 static Evas_Object *popup_content = NULL;
30 static char *popup_string = NULL;
32 static void __handle_one_btn(void *data)
34 __MOBILE_AP_FUNC_ENTER__;
37 ERR("The param is NULL\n");
41 mh_appdata_t *ad = (mh_appdata_t *)data;
44 evas_object_del(ad->popup);
47 __MOBILE_AP_FUNC_EXIT__;
50 static void __popup_one_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
52 if (data == NULL || obj == NULL) {
53 ERR("The param is NULL\n");
57 __handle_one_btn(data);
60 static void __popup_one_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
62 if (data == NULL || obj == NULL) {
63 ERR("The param is NULL\n");
67 Evas_Event_Mouse_Up *ev = event_info;
69 if (ev->button == 3) {
70 __handle_one_btn(data);
74 static void __launch_network_app(void)
76 int ret = APP_CONTROL_ERROR_NONE;
77 app_control_h app_control;
79 app_control_create(&app_control);
80 if(ret != APP_CONTROL_ERROR_NONE) {
81 ERR("app_control_create failed");
84 app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
85 app_control_set_window(app_control, elm_win_xwindow_get(ug_get_window()));
86 app_control_set_app_id(app_control, "setting-network-efl");
88 ret = app_control_send_launch_request(app_control, NULL, NULL);
89 if(ret == APP_CONTROL_ERROR_NONE) {
90 DBG("Launch network ug successful");
92 ERR("Fail to launch network ug");
95 app_control_destroy(app_control);
98 static void __handle_popup_resp(void *data, bool response)
100 __MOBILE_AP_FUNC_ENTER__;
103 ERR("The param is NULL\n");
107 mh_appdata_t *ad = (mh_appdata_t *)data;
111 if (ad->popup_checkbox) {
112 state = elm_check_state_get(ad->popup_checkbox);
113 evas_object_del(ad->popup_checkbox);
114 ad->popup_checkbox = NULL;
115 DBG("Checkbox status is = %d\n", state);
118 evas_object_del(ad->popup);
122 if (response == true) {
123 switch (popup_type) {
124 case MH_POPUP_WIFI_ON_CHECKBOX:
126 _set_checkbox_status(TETHERING_TYPE_WIFI, 1);
128 ad->is_wifi_teth_enabling = false;
129 ret = tethering_enable(ad->handle, TETHERING_TYPE_WIFI);
130 if (ret != TETHERING_ERROR_NONE) {
131 ERR("wifi tethering on is failed : %d\n", ret);
132 _update_wifi_item(ad, MH_STATE_NONE);
134 _wifi_tethering_checkbox_popup_status_set(false);
135 _send_signal_qp(QP_SIGNAL_PROGRESS_ON);
138 case MH_POPUP_BT_ON_CHECKBOX:
140 _set_checkbox_status(TETHERING_TYPE_BT, 1);
142 ad->is_bt_teth_enabling = false;
143 ret = tethering_enable(ad->handle, TETHERING_TYPE_BT);
144 if (ret != TETHERING_ERROR_NONE) {
145 ERR("Error enable bt tethering : %d\n", ret);
146 _update_bt_item(ad, MH_STATE_NONE);
150 case MH_POPUP_USB_ON_CHECKBOX:
152 _set_checkbox_status(TETHERING_TYPE_USB, 1);
154 if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
155 _update_tethering_item(ad, MH_STATE_NONE);
158 ad->is_usb_teth_enabling = false;
159 ret = tethering_enable(ad->handle, TETHERING_TYPE_USB);
160 if (ret != TETHERING_ERROR_NONE) {
161 ERR("Error enable usb tethering : %d\n", ret);
162 _update_usb_item(ad, MH_STATE_NONE);
166 case MH_POPUP_WIFI_AP_OFF:
167 ret = tethering_disable(ad->handle, TETHERING_TYPE_RESERVED);
168 if (ret != TETHERING_ERROR_NONE) {
169 ERR("MobileAP off is failed : %d\n", ret);
173 case MH_POPUP_WIFI_OFF:
174 ret = tethering_disable(ad->handle, TETHERING_TYPE_WIFI);
175 if (ret != TETHERING_ERROR_NONE) {
176 ERR("wifi tethering off is failed : %d\n", ret);
177 _update_wifi_item(ad, MH_STATE_NONE);
179 _send_signal_qp(QP_SIGNAL_PROGRESS_OFF);
182 case MH_POPUP_MOBILE_DATA_OFF:
183 __launch_network_app();
184 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
188 ERR("Unknown popup_type : %d\n", popup_type);
192 switch (popup_type) {
193 case MH_POPUP_WIFI_ON_CHECKBOX:
194 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
195 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
196 _wifi_tethering_checkbox_popup_status_set(false);
199 case MH_POPUP_BT_ON_CHECKBOX:
200 _update_tethering_enabling_item(ad, TETHERING_TYPE_BT, MH_STATE_NONE);
203 case MH_POPUP_USB_ON_CHECKBOX:
204 _update_tethering_enabling_item(ad,TETHERING_TYPE_USB, MH_STATE_NONE);
207 case MH_POPUP_WIFI_AP_OFF:
208 if (ad->setup.genlist)
209 elm_naviframe_item_pop(ad->naviframe);
210 elm_naviframe_item_pop(ad->naviframe);
213 case MH_POPUP_WIFI_OFF:
214 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
215 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
218 case MH_POPUP_MOBILE_DATA_OFF:
219 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
222 ERR("Unknown popup_type : %d\n", popup_type);
227 __MOBILE_AP_FUNC_EXIT__;
230 void _teth_on(mh_appdata_t *ad)
232 __handle_popup_resp(ad, true);
235 static void __popup_yes_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
237 if (data == NULL || obj == NULL) {
238 ERR("The param is NULL\n");
242 __handle_popup_resp(data, true);
245 static void __popup_no_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
247 if (data == NULL || obj == NULL) {
248 ERR("The param is NULL\n");
252 __handle_popup_resp(data, false);
255 static void __popup_no_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
257 if (data == NULL || obj == NULL) {
258 ERR("The param is NULL\n");
262 Evas_Event_Mouse_Up *ev = event_info;
264 if (ev->button == 3) {
265 __handle_popup_resp(data, false);
269 static void __popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
272 ERR("The param is NULL\n");
276 elm_popup_dismiss(obj);
279 static void __popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
282 ERR("The param is NULL\n");
286 __handle_popup_resp(data, false);
289 void _prepare_popup_with_content(int type, Evas_Object *obj)
291 __MOBILE_AP_FUNC_ENTER__;
294 ERR("param is NULL\n");
301 evas_object_del(popup_content);
309 __MOBILE_AP_FUNC_EXIT__;
312 void _prepare_popup(int type, const char *str)
314 __MOBILE_AP_FUNC_ENTER__;
317 ERR("param is NULL\n");
322 popup_content = NULL;
327 popup_string = strndup(str, MH_LABEL_LENGTH_MAX);
328 if (popup_string == NULL)
329 ERR("strndup is failed\n");
331 __MOBILE_AP_FUNC_EXIT__;
334 void _prepare_popup_type(int type)
339 static void __language_changed_cb(void *data, Evas_Object *obj, void *event_info)
341 __MOBILE_AP_FUNC_ENTER__;
343 mh_appdata_t *ad = (mh_appdata_t *)data;
344 Evas_Object *label = NULL;
345 bool wifi_state = false;
347 char str[MH_LABEL_LENGTH_MAX];
349 if (ad->type < TETHERING_TYPE_USB || ad->type > TETHERING_TYPE_BT ) {
350 ERR("Invalid Tethering type\n");
355 case TETHERING_TYPE_WIFI:
356 wifi_is_activated(&wifi_state);
357 _set_vconf_prev_wifi_state(wifi_state);
358 if (wifi_state == true || _is_wifi_direct_on() == true) {
359 fmt = STR_TETH_ON_DESC_1;
361 fmt = STR_TETH_ON_DESC_2;
363 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_WIFI_MAX_CONNECTED_STA);
366 case TETHERING_TYPE_BT:
367 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_2, TETHERING_BT_MAX_CONNECTED_STA);
370 case TETHERING_TYPE_USB:
371 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_3);
377 label = elm_label_add(ad->main.check_popup_ly);
378 elm_object_style_set(label, "popup/default");
379 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
380 elm_object_text_set(label, str);
381 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
382 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
383 evas_object_show(label);
384 elm_object_part_content_set(ad->main.check_popup_ly, "elm.swallow.content", label);
386 __MOBILE_AP_FUNC_EXIT__;
389 static void __popup_with_checkbox(mh_appdata_t *ad)
391 __MOBILE_AP_FUNC_ENTER__;
393 Evas_Object *popup = NULL;
394 Evas_Object *yes_button = NULL;
395 Evas_Object *cancel_button = NULL;
396 Evas_Object *layout = NULL;
397 Evas_Object *label = NULL;
398 Evas_Object *check = NULL;
400 popup = elm_popup_add(ad->win);
401 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
402 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
405 case TETHERING_TYPE_WIFI:
406 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
407 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
409 case TETHERING_TYPE_BT:
410 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
411 "IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING");
413 case TETHERING_TYPE_USB:
414 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
415 "IDS_MOBILEAP_MBODY_USB_TETHERING");
422 layout = elm_layout_add(popup);
423 elm_layout_file_set(layout, FILE_PATH_OF_EDC, "popup_checkview_layout");
424 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
425 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 1.0);
426 ad->main.check_popup_ly = layout;
429 check = elm_check_add(popup);
430 elm_object_style_set(check, "popup");
431 elm_object_domain_translatable_text_set(check, PACKAGE, STR_NO_SHOW_AGAIN);
432 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
433 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
434 elm_object_part_content_set(layout, "elm.swallow.end", check);
435 ad->popup_checkbox = check;
438 label = elm_label_add(layout);
439 elm_object_style_set(label, "popup/default");
440 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
441 elm_object_text_set(label, popup_string);
442 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
443 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
444 evas_object_show(label);
445 elm_object_part_content_set(layout, "elm.swallow.content", label);
447 cancel_button = _create_button(popup, "IDS_BR_SK_CANCEL",
448 "button1", __popup_no_btn_clicked_cb, ad);
449 yes_button = _create_button(popup, "IDS_ST_BUTTON_ENABLE_M_USE",
450 "button2", __popup_yes_btn_clicked_cb, ad);
452 evas_object_smart_callback_add(popup, "language,changed", __language_changed_cb, ad);
454 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
455 __popup_no_btn_clicked_cb, (void *)ad);
457 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
458 __popup_no_btn_mouse_event_cb, (void *)ad);
459 evas_object_smart_callback_add(popup, "block,clicked",
460 __popup_block_clicked_cb, NULL);
461 evas_object_smart_callback_add(popup, "dismissed",
462 __popup_hide_finished_cb, ad);
465 if (check && yes_button) {
466 elm_object_focus_next_object_set(check, yes_button, ELM_FOCUS_PREVIOUS);
467 elm_object_focus_next_object_set(yes_button, check, ELM_FOCUS_NEXT);
469 elm_object_focus_next_object_set(cancel_button, check, ELM_FOCUS_PREVIOUS);
470 elm_object_focus_next_object_set(check ,cancel_button, ELM_FOCUS_NEXT);
474 elm_object_content_set(popup, layout);
475 evas_object_show(popup);
478 __MOBILE_AP_FUNC_EXIT__;
481 Eina_Bool _create_popup(mh_appdata_t *ad)
483 __MOBILE_AP_FUNC_ENTER__;
485 Evas_Object *popup = NULL;
486 Evas_Object *cancel_button = NULL;
487 Evas_Object *yes_button = NULL;
488 Evas_Object *label = NULL;
491 ERR("The param is NULL\n");
496 popup_content = NULL;
501 if (ad->popup != NULL) {
502 evas_object_del(ad->popup);
505 ad->popup_checkbox = NULL;
506 DBG("popup type : %d", popup_type);
508 switch (popup_type) {
509 case MH_POPUP_WIFI_ON_CHECKBOX:
510 case MH_POPUP_BT_ON_CHECKBOX:
511 case MH_POPUP_USB_ON_CHECKBOX:
512 __popup_with_checkbox(ad);
515 case MH_POPUP_WIFI_OFF:
516 popup = elm_popup_add(ad->win);
519 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
520 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
522 evas_object_size_hint_weight_set(popup,
523 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
525 if (popup_content == NULL)
526 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
528 elm_object_content_set(popup, popup_content);
530 cancel_button =_create_button(popup, STR_CANCEL,
531 "button1", __popup_no_btn_clicked_cb, ad);
532 yes_button = _create_button(popup, STR_TURN_OFF,
533 "button2", __popup_yes_btn_clicked_cb, ad);
535 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
536 __popup_no_btn_clicked_cb, (void *)ad);
537 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
538 __popup_no_btn_mouse_event_cb, (void *)ad);
539 evas_object_smart_callback_add(popup, "block,clicked",
540 __popup_block_clicked_cb, NULL);
541 evas_object_smart_callback_add(popup, "dismissed",
542 __popup_hide_finished_cb, ad);
544 evas_object_show(popup);
547 case MH_POPUP_TETH_ENABLING_FAILED:
548 case MH_POPUP_NO_SIM:
549 case MH_POPUP_FLIGHT_MODE:
550 case MH_POPUP_NETWORK_OUT_OF_RANGE:
551 popup = elm_popup_add(ad->win);
553 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
556 if (popup_content == NULL)
557 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
559 elm_object_content_set(popup, popup_content);
560 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
562 cancel_button = _create_button(popup, STR_CANCEL,
563 "button1", __popup_no_btn_clicked_cb, ad);
565 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
566 __popup_no_btn_clicked_cb, (void *)ad);
567 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
568 __popup_no_btn_mouse_event_cb, (void *)ad);
569 evas_object_smart_callback_add(popup, "block,clicked",
570 __popup_block_clicked_cb, NULL);
571 evas_object_smart_callback_add(popup, "dismissed",
572 __popup_hide_finished_cb, ad);
574 evas_object_show(popup);
577 case MH_POPUP_MOBILE_DATA_OFF:
578 popup = elm_popup_add(ad->win);
580 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
583 if (popup_content == NULL)
584 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
586 elm_object_content_set(popup, popup_content);
587 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
589 cancel_button = _create_button(popup, STR_CANCEL,
590 "button1", __popup_no_btn_clicked_cb, ad);
591 yes_button = _create_button(popup, STR_SETTING,
592 "button2", __popup_yes_btn_clicked_cb, ad);
594 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
595 __popup_no_btn_clicked_cb, (void *)ad);
596 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
597 __popup_no_btn_mouse_event_cb, (void *)ad);
598 evas_object_smart_callback_add(popup, "block,clicked",
599 __popup_block_clicked_cb, NULL);
600 evas_object_smart_callback_add(popup, "dismissed",
601 __popup_hide_finished_cb, ad);
603 evas_object_show(popup);
606 case MH_POPUP_WIFI_AP_OFF:
607 popup = elm_popup_add(ad->win);
609 evas_object_size_hint_weight_set(popup,
610 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
612 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
614 if (popup_content == NULL)
615 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
617 elm_object_content_set(popup, popup_content);
619 cancel_button = _create_button(popup, STR_CANCEL,
620 "button1", __popup_no_btn_clicked_cb, ad);
621 yes_button = _create_button(popup, STR_ENABLE,
622 "button2", __popup_yes_btn_clicked_cb, ad);
624 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
625 __popup_no_btn_clicked_cb, (void *)ad);
626 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
627 __popup_no_btn_mouse_event_cb, (void *)ad);
629 evas_object_show(popup);
633 ERR("Unknown popup_type : %d\n", popup_type);
637 if (cancel_button && yes_button) {
638 elm_object_focus_next_object_set(cancel_button, yes_button, ELM_FOCUS_PREVIOUS);
639 elm_object_focus_next_object_set(yes_button, cancel_button, ELM_FOCUS_NEXT);
646 popup_content = NULL;
648 __MOBILE_AP_FUNC_EXIT__;
653 void _destroy_popup(mh_appdata_t *ad)
655 __MOBILE_AP_FUNC_ENTER__;
663 evas_object_del(ad->popup);
666 ad->popup_checkbox = NULL;
672 popup_content = NULL;
673 popup_type = MH_POPUP_NONE;
675 __MOBILE_AP_FUNC_EXIT__;