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 fmt = STR_TETH_ON_DESC_2;
326 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_BT_MAX_CONNECTED_STA);
329 case TETHERING_TYPE_USB:
330 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_3);
336 label = elm_label_add(ad->main.check_popup_ly);
337 elm_object_style_set(label, "popup/default");
338 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
339 elm_object_text_set(label, str);
340 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
341 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
342 evas_object_show(label);
343 elm_object_part_content_set(ad->main.check_popup_ly, "elm.swallow.content", label);
345 __MOBILE_AP_FUNC_EXIT__;
348 static void __popup_with_checkbox(mh_appdata_t *ad)
350 __MOBILE_AP_FUNC_ENTER__;
352 Evas_Object *popup = NULL;
353 Evas_Object *yes_button = NULL;
354 Evas_Object *cancel_button = NULL;
355 Evas_Object *layout = NULL;
356 Evas_Object *label = NULL;
357 Evas_Object *check = NULL;
359 popup = elm_popup_add(ad->win);
360 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
361 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
364 case TETHERING_TYPE_WIFI:
365 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
366 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
368 case TETHERING_TYPE_BT:
369 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
370 "IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING");
372 case TETHERING_TYPE_USB:
373 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
374 "IDS_MOBILEAP_MBODY_USB_TETHERING");
381 layout = elm_layout_add(popup);
382 elm_layout_file_set(layout, FILE_PATH_OF_EDC, "popup_checkview_layout");
383 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
384 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 1.0);
385 ad->main.check_popup_ly = layout;
388 check = elm_check_add(popup);
389 elm_object_style_set(check, "popup");
390 elm_object_domain_translatable_text_set(check, PACKAGE, STR_NO_SHOW_AGAIN);
391 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
392 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
393 elm_object_part_content_set(layout, "elm.swallow.end", check);
394 ad->popup_checkbox = check;
397 label = elm_label_add(layout);
398 elm_object_style_set(label, "popup/default");
399 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
400 elm_object_text_set(label, popup_string);
401 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
402 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
403 evas_object_show(label);
404 elm_object_part_content_set(layout, "elm.swallow.content", label);
406 cancel_button = _create_button(popup, "IDS_BR_SK_CANCEL",
407 "button1", __popup_no_btn_clicked_cb, ad);
408 yes_button = _create_button(popup, "IDS_ST_BUTTON_ENABLE_M_USE",
409 "button2", __popup_yes_btn_clicked_cb, ad);
411 evas_object_smart_callback_add(popup, "language,changed", __language_changed_cb, ad);
413 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
414 __popup_no_btn_clicked_cb, (void *)ad);
416 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
417 __popup_no_btn_mouse_event_cb, (void *)ad);
418 evas_object_smart_callback_add(popup, "block,clicked",
419 __popup_block_clicked_cb, NULL);
420 evas_object_smart_callback_add(popup, "dismissed",
421 __popup_hide_finished_cb, ad);
424 if (check && yes_button) {
425 elm_object_focus_next_object_set(check, yes_button, ELM_FOCUS_PREVIOUS);
426 elm_object_focus_next_object_set(yes_button, check, ELM_FOCUS_NEXT);
428 elm_object_focus_next_object_set(cancel_button, check, ELM_FOCUS_PREVIOUS);
429 elm_object_focus_next_object_set(check ,cancel_button, ELM_FOCUS_NEXT);
433 elm_object_content_set(popup, layout);
434 evas_object_show(popup);
437 __MOBILE_AP_FUNC_EXIT__;
440 Eina_Bool _create_popup(mh_appdata_t *ad)
442 __MOBILE_AP_FUNC_ENTER__;
444 Evas_Object *popup = NULL;
445 Evas_Object *cancel_button = NULL;
446 Evas_Object *yes_button = NULL;
449 ERR("The param is NULL\n");
454 popup_content = NULL;
459 if (ad->popup != NULL) {
460 evas_object_del(ad->popup);
463 ad->popup_checkbox = NULL;
464 DBG("popup type : %d", popup_type);
466 switch (popup_type) {
467 case MH_POPUP_WIFI_ON_CHECKBOX:
468 case MH_POPUP_BT_ON_CHECKBOX:
469 case MH_POPUP_USB_ON_CHECKBOX:
470 __popup_with_checkbox(ad);
473 case MH_POPUP_WIFI_OFF:
474 popup = elm_popup_add(ad->win);
477 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
478 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
480 evas_object_size_hint_weight_set(popup,
481 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
483 if (popup_content == NULL)
484 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
486 elm_object_content_set(popup, popup_content);
488 cancel_button =_create_button(popup, STR_CANCEL,
489 "button1", __popup_no_btn_clicked_cb, ad);
490 yes_button = _create_button(popup, STR_TURN_OFF,
491 "button2", __popup_yes_btn_clicked_cb, ad);
493 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
494 __popup_no_btn_clicked_cb, (void *)ad);
495 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
496 __popup_no_btn_mouse_event_cb, (void *)ad);
497 evas_object_smart_callback_add(popup, "block,clicked",
498 __popup_block_clicked_cb, NULL);
499 evas_object_smart_callback_add(popup, "dismissed",
500 __popup_hide_finished_cb, ad);
502 evas_object_show(popup);
505 case MH_POPUP_TETH_ENABLING_FAILED:
506 case MH_POPUP_NO_SIM:
507 case MH_POPUP_FLIGHT_MODE:
508 case MH_POPUP_NETWORK_OUT_OF_RANGE:
509 popup = elm_popup_add(ad->win);
511 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
514 if (popup_content == NULL)
515 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
517 elm_object_content_set(popup, popup_content);
518 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
520 cancel_button = _create_button(popup, STR_CANCEL,
521 "button1", __popup_no_btn_clicked_cb, ad);
523 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
524 __popup_no_btn_clicked_cb, (void *)ad);
525 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
526 __popup_no_btn_mouse_event_cb, (void *)ad);
527 evas_object_smart_callback_add(popup, "block,clicked",
528 __popup_block_clicked_cb, NULL);
529 evas_object_smart_callback_add(popup, "dismissed",
530 __popup_hide_finished_cb, ad);
532 evas_object_show(popup);
535 case MH_POPUP_MOBILE_DATA_OFF:
536 popup = elm_popup_add(ad->win);
538 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
541 if (popup_content == NULL)
542 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
544 elm_object_content_set(popup, popup_content);
545 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
547 cancel_button = _create_button(popup, STR_CANCEL,
548 "button1", __popup_no_btn_clicked_cb, ad);
549 yes_button = _create_button(popup, STR_SETTING,
550 "button2", __popup_yes_btn_clicked_cb, ad);
552 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
553 __popup_no_btn_clicked_cb, (void *)ad);
554 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
555 __popup_no_btn_mouse_event_cb, (void *)ad);
556 evas_object_smart_callback_add(popup, "block,clicked",
557 __popup_block_clicked_cb, NULL);
558 evas_object_smart_callback_add(popup, "dismissed",
559 __popup_hide_finished_cb, ad);
561 evas_object_show(popup);
564 case MH_POPUP_WIFI_AP_OFF:
565 popup = elm_popup_add(ad->win);
567 evas_object_size_hint_weight_set(popup,
568 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
570 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
572 if (popup_content == NULL)
573 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
575 elm_object_content_set(popup, popup_content);
577 cancel_button = _create_button(popup, STR_CANCEL,
578 "button1", __popup_no_btn_clicked_cb, ad);
579 yes_button = _create_button(popup, STR_ENABLE,
580 "button2", __popup_yes_btn_clicked_cb, ad);
582 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
583 __popup_no_btn_clicked_cb, (void *)ad);
584 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
585 __popup_no_btn_mouse_event_cb, (void *)ad);
587 evas_object_show(popup);
591 ERR("Unknown popup_type : %d\n", popup_type);
595 if (cancel_button && yes_button) {
596 elm_object_focus_next_object_set(cancel_button, yes_button, ELM_FOCUS_PREVIOUS);
597 elm_object_focus_next_object_set(yes_button, cancel_button, ELM_FOCUS_NEXT);
604 popup_content = NULL;
606 __MOBILE_AP_FUNC_EXIT__;
611 void _destroy_popup(mh_appdata_t *ad)
613 __MOBILE_AP_FUNC_ENTER__;
621 evas_object_del(ad->popup);
624 ad->popup_checkbox = NULL;
630 popup_content = NULL;
631 popup_type = MH_POPUP_NONE;
633 __MOBILE_AP_FUNC_EXIT__;