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.
21 * This file implements wifi direct application main functions.
23 * @file wfd-ug-app-main.c
24 * @author Dongwook Lee (dwmax.lee@samsung.com)
28 #include <ui-gadget-module.h>
31 #include "wfd-ugapp.h"
32 #include "wfd-ugapp-util.h"
35 wfd_appdata_t *g_wfd_ad = NULL;
36 static struct ug_cbs wifi_direct_cbs;
38 wfd_appdata_t *wfd_get_appdata()
43 void _ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
45 __WDUA_LOG_FUNC_ENTER__;
47 Evas_Object *base = NULL;
48 base = ug_get_layout(ug);
51 WDUA_LOGE("ug_get_layout failed!");
53 __WDUA_LOG_FUNC_EXIT__;
58 case UG_MODE_FULLVIEW:
59 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
60 elm_win_resize_object_add(ug_get_window(), base);
61 evas_object_show(base);
67 __WDUA_LOG_FUNC_EXIT__;
70 void _ug_destroy_cb(ui_gadget_h ug, void *priv)
72 __WDUA_LOG_FUNC_ENTER__;
74 // TODO: free all memory allocation
80 void ug_result_cb(ui_gadget_h ug, service_h service, void *priv)
82 __WDUA_LOG_FUNC_ENTER__;
84 // TODO: free all memory allocation
86 __WDUA_LOG_FUNC_EXIT__;
89 static int load_wifi_direct_ug(ui_gadget_h parent_ug, void *data)
91 __WDUA_LOG_FUNC_ENTER__;
92 wfd_appdata_t *ugd = (wfd_appdata_t *)data;
93 service_h handle = NULL;
95 UG_INIT_EFL(ugd->win, UG_OPT_INDICATOR_ENABLE);
97 memset(&wifi_direct_cbs, 0, sizeof(struct ug_cbs));
99 wifi_direct_cbs.layout_cb = _ug_layout_cb;
100 wifi_direct_cbs.result_cb = ug_result_cb;
101 wifi_direct_cbs.destroy_cb = _ug_destroy_cb;
102 wifi_direct_cbs.priv = ugd;
104 ugd->wifi_direct_ug = ug_create(parent_ug, "setting-wifidirect-efl", UG_MODE_FULLVIEW, handle, &wifi_direct_cbs);
105 if (ugd->wifi_direct_ug) {
106 __WDUA_LOG_FUNC_EXIT__;
109 __WDUA_LOG_FUNC_EXIT__;
113 __WDUA_LOG_FUNC_EXIT__;
117 static void _win_del(void *data, Evas_Object * obj, void *event)
122 static Evas_Object *_create_win(Evas_Object * parent, const char *name)
127 eo = elm_win_add(parent, name, ELM_WIN_BASIC);
129 elm_win_title_set(eo, name);
130 elm_win_alpha_set(eo, EINA_TRUE);
131 elm_win_conformant_set(eo, EINA_TRUE);
132 evas_object_smart_callback_add(eo, "delete,request", _win_del, NULL);
133 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
134 evas_object_resize(eo, w, h);
135 evas_object_show(eo);
141 static Evas_Object* _set_win_icon(wfd_appdata_t *ad)
143 __WDUA_LOG_FUNC_ENTER__;
145 Evas_Object *icon = evas_object_image_add(evas_object_evas_get(ad->win));
146 evas_object_image_file_set(icon, DESKTOP_ICON, NULL);
147 elm_win_icon_object_set(ad->win, icon);
149 __WDUA_LOG_FUNC_EXIT__;
153 static Evas_Object *_create_bg(Evas_Object *parent)
155 __WDUA_LOG_FUNC_ENTER__;
157 if (NULL == parent) {
158 WDUA_LOGE("Incorrect parameter\n");
162 Evas_Object *bg = elm_bg_add(parent);
164 WDUA_LOGE("Create background failed\n");
168 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
169 elm_win_resize_object_add(parent, bg);
170 evas_object_show(bg);
172 __WDUA_LOG_FUNC_EXIT__;
176 static Evas_Object *_create_layout_main(Evas_Object *parent)
178 __WDUA_LOG_FUNC_ENTER__;
180 if (NULL == parent) {
181 WDUA_LOGE("Incorrect parameter\n");
185 Evas_Object *layout = elm_layout_add(parent);
186 if (NULL == layout) {
187 WDUA_LOGE("Create layout failed\n");
191 const char *profile = elm_config_profile_get();
192 if (!strcmp(profile, "mobile")) {
193 elm_layout_theme_set(layout, "layout", "application", "default");
194 } else if (!strcmp(profile, "desktop")) {
195 elm_layout_theme_set(layout, "layout", "application", "noindicator");
198 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
199 elm_object_content_set(parent, layout);
200 evas_object_show(layout);
202 __WDUA_LOG_FUNC_EXIT__;
206 static void _win_profile_changed_cb(void *data, Evas_Object * obj, void *event_info)
208 __WDUA_LOG_FUNC_ENTER__;
211 WDUA_LOGE("Incorrect parameter\n");
215 wfd_appdata_t *ad = (wfd_appdata_t *)data;
216 const char *profile = elm_config_profile_get();
218 if (!strcmp(profile, "desktop")) { /* desktop mode */
219 /* hide layout's indicator area */
220 elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_HIDE);
222 /* set window icon */
224 ad->icon = _set_win_icon(ad);
227 else { /* mobile mode */
228 /* show layout's indicator area */
229 elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
232 __WDUA_LOG_FUNC_EXIT__;
235 static int _app_create(void *data)
237 __WDUA_LOG_FUNC_ENTER__;
238 wfd_appdata_t *ad = wfd_get_appdata();
241 WDUA_LOGE("Incorrect parameter\n");
245 bindtextdomain(PACKAGE, LOCALEDIR);
247 ad->win = _create_win(NULL, PACKAGE);
248 evas_object_smart_callback_add(ad->win, "profile,changed", _win_profile_changed_cb, ad);
250 /*Add conformat for indicator */
251 ad->bg = _create_bg(ad->win);
252 if (ad->bg == NULL) {
253 WDUA_LOGE("Failed to create background");
257 ad->conform = elm_conformant_add(ad->win);
258 if (ad->conform == NULL) {
259 WDUA_LOGE("Failed to create elm conformant");
263 elm_win_resize_object_add(ad->win, ad->conform);
264 evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
265 evas_object_show(ad->conform);
267 ad->top_layout = _create_layout_main(ad->conform);
268 if (ad->top_layout == NULL) {
269 WDUA_LOGE("Failed to create top layout");
273 elm_object_content_set(ad->conform, ad->top_layout);
277 if (!ecore_x_display_get()) {
281 r = appcore_set_i18n(PACKAGE, NULL);
283 WDUA_LOGE("appcore_set_i18n error\n");
287 __WDUA_LOG_FUNC_EXIT__;
291 static int _app_terminate(void *data)
293 __WDUA_LOG_FUNC_ENTER__;
296 WDUA_LOGE("Incorrect parameter\n");
300 wfd_appdata_t *ad = (wfd_appdata_t *) data;
303 evas_object_del(ad->win);
308 evas_object_del(ad->bg);
313 evas_object_del(ad->conform);
317 if (ad->top_layout) {
318 evas_object_del(ad->top_layout);
319 ad->top_layout = NULL;
323 evas_object_del(ad->icon);
327 __WDUA_LOG_FUNC_EXIT__;
331 static int _app_pause(void *data)
333 __WDUA_LOG_FUNC_ENTER__;
334 __WDUA_LOG_FUNC_EXIT__;
338 static int _app_resume(void *data)
340 __WDUA_LOG_FUNC_ENTER__;
341 __WDUA_LOG_FUNC_EXIT__;
345 static int _app_reset(bundle *b, void *data)
347 __WDUA_LOG_FUNC_ENTER__;
349 wfd_appdata_t *ad = wfd_get_appdata();
350 load_wifi_direct_ug(NULL, ad);
352 __WDUA_LOG_FUNC_EXIT__;
356 int main(int argc, char *argv[])
359 struct appcore_ops ops = {
360 .create = _app_create,
361 .terminate = _app_terminate,
363 .resume = _app_resume,
367 memset(&ad, 0x0, sizeof(wfd_appdata_t));
371 return appcore_efl_main(PACKAGE, &argc, &argv, &ops);