[ug-mobile-ap] Remove dead code
[apps/native/ug-mobile-ap.git] / src / mh_main_ug.c
1 /*
2 * ug-mobile-ap
3 *
4 * Copyright 2012  Samsung Electronics Co., Ltd
5
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
9
10 * http://www.tizenopensource.org/license
11
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.
17 *
18 */
19
20 #ifndef UG_MODULE_API
21 #define UG_MODULE_API __attribute__ ((visibility("default")))
22 #endif
23
24 #include "mobile_hotspot.h"
25 #include "mh_view_main.h"
26 #include "mh_func_onoff.h"
27 #include "mh_common_utility.h"
28 #include "mh_popup.h"
29 #include "mh_string.h"
30 #include "mh_view_wifi_setup.h"
31
32 static Evas_Object *create_content(mh_appdata_t *ad)
33 {
34         __MOBILE_AP_FUNC_ENTER__;
35
36         ad->naviframe = _create_naviframe(ad->layout);
37         _main_draw_contents(ad);
38
39         __MOBILE_AP_FUNC_EXIT__;
40
41         return ad->naviframe;
42 }
43
44 static void __set_callbacks(mh_appdata_t *ad, void *user_data)
45 {
46         DBG("+\n");
47
48         int ret;
49
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);
54
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);
59
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);
64
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);
69
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);
74
75         ret = tethering_set_connection_state_changed_cb(ad->handle,
76                         TETHERING_TYPE_ALL,
77                         _connection_changed_cb, user_data);
78         if (ret != TETHERING_ERROR_NONE)
79                 ERR("tethering_set_connection_state_changed_cb [0x%X]\n", ret);
80
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);
87
88         vconf_notify_key_changed(VCONFKEY_NETWORK_CELLULAR_STATE,
89                         _handle_network_cellular_state_changed_cb, user_data);
90
91         vconf_notify_key_changed(VCONFKEY_SYSMAN_USB_STATUS,
92                         _handle_usb_status_change, (void *)user_data);
93
94         vconf_notify_key_changed(VCONF_KEY_MOBILEAP_SYSPOPUP_RESPONSE,
95                         _handle_mobileap_syspopup_popup_response, (void *)user_data);
96
97         DBG("-\n");
98 }
99
100 static void __unset_callbacks(mh_appdata_t *ad)
101 {
102         DBG("+\n");
103
104         int ret;
105
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);
109
110         ret = tethering_unset_connection_state_changed_cb(ad->handle,
111                         TETHERING_TYPE_ALL);
112         if (ret != TETHERING_ERROR_NONE)
113                 ERR("tethering_unset_connection_state_changed_cb[0x%X]\n", ret);
114
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);
118
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);
122
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);
126
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);
130
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);
134
135         vconf_ignore_key_changed(VCONFKEY_SETAPPL_DEVICE_NAME_STR,
136                         _device_name_changed_cb);
137
138         vconf_ignore_key_changed(VCONFKEY_NETWORK_CELLULAR_STATE,
139                         _handle_network_cellular_state_changed_cb);
140
141         vconf_ignore_key_changed(VCONFKEY_SYSMAN_USB_STATUS, _handle_usb_status_change);
142
143         vconf_ignore_key_changed(VCONF_KEY_MOBILEAP_SYSPOPUP_RESPONSE,
144                         _handle_mobileap_syspopup_popup_response);
145
146         DBG("-\n");
147 }
148
149 static void *on_create(ui_gadget_h ug, enum ug_mode mode,
150                 app_control_h app_control, void *priv)
151 {
152         DBG("+\n");
153
154         if (!ug || !priv) {
155                 ERR("The param is NULL\n");
156                 return NULL;
157         }
158
159         if (mode != UG_MODE_FULLVIEW) {
160                 ERR("Only Fullview is supported\n");
161                 return NULL;
162         }
163
164         Evas_Object *layout;
165         Evas_Object *content;
166         mh_ugdata_t *ugd;
167         mh_appdata_t *ad;
168         int ret;
169
170         bindtextdomain(MH_TEXT_DOMAIN, MH_LOCALEDIR);
171         dgettext(PACKAGE, LOCALEDIR);
172
173         ad = (mh_appdata_t *)malloc(sizeof(mh_appdata_t));
174         if (ad == NULL) {
175                 ERR("Error!!! failed to allocate memory()\n");
176                 return NULL;
177         }
178         memset(ad, 0x0, sizeof(mh_appdata_t));
179
180         ugd = (mh_ugdata_t *)priv;
181         ugd->ad = ad;
182         ugd->ug = ug;
183         ad->gadget = ugd;
184
185         ecore_imf_init();
186
187         ret = tethering_create(&ad->handle);
188 #ifndef TIZEN_FEATURE_EMULATOR
189         if (ret != TETHERING_ERROR_NONE) {
190                 ERR("tethering_create is failed : %d\n", ret);
191                 free(ad);
192                 ugd->ad = NULL;
193                 return NULL;
194         }
195 #endif
196
197         ad->win = ug_get_parent_layout(ug);
198         if (!ad->win) {
199                 ERR("ad->win is NULL\n");
200                 free(ad);
201                 ugd->ad = NULL;
202                 return NULL;
203         }
204
205         /* set rotation */
206         if (elm_win_wm_rotation_supported_get(ad->win)) {
207                 int rots[4] = {0, 90, 180, 270};
208                 elm_win_wm_rotation_available_rotations_set(ad->win, (const int *)(&rots), 4);
209         }
210
211         layout = _create_win_layout(ad);
212         if (layout == NULL) {
213                 ERR("_create_win_layout is failed\n");
214                 free(ad);
215                 ugd->ad = NULL;
216                 return NULL;
217         }
218
219         content = create_content(ad);
220         if (content == NULL) {
221                 ERR("create_content is failed\n");
222                 free(ad);
223                 ugd->ad = NULL;
224                 return NULL;
225         }
226
227         elm_object_part_content_set(layout, "elm.swallow.content", content);
228         evas_object_show(layout);
229         ret = connection_create(&ad->conn_handle);
230         if (ret != CONNECTION_ERROR_NONE)
231                 ERR("connection_create() is failed : %d\n", ret);
232
233         ret = wifi_manager_initialize(&ad->wifi_handle);
234         if (ret != WIFI_MANAGER_ERROR_NONE)
235                 ERR("wifi_manager_initialize() is failed : %d\n", ret);
236
237         __set_callbacks(ad, (void *)ad);
238
239         DBG("-\n");
240         return layout;
241 }
242
243 static void on_start(ui_gadget_h ug, app_control_h app_control, void *priv)
244 {
245         DBG("+\n");
246
247         char * viewtype = NULL;
248
249         mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
250         mh_appdata_t *ad = ugd->ad;
251
252         ad->is_foreground = true;
253
254         if (_get_list_clients_count(ad) > 0) {
255 #ifdef TETHERING_DATA_USAGE_SUPPORT
256                 _start_update_data_packet_usage(ad);
257 #endif
258                 if (ad->navi_item)
259                         _start_update_device_conn_time(ad);
260         }
261
262         app_control_get_extra_data(app_control, "viewtype", &viewtype);
263
264         if (viewtype != NULL) {
265                 if (strcmp(viewtype, "wifisettings") == 0)
266                         mh_draw_wifi_setup_view(ad);
267                 g_free(viewtype);
268         }
269
270         DBG("-\n");
271         return;
272 }
273
274 static void on_pause(ui_gadget_h ug, app_control_h app_control, void *priv)
275 {
276         DBG("+\n");
277
278         mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
279         mh_appdata_t *ad = ugd->ad;
280
281 #ifdef TETHERING_DATA_USAGE_SUPPORT
282         _stop_update_data_packet_usage(ad);
283 #endif
284         _stop_update_device_conn_time(ad);
285         ad->is_foreground = false;
286
287         DBG("-\n");
288 }
289
290 static void on_resume(ui_gadget_h ug, app_control_h app_control, void *priv)
291 {
292         DBG("+\n");
293
294         mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
295         mh_appdata_t *ad = ugd->ad;
296         Elm_Object_Item *item = ad->main.device_item;
297         GSList *l = NULL;
298
299         ad->is_foreground = true;
300
301         if (item && elm_genlist_item_expanded_get(item)) {
302                 for (l = ad->client_list; l != NULL; l = g_slist_next(l)) {
303                         item = elm_genlist_item_next_get(item);
304                         elm_genlist_item_fields_update(item, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
305                 }
306         }
307
308         if (_get_list_clients_count(ad) > 0) {
309 #ifdef TETHERING_DATA_USAGE_SUPPORT
310                 _start_update_data_packet_usage(ad);
311 #endif
312                 if (ad->navi_item)
313                         _start_update_device_conn_time(ad);
314         }
315         DBG("-\n");
316 }
317
318 static void on_destroy(ui_gadget_h ug, app_control_h app_control, void *priv)
319 {
320         DBG("+\n");
321
322         if (priv == NULL) {
323                 ERR("The param is NULL\n");
324                 return;
325         }
326
327         mh_ugdata_t *ugd = priv;
328         mh_appdata_t *ad = ugd->ad;
329         int ret = 0;
330
331         if (ad == NULL) {
332                 ERR("The param is NULL\n");
333                 return;
334         }
335
336         __unset_callbacks(ad->handle);
337
338 #ifdef TETHERING_DATA_USAGE_SUPPORT
339         _stop_update_data_packet_usage(ad);
340 #endif
341         _stop_update_device_conn_time(ad);
342
343         if (vconf_set_int(VCONF_MOBILE_AP_CONNECT_USB_POPUP_STATUS, 0) < 0)
344                 ERR("vconf_set_int is failed\n");
345
346         ret = wifi_manager_deinitialize(ad->wifi_handle);
347         if (ret != WIFI_MANAGER_ERROR_NONE)
348                 ERR("wifi_manager_deinitialize() is failed : %d\n", ret);
349
350         ret = connection_destroy(ad->conn_handle);
351         if (ret != CONNECTION_ERROR_NONE)
352                 ERR("connection_destroy() is failed : %d\n", ret);
353
354         ret = tethering_destroy(ad->handle);
355         if (ret != TETHERING_ERROR_NONE)
356                 ERR("tethering_destroy() is failed : %d\n", ret);
357
358         if (ad->layout == NULL) {
359                 ERR("ad->layout is NULL\n");
360                 free(ugd->ad);
361                 ugd->ad = NULL;
362                 return;
363         }
364
365         if (ad->popup) {
366                 evas_object_del(ad->popup);
367                 ad->popup = NULL;
368         }
369
370         if (ad->ps_recheck_timer_id > 0) {
371                 g_source_remove(ad->ps_recheck_timer_id);
372                 ad->ps_recheck_timer_id = 0;
373         }
374
375         evas_object_del(ad->bg);
376         ad->bg = NULL;
377
378         evas_object_del(ad->layout);
379         ad->layout = NULL;
380
381         _main_free_genlist_itc(ad);
382
383         ecore_imf_shutdown();
384
385         free(ugd->ad);
386         ugd->ad = NULL;
387
388         DBG("-\n");
389         return;
390 }
391
392 static void on_message(ui_gadget_h ug, app_control_h msg,
393                 app_control_h app_control, void *priv)
394 {
395 }
396
397 static void on_event(ui_gadget_h ug, enum ug_event event,
398                 app_control_h app_control, void *priv)
399 {
400         __MOBILE_AP_FUNC_ENTER__;
401
402         if (!ug || !priv) {
403                 ERR("The param is NULL\n");
404                 return;
405         }
406
407         switch (event) {
408         case UG_EVENT_LOW_MEMORY:
409                 break;
410         case UG_EVENT_LOW_BATTERY:
411                 break;
412         case UG_EVENT_LANG_CHANGE:
413                 break;
414         case UG_EVENT_ROTATE_PORTRAIT:
415         case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
416                 DBG("UG_EVENT_ROTATE_PORTRAIT[_UPSIDEDOWN]\n");
417                 break;
418         case UG_EVENT_ROTATE_LANDSCAPE:
419         case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
420                 DBG("UG_EVENT_ROTATE_LANDSCAPE[_UPSIDEDOWN]\n");
421                 break;
422         default:
423                 break;
424         }
425
426         __MOBILE_AP_FUNC_EXIT__;
427 }
428
429 static void on_key_event(ui_gadget_h ug, enum ug_key_event event,
430                 app_control_h app_control, void *priv)
431 {
432         __MOBILE_AP_FUNC_ENTER__;
433
434         if (priv == NULL || ug == NULL) {
435                 ERR("The param is NULL\n");
436                 return;
437         }
438
439         mh_ugdata_t *ugd = (mh_ugdata_t *)priv;
440         mh_appdata_t *ad = ugd->ad;
441
442         if (ad == NULL) {
443                 ERR("ad is NULL\n");
444                 return;
445         }
446
447         switch (event) {
448         case UG_KEY_EVENT_END:
449                 DBG("UG_KEY_EVENT_END is received : %p\n", ad->popup);
450                 if (NULL == ad->popup)
451                         ug_destroy_me(ug);
452                 else
453                         _destroy_popup(ad);
454                 break;
455
456         default:
457                 break;
458         }
459
460         __MOBILE_AP_FUNC_EXIT__;
461 }
462
463 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
464 {
465         DBG("+\n");
466
467         if (!ops) {
468                 ERR("The param is NULL\n");
469                 return -1;
470         }
471
472         mh_ugdata_t *ugd;
473         ugd = calloc(1, sizeof(mh_ugdata_t));
474         if (!ugd) {
475                 ERR("Quit : calloc failed(ugd)\n");
476                 return -1;
477         }
478
479         ops->create = on_create;
480         ops->start = on_start;
481         ops->pause = on_pause;
482         ops->resume = on_resume;
483         ops->destroy = on_destroy;
484         ops->message = on_message;
485         ops->event = on_event;
486         ops->key_event = on_key_event;
487         ops->priv = ugd;
488         ops->opt = UG_OPT_INDICATOR_ENABLE;
489
490         return 0;
491 }
492
493 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
494 {
495         DBG("+\n");
496
497         if (!ops) {
498                 ERR("The param is NULL\n");
499                 return;
500         }
501
502         mh_ugdata_t *ugd = (mh_ugdata_t *)ops->priv;
503
504         if (ugd)
505                 free(ugd);
506 }
507
508 static void __mh_reset_vconf(tethering_h handle)
509 {
510         int ret = 0;
511
512         ret = vconf_set_int(VCONF_MOBILE_AP_WIFI_POPUP_CHECKBOX_STATUS, 0);
513         if (ret != 0)
514                 ERR("vconf_set_int failed\n");
515
516         ret = vconf_set_int(VCONF_MOBILE_AP_BT_POPUP_CHECKBOX_STATUS, 0);
517         if (ret != 0)
518                 ERR("vconf_set_int failed\n");
519
520         ret = vconf_set_int(VCONF_MOBILE_AP_USB_POPUP_CHECKBOX_STATUS, 0);
521         if (ret != 0)
522                 ERR("vconf_set_int failed\n");
523
524         ret = vconf_set_int(VCONF_MOBILE_AP_PREV_WIFI_STATUS, 0);
525         if (ret != 0)
526                 ERR("vconf_set_int failed\n");
527
528         ret = vconf_set_int(VCONF_MOBILE_AP_CONNECT_USB_POPUP_STATUS, 0);
529         if (ret != 0)
530                 ERR("vconf_set_int is failed\n");
531
532         ret = tethering_wifi_set_ssid_visibility(handle, true);
533         if (ret != TETHERING_ERROR_NONE)
534                 ERR("tethering_wifi_set_ssid_visibility failed\n");
535
536         ret = tethering_wifi_set_security_type(handle, TETHERING_WIFI_SECURITY_TYPE_WPA2_PSK);
537         if (ret != TETHERING_ERROR_NONE)
538                 ERR("tethering_wifi_set_security_type failed\n");
539
540         return;
541 }
542
543 UG_MODULE_API int setting_plugin_reset(app_control_h app_control, void *priv)
544 {
545         DBG("+\n");
546
547         int ret = -1;
548         tethering_h handle = NULL;
549
550         if (tethering_create(&handle) != TETHERING_ERROR_NONE) {
551                 ERR("tethering_create failed\n");
552                 return -1;
553         }
554
555         if (tethering_is_enabled(handle, TETHERING_TYPE_USB) ||
556                         tethering_is_enabled(handle, TETHERING_TYPE_WIFI) ||
557                         tethering_is_enabled(handle, TETHERING_TYPE_BT)) {
558                 ret = tethering_disable(handle, TETHERING_TYPE_ALL);
559                 if (ret != TETHERING_ERROR_NONE) {
560                         ERR("tethering_disable failed : %d\n", ret);
561                         tethering_destroy(handle);
562                         return -1;
563                 }
564
565         }
566
567         __mh_reset_vconf(handle);
568
569         tethering_destroy(handle);
570
571         return 0;
572 }