4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.1 (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.
21 #define UG_MODULE_API __attribute__ ((visibility("default")))
24 #include "mobile_hotspot.h"
25 #include "mh_view_main.h"
26 #include "mh_func_onoff.h"
27 #include "mh_common_utility.h"
29 #include "mh_string.h"
30 #include "mh_view_wifi_setup.h"
32 static Evas_Object *create_content(mh_appdata_t *ad)
34 __MOBILE_AP_FUNC_ENTER__;
36 ad->naviframe = _create_naviframe(ad->layout);
37 _main_draw_contents(ad);
39 __MOBILE_AP_FUNC_EXIT__;
44 static void __set_callbacks(mh_appdata_t *ad, void *user_data)
50 ret = tethering_set_enabled_cb(ad->handle, TETHERING_TYPE_ALL,
51 _enabled_cb, user_data);
52 if (ret != TETHERING_ERROR_NONE)
53 ERR("tethering_set_enabled_cb [0x%X]\n", ret);
55 ret = tethering_wifi_set_passphrase_changed_cb(ad->handle,
56 _passphrase_changed_cb, user_data);
57 if (ret != TETHERING_ERROR_NONE)
58 ERR("tethering_wifi_set_passphrase_changed_cb [0x%X]\n", ret);
60 ret = tethering_wifi_set_ssid_visibility_changed_cb(ad->handle,
61 _visibility_changed_cb, user_data);
62 if (ret != TETHERING_ERROR_NONE)
63 ERR("tethering_wifi_set_ssid_visibility_changed_cb [0x%X]\n", ret);
65 ret = tethering_wifi_set_security_type_changed_cb(ad->handle,
66 _security_type_changed_cb, user_data);
67 if (ret != TETHERING_ERROR_NONE)
68 ERR("tethering_wifi_set_security_type_changed_cb [0x%X]\n", ret);
70 ret = tethering_set_disabled_cb(ad->handle, TETHERING_TYPE_ALL,
71 _disabled_cb, user_data);
72 if (ret != TETHERING_ERROR_NONE)
73 ERR("tethering_set_disabled_cb [0x%X]\n", ret);
75 ret = tethering_set_connection_state_changed_cb(ad->handle,
77 _connection_changed_cb, user_data);
78 if (ret != TETHERING_ERROR_NONE)
79 ERR("tethering_set_connection_state_changed_cb [0x%X]\n", ret);
81 ret = wifi_manager_set_device_state_changed_cb(ad->wifi_handle,
82 _wifi_state_changed_cb, user_data);
83 if (ret != WIFI_MANAGER_ERROR_NONE)
84 ERR("wifi_manager_set_device_state_changed_cb [0x%X]\n", ret);
85 vconf_notify_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
86 _device_name_changed_cb, user_data);
88 vconf_notify_key_changed(VCONFKEY_NETWORK_CELLULAR_STATE,
89 _handle_network_cellular_state_changed_cb, user_data);
91 vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_STATUS,
92 _handle_usb_status_change, (void *)user_data);
94 vconf_notify_key_changed(VCONF_KEY_MOBILEAP_SYSPOPUP_RESPONSE,
95 _handle_mobileap_syspopup_popup_response, (void *)user_data);
100 static void __unset_callbacks(mh_appdata_t *ad)
106 ret = wifi_manager_unset_device_state_changed_cb(ad->wifi_handle);
107 if (ret != WIFI_MANAGER_ERROR_NONE)
108 ERR("wifi_manager_unset_device_state_changed_cb [0x%X]\n", ret);
110 ret = tethering_unset_connection_state_changed_cb(ad->handle,
112 if (ret != TETHERING_ERROR_NONE)
113 ERR("tethering_unset_connection_state_changed_cb[0x%X]\n", ret);
115 ret = tethering_unset_disabled_cb(ad->handle, TETHERING_TYPE_ALL);
116 if (ret != TETHERING_ERROR_NONE)
117 ERR("tethering_unset_disabled_cb [0x%X]\n", ret);
119 ret = tethering_wifi_unset_security_type_changed_cb(ad->handle);
120 if (ret != TETHERING_ERROR_NONE)
121 ERR("tethering_wifi_unset_security_type_changed_cb [0x%X]\n", ret);
123 ret = tethering_wifi_unset_ssid_visibility_changed_cb(ad->handle);
124 if (ret != TETHERING_ERROR_NONE)
125 ERR("tethering_wifi_unset_ssid_visibility_changed_cb [0x%X]\n", ret);
127 ret = tethering_wifi_unset_passphrase_changed_cb(ad->handle);
128 if (ret != TETHERING_ERROR_NONE)
129 ERR("tethering_wifi_unset_passphrase_changed_cb [0x%X]\n", ret);
131 ret = tethering_unset_enabled_cb(ad->handle, TETHERING_TYPE_ALL);
132 if (ret != TETHERING_ERROR_NONE)
133 ERR("tethering_unset_enabled [0x%X]\n", ret);
135 vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
136 _device_name_changed_cb);
138 vconf_ignore_key_changed(VCONFKEY_NETWORK_CELLULAR_STATE,
139 _handle_network_cellular_state_changed_cb);
141 vconf_ignore_key_changed(VCONFKEY_SYSMAN_USB_STATUS, _handle_usb_status_change);
143 vconf_ignore_key_changed(VCONF_KEY_MOBILEAP_SYSPOPUP_RESPONSE,
144 _handle_mobileap_syspopup_popup_response);
149 static void *on_create(ui_gadget_h ug, enum ug_mode mode,
150 app_control_h app_control, void *priv)
155 ERR("The param is NULL\n");
159 if (mode != UG_MODE_FULLVIEW) {
160 ERR("Only Fullview is supported\n");
165 Evas_Object *content;
170 bindtextdomain(MH_TEXT_DOMAIN, MH_LOCALEDIR);
171 dgettext(PACKAGE, LOCALEDIR);
173 ad = (mh_appdata_t *)malloc(sizeof(mh_appdata_t));
175 ERR("Error!!! failed to allocate memory()\n");
178 memset(ad, 0x0, sizeof(mh_appdata_t));
180 ugd = (mh_ugdata_t *)priv;
185 _send_signal_qp(QP_SIGNAL_PROGRESS_RESET);
189 ret = tethering_create(&ad->handle);
190 #ifndef TIZEN_FEATURE_EMULATOR
191 if (ret != TETHERING_ERROR_NONE) {
192 ERR("tethering_create is failed : %d\n", ret);
199 ad->win = ug_get_parent_layout(ug);
201 ERR("ad->win is NULL\n");
208 if (elm_win_wm_rotation_supported_get(ad->win)) {
209 int rots[4] = {0, 90, 180, 270};
210 elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
213 layout = _create_win_layout(ad);
214 if (layout == NULL) {
215 ERR("_create_win_layout is failed\n");
221 content = create_content(ad);
222 if (content == NULL) {
223 ERR("create_content is failed\n");
229 elm_object_part_content_set(layout, "elm.swallow.content", content);
230 evas_object_show(layout);
231 ret = connection_create(&ad->conn_handle);
232 if (ret != CONNECTION_ERROR_NONE)
233 ERR("connection_create() is failed : %d\n", ret);
235 ret = wifi_manager_initialize(&ad->wifi_handle);
236 if (ret != WIFI_MANAGER_ERROR_NONE)
237 ERR("wifi_manager_initialize() is failed : %d\n", ret);
239 __set_callbacks(ad, (void *)ad);
245 static void on_start(ui_gadget_h ug, app_control_h app_control, void *priv)
249 char * viewtype = NULL;
251 mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
252 mh_appdata_t *ad = ugd->ad;
254 ad->is_foreground = true;
256 if (_get_list_clients_count(ad) > 0) {
257 #ifdef TETHERING_DATA_USAGE_SUPPORT
258 _start_update_data_packet_usage(ad);
261 _start_update_device_conn_time(ad);
264 app_control_get_extra_data(app_control, "viewtype", &viewtype);
266 if (viewtype != NULL) {
267 if (strcmp(viewtype, "wifisettings") == 0)
268 mh_draw_wifi_setup_view(ad);
276 static void on_pause(ui_gadget_h ug, app_control_h app_control, void *priv)
280 mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
281 mh_appdata_t *ad = ugd->ad;
283 #ifdef TETHERING_DATA_USAGE_SUPPORT
284 _stop_update_data_packet_usage(ad);
286 _stop_update_device_conn_time(ad);
287 ad->is_foreground = false;
292 static void on_resume(ui_gadget_h ug, app_control_h app_control, void *priv)
296 mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
297 mh_appdata_t *ad = ugd->ad;
298 Elm_Object_Item *item = ad->main.device_item;
301 ad->is_foreground = true;
303 if (item && elm_genlist_item_expanded_get(item)) {
304 for (l = ad->client_list; l != NULL; l = g_slist_next(l)) {
305 item = elm_genlist_item_next_get(item);
306 elm_genlist_item_fields_update(item, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
310 if (_get_list_clients_count(ad) > 0) {
311 #ifdef TETHERING_DATA_USAGE_SUPPORT
312 _start_update_data_packet_usage(ad);
315 _start_update_device_conn_time(ad);
320 static void on_destroy(ui_gadget_h ug, app_control_h app_control, void *priv)
325 ERR("The param is NULL\n");
329 mh_ugdata_t *ugd = priv;
330 mh_appdata_t *ad = ugd->ad;
334 ERR("The param is NULL\n");
338 __unset_callbacks(ad->handle);
340 #ifdef TETHERING_DATA_USAGE_SUPPORT
341 _stop_update_data_packet_usage(ad);
343 _stop_update_device_conn_time(ad);
345 if (vconf_set_int(VCONF_MOBILE_AP_CONNECT_USB_POPUP_STATUS, 0) < 0)
346 ERR("vconf_set_int is failed\n");
348 ret = wifi_manager_deinitialize(ad->wifi_handle);
349 if (ret != WIFI_MANAGER_ERROR_NONE)
350 ERR("wifi_manager_deinitialize() is failed : %d\n", ret);
352 ret = connection_destroy(ad->conn_handle);
353 if (ret != CONNECTION_ERROR_NONE)
354 ERR("connection_destroy() is failed : %d\n", ret);
356 ret = tethering_destroy(ad->handle);
357 if (ret != TETHERING_ERROR_NONE)
358 ERR("tethering_destroy() is failed : %d\n", ret);
360 if (ad->layout == NULL) {
361 ERR("ad->layout is NULL\n");
368 evas_object_del(ad->popup);
372 if (ad->ps_recheck_timer_id > 0) {
373 g_source_remove(ad->ps_recheck_timer_id);
374 ad->ps_recheck_timer_id = 0;
377 evas_object_del(ad->bg);
380 evas_object_del(ad->layout);
383 _main_free_genlist_itc(ad);
385 ecore_imf_shutdown();
394 static void on_message(ui_gadget_h ug, app_control_h msg,
395 app_control_h app_control, void *priv)
399 static void on_event(ui_gadget_h ug, enum ug_event event,
400 app_control_h app_control, void *priv)
402 __MOBILE_AP_FUNC_ENTER__;
405 ERR("The param is NULL\n");
410 case UG_EVENT_LOW_MEMORY:
412 case UG_EVENT_LOW_BATTERY:
414 case UG_EVENT_LANG_CHANGE:
416 case UG_EVENT_ROTATE_PORTRAIT:
417 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
418 DBG("UG_EVENT_ROTATE_PORTRAIT[_UPSIDEDOWN]\n");
420 case UG_EVENT_ROTATE_LANDSCAPE:
421 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
422 DBG("UG_EVENT_ROTATE_LANDSCAPE[_UPSIDEDOWN]\n");
428 __MOBILE_AP_FUNC_EXIT__;
431 static void on_key_event(ui_gadget_h ug, enum ug_key_event event,
432 app_control_h app_control, void *priv)
434 __MOBILE_AP_FUNC_ENTER__;
436 if (priv == NULL || ug == NULL) {
437 ERR("The param is NULL\n");
441 mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
442 mh_appdata_t *ad = ugd->ad;
450 case UG_KEY_EVENT_END:
451 DBG("UG_KEY_EVENT_END is received : %p\n", ad->popup);
452 if (NULL == ad->popup)
462 __MOBILE_AP_FUNC_EXIT__;
465 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
470 ERR("The param is NULL\n");
475 ugd = calloc(1, sizeof(mh_ugdata_t));
477 ERR("Quit : calloc failed(ugd)\n");
481 ops->create = on_create;
482 ops->start = on_start;
483 ops->pause = on_pause;
484 ops->resume = on_resume;
485 ops->destroy = on_destroy;
486 ops->message = on_message;
487 ops->event = on_event;
488 ops->key_event = on_key_event;
490 ops->opt = UG_OPT_INDICATOR_ENABLE;
495 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
500 ERR("The param is NULL\n");
504 mh_ugdata_t *ugd = (mh_ugdata_t *)ops->priv;
510 static void __mh_reset_vconf(tethering_h handle)
514 ret = vconf_set_int(VCONF_MOBILE_AP_WIFI_POPUP_CHECKBOX_STATUS, 0);
516 ERR("vconf_set_int failed\n");
518 ret = vconf_set_int(VCONF_MOBILE_AP_BT_POPUP_CHECKBOX_STATUS, 0);
520 ERR("vconf_set_int failed\n");
522 ret = vconf_set_int(VCONF_MOBILE_AP_USB_POPUP_CHECKBOX_STATUS, 0);
524 ERR("vconf_set_int failed\n");
526 ret = vconf_set_int(VCONF_MOBILE_AP_PREV_WIFI_STATUS, 0);
528 ERR("vconf_set_int failed\n");
530 ret = vconf_set_int(VCONF_MOBILE_AP_CONNECT_USB_POPUP_STATUS, 0);
532 ERR("vconf_set_int is failed\n");
534 ret = tethering_wifi_set_ssid_visibility(handle, true);
535 if (ret != TETHERING_ERROR_NONE)
536 ERR("tethering_wifi_set_ssid_visibility failed\n");
538 ret = tethering_wifi_set_security_type(handle, TETHERING_WIFI_SECURITY_TYPE_WPA2_PSK);
539 if (ret != TETHERING_ERROR_NONE)
540 ERR("tethering_wifi_set_security_type failed\n");
545 UG_MODULE_API int setting_plugin_reset(app_control_h app_control, void *priv)
550 tethering_h handle = NULL;
552 if (tethering_create(&handle) != TETHERING_ERROR_NONE) {
553 ERR("tethering_create failed\n");
557 if (tethering_is_enabled(handle, TETHERING_TYPE_USB) ||
558 tethering_is_enabled(handle, TETHERING_TYPE_WIFI) ||
559 tethering_is_enabled(handle, TETHERING_TYPE_BT)) {
560 ret = tethering_disable(handle, TETHERING_TYPE_ALL);
561 if (ret != TETHERING_ERROR_NONE) {
562 ERR("tethering_disable failed : %d\n", ret);
563 tethering_destroy(handle);
569 __mh_reset_vconf(handle);
571 tethering_destroy(handle);