iotivity 0.9.0
[platform/upstream/iotivity.git] / service / notification-manager / SampleApp / tizen / sampleConsumer / src / oicapp-sampleConsumer.c
1 /*
2  * Copyright (c) 2014 Samsung Electronics, Inc.
3  * All rights reserved.
4  *
5  * This software is a confidential and proprietary information
6  * of Samsung Electronics, Inc. ("Confidential Information").  You
7  * shall not disclose such Confidential Information and shall use
8  * it only in accordance with the terms of the license agreement
9  * you entered into with Samsung Electronics.
10  */
11
12 #include <appcore-efl.h>
13 #include <Ecore_X.h>
14 #include <efl_assist.h>
15
16 #include "oicapp-sampleConsumer.h"
17 #include "oicapp-utils.h"
18
19 char* OICAPP_STR_URI = "Uri : ";
20 char* OICAPP_STR_HOST = "Host : ";
21
22 const char* const OICAPP_STR_CONSUMER = "Consumer";
23
24 void __gl_realized_cb(void *data , Evas_Object *obj , void *event_info)
25 {
26     Elm_Object_Item *item = event_info;
27     elm_object_item_signal_emit(item , "elm,state,normal" , "");
28 }
29
30 static Elm_Object_Item* oicapp_append_separator(Evas_Object *genlist , oicappData *ad)
31 {
32     Elm_Object_Item *item = NULL;
33
34     item = elm_genlist_item_append(genlist , &ad->itcSeperator , NULL , NULL ,
35             ELM_GENLIST_ITEM_NONE , NULL , NULL);
36     elm_genlist_item_select_mode_set(item , ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
37
38     return item;
39 }
40
41 static Elm_Object_Item* _gl_append_item(oicappData *ad , Elm_Genlist_Item_Class *itc ,
42         const char *title , Evas_Smart_Cb sel_func)
43 {
44     Elm_Object_Item *item;
45     oicappItemData *it_data;
46
47     it_data = calloc(1 , sizeof(oicappItemData));
48     it_data->title = title;
49     it_data->ad = ad;
50     item = elm_genlist_item_append(ad->genlist , itc , it_data , NULL , ELM_GENLIST_ITEM_NONE ,
51             sel_func , ad);
52
53     return item;
54 }
55
56 void _gl_update_item(oicappData *ad , const char *title , Elm_Object_Item *item)
57 {
58     oicappItemData *it_data;
59
60     it_data = calloc(1 , sizeof(oicappItemData));
61     it_data->title = title;
62     it_data->ad = ad;
63
64     elm_object_item_data_set(item , it_data);
65     elm_genlist_item_update(item);
66 }
67
68 static Elm_Object_Item* _gl_append_btn(oicappData *ad , Elm_Genlist_Item_Class *itc)
69 {
70
71     DBG("btn create!!");
72     Elm_Object_Item *item;
73
74     item = elm_genlist_item_append(ad->genlist , itc , ad , NULL , ELM_GENLIST_ITEM_NONE , NULL ,
75             NULL);
76
77     elm_genlist_item_select_mode_set(item , ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
78
79     return item;
80 }
81
82 static void consumerapp_append_contents(oicappData *ad)
83 {
84
85     Elm_Object_Item *item , *parent;
86
87     parent = _gl_append_item(ad , &ad->itcTitle , OICAPP_STR_CONSUMER , NULL);
88     elm_genlist_item_select_mode_set(parent , ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
89
90     item = _gl_append_item(ad , &ad->itcText , OICAPP_STR_URI , NULL);
91     ad->itemConsumerUri = item;
92
93     item = _gl_append_item(ad , &ad->itcText , OICAPP_STR_HOST , NULL);
94     ad->itemConsumerHost = item;
95
96     _gl_append_btn(ad , &ad->itcBtnFindResoruce);
97
98     item = _gl_append_item(ad , &ad->itcText , "" , NULL);
99     ad->itemConsumerTemp = item;
100
101     item = _gl_append_item(ad , &ad->itcText , "" , NULL);
102     ad->itemConsumerHumid = item;
103
104     _gl_append_btn(ad , &ad->itcBtnObserve);
105
106     oicapp_append_separator(ad->genlist , ad);
107
108 }
109
110 static Evas_Object* consumerapp_create_genlist(Evas_Object *parent)
111 {
112     Evas_Object *genlist;
113
114     genlist = elm_genlist_add(parent);
115     if(NULL == genlist)
116     {
117         ERR("elm_genlist_add() Fail");
118         return NULL;
119     }
120
121     elm_object_style_set(genlist , "dialogue");
122     evas_object_size_hint_weight_set(genlist , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND);
123     evas_object_show(genlist);
124
125     evas_object_smart_callback_add(genlist , "realized" , __gl_realized_cb , NULL);
126
127     return genlist;
128 }
129
130 static Eina_Bool _back_cb(void *data , Elm_Object_Item *item)
131 {
132     DBG("test _back_cb()");
133     oicappData *ad = data;
134
135     elm_genlist_item_update(ad->itemConsumer);
136     elm_genlist_item_update(ad->itemConsumerHost);
137     elm_genlist_item_update(ad->itemConsumerTemp);
138     elm_genlist_item_update(ad->itemConsumerHumid);
139     elm_genlist_item_update(ad->itemConsumerUri);
140
141     elm_object_item_disabled_set(ad->itemConsumer , EINA_FALSE);
142     elm_object_item_disabled_set(ad->itemConsumerHost , EINA_TRUE);
143     elm_object_item_disabled_set(ad->itemConsumerTemp , EINA_TRUE);
144     elm_object_item_disabled_set(ad->itemConsumerHumid , EINA_TRUE);
145     elm_object_item_disabled_set(ad->itemConsumerUri , EINA_TRUE);
146
147     elm_exit();
148
149     return EINA_FALSE;
150 }
151
152 static void _win_del(void *data , Evas_Object *obj , void *event)
153 {
154     DBG("test _win_del()");
155
156     elm_exit();
157 }
158
159 static Evas_Object* consumerapp_create_conform(Evas_Object *win)
160 {
161     Evas_Object *conform = NULL;
162     conform = elm_conformant_add(win);
163
164     evas_object_size_hint_weight_set(conform , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND);
165     elm_win_resize_object_add(win , conform);
166     evas_object_show(conform);
167
168     Evas_Object *bg_indicator = elm_bg_add(conform);
169     elm_object_style_set(bg_indicator , "indicator/headerbg");
170     elm_object_part_content_set(conform , "elm.swallow.indicator_bg" , bg_indicator);
171     evas_object_show(bg_indicator);
172
173     return conform;
174 }
175
176 static Evas_Object* consumerapp_create_win(const char *name)
177 {
178     Evas_Object *eo;
179     int w , h;
180
181     eo = elm_win_add(NULL , name , ELM_WIN_BASIC);
182     if(eo)
183     {
184         elm_win_title_set(eo , name);
185         elm_win_borderless_set(eo , EINA_TRUE);
186         evas_object_smart_callback_add(eo , "delete,request" , _win_del , NULL);
187         ecore_x_window_size_get(ecore_x_window_root_first_get() , &w , &h);
188         evas_object_resize(eo , w , h);
189         elm_win_indicator_mode_set(eo , ELM_WIN_INDICATOR_SHOW);
190         elm_win_indicator_opacity_set(eo , ELM_WIN_INDICATOR_OPAQUE);
191     }
192
193     evas_object_show(eo);
194
195     return eo;
196 }
197
198 static Evas_Object* consumerapp_create_bg(Evas_Object *parent)
199 {
200     Evas_Object *bg;
201
202     bg = elm_bg_add(parent);
203     evas_object_size_hint_weight_set(bg , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND);
204     elm_win_resize_object_add(parent , bg);
205     evas_object_show(bg);
206
207     return bg;
208 }
209
210 static Evas_Object* consumerapp_create_base_layout(Evas_Object *parent)
211 {
212     Evas_Object *base;
213
214     base = elm_layout_add(parent);
215     elm_layout_theme_set(base , "layout" , "application" , "default");
216     evas_object_size_hint_weight_set(base , EVAS_HINT_EXPAND , EVAS_HINT_EXPAND);
217     evas_object_show(base);
218
219     return base;
220 }
221
222 static void _btn_observe_clicked(void *data , Evas_Object *obj , void *event_info)
223 {
224     oicappData *ad = data;
225
226     startObserve(ad);
227 }
228
229 static void _btn_findResource_clicked(void *data , Evas_Object *obj , void *event_info)
230 {
231     oicappData *ad = data;
232
233     findResourceCandidate(ad);
234 }
235
236 static Evas_Object* _gl_btn_observe_content_get(void *data , Evas_Object *obj , const char *part)
237 {
238     Evas_Object *button;
239     oicappData *ad = data;
240
241     button = elm_button_add(obj);
242     elm_object_part_text_set(button , NULL , "Observe");
243     evas_object_propagate_events_set(button , EINA_FALSE);
244     evas_object_smart_callback_add(button , "clicked" , _btn_observe_clicked , ad);
245
246     return button;
247 }
248
249 static Evas_Object* _gl_btn_findResource_content_get(void *data , Evas_Object *obj ,
250         const char *part)
251 {
252     Evas_Object *button;
253     oicappData *ad = data;
254
255     button = elm_button_add(obj);
256     elm_object_part_text_set(button , NULL , "Find Resource");
257     evas_object_propagate_events_set(button , EINA_FALSE);
258     evas_object_smart_callback_add(button , "clicked" , _btn_findResource_clicked , ad);
259
260     return button;
261 }
262
263 static void _gl_item_del(void *data , Evas_Object *obj)
264 {
265     if(data != NULL)
266         free(data);
267 }
268
269 static char* _gl_text_get(void *data , Evas_Object *obj , const char *part)
270 {
271     oicappItemData *it_data = data;
272     return strdup(it_data->title);
273 }
274
275 static inline void oicapp_init_itcs(oicappData *ad)
276 {
277     ad->itcSeperator.item_style = "dialogue/separator";
278     ad->itcSeperator.func.text_get = NULL;
279     ad->itcSeperator.func.content_get = NULL;
280     ad->itcSeperator.func.state_get = NULL;
281     ad->itcSeperator.func.del = NULL;
282
283     ad->itcTitle.item_style = "dialogue/title";
284     ad->itcTitle.func.text_get = _gl_text_get;
285     ad->itcTitle.func.content_get = NULL;
286     ad->itcTitle.func.state_get = NULL;
287     ad->itcTitle.func.del = _gl_item_del;
288
289     ad->itcText.item_style = "dialogue/1text";
290     ad->itcText.func.text_get = _gl_text_get;
291     ad->itcText.func.content_get = NULL;
292     ad->itcText.func.state_get = NULL;
293     ad->itcText.func.del = _gl_item_del;
294
295     ad->itcBtnFindResoruce.item_style = "dialogue/1icon";
296     ad->itcBtnFindResoruce.func.text_get = NULL;
297     ad->itcBtnFindResoruce.func.content_get = _gl_btn_findResource_content_get;
298     ad->itcBtnFindResoruce.func.state_get = NULL;
299     ad->itcBtnFindResoruce.func.del = NULL;
300
301     ad->itcBtnObserve.item_style = "dialogue/1icon";
302     ad->itcBtnObserve.func.text_get = NULL;
303     ad->itcBtnObserve.func.content_get = _gl_btn_observe_content_get;
304     ad->itcBtnObserve.func.state_get = NULL;
305     ad->itcBtnObserve.func.del = NULL;
306
307 }
308
309 static int oicapp_create(void *data)
310 {
311     oicappData *ad = data;
312     Elm_Object_Item *it;
313
314     oicapp_init_itcs(ad);
315
316     /* create window */
317     ad->win = consumerapp_create_win(PACKAGE);
318     if(NULL == ad->win)
319         return -1;
320
321     ad->bg = consumerapp_create_bg(ad->win);
322     if(NULL == ad->bg)
323         return -1;
324
325     ad->conform = consumerapp_create_conform(ad->win);
326     if(NULL == ad->conform)
327         return -1;
328
329     /* create layout */
330     ad->base = consumerapp_create_base_layout(ad->conform);
331     if(NULL == ad->base)
332         return -1;
333     elm_object_content_set(ad->conform , ad->base);
334
335     ad->navi = elm_naviframe_add(ad->base);
336     elm_object_part_content_set(ad->base , "elm.swallow.content" , ad->navi);
337     ea_object_event_callback_add(ad->navi , EA_CALLBACK_BACK , ea_naviframe_back_cb , NULL);
338
339     ad->genlist = consumerapp_create_genlist(ad->navi);
340
341     it = elm_naviframe_item_push(ad->navi , "IoT Notification Sample App" , NULL , NULL ,
342             ad->genlist , NULL);
343     elm_naviframe_item_pop_cb_set(it , _back_cb , ad);
344
345     ad->ipAddr = oicapp_util_wifi();
346     if(NULL == ad->ipAddr)
347     {
348         ERR("wifi is not connected");
349         oicapp_fail_popup(ad , "Error" , "No WIFI connection" , 3);
350     }
351     else
352     {
353         INFO("IP Address = %s" , ad->ipAddr);
354     }
355
356     oicapp_client_start(ad);
357
358     consumerapp_append_contents(ad);
359
360     return 0;
361 }
362
363 static int oicapp_terminate(void *data)
364 {
365     DBG("test _terminate()!!");
366     oicappData *ad = data;
367
368     if(ad->win)
369     {
370         DBG("test_del evas object1");
371         evas_object_del(ad->win);
372         DBG("test_del evas object2");
373     }
374
375     free(ad->ipAddr);
376     return 0;
377
378 }
379
380 static int oicapp_pause(void *data)
381 {
382     DBG("test _pause()!!!!");
383     return 0;
384 }
385
386 static int oicapp_resume(void *data)
387 {
388     DBG("test_resume()");
389     return 0;
390 }
391
392 static int oicapp_reset(bundle *b , void *data)
393 {
394     return 0;
395 }
396
397 int main(int argc , char *argv[])
398 {
399     oicappData ad;
400     DBG("test_start()");
401     struct appcore_ops ops =
402     { .create = oicapp_create , .terminate = oicapp_terminate , .pause = oicapp_pause , .resume =
403             oicapp_resume , .reset = oicapp_reset , };
404
405     memset(&ad , 0x0 , sizeof(oicappData));
406     ops.data = &ad;
407
408     return appcore_efl_main(PACKAGE , &argc , &argv , &ops);
409 }