tizen 2.0beta
[apps/native/ug-wifi-direct.git] / ug-wifidirect / src / wfd_ug_popup.c
1 /*
2 *  WiFi-Direct UG
3 *
4 * Copyright 2012  Samsung Electronics Co., Ltd
5
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
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 #include <libintl.h>
21
22 #include <assert.h>
23 #include <glib.h>
24
25 #include <Elementary.h>
26 #include <vconf.h>
27 #include <ui-gadget-module.h>
28 #include <wifi-direct.h>
29
30 #include "wfd_ug.h"
31 #include "wfd_ug_view.h"
32 #include "wfd_client.h"
33
34 static void _wfd_ug_act_popup_hotspot_ok_cb(void *data, Evas_Object *obj, void *event_info)
35 {
36     __FUNC_ENTER__;
37     struct ug_data *ugd = (struct ug_data*) data;
38
39     // TODO: Turn off Hotspot
40     ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATED;
41     wfd_mobile_ap_off(ugd);
42
43      evas_object_del(ugd->act_popup);
44      ugd->act_popup = NULL;
45      __FUNC_EXIT__;
46 }
47
48 static void _wfd_ug_act_popup_hotspot_cancel_cb(void *data, Evas_Object *obj, void *event_info)
49 {
50     __FUNC_ENTER__;
51     struct ug_data *ugd = (struct ug_data*) data;
52
53     // TODO: set genlist head item as "WiFi Direct"
54     ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
55     wfd_ug_view_refresh_glitem(ugd->head);
56
57      evas_object_del(ugd->act_popup);
58      ugd->act_popup = NULL;
59      __FUNC_EXIT__;
60 }
61
62 static void _wfd_ug_act_popup_wifi_ok_cb(void *data, Evas_Object *obj, void *event_info)
63 {
64     __FUNC_ENTER__;
65     struct ug_data *ugd = (struct ug_data*) data;
66
67     // TODO: Turn off WiFi
68     ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATED;
69     wfd_wifi_off(ugd);
70
71      evas_object_del(ugd->act_popup);
72      ugd->act_popup = NULL;
73     __FUNC_EXIT__;
74 }
75
76 static void _wfd_ug_act_popup_wifi_cancel_cb(void *data, Evas_Object *obj, void *event_info)
77 {
78     __FUNC_ENTER__;
79     struct ug_data *ugd = (struct ug_data*) data;
80
81     // TODO: set genlist head item as "WiFi Direct"
82     ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
83     wfd_ug_view_refresh_glitem(ugd->head);
84
85      evas_object_del(ugd->act_popup);
86      ugd->act_popup = NULL;
87     __FUNC_EXIT__;
88 }
89
90 static void _wfd_ug_act_popup_disconnect_ok_cb(void *data, Evas_Object *obj, void *event_info)
91 {
92         __FUNC_ENTER__;
93
94         char *mac_addr = NULL;
95         struct ug_data *ugd = (struct ug_data*) data;
96
97         if (NULL == ugd) {
98                 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
99                 return;
100         }
101
102         if (ugd->gl_connected_peer_cnt < 1) {
103                 DBG(LOG_ERROR, "No connected peer\n");
104                 evas_object_del(ugd->act_popup);
105                 ugd->act_popup = NULL;
106                 return;
107         }
108
109         /* just one peer */
110         mac_addr = ugd->gl_connected_peers[0].mac_addr;
111         wfd_client_disconnect(mac_addr);
112         if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS) {
113                 wfd_stop_multi_connect(ugd);
114         }
115
116         evas_object_del(ugd->act_popup);
117         ugd->act_popup = NULL;
118
119         __FUNC_EXIT__;
120 }
121
122 static void _wfd_ug_act_popup_disconnect_cancel_cb(void *data, Evas_Object *obj, void *event_info)
123 {
124         __FUNC_ENTER__;
125
126         struct ug_data *ugd = (struct ug_data*) data;
127         if (NULL == ugd) {
128                 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
129                 return;
130         }
131
132         evas_object_del(ugd->act_popup);
133         ugd->act_popup = NULL;
134
135         __FUNC_EXIT__;
136 }
137
138 static void _wfd_ug_act_popup_disconnect_all_ok_cb(void *data, Evas_Object *obj, void *event_info)
139 {
140         __FUNC_ENTER__;
141
142         struct ug_data *ugd = (struct ug_data*) data;
143         if (NULL == ugd) {
144                 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
145                 return;
146         }
147
148         wfd_client_disconnect(NULL);
149         if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS) {
150                 wfd_stop_multi_connect(ugd);
151         }
152
153         evas_object_del(ugd->act_popup);
154         ugd->act_popup = NULL;
155
156         __FUNC_EXIT__;
157 }
158
159 static void _wfd_ug_act_popup_disconnect_all_cancel_cb(void *data, Evas_Object *obj, void *event_info)
160 {
161         __FUNC_ENTER__;
162
163         struct ug_data *ugd = (struct ug_data*) data;
164         if (NULL == ugd) {
165                 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
166                 return;
167         }
168
169         evas_object_del(ugd->act_popup);
170         ugd->act_popup = NULL;
171
172         __FUNC_EXIT__;
173 }
174
175 static void _wfd_ug_act_popup_scan_again_ok_cb(void *data, Evas_Object *obj, void *event_info)
176 {
177         __FUNC_ENTER__;
178
179         struct ug_data *ugd = (struct ug_data*) data;
180         if (NULL == ugd) {
181                 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
182                 return;
183         }
184
185         if (ugd->conn_wfd_item != NULL) {
186                 elm_object_item_del(ugd->conn_wfd_item);
187                 ugd->conn_wfd_item = NULL;
188         }
189
190         /* cancel the current connection */
191         wfd_client_disconnect(NULL);
192         if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS) {
193                 wfd_stop_multi_connect(ugd);
194         }
195
196         /* start discovery again */
197         wfd_client_start_discovery(ugd);
198         evas_object_del(ugd->act_popup);
199         ugd->act_popup = NULL;
200
201         __FUNC_EXIT__;
202 }
203
204 static void _wfd_ug_act_popup_scan_again_cancel_cb(void *data, Evas_Object *obj, void *event_info)
205 {
206         __FUNC_ENTER__;
207
208         struct ug_data *ugd = (struct ug_data*) data;
209
210         evas_object_del(ugd->act_popup);
211         ugd->act_popup = NULL;
212
213         __FUNC_EXIT__;
214 }
215
216 void wfd_ug_act_popup(void *data, const char *message, int popup_type)
217 {
218         __FUNC_ENTER__;
219         struct ug_data *ugd = (struct ug_data*) data;
220         Evas_Object *popup = NULL;
221         Evas_Object *btn1 = NULL, *btn2 = NULL;
222
223         popup = elm_popup_add(ugd->base);
224         evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
225         elm_object_text_set(popup, message);
226
227         btn1 = elm_button_add(popup);
228         btn2 = elm_button_add(popup);
229         elm_object_style_set(btn1, "popup_button/default");
230         elm_object_style_set(btn2, "popup_button/default");
231
232         /* set the different text by type */
233         if (popup_type == POPUP_TYPE_WIFI_OFF || popup_type == POPUP_TYPE_HOTSPOT_OFF) {
234                 elm_object_text_set(btn1, S_("IDS_COM_SK_YES"));
235                 elm_object_text_set(btn2, S_("IDS_COM_SK_NO"));
236         } else {
237                 elm_object_text_set(btn1, S_("IDS_COM_SK_OK"));
238                 elm_object_text_set(btn2, S_("IDS_COM_SK_CANCEL"));
239         }
240
241         elm_object_part_content_set(popup, "button1", btn1);
242         elm_object_part_content_set(popup, "button2", btn2);
243
244         /* set the different callback by type */
245         if (popup_type == POPUP_TYPE_WIFI_OFF) {
246                 evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_wifi_ok_cb, (void*) ugd);
247                 evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_wifi_cancel_cb, (void*) ugd);
248         } else if (popup_type == POPUP_TYPE_HOTSPOT_OFF) {
249                 evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_hotspot_ok_cb, (void*) ugd);
250                 evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_hotspot_cancel_cb, (void*) ugd);
251         } else if (popup_type == POP_TYPE_DISCONNECT) {
252                 //evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_disconnect_ok_cb, (void*) ugd);
253                 evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_disconnect_all_ok_cb, (void*) ugd);
254                 evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_disconnect_cancel_cb, (void*) ugd);
255         } else if (popup_type == POP_TYPE_DISCONNECT_ALL) {
256                 evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_disconnect_all_ok_cb, (void*) ugd);
257                 evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_disconnect_all_cancel_cb, (void*) ugd);
258         } else if (popup_type == POP_TYPE_SCAN_AGAIN) {
259                 evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_scan_again_ok_cb, (void*) ugd);
260                 evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_scan_again_cancel_cb, (void*) ugd);
261         }
262
263         evas_object_show(popup);
264         ugd->act_popup = popup;
265         __FUNC_EXIT__;
266 }
267
268 void wfg_ug_act_popup_remove(void *data)
269 {
270     __FUNC_ENTER__;
271     struct ug_data *ugd = (struct ug_data*) data;
272
273     if(ugd->act_popup)
274     {
275         evas_object_del(ugd->act_popup);
276         ugd->act_popup = NULL;
277     }
278     __FUNC_EXIT__;
279 }
280
281 static void _wfd_ug_terminate_popup_cb(void *data, Evas_Object *obj, void *event_info)
282 {
283     __FUNC_ENTER__;
284     struct ug_data *ugd = (struct ug_data*) data;
285
286     evas_object_del(ugd->warn_popup);
287     ugd->warn_popup = NULL;
288
289     wfd_ug_view_free_peers(ugd);
290
291     ug_destroy_me(ugd->ug);
292     __FUNC_EXIT__;
293 }
294
295 static void _wfd_ug_warn_popup_cb(void *data, Evas_Object *obj, void *event_info)
296 {
297     __FUNC_ENTER__;
298     struct ug_data *ugd = (struct ug_data*) data;
299
300     evas_object_del(ugd->warn_popup);
301     ugd->warn_popup = NULL;
302
303     __FUNC_EXIT__;
304 }
305
306 void wfd_ug_warn_popup(void *data, const char *message, int popup_type)
307 {
308     __FUNC_ENTER__;
309     struct ug_data *ugd = (struct ug_data*) data;
310     Evas_Object *popup = NULL;
311     Evas_Object *btn = NULL;
312
313     popup = elm_popup_add(ugd->base);
314     evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
315     elm_object_text_set(popup, message);
316
317     btn = elm_button_add(popup);
318     elm_object_style_set(btn, "popup_button/default");
319     elm_object_text_set(btn, S_("IDS_COM_SK_OK"));
320     elm_object_part_content_set(popup, "button1", btn);
321     if(popup_type == POPUP_TYPE_TERMINATE)
322         evas_object_smart_callback_add(btn, "clicked", _wfd_ug_terminate_popup_cb, (void*) ugd);
323     else
324         evas_object_smart_callback_add(btn, "clicked", _wfd_ug_warn_popup_cb, (void*) ugd);
325
326     evas_object_show(popup);
327     ugd->warn_popup = popup;
328     __FUNC_EXIT__;
329 }
330
331 void wfg_ug_warn_popup_remove(void *data)
332 {
333     __FUNC_ENTER__;
334     struct ug_data *ugd = (struct ug_data*) data;
335
336     if(ugd->warn_popup)
337     {
338         evas_object_del(ugd->warn_popup);
339         ugd->warn_popup = NULL;
340     }
341     __FUNC_EXIT__;
342 }
343
344
345 void wfd_ug_tickernoti_popup(char *msg)
346 {
347         __FUNC_ENTER__;
348
349         int ret = -1;
350         bundle *b = NULL;
351
352         b = bundle_create();
353         if (!b) {
354                 DBG(LOG_ERROR, "FAIL: bundle_create()\n");
355                 return;
356         }
357
358         /* tickernoti style */
359         ret = bundle_add(b, "0", "info");
360         if (ret) {
361                 DBG(LOG_ERROR, "Fail to add tickernoti style\n");
362                 bundle_free(b);
363                 return;
364         }
365
366         /* popup text */
367         ret = bundle_add(b, "1", msg);
368         if (ret) {
369                 DBG(LOG_ERROR, "Fail to add popup text\n");
370                 bundle_free(b);
371                 return;
372         }
373
374         /* orientation of tickernoti */
375         ret = bundle_add(b, "2", "1");
376         if (ret) {
377                 DBG(LOG_ERROR, "Fail to add orientation of tickernoti\n");
378                 bundle_free(b);
379                 return;
380         }
381
382         /* timeout(second) of tickernoti */
383         ret = bundle_add(b, "3", "3");
384         if (ret) {
385                 DBG(LOG_ERROR, "Fail to add timeout of tickernoti\n");
386                 bundle_free(b);
387                 return;
388         }
389
390         /* launch tickernoti */
391         ret = syspopup_launch(TICKERNOTI_SYSPOPUP, b);
392         if (ret) {
393                 DBG(LOG_ERROR, "Fail to launch syspopup\n");
394         }
395
396         bundle_free(b);
397         __FUNC_EXIT__;
398 }
399