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_OFF:
125 ret = tethering_disable(ad->handle, TETHERING_TYPE_WIFI);
126 if (ret != TETHERING_ERROR_NONE) {
127 ERR("wifi tethering off is failed : %d\n", ret);
128 _update_wifi_item(ad, MH_STATE_NONE);
130 _send_signal_qp(QP_SIGNAL_PROGRESS_OFF);
133 case MH_POPUP_MOBILE_DATA_OFF:
134 __launch_network_app();
135 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
139 ERR("Unknown popup_type : %d\n", popup_type);
143 switch (popup_type) {
144 case MH_POPUP_WIFI_ON_CHECKBOX:
145 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
146 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
147 _wifi_tethering_checkbox_popup_status_set(false);
150 case MH_POPUP_BT_ON_CHECKBOX:
151 _update_tethering_enabling_item(ad, TETHERING_TYPE_BT, MH_STATE_NONE);
154 case MH_POPUP_USB_ON_CHECKBOX:
155 _update_tethering_enabling_item(ad,TETHERING_TYPE_USB, MH_STATE_NONE);
158 case MH_POPUP_WIFI_AP_OFF:
159 if (ad->setup.genlist)
160 elm_naviframe_item_pop(ad->naviframe);
161 elm_naviframe_item_pop(ad->naviframe);
164 case MH_POPUP_WIFI_OFF:
165 _update_tethering_enabling_item(ad, TETHERING_TYPE_WIFI, MH_STATE_NONE);
166 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
169 case MH_POPUP_MOBILE_DATA_OFF:
170 _update_tethering_enabling_item(ad, ad->type, MH_STATE_NONE);
173 ERR("Unknown popup_type : %d\n", popup_type);
178 __MOBILE_AP_FUNC_EXIT__;
181 void _teth_on(mh_appdata_t *ad)
183 __handle_popup_resp(ad, true);
186 static void __popup_yes_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
188 if (data == NULL || obj == NULL) {
189 ERR("The param is NULL\n");
193 __handle_popup_resp(data, true);
196 static void __popup_no_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
198 if (data == NULL || obj == NULL) {
199 ERR("The param is NULL\n");
203 __handle_popup_resp(data, false);
206 static void __popup_no_btn_mouse_event_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
208 if (data == NULL || obj == NULL) {
209 ERR("The param is NULL\n");
213 Evas_Event_Mouse_Up *ev = event_info;
215 if (ev->button == 3) {
216 __handle_popup_resp(data, false);
220 static void __popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
223 ERR("The param is NULL\n");
227 elm_popup_dismiss(obj);
230 static void __popup_hide_finished_cb(void *data, Evas_Object *obj, void *event_info)
233 ERR("The param is NULL\n");
237 __handle_popup_resp(data, false);
240 void _prepare_popup_with_content(int type, Evas_Object *obj)
242 __MOBILE_AP_FUNC_ENTER__;
245 ERR("param is NULL\n");
252 evas_object_del(popup_content);
260 __MOBILE_AP_FUNC_EXIT__;
263 void _prepare_popup(int type, const char *str)
265 __MOBILE_AP_FUNC_ENTER__;
268 ERR("param is NULL\n");
273 popup_content = NULL;
278 popup_string = strndup(str, MH_LABEL_LENGTH_MAX);
279 if (popup_string == NULL)
280 ERR("strndup is failed\n");
282 __MOBILE_AP_FUNC_EXIT__;
285 void _prepare_popup_type(int type)
290 static void __language_changed_cb(void *data, Evas_Object *obj, void *event_info)
292 __MOBILE_AP_FUNC_ENTER__;
294 mh_appdata_t *ad = (mh_appdata_t *)data;
295 Evas_Object *label = NULL;
296 bool wifi_state = false;
298 char str[MH_LABEL_LENGTH_MAX];
300 if (ad->type < TETHERING_TYPE_USB || ad->type > TETHERING_TYPE_BT ) {
301 ERR("Invalid Tethering type\n");
306 case TETHERING_TYPE_WIFI:
307 wifi_is_activated(&wifi_state);
308 _set_vconf_prev_wifi_state(wifi_state);
309 if (wifi_state == true || _is_wifi_direct_on() == true) {
310 fmt = STR_TETH_ON_DESC_1;
312 fmt = STR_TETH_ON_DESC_2;
314 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_WIFI_MAX_CONNECTED_STA);
317 case TETHERING_TYPE_BT:
318 fmt = STR_TETH_ON_DESC_2;
319 snprintf(str, MH_LABEL_LENGTH_MAX, fmt, TETHERING_BT_MAX_CONNECTED_STA);
322 case TETHERING_TYPE_USB:
323 snprintf(str, MH_LABEL_LENGTH_MAX, STR_TETH_ON_DESC_3);
329 label = elm_label_add(ad->main.check_popup_ly);
330 elm_object_style_set(label, "popup/default");
331 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
332 elm_object_text_set(label, str);
333 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
334 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
335 evas_object_show(label);
336 elm_object_part_content_set(ad->main.check_popup_ly, "elm.swallow.content", label);
338 __MOBILE_AP_FUNC_EXIT__;
341 static void __popup_with_checkbox(mh_appdata_t *ad)
343 __MOBILE_AP_FUNC_ENTER__;
345 Evas_Object *popup = NULL;
346 Evas_Object *yes_button = NULL;
347 Evas_Object *cancel_button = NULL;
348 Evas_Object *layout = NULL;
349 Evas_Object *label = NULL;
350 Evas_Object *check = NULL;
352 popup = elm_popup_add(ad->win);
353 elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
354 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
357 case TETHERING_TYPE_WIFI:
358 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
359 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
361 case TETHERING_TYPE_BT:
362 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
363 "IDS_MOBILEAP_BODY_BLUETOOTH_TETHERING");
365 case TETHERING_TYPE_USB:
366 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
367 "IDS_MOBILEAP_MBODY_USB_TETHERING");
374 layout = elm_layout_add(popup);
375 elm_layout_file_set(layout, FILE_PATH_OF_EDC, "popup_checkview_layout");
376 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
377 evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 1.0);
378 ad->main.check_popup_ly = layout;
381 check = elm_check_add(popup);
382 elm_object_style_set(check, "popup");
383 elm_object_domain_translatable_text_set(check, PACKAGE, STR_NO_SHOW_AGAIN);
384 evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
385 evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
386 elm_object_part_content_set(layout, "elm.swallow.end", check);
387 ad->popup_checkbox = check;
390 label = elm_label_add(layout);
391 elm_object_style_set(label, "popup/default");
392 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
393 elm_object_text_set(label, popup_string);
394 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
395 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
396 evas_object_show(label);
397 elm_object_part_content_set(layout, "elm.swallow.content", label);
399 cancel_button = _create_button(popup, "IDS_BR_SK_CANCEL",
400 "button1", __popup_no_btn_clicked_cb, ad);
401 yes_button = _create_button(popup, "IDS_ST_BUTTON_ENABLE_M_USE",
402 "button2", __popup_yes_btn_clicked_cb, ad);
404 evas_object_smart_callback_add(popup, "language,changed", __language_changed_cb, ad);
406 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
407 __popup_no_btn_clicked_cb, (void *)ad);
409 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
410 __popup_no_btn_mouse_event_cb, (void *)ad);
411 evas_object_smart_callback_add(popup, "block,clicked",
412 __popup_block_clicked_cb, NULL);
413 evas_object_smart_callback_add(popup, "dismissed",
414 __popup_hide_finished_cb, ad);
417 if (check && yes_button) {
418 elm_object_focus_next_object_set(check, yes_button, ELM_FOCUS_PREVIOUS);
419 elm_object_focus_next_object_set(yes_button, check, ELM_FOCUS_NEXT);
421 elm_object_focus_next_object_set(cancel_button, check, ELM_FOCUS_PREVIOUS);
422 elm_object_focus_next_object_set(check ,cancel_button, ELM_FOCUS_NEXT);
426 elm_object_content_set(popup, layout);
427 evas_object_show(popup);
430 __MOBILE_AP_FUNC_EXIT__;
433 Eina_Bool _create_popup(mh_appdata_t *ad)
435 __MOBILE_AP_FUNC_ENTER__;
437 Evas_Object *popup = NULL;
438 Evas_Object *cancel_button = NULL;
439 Evas_Object *yes_button = NULL;
442 ERR("The param is NULL\n");
447 popup_content = NULL;
452 if (ad->popup != NULL) {
453 evas_object_del(ad->popup);
456 ad->popup_checkbox = NULL;
457 DBG("popup type : %d", popup_type);
459 switch (popup_type) {
460 case MH_POPUP_WIFI_ON_CHECKBOX:
461 case MH_POPUP_BT_ON_CHECKBOX:
462 case MH_POPUP_USB_ON_CHECKBOX:
463 __popup_with_checkbox(ad);
466 case MH_POPUP_WIFI_OFF:
467 popup = elm_popup_add(ad->win);
470 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
471 "IDS_MOBILEAP_MBODY_WI_FI_TETHERING");
473 evas_object_size_hint_weight_set(popup,
474 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
476 if (popup_content == NULL)
477 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
479 elm_object_content_set(popup, popup_content);
481 cancel_button =_create_button(popup, STR_CANCEL,
482 "button1", __popup_no_btn_clicked_cb, ad);
483 yes_button = _create_button(popup, STR_TURN_OFF,
484 "button2", __popup_yes_btn_clicked_cb, ad);
486 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
487 __popup_no_btn_clicked_cb, (void *)ad);
488 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
489 __popup_no_btn_mouse_event_cb, (void *)ad);
490 evas_object_smart_callback_add(popup, "block,clicked",
491 __popup_block_clicked_cb, NULL);
492 evas_object_smart_callback_add(popup, "dismissed",
493 __popup_hide_finished_cb, ad);
495 evas_object_show(popup);
498 case MH_POPUP_TETH_ENABLING_FAILED:
499 case MH_POPUP_NO_SIM:
500 case MH_POPUP_FLIGHT_MODE:
501 case MH_POPUP_NETWORK_OUT_OF_RANGE:
502 popup = elm_popup_add(ad->win);
504 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
507 if (popup_content == NULL)
508 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
510 elm_object_content_set(popup, popup_content);
511 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
513 cancel_button = _create_button(popup, STR_CANCEL,
514 "button1", __popup_no_btn_clicked_cb, ad);
516 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
517 __popup_no_btn_clicked_cb, (void *)ad);
518 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
519 __popup_no_btn_mouse_event_cb, (void *)ad);
520 evas_object_smart_callback_add(popup, "block,clicked",
521 __popup_block_clicked_cb, NULL);
522 evas_object_smart_callback_add(popup, "dismissed",
523 __popup_hide_finished_cb, ad);
525 evas_object_show(popup);
528 case MH_POPUP_MOBILE_DATA_OFF:
529 popup = elm_popup_add(ad->win);
531 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
534 if (popup_content == NULL)
535 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
537 elm_object_content_set(popup, popup_content);
538 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
540 cancel_button = _create_button(popup, STR_CANCEL,
541 "button1", __popup_no_btn_clicked_cb, ad);
542 yes_button = _create_button(popup, STR_SETTING,
543 "button2", __popup_yes_btn_clicked_cb, ad);
545 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
546 __popup_no_btn_clicked_cb, (void *)ad);
547 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
548 __popup_no_btn_mouse_event_cb, (void *)ad);
549 evas_object_smart_callback_add(popup, "block,clicked",
550 __popup_block_clicked_cb, NULL);
551 evas_object_smart_callback_add(popup, "dismissed",
552 __popup_hide_finished_cb, ad);
554 evas_object_show(popup);
557 case MH_POPUP_WIFI_AP_OFF:
558 popup = elm_popup_add(ad->win);
560 evas_object_size_hint_weight_set(popup,
561 EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
563 elm_object_domain_translatable_part_text_set(popup, "title,text", PACKAGE,
565 if (popup_content == NULL)
566 elm_object_domain_translatable_text_set(popup, PACKAGE, popup_string);
568 elm_object_content_set(popup, popup_content);
570 cancel_button = _create_button(popup, STR_CANCEL,
571 "button1", __popup_no_btn_clicked_cb, ad);
572 yes_button = _create_button(popup, STR_ENABLE,
573 "button2", __popup_yes_btn_clicked_cb, ad);
575 eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
576 __popup_no_btn_clicked_cb, (void *)ad);
577 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP,
578 __popup_no_btn_mouse_event_cb, (void *)ad);
580 evas_object_show(popup);
584 ERR("Unknown popup_type : %d\n", popup_type);
588 if (cancel_button && yes_button) {
589 elm_object_focus_next_object_set(cancel_button, yes_button, ELM_FOCUS_PREVIOUS);
590 elm_object_focus_next_object_set(yes_button, cancel_button, ELM_FOCUS_NEXT);
597 popup_content = NULL;
599 __MOBILE_AP_FUNC_EXIT__;
604 void _destroy_popup(mh_appdata_t *ad)
606 __MOBILE_AP_FUNC_ENTER__;
614 evas_object_del(ad->popup);
617 ad->popup_checkbox = NULL;
623 popup_content = NULL;
624 popup_type = MH_POPUP_NONE;
626 __MOBILE_AP_FUNC_EXIT__;