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.
25 #include <Elementary.h>
27 #include <ui-gadget-module.h>
28 #include <wifi-direct.h>
31 #include "wfd_ug_view.h"
32 #include "wfd_client.h"
34 static void _wfd_ug_act_popup_hotspot_ok_cb(void *data, Evas_Object *obj, void *event_info)
37 struct ug_data *ugd = (struct ug_data*) data;
39 // TODO: Turn off Hotspot
40 ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATED;
41 wfd_mobile_ap_off(ugd);
43 evas_object_del(ugd->act_popup);
44 ugd->act_popup = NULL;
48 static void _wfd_ug_act_popup_hotspot_cancel_cb(void *data, Evas_Object *obj, void *event_info)
51 struct ug_data *ugd = (struct ug_data*) data;
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);
57 evas_object_del(ugd->act_popup);
58 ugd->act_popup = NULL;
62 static void _wfd_ug_act_popup_wifi_ok_cb(void *data, Evas_Object *obj, void *event_info)
65 struct ug_data *ugd = (struct ug_data*) data;
67 // TODO: Turn off WiFi
68 ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATED;
71 evas_object_del(ugd->act_popup);
72 ugd->act_popup = NULL;
76 static void _wfd_ug_act_popup_wifi_cancel_cb(void *data, Evas_Object *obj, void *event_info)
79 struct ug_data *ugd = (struct ug_data*) data;
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);
85 evas_object_del(ugd->act_popup);
86 ugd->act_popup = NULL;
90 static void _wfd_ug_act_popup_disconnect_ok_cb(void *data, Evas_Object *obj, void *event_info)
94 char *mac_addr = NULL;
95 struct ug_data *ugd = (struct ug_data*) data;
98 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
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;
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);
116 evas_object_del(ugd->act_popup);
117 ugd->act_popup = NULL;
122 static void _wfd_ug_act_popup_disconnect_cancel_cb(void *data, Evas_Object *obj, void *event_info)
126 struct ug_data *ugd = (struct ug_data*) data;
128 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
132 evas_object_del(ugd->act_popup);
133 ugd->act_popup = NULL;
138 static void _wfd_ug_act_popup_disconnect_all_ok_cb(void *data, Evas_Object *obj, void *event_info)
142 struct ug_data *ugd = (struct ug_data*) data;
144 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
148 wfd_client_disconnect(NULL);
149 if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS) {
150 wfd_stop_multi_connect(ugd);
153 evas_object_del(ugd->act_popup);
154 ugd->act_popup = NULL;
159 static void _wfd_ug_act_popup_disconnect_all_cancel_cb(void *data, Evas_Object *obj, void *event_info)
163 struct ug_data *ugd = (struct ug_data*) data;
165 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
169 evas_object_del(ugd->act_popup);
170 ugd->act_popup = NULL;
175 static void _wfd_ug_act_popup_scan_again_ok_cb(void *data, Evas_Object *obj, void *event_info)
179 struct ug_data *ugd = (struct ug_data*) data;
181 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
185 if (ugd->conn_wfd_item != NULL) {
186 elm_object_item_del(ugd->conn_wfd_item);
187 ugd->conn_wfd_item = NULL;
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);
196 /* start discovery again */
197 wfd_client_start_discovery(ugd);
198 evas_object_del(ugd->act_popup);
199 ugd->act_popup = NULL;
204 static void _wfd_ug_act_popup_scan_again_cancel_cb(void *data, Evas_Object *obj, void *event_info)
208 struct ug_data *ugd = (struct ug_data*) data;
210 evas_object_del(ugd->act_popup);
211 ugd->act_popup = NULL;
216 void wfd_ug_act_popup(void *data, const char *message, int popup_type)
219 struct ug_data *ugd = (struct ug_data*) data;
220 Evas_Object *popup = NULL;
221 Evas_Object *btn1 = NULL, *btn2 = NULL;
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);
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");
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"));
237 elm_object_text_set(btn1, S_("IDS_COM_SK_OK"));
238 elm_object_text_set(btn2, S_("IDS_COM_SK_CANCEL"));
241 elm_object_part_content_set(popup, "button1", btn1);
242 elm_object_part_content_set(popup, "button2", btn2);
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);
263 evas_object_show(popup);
264 ugd->act_popup = popup;
268 void wfg_ug_act_popup_remove(void *data)
271 struct ug_data *ugd = (struct ug_data*) data;
275 evas_object_del(ugd->act_popup);
276 ugd->act_popup = NULL;
281 static void _wfd_ug_terminate_popup_cb(void *data, Evas_Object *obj, void *event_info)
284 struct ug_data *ugd = (struct ug_data*) data;
286 evas_object_del(ugd->warn_popup);
287 ugd->warn_popup = NULL;
289 wfd_ug_view_free_peers(ugd);
291 ug_destroy_me(ugd->ug);
295 static void _wfd_ug_warn_popup_cb(void *data, Evas_Object *obj, void *event_info)
298 struct ug_data *ugd = (struct ug_data*) data;
300 evas_object_del(ugd->warn_popup);
301 ugd->warn_popup = NULL;
306 void wfd_ug_warn_popup(void *data, const char *message, int popup_type)
309 struct ug_data *ugd = (struct ug_data*) data;
310 Evas_Object *popup = NULL;
311 Evas_Object *btn = NULL;
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);
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);
324 evas_object_smart_callback_add(btn, "clicked", _wfd_ug_warn_popup_cb, (void*) ugd);
326 evas_object_show(popup);
327 ugd->warn_popup = popup;
331 void wfg_ug_warn_popup_remove(void *data)
334 struct ug_data *ugd = (struct ug_data*) data;
338 evas_object_del(ugd->warn_popup);
339 ugd->warn_popup = NULL;
345 void wfd_ug_tickernoti_popup(char *msg)
354 DBG(LOG_ERROR, "FAIL: bundle_create()\n");
358 /* tickernoti style */
359 ret = bundle_add(b, "0", "info");
361 DBG(LOG_ERROR, "Fail to add tickernoti style\n");
367 ret = bundle_add(b, "1", msg);
369 DBG(LOG_ERROR, "Fail to add popup text\n");
374 /* orientation of tickernoti */
375 ret = bundle_add(b, "2", "1");
377 DBG(LOG_ERROR, "Fail to add orientation of tickernoti\n");
382 /* timeout(second) of tickernoti */
383 ret = bundle_add(b, "3", "3");
385 DBG(LOG_ERROR, "Fail to add timeout of tickernoti\n");
390 /* launch tickernoti */
391 ret = syspopup_launch(TICKERNOTI_SYSPOPUP, b);
393 DBG(LOG_ERROR, "Fail to launch syspopup\n");