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");
52 app_control_destroy(app_control);
55 static void __handle_popup_resp(void *data, bool response)
57 __MOBILE_AP_FUNC_ENTER__;
60 ERR("The param is NULL\n");
64 mh_appdata_t *ad = (mh_appdata_t *)data;
68 if (ad->popup_checkbox) {
69 state = elm_check_state_get(ad->popup_checkbox);
70 evas_object_del(ad->popup_checkbox);
71 ad->popup_checkbox = NULL;
72 DBG("Checkbox status is = %d\n", state);
75 evas_object_del(ad->popup);
79 if (response == true) {
81 case MH_POPUP_WIFI_ON_CHECKBOX:
83 _set_checkbox_status(TETHERING_TYPE_WIFI, 1);
85 ad->is_wifi_teth_enabling = false;
86 ret = tethering_enable(ad->handle, TETHERING_TYPE_WIFI);
87 if (ret != TETHERING_ERROR_NONE) {
88 ERR("wifi tethering on is failed : %d\n", ret);
89 _update_wifi_item(ad, MH_STATE_NONE);
91 _wifi_tethering_checkbox_popup_status_set(false);
92 _send_signal_qp(QP_SIGNAL_PROGRESS_ON);
95 case MH_POPUP_BT_ON_CHECKBOX:
97 _set_checkbox_status(TETHERING_TYPE_BT, 1);
99 ad->is_bt_teth_enabling = false;
100 ret = tethering_enable(ad->handle, TETHERING_TYPE_BT);
101 if (ret != TETHERING_ERROR_NONE) {
102 ERR("Error enable bt tethering : %d\n", ret);
103 _update_bt_item(ad, MH_STATE_NONE);
107 case MH_POPUP_USB_ON_CHECKBOX:
109 _set_checkbox_status(TETHERING_TYPE_USB, 1);
111 if (_get_vconf_usb_state() != VCONFKEY_SYSMAN_USB_AVAILABLE) {
112 _update_tethering_item(ad, MH_STATE_NONE);
115 ad->is_usb_teth_enabling = false;
116 ret = tethering_enable(ad->handle, TETHERING_TYPE_USB);
117 if (ret != TETHERING_ERROR_NONE) {
118 ERR("Error enable usb tethering : %d\n", ret);
119 _update_usb_item(ad, MH_STATE_NONE);
123 case MH_POPUP_WIFI_OFF:
124 ret = tethering_disable(ad->handle, TETHERING_TYPE_WIFI);
125 if (ret != TETHERING_ERROR_NONE) {
126 ERR("wifi tethering off is failed : %d\n", ret);
127 _update_wifi_item(ad, MH_STATE_NONE);
129 _send_signal_qp(QP_SIGNAL_PROGRESS_OFF);
132 case MH_POPUP_MOBILE_DATA_OFF:
133 __launch_network_app();
134 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
138 ERR("Unknown popup_type : %d\n", popup_type);
142 switch (popup_type) {
143 case MH_POPUP_WIFI_ON_CHECKBOX:
144 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
145 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
146 _wifi_tethering_checkbox_popup_status_set(false);
149 case MH_POPUP_BT_ON_CHECKBOX:
150 _update_tethering_enabling_item(ad, TETHERING_TYPE_BT, MH_STATE_NONE);
153 case MH_POPUP_USB_ON_CHECKBOX:
154 _update_tethering_enabling_item(ad, TETHERING_TYPE_USB, MH_STATE_NONE);
157 case MH_POPUP_WIFI_AP_OFF:
158 if (ad->setup.genlist)
159 elm_naviframe_item_pop(ad->naviframe);
160 elm_naviframe_item_pop(ad->naviframe);
163 case MH_POPUP_WIFI_OFF:
164 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
165 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
168 case MH_POPUP_MOBILE_DATA_OFF:
169 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
172 ERR("Unknown popup_type : %d\n", popup_type);
177 __MOBILE_AP_FUNC_EXIT__;
180 void _teth_on(mh_appdata_t *ad)
182 __handle_popup_resp(ad, true);
185 static void __popup_yes_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
187 if (data == NULL || obj == NULL) {
188 ERR("The param is NULL\n");
192 __handle_popup_resp(data, true);
195 static void __popup_no_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
197 if (data == NULL || obj == NULL) {
198 ERR("The param is NULL\n");
202 __handle_popup_resp(data, false);
205 static void __popup_no_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
207 if (data == NULL || obj == NULL) {
208 ERR("The param is NULL\n");
212 Evas_Event_Mouse_Up *ev = event_info;
215 __handle_popup_resp(data, false);
218 static void __popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
221 ERR("The param is NULL\n");
225 elm_popup_dismiss(obj);
228 static void __popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
231 ERR("The param is NULL\n");
235 __handle_popup_resp(data, false);
238 void _prepare_popup_with_content(int type, Evas_Object *obj)
240 __MOBILE_AP_FUNC_ENTER__;
243 ERR("param is NULL\n");
250 evas_object_del(popup_content);
258 __MOBILE_AP_FUNC_EXIT__;
261 void _prepare_popup(int type, const char *str)
263 __MOBILE_AP_FUNC_ENTER__;
266 ERR("param is NULL\n");
271 popup_content = NULL;
276 popup_string = strndup(str, MH_LABEL_LENGTH_MAX);
277 if (popup_string == NULL)
278 ERR("strndup is failed\n");
280 __MOBILE_AP_FUNC_EXIT__;
283 void _prepare_popup_type(int type)
288 static void __language_changed_cb(void *data, Evas_Object *obj, void *event_info)
290 __MOBILE_AP_FUNC_ENTER__;
292 mh_appdata_t *ad = (mh_appdata_t *)data;
293 Evas_Object *label = NULL;
294 bool wifi_state = false;
296 char str[MH_LABEL_LENGTH_MAX];
298 if (ad->type < TETHERING_TYPE_USB || ad->type > TETHERING_TYPE_BT) {
299 ERR("Invalid Tethering type\n");
304 case TETHERING_TYPE_WIFI:
305 wifi_is_activated(&wifi_state);
306 _set_vconf_prev_wifi_state(wifi_state);
307 if (wifi_state == true || _is_wifi_direct_on() == true)
308 fmt = STR_TETH_ON_DESC_1;
310 fmt = STR_TETH_ON_DESC_2;
312 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_WIFI_MAX_CONNECTED_STA);
315 case TETHERING_TYPE_BT:
316 fmt = STR_TETH_ON_DESC_2;
317 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_BT_MAX_CONNECTED_STA);
320 case TETHERING_TYPE_USB:
321 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_3);
327 label = elm_label_add(ad->main.check_popup_ly);
328 elm_object_style_set(label, "popup/default");
329 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
330 elm_object_text_set(label, str);
331 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
332 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
333 evas_object_show(label);
334 elm_object_part_content_set(ad->main.check_popup_ly, "elm.swallow.content", label);
336 __MOBILE_AP_FUNC_EXIT__;
339 static void __popup_with_checkbox(mh_appdata_t *ad)
341 __MOBILE_AP_FUNC_ENTER__;
343 Evas_Object *popup = NULL;
344 Evas_Object *yes_button = NULL;
345 Evas_Object *cancel_button = NULL;
346 Evas_Object *layout = NULL;
347 Evas_Object *label = NULL;
348 Evas_Object *check = NULL;
350 popup = elm_popup_add(ad->win);
351 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
352 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
355 case TETHERING_TYPE_WIFI:
356 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
357 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
359 case TETHERING_TYPE_BT:
360 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
361 "IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING");
363 case TETHERING_TYPE_USB:
364 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
365 "IDS_MOBILEAP_MBODY_USB_TETHERING");
372 layout = elm_layout_add(popup);
373 elm_layout_file_set(layout, FILE_PATH_OF_EDC, "popup_checkview_layout");
374 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
375 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 1.0);
376 ad->main.check_popup_ly = layout;
379 check = elm_check_add(popup);
380 elm_object_style_set(check, "popup");
381 elm_object_domain_translatable_text_set(check, PACKAGE, STR_NO_SHOW_AGAIN);
382 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
383 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
384 elm_object_part_content_set(layout, "elm.swallow.end", check);
385 ad->popup_checkbox = check;
388 label = elm_label_add(layout);
389 elm_object_style_set(label, "popup/default");
390 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
391 elm_object_text_set(label, popup_string);
392 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
393 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
394 evas_object_show(label);
395 elm_object_part_content_set(layout, "elm.swallow.content", label);
397 cancel_button = _create_button(popup, "IDS_BR_SK_CANCEL",
398 "button1", __popup_no_btn_clicked_cb, ad);
399 yes_button = _create_button(popup, "IDS_ST_BUTTON_ENABLE_M_USE",
400 "button2", __popup_yes_btn_clicked_cb, ad);
402 evas_object_smart_callback_add(popup, "language,changed", __language_changed_cb, ad);
404 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
405 __popup_no_btn_clicked_cb, (void *)ad);
407 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
408 __popup_no_btn_mouse_event_cb, (void *)ad);
409 evas_object_smart_callback_add(popup, "block,clicked",
410 __popup_block_clicked_cb, NULL);
411 evas_object_smart_callback_add(popup, "dismissed",
412 __popup_hide_finished_cb, ad);
415 if (check && yes_button) {
416 elm_object_focus_next_object_set(check, yes_button, ELM_FOCUS_PREVIOUS);
417 elm_object_focus_next_object_set(yes_button, check, ELM_FOCUS_NEXT);
419 elm_object_focus_next_object_set(cancel_button, check, ELM_FOCUS_PREVIOUS);
420 elm_object_focus_next_object_set(check , cancel_button, ELM_FOCUS_NEXT);
424 elm_object_content_set(popup, layout);
425 evas_object_show(popup);
428 __MOBILE_AP_FUNC_EXIT__;
431 Eina_Bool _create_popup(mh_appdata_t *ad)
433 __MOBILE_AP_FUNC_ENTER__;
435 Evas_Object *popup = NULL;
436 Evas_Object *cancel_button = NULL;
437 Evas_Object *yes_button = NULL;
440 ERR("The param is NULL\n");
445 popup_content = NULL;
450 if (ad->popup != NULL) {
451 evas_object_del(ad->popup);
454 ad->popup_checkbox = NULL;
455 DBG("popup type : %d", popup_type);
457 switch (popup_type) {
458 case MH_POPUP_WIFI_ON_CHECKBOX:
459 case MH_POPUP_BT_ON_CHECKBOX:
460 case MH_POPUP_USB_ON_CHECKBOX:
461 __popup_with_checkbox(ad);
464 case MH_POPUP_WIFI_OFF:
465 popup = elm_popup_add(ad->win);
468 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
469 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
471 evas_object_size_hint_weight_set(popup,
472 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
474 if (popup_content == NULL)
475 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
477 elm_object_content_set(popup, popup_content);
479 cancel_button = _create_button(popup, STR_CANCEL,
480 "button1", __popup_no_btn_clicked_cb, ad);
481 yes_button = _create_button(popup, STR_TURN_OFF,
482 "button2", __popup_yes_btn_clicked_cb, ad);
484 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
485 __popup_no_btn_clicked_cb, (void *)ad);
486 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
487 __popup_no_btn_mouse_event_cb, (void *)ad);
488 evas_object_smart_callback_add(popup, "block,clicked",
489 __popup_block_clicked_cb, NULL);
490 evas_object_smart_callback_add(popup, "dismissed",
491 __popup_hide_finished_cb, ad);
493 evas_object_show(popup);
496 case MH_POPUP_TETH_ENABLING_FAILED:
497 case MH_POPUP_NO_SIM:
498 case MH_POPUP_FLIGHT_MODE:
499 case MH_POPUP_NETWORK_OUT_OF_RANGE:
500 popup = elm_popup_add(ad->win);
502 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
505 if (popup_content == NULL)
506 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
508 elm_object_content_set(popup, popup_content);
509 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
511 cancel_button = _create_button(popup, STR_CANCEL,
512 "button1", __popup_no_btn_clicked_cb, ad);
514 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
515 __popup_no_btn_clicked_cb, (void *)ad);
516 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
517 __popup_no_btn_mouse_event_cb, (void *)ad);
518 evas_object_smart_callback_add(popup, "block,clicked",
519 __popup_block_clicked_cb, NULL);
520 evas_object_smart_callback_add(popup, "dismissed",
521 __popup_hide_finished_cb, ad);
523 evas_object_show(popup);
526 case MH_POPUP_MOBILE_DATA_OFF:
527 popup = elm_popup_add(ad->win);
529 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
532 if (popup_content == NULL)
533 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
535 elm_object_content_set(popup, popup_content);
536 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
538 cancel_button = _create_button(popup, STR_CANCEL,
539 "button1", __popup_no_btn_clicked_cb, ad);
540 yes_button = _create_button(popup, STR_SETTING,
541 "button2", __popup_yes_btn_clicked_cb, ad);
543 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
544 __popup_no_btn_clicked_cb, (void *)ad);
545 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
546 __popup_no_btn_mouse_event_cb, (void *)ad);
547 evas_object_smart_callback_add(popup, "block,clicked",
548 __popup_block_clicked_cb, NULL);
549 evas_object_smart_callback_add(popup, "dismissed",
550 __popup_hide_finished_cb, ad);
552 evas_object_show(popup);
555 case MH_POPUP_WIFI_AP_OFF:
556 popup = elm_popup_add(ad->win);
558 evas_object_size_hint_weight_set(popup,
559 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
561 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
563 if (popup_content == NULL)
564 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
566 elm_object_content_set(popup, popup_content);
568 cancel_button = _create_button(popup, STR_CANCEL,
569 "button1", __popup_no_btn_clicked_cb, ad);
570 yes_button = _create_button(popup, STR_ENABLE,
571 "button2", __popup_yes_btn_clicked_cb, ad);
573 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
574 __popup_no_btn_clicked_cb, (void *)ad);
575 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
576 __popup_no_btn_mouse_event_cb, (void *)ad);
578 evas_object_show(popup);
582 ERR("Unknown popup_type : %d\n", popup_type);
586 if (cancel_button && yes_button) {
587 elm_object_focus_next_object_set(cancel_button, yes_button, ELM_FOCUS_PREVIOUS);
588 elm_object_focus_next_object_set(yes_button, cancel_button, ELM_FOCUS_NEXT);
595 popup_content = NULL;
597 __MOBILE_AP_FUNC_EXIT__;
602 void _destroy_popup(mh_appdata_t *ad)
604 __MOBILE_AP_FUNC_ENTER__;
612 evas_object_del(ad->popup);
615 ad->popup_checkbox = NULL;
621 popup_content = NULL;
622 popup_type = MH_POPUP_NONE;
624 __MOBILE_AP_FUNC_EXIT__;