apply FSL(Flora Software License)
[apps/home/call.git] / ui / vcui-doc-launch.c
1 /*\r
2  * Copyright 2012  Samsung Electronics Co., Ltd\r
3  *\r
4  * Licensed under the Flora License, Version 1.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.tizenopensource.org/license\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 \r
18 #include "vcui-application.h"\r
19 #include "contacts-ug.h"\r
20 \r
21 #define MSG_COMPOSER_UG         "msg-composer-efl"\r
22 #define MSG_PKG                         "org.tizen.message"\r
23 #define ADD_TO_CONTACTS_UG      "contacts-details-efl"\r
24 \r
25 struct vcui_ug_priv_data *local_priv_data = NULL;\r
26 \r
27 #define COMMON_FUNCTIONS\r
28 #ifdef COMMON_FUNCTIONS\r
29 static void __vcui_doc_launch_ug_common_back_btn_cb(void *data, Evas_Object *obj, void *event_info)\r
30 {\r
31         Evas_Object *navi = data;\r
32         elm_naviframe_item_pop(navi);\r
33 }\r
34 \r
35 static void __vcui_doc_launch_ug_common_hide_effect_finished(void *data, Evas_Object *obj, const char *emission, const char *source)\r
36 {\r
37         struct vcui_ug_priv_data *temp_priv_data = (struct vcui_ug_priv_data *)data;\r
38 \r
39         Evas_Object *base;\r
40         base = temp_priv_data->need_layout;\r
41 \r
42         if (temp_priv_data->need_ug != NULL) {\r
43                 CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished start");\r
44 \r
45                 if (base != NULL)\r
46                         evas_object_hide(base);\r
47 \r
48                 elm_object_part_content_unset(base, "elm.swallow.content");\r
49 \r
50                 if (temp_priv_data->on_destroy_callback != NULL)\r
51                         temp_priv_data->on_destroy_callback(temp_priv_data->destroy_callback_param);\r
52 \r
53                 ug_destroy((struct ui_gadget *)(temp_priv_data->need_ug));\r
54 \r
55                 free(temp_priv_data);\r
56                 local_priv_data = NULL;\r
57 \r
58                 evas_object_del(base);\r
59                 CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished end");\r
60         }\r
61 }\r
62 \r
63 static void __vcui_doc_launch_ug_common_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)\r
64 {\r
65         Evas_Object *base, *win;\r
66         struct vcui_ug_priv_data *temp_priv_data = (struct vcui_ug_priv_data *)priv;\r
67 \r
68         if (!ug)\r
69                 return;\r
70 \r
71         base = ug_get_layout(ug);\r
72         if (!base)\r
73                 return;\r
74 \r
75 #ifdef _LOCAL_UG_EFFECT_\r
76         Evas_Object *ly = elm_layout_add(temp_priv_data->need_parent);\r
77         win = ug_get_window();\r
78         elm_win_resize_object_add(win, ly);\r
79         elm_layout_file_set(ly, EDJ_NAME, "ug_effect");\r
80         elm_object_part_content_set(ly, "elm.swallow.content", base);\r
81         evas_object_show(ly);\r
82         temp_priv_data->need_layout = ly;\r
83 \r
84         edje_object_signal_callback_add(elm_layout_edje_get(ly), "elm,action,hide,finished", "", __vcui_doc_launch_ug_common_hide_effect_finished, temp_priv_data);\r
85         edje_object_signal_emit(elm_layout_edje_get(ly), "elm,state,show", "");\r
86 #else\r
87         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
88         elm_win_resize_object_add(win, base);\r
89         evas_object_show(base);\r
90 #endif\r
91 }\r
92 \r
93 static void __vcui_doc_launch_ug_common_destroy_cb(struct ui_gadget *ug, void *priv)\r
94 {\r
95         CALL_UI_DEBUG("");\r
96         struct vcui_ug_priv_data *temp_priv_data = NULL;\r
97         if(priv != NULL)\r
98                 temp_priv_data = (struct vcui_ug_priv_data *)priv;\r
99         else\r
100                 temp_priv_data = local_priv_data;\r
101 \r
102 #ifdef _LOCAL_UG_EFFECT_\r
103         if (temp_priv_data->need_navi != NULL) {\r
104                 Evas_Object *base;\r
105                 base = ug_get_layout(ug);\r
106 \r
107                 if (ug != NULL) {\r
108                         ug_destroy(ug);\r
109 \r
110                         if (temp_priv_data->on_destroy_callback != NULL)\r
111                                 temp_priv_data->on_destroy_callback(temp_priv_data->destroy_callback_param);\r
112 \r
113 \r
114                         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)(temp_priv_data->need_ug_lists);\r
115                         if (pugs_array != NULL) {\r
116                                 pugs_array->ug_lists = eina_list_remove(pugs_array->ug_lists, temp_priv_data->need_ug);\r
117                                 pugs_array->ug_count = pugs_array->ug_count - 1;\r
118                                 pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
119                         }\r
120                         free(temp_priv_data);\r
121                         local_priv_data = NULL;\r
122                 }\r
123                 CALL_UI_DEBUG("__vcui_doc_launch_ug_common_destroy_cb");\r
124         } else {\r
125                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)(temp_priv_data->need_ug_lists);\r
126                 CALL_UI_DEBUG("pugs_array(0x%x)");\r
127                 if (pugs_array != NULL) {\r
128                         pugs_array->ug_lists = eina_list_remove(pugs_array->ug_lists, temp_priv_data->need_ug);\r
129                         pugs_array->ug_count = pugs_array->ug_count - 1;\r
130                         pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
131                 }\r
132                 edje_object_signal_emit(elm_layout_edje_get(temp_priv_data->need_layout), "elm,state,hide", "");\r
133                 CALL_UI_DEBUG("Send Hide");\r
134         }\r
135 #else\r
136         Evas_Object *base;\r
137         base = ug_get_layout(ug);\r
138 \r
139         if (ug != NULL) {\r
140                 ug_destroy(ug);\r
141 \r
142                 if (temp_priv_data->on_destroy_callback != NULL)\r
143                         temp_priv_data->on_destroy_callback(temp_priv_data->destroy_callback_param);\r
144 \r
145 \r
146                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)(temp_priv_data->need_ug_lists);\r
147                 if (pugs_array != NULL) {\r
148                         pugs_array->ug_lists = eina_list_remove(pugs_array->ug_lists, temp_priv_data->need_ug);\r
149                         pugs_array->ug_count = pugs_array->ug_count - 1;\r
150                         pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
151                 }\r
152                 free(temp_priv_data);\r
153                 local_priv_data = NULL;\r
154         }\r
155         CALL_UI_DEBUG("__vcui_doc_launch_ug_common_destroy_cb");\r
156 #endif\r
157 }\r
158 #endif\r
159 \r
160 static void __vcui_doc_launch_ug_contact_list_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)\r
161 {\r
162         __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv);\r
163         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_layout_cb success");\r
164 }\r
165 \r
166 static void __vcui_doc_launch_ug_contact_list_destroy_cb(struct ui_gadget *ug, void *priv)\r
167 {\r
168         __vcui_doc_launch_ug_common_destroy_cb(ug, priv);\r
169         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_destroy_cb success");\r
170 }\r
171 \r
172 static void __vcui_doc_launch_ug_contact_list_result_cb(struct ui_gadget *ug, bundle *result, void *priv)\r
173 {\r
174         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_result_cb nothing");\r
175 }\r
176 \r
177 void _vcui_doc_launch_contact_list_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data)\r
178 {\r
179         CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug start");\r
180         bundle *bd = bundle_create();\r
181 \r
182         if (bd == NULL) {\r
183                 CALL_UI_DEBUG("bundle_craete() return NULL");\r
184                 return;\r
185         }\r
186 \r
187         bundle_add(bd, "type", "1");\r
188 \r
189         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
190         if (pugs_array->last_ug_type == VCUI_UG_TYPE_CONTACT_LIST) {\r
191                 CALL_UI_DEBUG("launch exit because of same ug execution");\r
192                 bundle_free(bd);\r
193                 return;\r
194         }\r
195         struct ug_cbs cbs = { 0, };\r
196         cbs.layout_cb = __vcui_doc_launch_ug_contact_list_layout_cb;\r
197         cbs.destroy_cb = __vcui_doc_launch_ug_contact_list_destroy_cb;\r
198         cbs.result_cb = __vcui_doc_launch_ug_contact_list_result_cb;\r
199 \r
200         struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data));\r
201         if (temp_priv_data == NULL) {\r
202                 CALL_UI_DEBUG("malloc error.\n");\r
203                 bundle_free(bd);\r
204                 return;\r
205         }\r
206         temp_priv_data->on_start_callback = on_start_callback;\r
207         temp_priv_data->on_destroy_callback = on_destroy_callback;\r
208         temp_priv_data->destroy_callback_param = callback_param;\r
209         temp_priv_data->need_navi = navi;\r
210         temp_priv_data->need_parent = parent;\r
211         temp_priv_data->need_ug_lists = ugs_array_data;\r
212         local_priv_data = cbs.priv = temp_priv_data;\r
213 \r
214         struct ui_gadget *ug = ug_create(parent_ui_gadget, PKGNAME_CONTACT_UG, UG_MODE_FULLVIEW, bd, &cbs);\r
215         temp_priv_data->need_ug = ug;\r
216         if (ug == NULL) {\r
217                 free(temp_priv_data);\r
218                 local_priv_data = NULL;\r
219                 CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug fail");\r
220         } else {\r
221                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
222                 pugs_array->ug_count = pugs_array->ug_count + 1;\r
223                 pugs_array->last_ug_type = VCUI_UG_TYPE_CONTACT_LIST;\r
224                 pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug);\r
225         }\r
226         bundle_free(bd);\r
227         CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug end");\r
228 }\r
229 \r
230 static void __vcui_doc_launch_ug_phoneui_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)\r
231 {\r
232         __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv);\r
233         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_layout_cb success");\r
234 }\r
235 \r
236 static void __vcui_doc_launch_ug_phoneui_destroy_cb(struct ui_gadget *ug, void *priv)\r
237 {\r
238         __vcui_doc_launch_ug_common_destroy_cb(ug, priv);\r
239         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_destroy_cb success");\r
240 }\r
241 \r
242 static void __vcui_doc_launch_ug_phoneui_result_cb(struct ui_gadget *ug, bundle *result, void *priv)\r
243 {\r
244         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_result_cb nothing");\r
245 }\r
246 \r
247 void _vcui_doc_launch_phoneui_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data)\r
248 {\r
249         CALL_UI_DEBUG("launch_PHONEUI UG start");\r
250         bundle *bd = bundle_create();\r
251 \r
252         if (bd == NULL) {\r
253                 CALL_UI_DEBUG("bundle_craete() return NULL");\r
254                 return;\r
255         }\r
256 \r
257         bundle_add(bd, "type", "1");\r
258 \r
259         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
260         if (pugs_array->last_ug_type == VCUI_UG_TYPE_ADD_CALL) {\r
261                 CALL_UI_DEBUG("launch exit because of same ug execution");\r
262                 bundle_free(bd);\r
263                 return;\r
264         }\r
265         struct ug_cbs cbs = { 0, };\r
266         cbs.layout_cb = __vcui_doc_launch_ug_phoneui_layout_cb;\r
267         cbs.destroy_cb = __vcui_doc_launch_ug_phoneui_destroy_cb;\r
268         cbs.result_cb = __vcui_doc_launch_ug_phoneui_result_cb;\r
269 \r
270         struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data));\r
271         if (temp_priv_data == NULL) {\r
272                 CALL_UI_DEBUG("malloc error.\n");\r
273                 bundle_free(bd);\r
274                 return;\r
275         }\r
276         temp_priv_data->on_start_callback = on_start_callback;\r
277         temp_priv_data->on_destroy_callback = on_destroy_callback;\r
278         temp_priv_data->destroy_callback_param = callback_param;\r
279         temp_priv_data->need_navi = navi;\r
280         temp_priv_data->need_parent = parent;\r
281         temp_priv_data->need_ug_lists = ugs_array_data;\r
282         local_priv_data = cbs.priv = temp_priv_data;\r
283 \r
284         struct ui_gadget *ug = ug_create(parent_ui_gadget, PKGNAME_DIALER_UG, UG_MODE_FULLVIEW, bd, &cbs);\r
285         temp_priv_data->need_ug = ug;\r
286         if (ug == NULL) {\r
287                 free(temp_priv_data);\r
288                 local_priv_data = NULL;\r
289                 CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug fail");\r
290         } else {\r
291                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
292                 pugs_array->ug_count = pugs_array->ug_count + 1;\r
293                 pugs_array->last_ug_type = VCUI_UG_TYPE_ADD_CALL;\r
294                 pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug);\r
295         }\r
296         bundle_free(bd);\r
297         CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug end");\r
298 }\r
299 \r
300 static void __vcui_doc_launch_render_flush_post_cb(void *data, Evas *e, void *event_info)\r
301 {\r
302         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;\r
303         if (!ad)\r
304                 return;\r
305 \r
306         edje_object_signal_emit(_EDJ(ad->ly), "elm,state,show", "");\r
307         evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, __vcui_doc_launch_render_flush_post_cb);\r
308 }\r
309 \r
310 void _vcui_doc_launch_msg_composer(void *data, char *number)\r
311 {\r
312         CALL_UI_DEBUG("..");\r
313 \r
314         bundle *kb;\r
315         kb = bundle_create();\r
316 \r
317         bundle_add(kb, "type", "compose");\r
318         bundle_add(kb, "TO", number);\r
319         aul_launch_app(MSG_PKG, kb);\r
320         bundle_free(kb);\r
321 }\r
322 \r
323 void _vcui_doc_launch_destroy_ug_all(void *ugs_array_data)\r
324 {\r
325         CALL_UI_DEBUG("..");\r
326         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
327         Evas_Object *base;\r
328 \r
329         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
330         if (pugs_array != NULL) {\r
331                 pugs_array->ug_lists = eina_list_free(pugs_array->ug_lists);\r
332                 pugs_array->ug_count = 0;\r
333                 pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
334 \r
335 #ifdef _LOCAL_UG_EFFECT_\r
336                 if (local_priv_data->need_ug != NULL) {\r
337                         CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished start");\r
338                         base = local_priv_data->need_layout;\r
339 \r
340                         if (base != NULL) {\r
341                                 evas_object_hide(base);\r
342                                 elm_objectt_part_content_unset(base, "elm.swallow.content");\r
343                                 evas_object_del(base);\r
344                         }\r
345                         if (local_priv_data->on_destroy_callback != NULL)\r
346                                 local_priv_data->on_destroy_callback(local_priv_data->destroy_callback_param);\r
347 \r
348                         ug_destroy_all();\r
349 \r
350                         if (ad->contact_ug != NULL) {\r
351                                 ad->contact_ug = NULL;\r
352                                 _vcui_view_common_call_terminate_or_view_change();\r
353                         }\r
354 \r
355                         free(local_priv_data);\r
356                         local_priv_data = NULL;\r
357 \r
358                         CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished end");\r
359                 }\r
360 #else\r
361                 ug_destroy_all();\r
362 \r
363                 if (ad->contact_ug != NULL) {\r
364                         ad->contact_ug = NULL;\r
365                         _vcui_view_common_call_terminate_or_view_change();\r
366                 }\r
367 \r
368                 if (local_priv_data != NULL) {\r
369                         free(local_priv_data);\r
370                         local_priv_data = NULL;\r
371                 }\r
372 #endif\r
373         }\r
374 }\r
375 \r
376 static void __vcui_doc_launch_ug_contact_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)\r
377 {\r
378         __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv);\r
379         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_layout_cb success");\r
380 }\r
381 \r
382 static void __vcui_doc_launch_ug_contact_result_cb(struct ui_gadget *ug, bundle *result, void *priv)\r
383 {\r
384         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_result_cb nothing");\r
385 }\r
386 \r
387 static void __vcui_doc_launch_ug_contact_destroy_cb(struct ui_gadget *ug, void *priv)\r
388 {\r
389         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_destroy_cb..");\r
390         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
391         __vcui_doc_launch_ug_common_destroy_cb(ug, priv);\r
392         ad->contact_ug = NULL;\r
393         _vcui_view_common_call_terminate_or_view_change();\r
394 }\r
395 \r
396 void _vcui_doc_launch_add_to_contacts_ug(void *parent_ui_gadget, void *navi, void *parent, void (*on_start_callback) (void *), void (*on_destroy_callback) (void *), void *callback_param, void *ugs_array_data, void *data)\r
397 {\r
398         CALL_UI_DEBUG("launch_ADD_TO_CONTACTS UG start");\r
399         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
400         bundle *bd = bundle_create();\r
401         char buf[4] = {0,};\r
402 \r
403         if (bd == NULL) {\r
404                 CALL_UI_DEBUG("bundle_craete() return NULL");\r
405                 return;\r
406         }\r
407 \r
408         snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_ADD_WITH_NUM);\r
409         bundle_add(bd, CT_UG_BUNDLE_TYPE, buf); /*CT_UG_REQUEST_ADD_WITH_NUM*/\r
410         CALL_UI_DEBUG("number %s", (char*) data);\r
411         bundle_add(bd, CT_UG_BUNDLE_NUM, (char*) data);\r
412 \r
413         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
414         if (pugs_array->last_ug_type == VCUI_UG_TYPE_ADD_TO_CONTACTS) {\r
415                 CALL_UI_DEBUG("launch exit because of same ug execution");\r
416                 bundle_free(bd);\r
417                 return;\r
418         }\r
419         struct ug_cbs cbs = { 0, };\r
420         cbs.layout_cb = __vcui_doc_launch_ug_contact_layout_cb;\r
421         cbs.destroy_cb = __vcui_doc_launch_ug_contact_destroy_cb;\r
422         cbs.result_cb = __vcui_doc_launch_ug_contact_result_cb;\r
423 \r
424         struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data));\r
425         if (temp_priv_data == NULL) {\r
426                 CALL_UI_DEBUG("malloc error.\n");\r
427                 bundle_free(bd);\r
428                 return;\r
429         }\r
430         temp_priv_data->on_start_callback = on_start_callback;\r
431         temp_priv_data->on_destroy_callback = on_destroy_callback;\r
432         temp_priv_data->destroy_callback_param = callback_param;\r
433         temp_priv_data->need_navi = navi;\r
434         temp_priv_data->need_parent = parent;\r
435         temp_priv_data->need_ug_lists = ugs_array_data;\r
436         local_priv_data = cbs.priv = temp_priv_data;\r
437 \r
438         struct ui_gadget *ug = ug_create(parent_ui_gadget, ADD_TO_CONTACTS_UG, UG_MODE_FULLVIEW, bd, &cbs);\r
439         temp_priv_data->need_ug = ug;\r
440         if (ug == NULL) {\r
441                 free(temp_priv_data);\r
442                 local_priv_data = NULL;\r
443                 CALL_UI_DEBUG("_vcui_doc_launch_add_to_contacts_ug fail");\r
444         } else {\r
445                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
446                 pugs_array->ug_count = pugs_array->ug_count + 1;\r
447                 pugs_array->last_ug_type = VCUI_UG_TYPE_ADD_TO_CONTACTS;\r
448                 pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug);\r
449                 ad->contact_ug = ug;\r
450         }\r
451         bundle_free(bd);\r
452         CALL_UI_DEBUG("_vcui_doc_launch_add_to_contacts_ug end");\r
453 }\r