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.
22 #define UG_MODULE_API __attribute__ ((visibility("default")))
28 #include <sys/utsname.h>
30 #include <Elementary.h>
31 #include <ui-gadget-module.h>
32 #include <wifi-direct.h>
35 #include "wfd_ug_view.h"
36 #include "wfd_client.h"
38 void initialize_gen_item_class();
40 struct ug_data *global_ugd = NULL;
42 struct ug_data *wfd_get_ug_data()
48 static Evas_Object *_create_bg(Evas_Object *parent, char *style)
53 bg = elm_bg_add(parent);
54 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
55 elm_object_style_set(bg, style);
56 elm_win_resize_object_add(parent, bg);
63 static Evas_Object *_create_fullview(Evas_Object *parent, struct ug_data *ugd)
70 DBG(LOG_ERROR, "Incorrenct parameter");
74 /* Create Full view */
75 base = elm_layout_add(parent);
78 DBG(LOG_ERROR, "Failed to add layout");
82 elm_layout_theme_set(base, "layout", "application", "default");
83 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
84 evas_object_size_hint_align_set(base, EVAS_HINT_FILL, EVAS_HINT_FILL);
90 static Evas_Object *_create_frameview(Evas_Object *parent, struct ug_data *ugd)
97 DBG(LOG_ERROR, "Incorrenct parameter");
101 /* Create Frame view */
102 base = elm_layout_add(parent);
105 DBG(LOG_ERROR, "Failed to add layout");
109 elm_layout_theme_set(base, "layout", "application", "default");
110 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
111 evas_object_size_hint_align_set(base, EVAS_HINT_FILL, EVAS_HINT_FILL);
118 void destroy_wfd_ug_view(void *data)
122 struct ug_data *ugd = (struct ug_data*) data;
126 evas_object_del(ugd->genlist);
132 evas_object_del(ugd->naviframe);
133 ugd->naviframe = NULL;
139 static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service,
152 bindtextdomain(PACKAGE, LOCALEDIR);
154 ugd->win = ug_get_window();
158 if (mode == UG_MODE_FULLVIEW)
159 ugd->base = _create_fullview(ugd->win, ugd);
161 ugd->base = _create_frameview(ugd->win, ugd);
165 ugd->bg = _create_bg(ugd->win, "group_list");
166 elm_object_part_content_set(ugd->base, "elm.swallow.bg", ugd->bg);
170 DBG(LOG_ERROR, "Failed to create base layout\n");
174 wfd_get_vconf_status(ugd);
176 initialize_gen_item_class();
178 res = init_wfd_client(ugd);
181 DBG(LOG_ERROR, "Failed to initialize WFD client library\n");
182 wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_PROBLEM_WITH_WFD"), POPUP_TYPE_TERMINATE);
185 create_wfd_ug_view(ugd);
187 wfd_ug_view_refresh_glitem(ugd->head);
189 wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
192 if(ugd->wfd_status > WIFI_DIRECT_STATE_ACTIVATING)
194 wfd_ug_get_discovered_peers(ugd);
197 if(ugd->wfd_status >= WIFI_DIRECT_STATE_CONNECTED)
199 wfd_ug_get_connected_peers(ugd);
202 wfd_ug_view_update_peers(ugd);
204 if (ugd->wfd_status == WIFI_DIRECT_STATE_ACTIVATED)
206 res = wifi_direct_start_discovery(FALSE, 0);
207 if(res != WIFI_DIRECT_ERROR_NONE)
209 DBG(LOG_ERROR, "Failed to start discovery. [%d]\n", res);
211 DBG(LOG_VERBOSE, "Discovery is started\n");
214 evas_object_show(ugd->base);
220 static void on_start(ui_gadget_h ug, service_h service, void *priv)
231 struct utsname kernel_info;
232 res = uname(&kernel_info);
235 DBG(LOG_ERROR, "Failed to detect target type\n");
239 DBG(LOG_VERBOSE, "HW ID of this device [%s]\n", kernel_info.machine);
240 if(strncmp(kernel_info.machine, "arm", 3) != 0)
242 wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_NOT_SUPPORTED_DEVICE"), POPUP_TYPE_TERMINATE);
249 static void on_pause(ui_gadget_h ug, service_h service, void *priv)
255 static void on_resume(ui_gadget_h ug, service_h service, void *priv)
261 static void on_destroy(ui_gadget_h ug, service_h service, void *priv)
267 DBG(LOG_ERROR, "The param is NULL\n");
271 struct ug_data *ugd = priv;
272 if (ugd == NULL || ugd->base == NULL)
274 DBG(LOG_ERROR, "The param is NULL\n");
278 deinit_wfd_client(ugd);
279 DBG(LOG_VERBOSE, "WFD client deregistered");
281 destroy_wfd_ug_view(ugd);
282 DBG(LOG_VERBOSE, "Destroying About item");
284 wfd_ug_view_free_peers(ugd);
286 DBG(LOG_VERBOSE, "WFD client deregistered");
289 evas_object_del(ugd->bg);
292 DBG(LOG_VERBOSE, "WFD client deregistered");
296 evas_object_del(ugd->base);
304 static void on_message(ui_gadget_h ug, service_h msg, service_h service,
311 static void on_event(ui_gadget_h ug, enum ug_event event, service_h service,
318 DBG(LOG_ERROR, "The param is NULL\n");
324 case UG_EVENT_LOW_MEMORY:
325 DBG(LOG_VERBOSE, "UG_EVENT_LOW_MEMORY\n");
327 case UG_EVENT_LOW_BATTERY:
328 DBG(LOG_VERBOSE, "UG_EVENT_LOW_BATTERY\n");
330 case UG_EVENT_LANG_CHANGE:
331 DBG(LOG_VERBOSE, "UG_EVENT_LANG_CHANGE\n");
333 case UG_EVENT_ROTATE_PORTRAIT:
334 DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_PORTRAIT\n");
336 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
337 DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN\n");
339 case UG_EVENT_ROTATE_LANDSCAPE:
340 DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_LANDSCAPE\n");
342 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
343 DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN\n");
346 DBG(LOG_VERBOSE, "default\n");
353 static void on_key_event(ui_gadget_h ug, enum ug_key_event event,
354 service_h service, void *priv)
360 DBG(LOG_ERROR, "The param is NULL\n");
366 case UG_KEY_EVENT_END:
367 DBG(LOG_VERBOSE, "UG_KEY_EVENT_END\n");
376 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
383 DBG(LOG_ERROR, "The param is NULL\n");
387 ugd = calloc(1, sizeof(struct ug_data));
390 DBG(LOG_ERROR, "Failed to allocate memory for UG data\n");
396 ops->create = on_create;
397 ops->start = on_start;
398 ops->pause = on_pause;
399 ops->resume = on_resume;
400 ops->destroy = on_destroy;
401 ops->message = on_message;
402 ops->event = on_event;
403 ops->key_event = on_key_event;
405 ops->opt = UG_OPT_INDICATOR_ENABLE;
411 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
419 DBG(LOG_ERROR, "The param is NULL\n");