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 __launch_network_app(void)
34 int ret = APP_CONTROL_ERROR_NONE;
35 app_control_h app_control;
37 app_control_create(&app_control);
38 if(ret != APP_CONTROL_ERROR_NONE) {
39 ERR("app_control_create failed");
42 app_control_set_operation(app_control, APP_CONTROL_OPERATION_DEFAULT);
43 app_control_set_launch_mode(app_control, APP_CONTROL_LAUNCH_MODE_GROUP);
44 app_control_set_app_id(app_control, "setting-network-efl");
46 ret = app_control_send_launch_request(app_control, NULL, NULL);
47 if(ret == APP_CONTROL_ERROR_NONE) {
48 DBG("Launch network ug successful");
50 ERR("Fail to launch network ug");
53 app_control_destroy(app_control);
56 static void __handle_popup_resp(void *data, bool response)
58 __MOBILE_AP_FUNC_ENTER__;
61 ERR("The param is NULL\n");
65 mh_appdata_t *ad = (mh_appdata_t *)data;
69 if (ad->popup_checkbox) {
70 state = elm_check_state_get(ad->popup_checkbox);
71 evas_object_del(ad->popup_checkbox);
72 ad->popup_checkbox = NULL;
73 DBG("Checkbox status is = %d\n", state);
76 evas_object_del(ad->popup);
80 if (response == true) {
82 case MH_POPUP_WIFI_ON_CHECKBOX:
84 _set_checkbox_status(TETHERING_TYPE_WIFI, 1);
86 ad->is_wifi_teth_enabling = false;
87 ret = tethering_enable(ad->handle, TETHERING_TYPE_WIFI);
88 if (ret != TETHERING_ERROR_NONE) {
89 ERR("wifi tethering on is failed : %d\n", ret);
90 _update_wifi_item(ad, MH_STATE_NONE);
92 _wifi_tethering_checkbox_popup_status_set(false);
93 _send_signal_qp(QP_SIGNAL_PROGRESS_ON);
96 case MH_POPUP_BT_ON_CHECKBOX:
98 _set_checkbox_status(TETHERING_TYPE_BT, 1);
100 ad->is_bt_teth_enabling = false;
101 ret = tethering_enable(ad->handle, TETHERING_TYPE_BT);
102 if (ret != TETHERING_ERROR_NONE) {
103 ERR("Error enable bt tethering : %d\n", ret);
104 _update_bt_item(ad, MH_STATE_NONE);
108 case MH_POPUP_USB_ON_CHECKBOX:
110 _set_checkbox_status(TETHERING_TYPE_USB, 1);
112 if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
113 _update_tethering_item(ad, MH_STATE_NONE);
116 ad->is_usb_teth_enabling = false;
117 ret = tethering_enable(ad->handle, TETHERING_TYPE_USB);
118 if (ret != TETHERING_ERROR_NONE) {
119 ERR("Error enable usb tethering : %d\n", ret);
120 _update_usb_item(ad, MH_STATE_NONE);
124 case MH_POPUP_WIFI_AP_OFF:
125 ret = tethering_disable(ad->handle, TETHERING_TYPE_RESERVED);
126 if (ret != TETHERING_ERROR_NONE) {
127 ERR("MobileAP off is failed : %d\n", ret);
131 case MH_POPUP_WIFI_OFF:
132 ret = tethering_disable(ad->handle, TETHERING_TYPE_WIFI);
133 if (ret != TETHERING_ERROR_NONE) {
134 ERR("wifi tethering off is failed : %d\n", ret);
135 _update_wifi_item(ad, MH_STATE_NONE);
137 _send_signal_qp(QP_SIGNAL_PROGRESS_OFF);
140 case MH_POPUP_MOBILE_DATA_OFF:
141 __launch_network_app();
142 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
146 ERR("Unknown popup_type : %d\n", popup_type);
150 switch (popup_type) {
151 case MH_POPUP_WIFI_ON_CHECKBOX:
152 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
153 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
154 _wifi_tethering_checkbox_popup_status_set(false);
157 case MH_POPUP_BT_ON_CHECKBOX:
158 _update_tethering_enabling_item(ad, TETHERING_TYPE_BT, MH_STATE_NONE);
161 case MH_POPUP_USB_ON_CHECKBOX:
162 _update_tethering_enabling_item(ad,TETHERING_TYPE_USB, MH_STATE_NONE);
165 case MH_POPUP_WIFI_AP_OFF:
166 if (ad->setup.genlist)
167 elm_naviframe_item_pop(ad->naviframe);
168 elm_naviframe_item_pop(ad->naviframe);
171 case MH_POPUP_WIFI_OFF:
172 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
173 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
176 case MH_POPUP_MOBILE_DATA_OFF:
177 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
180 ERR("Unknown popup_type : %d\n", popup_type);
185 __MOBILE_AP_FUNC_EXIT__;
188 void _teth_on(mh_appdata_t *ad)
190 __handle_popup_resp(ad, true);
193 static void __popup_yes_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
195 if (data == NULL || obj == NULL) {
196 ERR("The param is NULL\n");
200 __handle_popup_resp(data, true);
203 static void __popup_no_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
205 if (data == NULL || obj == NULL) {
206 ERR("The param is NULL\n");
210 __handle_popup_resp(data, false);
213 static void __popup_no_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
215 if (data == NULL || obj == NULL) {
216 ERR("The param is NULL\n");
220 Evas_Event_Mouse_Up *ev = event_info;
222 if (ev->button == 3) {
223 __handle_popup_resp(data, false);
227 static void __popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
230 ERR("The param is NULL\n");
234 elm_popup_dismiss(obj);
237 static void __popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
240 ERR("The param is NULL\n");
244 __handle_popup_resp(data, false);
247 void _prepare_popup_with_content(int type, Evas_Object *obj)
249 __MOBILE_AP_FUNC_ENTER__;
252 ERR("param is NULL\n");
259 evas_object_del(popup_content);
267 __MOBILE_AP_FUNC_EXIT__;
270 void _prepare_popup(int type, const char *str)
272 __MOBILE_AP_FUNC_ENTER__;
275 ERR("param is NULL\n");
280 popup_content = NULL;
285 popup_string = strndup(str, MH_LABEL_LENGTH_MAX);
286 if (popup_string == NULL)
287 ERR("strndup is failed\n");
289 __MOBILE_AP_FUNC_EXIT__;
292 void _prepare_popup_type(int type)
297 static void __language_changed_cb(void *data, Evas_Object *obj, void *event_info)
299 __MOBILE_AP_FUNC_ENTER__;
301 mh_appdata_t *ad = (mh_appdata_t *)data;
302 Evas_Object *label = NULL;
303 bool wifi_state = false;
305 char str[MH_LABEL_LENGTH_MAX];
307 if (ad->type < TETHERING_TYPE_USB || ad->type > TETHERING_TYPE_BT ) {
308 ERR("Invalid Tethering type\n");
313 case TETHERING_TYPE_WIFI:
314 wifi_is_activated(&wifi_state);
315 _set_vconf_prev_wifi_state(wifi_state);
316 if (wifi_state == true || _is_wifi_direct_on() == true) {
317 fmt = STR_TETH_ON_DESC_1;
319 fmt = STR_TETH_ON_DESC_2;
321 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_WIFI_MAX_CONNECTED_STA);
324 case TETHERING_TYPE_BT:
325 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_2, TETHERING_BT_MAX_CONNECTED_STA);
328 case TETHERING_TYPE_USB:
329 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_3);
335 label = elm_label_add(ad->main.check_popup_ly);
336 elm_object_style_set(label, "popup/default");
337 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
338 elm_object_text_set(label, str);
339 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
340 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
341 evas_object_show(label);
342 elm_object_part_content_set(ad->main.check_popup_ly, "elm.swallow.content", label);
344 __MOBILE_AP_FUNC_EXIT__;
347 static void __popup_with_checkbox(mh_appdata_t *ad)
349 __MOBILE_AP_FUNC_ENTER__;
351 Evas_Object *popup = NULL;
352 Evas_Object *yes_button = NULL;
353 Evas_Object *cancel_button = NULL;
354 Evas_Object *layout = NULL;
355 Evas_Object *label = NULL;
356 Evas_Object *check = NULL;
358 popup = elm_popup_add(ad->win);
359 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
360 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
363 case TETHERING_TYPE_WIFI:
364 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
365 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
367 case TETHERING_TYPE_BT:
368 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
369 "IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING");
371 case TETHERING_TYPE_USB:
372 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
373 "IDS_MOBILEAP_MBODY_USB_TETHERING");
380 layout = elm_layout_add(popup);
381 elm_layout_file_set(layout, FILE_PATH_OF_EDC, "popup_checkview_layout");
382 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
383 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 1.0);
384 ad->main.check_popup_ly = layout;
387 check = elm_check_add(popup);
388 elm_object_style_set(check, "popup");
389 elm_object_domain_translatable_text_set(check, PACKAGE, STR_NO_SHOW_AGAIN);
390 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
391 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
392 elm_object_part_content_set(layout, "elm.swallow.end", check);
393 ad->popup_checkbox = check;
396 label = elm_label_add(layout);
397 elm_object_style_set(label, "popup/default");
398 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
399 elm_object_text_set(label, popup_string);
400 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
401 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
402 evas_object_show(label);
403 elm_object_part_content_set(layout, "elm.swallow.content", label);
405 cancel_button = _create_button(popup, "IDS_BR_SK_CANCEL",
406 "button1", __popup_no_btn_clicked_cb, ad);
407 yes_button = _create_button(popup, "IDS_ST_BUTTON_ENABLE_M_USE",
408 "button2", __popup_yes_btn_clicked_cb, ad);
410 evas_object_smart_callback_add(popup, "language,changed", __language_changed_cb, ad);
412 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
413 __popup_no_btn_clicked_cb, (void *)ad);
415 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
416 __popup_no_btn_mouse_event_cb, (void *)ad);
417 evas_object_smart_callback_add(popup, "block,clicked",
418 __popup_block_clicked_cb, NULL);
419 evas_object_smart_callback_add(popup, "dismissed",
420 __popup_hide_finished_cb, ad);
423 if (check && yes_button) {
424 elm_object_focus_next_object_set(check, yes_button, ELM_FOCUS_PREVIOUS);
425 elm_object_focus_next_object_set(yes_button, check, ELM_FOCUS_NEXT);
427 elm_object_focus_next_object_set(cancel_button, check, ELM_FOCUS_PREVIOUS);
428 elm_object_focus_next_object_set(check ,cancel_button, ELM_FOCUS_NEXT);
432 elm_object_content_set(popup, layout);
433 evas_object_show(popup);
436 __MOBILE_AP_FUNC_EXIT__;
439 Eina_Bool _create_popup(mh_appdata_t *ad)
441 __MOBILE_AP_FUNC_ENTER__;
443 Evas_Object *popup = NULL;
444 Evas_Object *cancel_button = NULL;
445 Evas_Object *yes_button = NULL;
448 ERR("The param is NULL\n");
453 popup_content = NULL;
458 if (ad->popup != NULL) {
459 evas_object_del(ad->popup);
462 ad->popup_checkbox = NULL;
463 DBG("popup type : %d", popup_type);
465 switch (popup_type) {
466 case MH_POPUP_WIFI_ON_CHECKBOX:
467 case MH_POPUP_BT_ON_CHECKBOX:
468 case MH_POPUP_USB_ON_CHECKBOX:
469 __popup_with_checkbox(ad);
472 case MH_POPUP_WIFI_OFF:
473 popup = elm_popup_add(ad->win);
476 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
477 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
479 evas_object_size_hint_weight_set(popup,
480 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
482 if (popup_content == NULL)
483 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
485 elm_object_content_set(popup, popup_content);
487 cancel_button =_create_button(popup, STR_CANCEL,
488 "button1", __popup_no_btn_clicked_cb, ad);
489 yes_button = _create_button(popup, STR_TURN_OFF,
490 "button2", __popup_yes_btn_clicked_cb, ad);
492 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
493 __popup_no_btn_clicked_cb, (void *)ad);
494 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
495 __popup_no_btn_mouse_event_cb, (void *)ad);
496 evas_object_smart_callback_add(popup, "block,clicked",
497 __popup_block_clicked_cb, NULL);
498 evas_object_smart_callback_add(popup, "dismissed",
499 __popup_hide_finished_cb, ad);
501 evas_object_show(popup);
504 case MH_POPUP_TETH_ENABLING_FAILED:
505 case MH_POPUP_NO_SIM:
506 case MH_POPUP_FLIGHT_MODE:
507 case MH_POPUP_NETWORK_OUT_OF_RANGE:
508 popup = elm_popup_add(ad->win);
510 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
513 if (popup_content == NULL)
514 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
516 elm_object_content_set(popup, popup_content);
517 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
519 cancel_button = _create_button(popup, STR_CANCEL,
520 "button1", __popup_no_btn_clicked_cb, ad);
522 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
523 __popup_no_btn_clicked_cb, (void *)ad);
524 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
525 __popup_no_btn_mouse_event_cb, (void *)ad);
526 evas_object_smart_callback_add(popup, "block,clicked",
527 __popup_block_clicked_cb, NULL);
528 evas_object_smart_callback_add(popup, "dismissed",
529 __popup_hide_finished_cb, ad);
531 evas_object_show(popup);
534 case MH_POPUP_MOBILE_DATA_OFF:
535 popup = elm_popup_add(ad->win);
537 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
540 if (popup_content == NULL)
541 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
543 elm_object_content_set(popup, popup_content);
544 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
546 cancel_button = _create_button(popup, STR_CANCEL,
547 "button1", __popup_no_btn_clicked_cb, ad);
548 yes_button = _create_button(popup, STR_SETTING,
549 "button2", __popup_yes_btn_clicked_cb, ad);
551 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
552 __popup_no_btn_clicked_cb, (void *)ad);
553 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
554 __popup_no_btn_mouse_event_cb, (void *)ad);
555 evas_object_smart_callback_add(popup, "block,clicked",
556 __popup_block_clicked_cb, NULL);
557 evas_object_smart_callback_add(popup, "dismissed",
558 __popup_hide_finished_cb, ad);
560 evas_object_show(popup);
563 case MH_POPUP_WIFI_AP_OFF:
564 popup = elm_popup_add(ad->win);
566 evas_object_size_hint_weight_set(popup,
567 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
569 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
571 if (popup_content == NULL)
572 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
574 elm_object_content_set(popup, popup_content);
576 cancel_button = _create_button(popup, STR_CANCEL,
577 "button1", __popup_no_btn_clicked_cb, ad);
578 yes_button = _create_button(popup, STR_ENABLE,
579 "button2", __popup_yes_btn_clicked_cb, ad);
581 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
582 __popup_no_btn_clicked_cb, (void *)ad);
583 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
584 __popup_no_btn_mouse_event_cb, (void *)ad);
586 evas_object_show(popup);
590 ERR("Unknown popup_type : %d\n", popup_type);
594 if (cancel_button && yes_button) {
595 elm_object_focus_next_object_set(cancel_button, yes_button, ELM_FOCUS_PREVIOUS);
596 elm_object_focus_next_object_set(yes_button, cancel_button, ELM_FOCUS_NEXT);
603 popup_content = NULL;
605 __MOBILE_AP_FUNC_EXIT__;
610 void _destroy_popup(mh_appdata_t *ad)
612 __MOBILE_AP_FUNC_ENTER__;
620 evas_object_del(ad->popup);
623 ad->popup_checkbox = NULL;
629 popup_content = NULL;
630 popup_type = MH_POPUP_NONE;
632 __MOBILE_AP_FUNC_EXIT__;