apply FSL(Flora Software License)
[apps/home/call.git] / ui / src / 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 <app.h>\r
19 \r
20 #include "vcui-application.h"\r
21 #include "contacts-ug.h"\r
22 \r
23 #define MSG_COMPOSER_UG         "msg-composer-efl"\r
24 #define MSG_PKG                         "org.tizen.message"\r
25 #define ADD_TO_CONTACTS_UG      "contacts-details-efl"\r
26 #define VIEW_CONTACT_UG         "contacts-details-efl"\r
27 \r
28 struct vcui_ug_priv_data *local_priv_data = NULL;\r
29 \r
30 #define COMMON_FUNCTIONS\r
31 #ifdef COMMON_FUNCTIONS\r
32 #if 0\r
33 static void __vcui_doc_launch_ug_common_back_btn_cb(void *data, Evas_Object *obj, void *event_info)\r
34 {\r
35         Evas_Object *navi = data;\r
36         elm_naviframe_item_pop(navi);\r
37 }\r
38 #endif\r
39 \r
40 #ifdef _LOCAL_UG_EFFECT_\r
41 static void __vcui_doc_launch_ug_common_hide_effect_finished(void *data, Evas_Object *obj, const char *emission, const char *source)\r
42 {\r
43         struct vcui_ug_priv_data *temp_priv_data = (struct vcui_ug_priv_data *)data;\r
44 \r
45         Evas_Object *base;\r
46         base = temp_priv_data->need_layout;\r
47 \r
48         if (temp_priv_data->need_ug != NULL) {\r
49                 CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished start");\r
50 \r
51                 if (base != NULL)\r
52                         evas_object_hide(base);\r
53 \r
54                 elm_object_part_content_unset(base, "elm.swallow.content");\r
55 \r
56                 if (temp_priv_data->on_destroy_callback != NULL)\r
57                         temp_priv_data->on_destroy_callback(temp_priv_data->destroy_callback_param);\r
58 \r
59                 ug_destroy((ui_gadget_h)(temp_priv_data->need_ug));\r
60 \r
61                 free(temp_priv_data);\r
62                 local_priv_data = NULL;\r
63 \r
64                 evas_object_del(base);\r
65                 CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished end");\r
66         }\r
67 }\r
68 #endif\r
69 \r
70 static void __vcui_doc_launch_ug_common_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)\r
71 {\r
72         Evas_Object *base, *win;\r
73 \r
74         if (!ug)\r
75                 return;\r
76 \r
77         base = ug_get_layout(ug);\r
78         if (!base)\r
79                 return;\r
80 \r
81 #ifdef _LOCAL_UG_EFFECT_\r
82         Evas_Object *ly = elm_layout_add(temp_priv_data->need_parent);\r
83         win = ug_get_window();\r
84         elm_win_resize_object_add(win, ly);\r
85         elm_layout_file_set(ly, EDJ_NAME, "ug_effect");\r
86         elm_object_part_content_set(ly, "elm.swallow.content", base);\r
87         evas_object_show(ly);\r
88         temp_priv_data->need_layout = ly;\r
89 \r
90         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
91         edje_object_signal_emit(elm_layout_edje_get(ly), "elm,state,show", "");\r
92 #else\r
93         win = ug_get_window();\r
94         evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
95         elm_win_resize_object_add(win, base);\r
96         evas_object_show(base);\r
97 #endif\r
98 }\r
99 \r
100 static void __vcui_doc_launch_ug_common_destroy_cb(ui_gadget_h ug, void *priv)\r
101 {\r
102         CALL_UI_DEBUG("");\r
103         struct vcui_ug_priv_data *temp_priv_data = NULL;\r
104         if (priv != NULL)\r
105                 temp_priv_data = (struct vcui_ug_priv_data *)priv;\r
106         else\r
107                 temp_priv_data = local_priv_data;\r
108 \r
109 #ifdef _LOCAL_UG_EFFECT_\r
110         if (temp_priv_data->need_navi != NULL) {\r
111                 Evas_Object *base;\r
112                 base = ug_get_layout(ug);\r
113 \r
114                 if (ug != NULL) {\r
115                         ug_destroy(ug);\r
116 \r
117                         if (temp_priv_data->on_destroy_callback != NULL)\r
118                                 temp_priv_data->on_destroy_callback(temp_priv_data->destroy_callback_param);\r
119 \r
120 \r
121                         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)(temp_priv_data->need_ug_lists);\r
122                         if (pugs_array != NULL) {\r
123                                 pugs_array->ug_lists = eina_list_remove(pugs_array->ug_lists, temp_priv_data->need_ug);\r
124                                 pugs_array->ug_count = pugs_array->ug_count - 1;\r
125                                 pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
126                         }\r
127                         free(temp_priv_data);\r
128                         local_priv_data = NULL;\r
129                 }\r
130                 CALL_UI_DEBUG("__vcui_doc_launch_ug_common_destroy_cb");\r
131         } else {\r
132                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)(temp_priv_data->need_ug_lists);\r
133                 CALL_UI_DEBUG("pugs_array(0x%x)");\r
134                 if (pugs_array != NULL) {\r
135                         pugs_array->ug_lists = eina_list_remove(pugs_array->ug_lists, temp_priv_data->need_ug);\r
136                         pugs_array->ug_count = pugs_array->ug_count - 1;\r
137                         pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
138                 }\r
139                 edje_object_signal_emit(elm_layout_edje_get(temp_priv_data->need_layout), "elm,state,hide", "");\r
140                 CALL_UI_DEBUG("Send Hide");\r
141         }\r
142 #else\r
143         Evas_Object *base;\r
144         base = ug_get_layout(ug);\r
145 \r
146         if (ug != NULL) {\r
147                 ug_destroy(ug);\r
148 \r
149                 if (temp_priv_data->on_destroy_callback != NULL)\r
150                         temp_priv_data->on_destroy_callback(temp_priv_data->destroy_callback_param);\r
151 \r
152 \r
153                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)(temp_priv_data->need_ug_lists);\r
154                 if (pugs_array != NULL) {\r
155                         pugs_array->ug_lists = eina_list_remove(pugs_array->ug_lists, temp_priv_data->need_ug);\r
156                         pugs_array->ug_count = pugs_array->ug_count - 1;\r
157                         pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
158                 }\r
159                 free(temp_priv_data);\r
160                 local_priv_data = NULL;\r
161         }\r
162         CALL_UI_DEBUG("__vcui_doc_launch_ug_common_destroy_cb");\r
163 #endif\r
164 }\r
165 #endif\r
166 \r
167 static void __vcui_doc_launch_ug_contact_list_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)\r
168 {\r
169         __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv);\r
170         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_layout_cb success");\r
171 }\r
172 \r
173 static void __vcui_doc_launch_ug_contact_list_destroy_cb(ui_gadget_h ug, void *priv)\r
174 {\r
175         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
176         __vcui_doc_launch_ug_common_destroy_cb(ug, priv);\r
177         ad->contact_ug = NULL;\r
178         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_destroy_cb success");\r
179 }\r
180 \r
181 static void __vcui_doc_launch_ug_contact_list_result_cb(ui_gadget_h ug, service_h result, void *priv)\r
182 {\r
183         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_list_result_cb nothing");\r
184 }\r
185 \r
186 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
187 {\r
188         CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug start");\r
189         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
190         service_h service;\r
191 \r
192         int ret = service_create(&service);\r
193         if (ret < 0) {\r
194                 CALL_UI_DEBUG("service_create() return error : %d", ret);\r
195                 return;\r
196         }\r
197 \r
198         service_add_extra_data(service, "type", "1");\r
199 \r
200         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
201         if (pugs_array->last_ug_type == VCUI_UG_TYPE_CONTACT_LIST) {\r
202                 CALL_UI_DEBUG("launch exit because of same ug execution");\r
203                 service_destroy(service);\r
204                 return;\r
205         }\r
206         struct ug_cbs cbs = { 0, };\r
207         cbs.layout_cb = __vcui_doc_launch_ug_contact_list_layout_cb;\r
208         cbs.destroy_cb = __vcui_doc_launch_ug_contact_list_destroy_cb;\r
209         cbs.result_cb = __vcui_doc_launch_ug_contact_list_result_cb;\r
210 \r
211         struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data));\r
212         if (temp_priv_data == NULL) {\r
213                 CALL_UI_DEBUG("malloc error.");\r
214                 service_destroy(service);\r
215                 return;\r
216         }\r
217         temp_priv_data->on_start_callback = on_start_callback;\r
218         temp_priv_data->on_destroy_callback = on_destroy_callback;\r
219         temp_priv_data->destroy_callback_param = callback_param;\r
220         temp_priv_data->need_navi = navi;\r
221         temp_priv_data->need_parent = parent;\r
222         temp_priv_data->need_ug_lists = ugs_array_data;\r
223         local_priv_data = cbs.priv = temp_priv_data;\r
224 \r
225         ui_gadget_h ug = ug_create(parent_ui_gadget, PKGNAME_CONTACT_UG, UG_MODE_FULLVIEW, service, &cbs);\r
226         temp_priv_data->need_ug = ug;\r
227         if (ug == NULL) {\r
228                 free(temp_priv_data);\r
229                 local_priv_data = NULL;\r
230                 CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug fail");\r
231         } else {\r
232                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
233                 pugs_array->ug_count = pugs_array->ug_count + 1;\r
234                 pugs_array->last_ug_type = VCUI_UG_TYPE_CONTACT_LIST;\r
235                 pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug);\r
236                 ad->contact_ug = ug;\r
237         }\r
238         service_destroy(service);\r
239         CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug end");\r
240 }\r
241 \r
242 static void __vcui_doc_launch_ug_phoneui_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)\r
243 {\r
244         __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv);\r
245         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_layout_cb success");\r
246 }\r
247 \r
248 static void __vcui_doc_launch_ug_phoneui_destroy_cb(ui_gadget_h ug, void *priv)\r
249 {\r
250         __vcui_doc_launch_ug_common_destroy_cb(ug, priv);\r
251         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_destroy_cb success");\r
252 }\r
253 \r
254 static void __vcui_doc_launch_ug_phoneui_result_cb(ui_gadget_h ug, service_h result, void *priv)\r
255 {\r
256         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_result_cb nothing");\r
257 }\r
258 \r
259 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
260 {\r
261         CALL_UI_DEBUG("launch_PHONEUI UG start");\r
262         service_h service;\r
263 \r
264         int ret = service_create(&service);\r
265         if (ret < 0) {\r
266                 CALL_UI_DEBUG("service_create() return error : %d", ret);\r
267                 return;\r
268         }\r
269 \r
270         service_add_extra_data(service, "type", "51");\r
271 \r
272         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
273         if (pugs_array->last_ug_type == VCUI_UG_TYPE_ADD_CALL) {\r
274                 CALL_UI_DEBUG("launch exit because of same ug execution");\r
275                 service_destroy(service);\r
276                 return;\r
277         }\r
278         struct ug_cbs cbs = { 0, };\r
279         cbs.layout_cb = __vcui_doc_launch_ug_phoneui_layout_cb;\r
280         cbs.destroy_cb = __vcui_doc_launch_ug_phoneui_destroy_cb;\r
281         cbs.result_cb = __vcui_doc_launch_ug_phoneui_result_cb;\r
282 \r
283         struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data));\r
284         if (temp_priv_data == NULL) {\r
285                 CALL_UI_DEBUG("malloc error.");\r
286                 service_destroy(service);\r
287                 return;\r
288         }\r
289         temp_priv_data->on_start_callback = on_start_callback;\r
290         temp_priv_data->on_destroy_callback = on_destroy_callback;\r
291         temp_priv_data->destroy_callback_param = callback_param;\r
292         temp_priv_data->need_navi = navi;\r
293         temp_priv_data->need_parent = parent;\r
294         temp_priv_data->need_ug_lists = ugs_array_data;\r
295         local_priv_data = cbs.priv = temp_priv_data;\r
296 \r
297         ui_gadget_h ug = ug_create(parent_ui_gadget, PKGNAME_DIALER_UG, UG_MODE_FULLVIEW, service, &cbs);\r
298         temp_priv_data->need_ug = ug;\r
299         if (ug == NULL) {\r
300                 free(temp_priv_data);\r
301                 local_priv_data = NULL;\r
302                 CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug fail");\r
303         } else {\r
304                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
305                 pugs_array->ug_count = pugs_array->ug_count + 1;\r
306                 pugs_array->last_ug_type = VCUI_UG_TYPE_ADD_CALL;\r
307                 pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug);\r
308         }\r
309         service_destroy(service);\r
310         CALL_UI_DEBUG("_vcui_doc_launch_contact_list_ug end");\r
311 }\r
312 \r
313 #if 0\r
314 static void __vcui_doc_launch_render_flush_post_cb(void *data, Evas *e, void *event_info)\r
315 {\r
316         vcui_app_call_data_t *ad = (vcui_app_call_data_t *)data;\r
317         if (!ad)\r
318                 return;\r
319 \r
320         edje_object_signal_emit(_EDJ(ad->ly), "elm,state,show", "");\r
321         evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, __vcui_doc_launch_render_flush_post_cb);\r
322 }\r
323 #endif\r
324 \r
325 void _vcui_doc_launch_msg_composer(void *data, char *number)\r
326 {\r
327         CALL_UI_DEBUG("..");\r
328 \r
329         service_h service;\r
330         int ret = SERVICE_ERROR_NONE;\r
331 \r
332         ret = service_create(&service);\r
333         if (ret != SERVICE_ERROR_NONE) {\r
334                 CALL_UI_DEBUG("service_create() return error : %d", ret);\r
335                 return;\r
336         }\r
337 \r
338         ret = service_set_operation(service, SERVICE_OPERATION_SEND_TEXT);\r
339         if (ret != SERVICE_ERROR_NONE) {\r
340                 CALL_UI_DEBUG("service_set_operation() return error : %d", ret);\r
341                 ret = service_destroy(service);\r
342                 return;\r
343         }\r
344 \r
345         ret = service_set_package(service, MSG_PKG);\r
346         if (ret != SERVICE_ERROR_NONE) {\r
347                 CALL_UI_DEBUG("service_set_package() return error : %d", ret);\r
348                 ret = service_destroy(service);\r
349                 return;\r
350         }\r
351 \r
352         ret = service_add_extra_data(service, SERVICE_DATA_TO, number);\r
353         if (ret != SERVICE_ERROR_NONE) {\r
354                 CALL_UI_DEBUG("service_add_extra_data() return error : %d", ret);\r
355                 ret = service_destroy(service);\r
356                 return;\r
357         }\r
358 \r
359         ret = service_send_launch_request(service, NULL, NULL);\r
360         if (ret != SERVICE_ERROR_NONE) {\r
361                 CALL_UI_DEBUG("service_send_launch_request() is failed : %d", ret);\r
362         }\r
363 \r
364         service_destroy(service);\r
365 }\r
366 \r
367 void _vcui_doc_launch_destroy_ug_all(void *ugs_array_data)\r
368 {\r
369         CALL_UI_DEBUG("..");\r
370         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
371 \r
372         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
373         if (pugs_array != NULL) {\r
374                 pugs_array->ug_lists = eina_list_free(pugs_array->ug_lists);\r
375                 pugs_array->ug_count = 0;\r
376                 pugs_array->last_ug_type = VCUI_UG_TYPE_NOE;\r
377 \r
378 #ifdef _LOCAL_UG_EFFECT_\r
379                 if (local_priv_data->need_ug != NULL) {\r
380                         CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished start");\r
381                         base = local_priv_data->need_layout;\r
382 \r
383                         if (base != NULL) {\r
384                                 evas_object_hide(base);\r
385                                 elm_layout_content_unset(base, "elm.swallow.content");\r
386                                 evas_object_del(base);\r
387                         }\r
388                         if (local_priv_data->on_destroy_callback != NULL)\r
389                                 local_priv_data->on_destroy_callback(local_priv_data->destroy_callback_param);\r
390 \r
391                         ug_destroy_all();\r
392 \r
393                         if (ad->contact_ug != NULL) {\r
394                                 ad->contact_ug = NULL;\r
395                                 _vcui_view_common_call_terminate_or_view_change();\r
396                         }\r
397 \r
398                         free(local_priv_data);\r
399                         local_priv_data = NULL;\r
400 \r
401                         CALL_UI_DEBUG("__vcui_doc_launch_ug_common_hide_effect_finished end");\r
402                 }\r
403 #else\r
404                 ug_destroy_all();\r
405 \r
406                 if (ad->contact_ug != NULL) {\r
407                         ad->contact_ug = NULL;\r
408                         _vcui_view_common_call_terminate_or_view_change();\r
409                 }\r
410 \r
411                 if (local_priv_data != NULL) {\r
412                         free(local_priv_data);\r
413                         local_priv_data = NULL;\r
414                 }\r
415 #endif\r
416         }\r
417 }\r
418 \r
419 static void __vcui_doc_launch_ug_contact_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)\r
420 {\r
421         __vcui_doc_launch_ug_common_layout_cb(ug, mode, priv);\r
422         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_layout_cb success");\r
423 }\r
424 \r
425 static void __vcui_doc_launch_ug_contact_result_cb(ui_gadget_h ug, service_h result, void *priv)\r
426 {\r
427         CALL_UI_DEBUG("__vcui_doc_launch_ug_phoneui_result_cb nothing");\r
428 }\r
429 \r
430 static void __vcui_doc_launch_ug_contact_destroy_cb(ui_gadget_h ug, void *priv)\r
431 {\r
432         CALL_UI_DEBUG("__vcui_doc_launch_ug_contact_destroy_cb..");\r
433         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
434         __vcui_doc_launch_ug_common_destroy_cb(ug, priv);\r
435         ad->contact_ug = NULL;\r
436         _vcui_view_common_call_terminate_or_view_change();\r
437 }\r
438 \r
439 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
440 {\r
441         CALL_UI_DEBUG("launch_ADD_TO_CONTACTS UG start");\r
442         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
443         service_h service;\r
444         char buf[4] = {0,};\r
445 \r
446         int ret = service_create(&service);\r
447         if (ret < 0) {\r
448                 CALL_UI_DEBUG("service_create() return error : %d", ret);\r
449                 return;\r
450         }\r
451 \r
452         snprintf(buf, sizeof(buf), "%d", 22);\r
453         service_add_extra_data(service, "type", buf);\r
454         CALL_UI_DEBUG("number %s", (char *)data);\r
455         service_add_extra_data(service, "ct_num", (char *)data);\r
456 \r
457         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
458         if (pugs_array->last_ug_type == VCUI_UG_TYPE_ADD_TO_CONTACTS) {\r
459                 CALL_UI_DEBUG("launch exit because of same ug execution");\r
460                 service_destroy(service);\r
461                 return;\r
462         }\r
463         struct ug_cbs cbs = { 0, };\r
464         cbs.layout_cb = __vcui_doc_launch_ug_contact_layout_cb;\r
465         cbs.destroy_cb = __vcui_doc_launch_ug_contact_destroy_cb;\r
466         cbs.result_cb = __vcui_doc_launch_ug_contact_result_cb;\r
467 \r
468         struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data));\r
469         if (temp_priv_data == NULL) {\r
470                 CALL_UI_DEBUG("malloc error.");\r
471                 service_destroy(service);\r
472                 return;\r
473         }\r
474         temp_priv_data->on_start_callback = on_start_callback;\r
475         temp_priv_data->on_destroy_callback = on_destroy_callback;\r
476         temp_priv_data->destroy_callback_param = callback_param;\r
477         temp_priv_data->need_navi = navi;\r
478         temp_priv_data->need_parent = parent;\r
479         temp_priv_data->need_ug_lists = ugs_array_data;\r
480         local_priv_data = cbs.priv = temp_priv_data;\r
481 \r
482         ui_gadget_h ug = ug_create(parent_ui_gadget, ADD_TO_CONTACTS_UG, UG_MODE_FULLVIEW, service, &cbs);\r
483         temp_priv_data->need_ug = ug;\r
484         if (ug == NULL) {\r
485                 free(temp_priv_data);\r
486                 local_priv_data = NULL;\r
487                 CALL_UI_DEBUG("_vcui_doc_launch_add_to_contacts_ug fail");\r
488         } else {\r
489                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
490                 pugs_array->ug_count = pugs_array->ug_count + 1;\r
491                 pugs_array->last_ug_type = VCUI_UG_TYPE_ADD_TO_CONTACTS;\r
492                 pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug);\r
493                 ad->contact_ug = ug;\r
494         }\r
495         service_destroy(service);\r
496         CALL_UI_DEBUG("_vcui_doc_launch_add_to_contacts_ug end");\r
497 }\r
498 \r
499 void _vcui_doc_launch_view_contact_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
500 {\r
501         CALL_UI_DEBUG("launch_VIEW_CONTACT UG start");\r
502         vcui_app_call_data_t *ad = _vcui_get_app_data();\r
503         service_h service;\r
504         char buf[4] = {0,};\r
505         char contactId[128] = {0,};\r
506 \r
507         int ret = service_create(&service);\r
508         if (ret < 0) {\r
509                 CALL_UI_DEBUG("service_create() return error : %d", ret);\r
510                 return;\r
511         }\r
512 \r
513         snprintf(buf, sizeof(buf), "%d", 0);\r
514         service_add_extra_data(service, "type", buf);   /*CT_UG_REQUEST_DETAIL*/\r
515         CALL_UI_DEBUG("ct_id %d", (int)data);\r
516         snprintf(contactId, sizeof(contactId), "%d", (int)data);\r
517         service_add_extra_data(service, "ct_id", contactId);\r
518 \r
519         struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
520         if (pugs_array->last_ug_type == VCUI_UG_TYPE_VIEW_CONTACT) {\r
521                 CALL_UI_DEBUG("launch exit because of same ug execution");\r
522                 service_destroy(service);\r
523                 return;\r
524         }\r
525         struct ug_cbs cbs = { 0, };\r
526         cbs.layout_cb = __vcui_doc_launch_ug_contact_layout_cb;\r
527         cbs.destroy_cb = __vcui_doc_launch_ug_contact_destroy_cb;\r
528         cbs.result_cb = __vcui_doc_launch_ug_contact_result_cb;\r
529 \r
530         struct vcui_ug_priv_data *temp_priv_data = malloc(sizeof(struct vcui_ug_priv_data));\r
531         if (temp_priv_data == NULL) {\r
532                 CALL_UI_DEBUG("malloc error.");\r
533                 service_destroy(service);\r
534                 return;\r
535         }\r
536         temp_priv_data->on_start_callback = on_start_callback;\r
537         temp_priv_data->on_destroy_callback = on_destroy_callback;\r
538         temp_priv_data->destroy_callback_param = callback_param;\r
539         temp_priv_data->need_navi = navi;\r
540         temp_priv_data->need_parent = parent;\r
541         temp_priv_data->need_ug_lists = ugs_array_data;\r
542         local_priv_data = cbs.priv = temp_priv_data;\r
543 \r
544         ui_gadget_h ug = ug_create(parent_ui_gadget, VIEW_CONTACT_UG, UG_MODE_FULLVIEW, service, &cbs);\r
545         temp_priv_data->need_ug = ug;\r
546         if (ug == NULL) {\r
547                 free(temp_priv_data);\r
548                 local_priv_data = NULL;\r
549                 CALL_UI_DEBUG("_vcui_doc_launch_view_contact_ug fail");\r
550         } else {\r
551                 struct vcui_ugs_array *pugs_array = (struct vcui_ugs_array *)ugs_array_data;\r
552                 pugs_array->ug_count = pugs_array->ug_count + 1;\r
553                 pugs_array->last_ug_type = VCUI_UG_TYPE_VIEW_CONTACT;\r
554                 pugs_array->ug_lists = eina_list_append(pugs_array->ug_lists, (void *)ug);\r
555                 ad->contact_ug = ug;\r
556         }\r
557         service_destroy(service);\r
558         CALL_UI_DEBUG("_vcui_doc_launch_view_contact_ug end");\r
559 }\r
560 \r