0810 version
[apps/native/sample/adventure.git] / src / main_view.c
1 #include <Elementary.h>
2 #include <time.h>
3 #include <app_control.h>
4
5 #include "main.h"
6 #include "main_view.h"
7 #include "log.h"
8 #include "scroller.h"
9 #include "city.h"
10 #include "util.h"
11 #include "item.h"
12 #include "conf.h"
13 #include "group_info.h"
14 #include "db.h"
15 #include "map.h"
16
17 const char *const MAIN_VIEW_EDJE = "momentic.edj";
18 const char *const ENTRY_EDJE = "entry.edj";
19 const char *const PREDICT_ITEM_EDJE = "predict_item.edj";
20
21 static void _append_item_to_searchlist(Evas_Object *searchlist, Evas_Object *item)
22 {
23         Evas_Object *box = NULL;
24
25         ret_if(!searchlist);
26         ret_if(!item);
27
28         box = elm_object_content_get(searchlist);
29         ret_if(!box);
30
31         elm_box_pack_end(box, item);
32 }
33
34 static void _remove_item_in_searchlist(Evas_Object *searchlist, Evas_Object *item)
35 {
36         Evas_Object *box = NULL;
37
38         ret_if(!searchlist);
39         ret_if(!item);
40
41         box = elm_object_content_get(searchlist);
42         ret_if(!box);
43
44         elm_box_unpack(box, item);
45 }
46
47 static void _clean_searchlist(Evas_Object *searchlist)
48 {
49         Evas_Object *box = NULL;
50         Evas_Object *predict_item = NULL;
51         Eina_List *list = NULL;
52
53         ret_if(!searchlist);
54
55         box = elm_object_content_get(searchlist);
56         ret_if(!box);
57
58         list = elm_box_children_get(box);
59         ret_if(!list);
60
61         EINA_LIST_FREE(list, predict_item) {
62                 item_destroy_typing(predict_item);
63         }
64 }
65
66 static void _update_searchlist(Evas_Object *searchlist, const char *str, main_view_s *main_view_info)
67 {
68         city_s *city_info = NULL;
69         register int i = 0;
70
71         ret_if(!searchlist);
72
73         _clean_searchlist(searchlist);
74
75         city_info = city_get();
76         ret_if(!city_info);
77
78         for (; i < CITY_MAX; i++) {
79                 int matched = 0;
80                 if (city_info[i].name && strstr(city_info[i].name, str))
81                         matched = 1;
82                 else if (city_info[i].nation && strstr(city_info[i].nation, str))
83                         matched = 1;
84
85                 if (matched) {
86                         Evas_Object *predict_item = NULL;
87                         predict_item = item_create_typing(searchlist, i, main_view_info);
88                         if (predict_item)
89                                 _append_item_to_searchlist(searchlist, predict_item);
90                 }
91         }
92         elm_object_signal_emit(main_view_info->main_view, "show", "entry_result");
93 }
94
95 static void _change_entry_cb(void *data, Evas_Object *obj, void *event_info)
96 {
97         main_view_s *main_view_info = data;
98         Evas_Object *entry = obj;
99         const char *str = NULL;
100
101         ret_if(!main_view_info);
102
103         _D("Entry is changed");
104
105         str = elm_entry_entry_get(entry);
106         if (!str
107                 || (str && !strlen(str))) {
108                 _clean_searchlist(main_view_info->searchlist);
109                 elm_object_signal_emit(main_view_info->main_view, "momentic,state,searchlist,hide", "");
110                 return;
111         }
112
113         _update_searchlist(main_view_info->searchlist, str, main_view_info);
114         elm_object_signal_emit(main_view_info->main_view, "momentic,state,searchlist,show", "");
115 }
116
117 static void _focus_entry_cb(void *data, Evas_Object *obj, void *event_info)
118 {
119         main_view_s *main_view_info = data;
120         Evas_Object *entry = obj;
121         const char *str = NULL;
122
123         ret_if(!main_view_info);
124
125         _D("Entry is focused");
126
127         str = elm_entry_entry_get(entry);
128         if (!str)
129                 return;
130
131         _update_searchlist(main_view_info->searchlist, str, main_view_info);
132 }
133
134 static void _unfocus_entry_cb(void *data, Evas_Object *obj, void *event_info)
135 {
136         main_view_s *main_view_info = data;
137
138         ret_if(!main_view_info);
139         ret_if(!main_view_info->searchlist);
140
141         _D("Entry is unfocused");
142
143         elm_object_signal_emit(main_view_info->main_view, "hide", "entry_result");
144         //_clean_searchlist(main_view_info->searchlist);
145 }
146
147 static void _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
148 {
149         int x, y, w, h;
150         evas_object_geometry_get(obj, &x, &y, &w, &h);
151         _D("%s (%d:%d:%d:%d)", data, x, y, w, h);
152 }
153
154 static void _delete_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
155 {
156         _D("Delete button is down");
157 }
158
159 static void _delete_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
160 {
161         Evas_Object *searchbar = obj;
162         Evas_Object *entry_obj = NULL;
163         main_view_s *main_view_info = data;
164
165         ret_if(!searchbar);
166         ret_if(!main_view_info);
167         ret_if(!main_view_info->searchlist);
168
169         _D("Delete button is up");
170
171         entry_obj = elm_object_part_content_get(searchbar, "entry");
172         if (entry_obj)
173                 elm_entry_entry_set(entry_obj, "");
174
175         _clean_searchlist(main_view_info->searchlist);
176 }
177
178 static Evas_Object *_create_searchbar(Evas_Object *parent, main_view_s *main_view_info)
179 {
180         Evas_Object *searchbar = NULL;
181         Evas_Object *entry_obj = NULL;
182
183         char *path = NULL;
184         char full_path[PATH_LEN] = {0, };
185
186         retv_if(!parent, NULL);
187
188         path = app_get_resource_path();
189         retv_if(!path, NULL);
190
191         snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ENTRY_EDJE);
192         free(path);
193
194         searchbar = elm_layout_add(parent);
195         retv_if(!searchbar, NULL);
196
197         elm_layout_file_set(searchbar, full_path, "main");
198         elm_object_signal_callback_add(searchbar, "delete,down", "entry", _delete_down_cb, main_view_info);
199         elm_object_signal_callback_add(searchbar, "delete,up", "entry", _delete_up_cb, main_view_info);
200
201         evas_object_size_hint_weight_set(searchbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
202         evas_object_size_hint_align_set(searchbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
203         evas_object_show(searchbar);
204
205         entry_obj = elm_entry_add(parent);
206         retv_if(!entry_obj, NULL);
207
208         elm_entry_single_line_set(entry_obj, EINA_TRUE);
209         elm_entry_scrollable_set(entry_obj, EINA_TRUE);
210         elm_entry_cnp_mode_set(entry_obj, ELM_CNP_MODE_PLAINTEXT);
211         elm_entry_text_style_user_push(entry_obj, "DEFAULT='font_size=20'");
212         elm_object_part_text_set(entry_obj, "elm.guide", "<font_size=20>Search</font_size>");
213
214         evas_object_size_hint_weight_set(entry_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
215         evas_object_size_hint_align_set(entry_obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
216
217         evas_object_smart_callback_add(entry_obj, "changed", _change_entry_cb, main_view_info);
218         evas_object_smart_callback_add(entry_obj, "focused", _focus_entry_cb, main_view_info);
219         evas_object_smart_callback_add(entry_obj, "unfocused", _unfocus_entry_cb, main_view_info);
220
221         evas_object_show(entry_obj);
222         elm_object_part_content_set(searchbar, "entry", entry_obj);
223
224         return searchbar;
225 }
226
227 static void _destroy_searchbar(Evas_Object *searchbar)
228 {
229         Evas_Object *entry_obj = NULL;
230
231         ret_if(!searchbar);
232
233         entry_obj = elm_object_part_content_unset(searchbar, "entry");
234         if (entry_obj)
235                 evas_object_del(entry_obj);
236
237         evas_object_del(searchbar);
238 }
239
240 static void _click_next_btn_cb(void *data, Evas_Object *obj, void *event_info)
241 {
242         main_view_s *main_view_info = data;
243         Evas_Object *box = NULL;
244         Evas_Object *item = NULL;
245         Eina_List *list = NULL;
246         struct tm *global_time = NULL;
247         struct tm *local_time = NULL;
248         time_t t;
249         city_s *city_info = NULL;
250         int cur_timezone = 0;
251
252         ret_if(!main_view_info);
253         ret_if(!main_view_info->city_list);
254         ret_if(!main_view_info->result_list);
255
256         _D("result button is clicked");
257
258         scroller_clear_item(main_view_info->result_list);
259
260         city_info = city_get();
261         ret_if(!city_info);
262
263         time(&t);
264         global_time = gmtime(&t);
265         local_time = localtime(&t);
266
267         cur_timezone = (int) local_time->tm_gmtoff / 3600;
268
269         box = elm_object_content_get(main_view_info->city_list);
270         ret_if(!box);
271
272         list = elm_box_children_get(box);
273         ret_if(!list);
274
275         EINA_LIST_FREE(list, item) {
276                 selecting_info_s *selecting_info = NULL;
277                 Evas_Object *item_result = NULL;
278                 int start = 0, end = 0;
279                 int tmp_timezone = 0;
280
281                 selecting_info = evas_object_data_get(item, DATA_KEY_SELECTING);
282                 continue_if(!selecting_info);
283
284                 tmp_timezone = city_info[selecting_info->city].timezone;
285                 if (tmp_timezone < cur_timezone)
286                         tmp_timezone += 24;
287
288                 start = tmp_timezone - cur_timezone + BEST_START_TIME;
289                 end = (start + (BEST_END_TIME - BEST_START_TIME)) % 24;
290
291                 item_result = item_create_result(main_view_info->result_list
292                                 , selecting_info->city
293                                 , selecting_info->color
294                                 , start
295                                 , end
296                                 , global_time);
297
298                 scroller_append_item(main_view_info->result_list, item_result);
299         }
300
301         elm_object_signal_emit(main_view_info->main_view, "momentic,state,page2", "");
302 }
303
304 static Evas_Object *_create_next_btn(Evas_Object *parent, main_view_s *main_view_info)
305 {
306         Evas_Object *next_btn = NULL;
307         Evas_Object *icon = NULL;
308         char *path = NULL;
309         char full_path[PATH_LEN] = {0, };
310
311         retv_if(!parent, NULL);
312
313         path = app_get_resource_path();
314         retv_if(!path, NULL);
315
316         snprintf(full_path, sizeof(full_path), "%s/images/next_btn.png", path);
317         free(path);
318
319         next_btn = elm_button_add(parent);
320         retv_if(!next_btn, NULL);
321         elm_object_style_set(next_btn, "transparent");
322         evas_object_smart_callback_add(next_btn, "clicked", _click_next_btn_cb, main_view_info);
323
324         icon = elm_image_add(next_btn);
325         if (icon) {
326                 elm_image_file_set(icon, full_path, NULL);
327                 elm_object_content_set(next_btn, icon);
328         }
329
330         return next_btn;
331 }
332
333 static void _destroy_next_btn(Evas_Object *next_btn)
334 {
335         ret_if(!next_btn);
336         evas_object_del(next_btn);
337 }
338
339 static Evas_Object *_create_city_list(Evas_Object *parent)
340 {
341         Evas_Object *city_list = NULL;
342
343         retv_if(!parent, NULL);
344
345         city_list = scroller_create(parent);
346         retv_if(!city_list, NULL);
347
348         return city_list;
349 }
350
351 static void _destroy_city_list(Evas_Object *city_list)
352 {
353         Evas_Object *box = NULL;
354         Evas_Object *item = NULL;
355         Eina_List *list = NULL;
356
357         ret_if(!city_list);
358
359         box = elm_object_content_get(city_list);
360         ret_if(!box);
361
362         list = elm_box_children_get(box);
363         ret_if(!list);
364
365         EINA_LIST_FREE(list, item) {
366                 evas_object_del(item);
367         }
368
369         evas_object_del(box);
370         evas_object_del(city_list);
371 }
372
373 static void _click_add_btn_cb(void *data, Evas_Object *obj, void *event_info)
374 {
375         main_view_s *main_view_info = data;
376
377         _D("Add button is clicked");
378
379         ret_if(!main_view_info);
380         ret_if(!main_view_info->main_view);
381
382         elm_object_signal_emit(main_view_info->main_view, "momentic,state,page1", "");
383
384 }
385
386 static Evas_Object *_create_add_btn(Evas_Object *parent, main_view_s *main_view_info)
387 {
388         Evas_Object *add_btn = NULL;
389         Evas_Object *icon = NULL;
390         char *path = NULL;
391         char full_path[PATH_LEN] = {0, };
392
393         retv_if(!parent, NULL);
394
395         path = app_get_resource_path();
396         retv_if(!path, NULL);
397
398         snprintf(full_path, sizeof(full_path), "%s/images/add_btn.png", path);
399         free(path);
400
401         add_btn = elm_button_add(parent);
402         retv_if(!add_btn, NULL);
403         elm_object_style_set(add_btn, "transparent");
404         evas_object_smart_callback_add(add_btn, "clicked", _click_add_btn_cb, main_view_info);
405
406         icon = elm_image_add(add_btn);
407         if (icon) {
408                 elm_image_file_set(icon, full_path, NULL);
409                 elm_object_content_set(add_btn, icon);
410         }
411
412         return add_btn;
413 }
414
415 static void _destroy_add_btn(Evas_Object *add_btn)
416 {
417         ret_if(!add_btn);
418         evas_object_del(add_btn);
419 }
420
421 static void _click_save_button_cb(void *data, Evas_Object *obj, void *event_info)
422 {
423         main_view_s *main_view_info = data;
424         moment_info_s *moment_info = main_view_info->moment_info;
425         Evas_Object *box = NULL;
426         Evas_Object *item = NULL;
427         Eina_List *list = NULL;
428         group_info_s *group_info = NULL;
429         int city[MAXIMUM_SELECTED_CITY] = {0, };
430         int i = 0;
431         long time = 0l;
432
433         _D("Save button is clicked");
434
435         ret_if(!main_view_info);
436         ret_if(!main_view_info->result_list);
437
438         box = elm_object_content_get(main_view_info->result_list);
439         ret_if(!box);
440
441         list = elm_box_children_get(box);
442         ret_if(!list);
443
444         EINA_LIST_FREE(list, item) {
445                 result_info_s *result_info = NULL;
446
447                 result_info = evas_object_data_get(item, DATA_KEY_RESULT);
448                 continue_if(!result_info);
449
450                 city[i] = result_info->city;
451                 i++;
452         }
453
454         time = db_insert_group(moment_info->db
455                         , "Momentic time"
456                         , city[0] 
457                         , city[1]
458                         , city[2]
459                         , city[3]
460                         , city[4]);
461         group_info = group_info_create(time
462                         , "Momentic time"
463                         , city[0] 
464                         , city[1]
465                         , city[2]
466                         , city[3]
467                         , city[4]);
468         moment_info->group_list = eina_list_append(moment_info->group_list, group_info);
469 }
470
471 static Evas_Object *_create_save_button(Evas_Object *parent, moment_info_s *moment_info)
472 {
473         Evas_Object *save_button = NULL;
474
475         retv_if(!parent, NULL);
476
477         save_button = elm_button_add(parent);
478         retv_if(!save_button, NULL);
479
480         elm_object_text_set(save_button, "Save");
481         evas_object_size_hint_weight_set(save_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
482         evas_object_size_hint_align_set(save_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
483         evas_object_smart_callback_add(save_button, "clicked", _click_save_button_cb, moment_info);
484
485         return save_button;
486 }
487
488 static void _destroy_save_button(Evas_Object *save_button)
489 {
490         ret_if(!save_button);
491         evas_object_del(save_button);
492 }
493
494 static Evas_Object *_create_searchlist(Evas_Object *parent)
495 {
496         Evas_Object *searchlist = NULL;
497
498         retv_if(!parent, NULL);
499
500         searchlist = scroller_create(parent);
501         retv_if(!searchlist, NULL);
502
503         return searchlist;
504 }
505
506 static void _destroy_searchlist(Evas_Object *searchlist)
507 {
508         Evas_Object *box = NULL;
509         Evas_Object *item = NULL;
510         Eina_List *list = NULL;
511
512         ret_if(!searchlist);
513
514         box = elm_object_content_get(searchlist);
515         ret_if(!box);
516
517         list = elm_box_children_get(box);
518         ret_if(!list);
519
520         EINA_LIST_FREE(list, item) {
521                 evas_object_del(item);
522         }
523
524         evas_object_del(box);
525         evas_object_del(searchlist);
526 }
527
528 static Evas_Object *_create_result_list(Evas_Object *parent)
529 {
530         Evas_Object *result_list = NULL;
531
532         retv_if(!parent, NULL);
533
534         result_list = scroller_create(parent);
535         retv_if(!result_list, NULL);
536
537         return result_list;
538 }
539
540 static void _destroy_result_list(Evas_Object *result_list)
541 {
542         Evas_Object *box = NULL;
543         Evas_Object *item = NULL;
544         Eina_List *list = NULL;
545
546         ret_if(!result_list);
547
548         box = elm_object_content_get(result_list);
549         ret_if(!box);
550
551         list = elm_box_children_get(box);
552         ret_if(!list);
553
554         EINA_LIST_FREE(list, item) {
555                 evas_object_del(item);
556         }
557
558         evas_object_del(box);
559         evas_object_del(result_list);
560 }
561
562 static Evas_Object *_create_group_scroller(Evas_Object *parent, Eina_List *list, main_view_s *main_view_info)
563 {
564         Evas_Object *group_scroller = NULL;
565         group_info_s *group_info = NULL;
566         const Eina_List *l = NULL;
567
568         retv_if(!parent, NULL);
569
570         group_scroller = scroller_create(parent);
571         retv_if(!group_scroller, NULL);
572
573         EINA_LIST_FOREACH(list, l, group_info) {
574                 Evas_Object *item_group = item_create_group(group_scroller
575                                 , group_info->title
576                                 , main_view_info);
577                 scroller_append_item(group_scroller, item_group);
578         }
579
580         return group_scroller;
581 }
582
583 static void _destroy_group_scroller(Evas_Object *group_scroller)
584 {
585         Evas_Object *box = NULL;
586         Evas_Object *item = NULL;
587         Eina_List *list = NULL;
588
589         ret_if(!group_scroller);
590
591         box = elm_object_content_get(group_scroller);
592         ret_if(!box);
593
594         list = elm_box_children_get(box);
595         ret_if(!list);
596
597         EINA_LIST_FREE(list, item) {
598                 evas_object_del(item);
599         }
600
601         evas_object_del(box);
602         evas_object_del(group_scroller);
603 }
604
605 Evas_Object *main_view_create(Evas_Object *parent, moment_info_s *moment_info)
606 {
607         main_view_s *main_view_info = NULL;
608         char *path = NULL;
609         char full_path[PATH_LEN] = {0, };
610
611         retv_if(!parent, NULL);
612
613         path = app_get_resource_path();
614         retv_if(!path, NULL);
615
616         snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, MAIN_VIEW_EDJE);
617         free(path);
618
619         _D("main_view is created with %s", full_path);
620
621         main_view_info = calloc(1, sizeof(main_view_s));
622         retv_if(!main_view_info, NULL);
623         main_view_info->moment_info = moment_info;
624
625         main_view_info->main_view = create_momentic_layout(parent, full_path);
626         if (!main_view_info->main_view) {
627                 free(main_view_info);
628                 return NULL;
629         }
630
631         elm_layout_file_set(main_view_info->main_view, full_path, "main");
632         evas_object_size_hint_weight_set(main_view_info->main_view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
633         evas_object_size_hint_align_set(main_view_info->main_view, EVAS_HINT_FILL, EVAS_HINT_FILL);
634         evas_object_show(main_view_info->main_view);
635         evas_object_data_set(main_view_info->main_view, DATA_KEY_INFO, main_view_info);
636         evas_object_event_callback_add(main_view_info->main_view, EVAS_CALLBACK_RESIZE, _resize_cb, "main_view");
637
638         elm_object_part_text_set(main_view_info->main_view, "title", "No cities");
639         elm_object_part_text_set(main_view_info->main_view, "description", "After you add cities, they will be shown here.");
640
641         main_view_info->searchbar = _create_searchbar(main_view_info->main_view, main_view_info);
642         if (main_view_info->searchbar)
643                 elm_object_part_content_set(main_view_info->main_view, "searchbar", main_view_info->searchbar);
644
645         main_view_info->next_btn = _create_next_btn(main_view_info->main_view, main_view_info);
646         if (main_view_info->next_btn)
647                 elm_object_part_content_set(main_view_info->main_view, "next_btn", main_view_info->next_btn);
648
649         main_view_info->city_list = _create_city_list(main_view_info->main_view);
650         if (main_view_info->city_list)
651                 elm_object_part_content_set(main_view_info->main_view, "city_list", main_view_info->city_list);
652
653         main_view_info->add_btn = _create_add_btn(main_view_info->main_view, main_view_info);
654         if (main_view_info->add_btn)
655                 elm_object_part_content_set(main_view_info->main_view, "add_btn", main_view_info->add_btn);
656
657         main_view_info->searchlist = _create_searchlist(main_view_info->main_view);
658         if (main_view_info->searchlist)
659                 elm_object_part_content_set(main_view_info->main_view, "searchlist", main_view_info->searchlist);
660
661         main_view_info->result_list = _create_result_list(main_view_info->main_view);
662         if (main_view_info->result_list)
663                 elm_object_part_content_set(main_view_info->main_view, "result_list", main_view_info->result_list);
664
665         main_view_info->group_scroller = _create_group_scroller(main_view_info->main_view, moment_info->group_list, main_view_info);
666         if (main_view_info->group_scroller)
667                 evas_object_hide(main_view_info->group_scroller);
668                 //elm_object_part_content_set(main_view_info->main_view, "group_scroller", main_view_info->group_scroller);
669
670         return main_view_info->main_view;
671 }
672
673 void main_view_destroy(Evas_Object *main_view)
674 {
675         Evas_Object *button = NULL;
676         main_view_s *main_view_info = NULL;
677
678         ret_if(!main_view);
679
680         main_view_info = evas_object_data_del(main_view_info->main_view, DATA_KEY_INFO);
681         ret_if(!main_view_info);
682
683         if (main_view_info->group_scroller)
684                 _destroy_group_scroller(main_view_info->group_scroller);
685
686         if (main_view_info->result_list)
687                 _destroy_result_list(main_view_info->result_list);
688
689         if (main_view_info->searchlist)
690                 _destroy_searchlist(main_view_info->searchlist);
691
692         if (main_view_info->add_btn)
693                 _destroy_add_btn(main_view_info->add_btn);
694
695         if (main_view_info->city_list)
696                 _destroy_city_list(main_view_info->city_list);
697
698         if (main_view_info->next_btn)
699                 _destroy_next_btn(button);
700
701         if (main_view_info->searchbar)
702                 _destroy_searchbar(main_view_info->searchbar);
703
704         free(main_view_info);
705
706         evas_object_del(main_view);
707 }
708
709 static void _get_best_time(double *timezone, int size, double *start, double *end)
710 {
711         register int i = 1;
712
713         ret_if(!timezone);
714         ret_if(!start);
715         ret_if(!end);
716
717         *start = timezone[0];
718         *end = timezone[0] + BEST_DURING_TIME;
719
720         for (; i < size; i++) {
721                 double tmp = timezone[i];
722
723                 if (tmp < *start) {
724                         if (tmp + BEST_DURING_TIME <= *start) {
725                                 _D("No matched time");
726                                 *start = 0;
727                                 *end = 0;
728                                 return;
729                         } else {
730                                 *end = tmp + BEST_DURING_TIME;
731                         }
732                 } else if (tmp > *start) {
733                         if (tmp >= *end) {
734                                 _D("No matched time");
735                                 *start = 0;
736                                 *end = 0;
737                                 return;
738                         } else {
739                                 *start = tmp;
740                         }
741                 } else
742                         continue;
743         }
744 }
745
746 static void _reply_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
747 {
748         _D("Result callback is called");
749 }
750
751 static void _launch_calendar_edit(int start, int end)
752 {
753         app_control_h app_control = NULL;
754         time_t t;
755         struct tm *local_time = NULL;
756         int ret;
757
758         char start_str[PATH_LEN] = {0, };
759         char end_str[PATH_LEN] = {0, };
760
761         ret = app_control_create(&app_control);
762         ret_if(APP_CONTROL_ERROR_NONE != ret);
763
764         local_time = localtime(&t);
765
766         snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"
767                         , local_time->tm_year + 1900
768                         , local_time->tm_mon + 1
769                         , local_time->tm_mday
770                         , start
771                         , 0
772                         , 0);
773
774         snprintf(start_str, sizeof(start_str), "%4d-%2d-%2d %2d:%2d:%2d"
775                         , local_time->tm_year + 1900
776                         , local_time->tm_mon + 1
777                         , local_time->tm_mday
778                         , end
779                         , 0
780                         , 0);
781
782         app_control_set_app_id(app_control, "com.samsung.calendar-lite-edit");
783         app_control_set_operation(app_control, "http://tizen.org/appcontrol/operation/edit");
784         app_control_add_extra_data(app_control, "start_time", start_str);
785         app_control_add_extra_data(app_control, "end_time", end_str);
786
787         app_control_send_launch_request(app_control, _reply_cb, NULL);
788         app_control_destroy(app_control);
789 }
790
791
792